Bir süreci nasıl başlatabilir ve top
komuta görünmez hale getirebilirsiniz ? İşlem normal bir kullanıcı tarafından (kök değil) başlatılır ve diğer normal kullanıcılar tarafından görülemez.
Bir süreci nasıl başlatabilir ve top
komuta görünmez hale getirebilirsiniz ? İşlem normal bir kullanıcı tarafından (kök değil) başlatılır ve diğer normal kullanıcılar tarafından görülemez.
Yanıtlar:
3.3'ten beri Linux çekirdeği, işlemleri diğer kullanıcılara gizlemek için destek içermektedir.
İlgili işleme ve Documentation / filesystems / proc.txt dosyasında açıklandığı gibi / proc seçenekleri tarafından yapılır hidepid=
ve bağlanır .gid=
Debian Wheezy de bu özelliği içerir.
top
Komut doğrudan çekirdekten sağlanmaktadır proc, verileri okur. İşlemleri gizlemek için maskeleme yapmak için çekirdeğin içindeki kodu kullanmanız gerekir.
SELinux ve grsecurity (diğer yanıtlarda belirtilmiştir) gibi bir güvenlik çerçevesi kullanmanın yanı sıra, rootkit tarzı kod kalan tek seçeneğinizdir. "Stil" diyorum çünkü tek başına bir "rootkit" kötü değil, bu nasıl kullanılır. İşlemleri diğer kullanıcılardan gizlemenin arkasında mükemmel meşru nedenler vardır, bu yüzden bu yetenek güvenlik çerçevelerinde bulunur.
Bunu işe almak için izlemeniz gereken temel yol, /proc/pid/
verileri veren linux çekirdeğindeki işlevlere bağlanmak (veya nasıl baktığınıza bağlı olarak) kaçırmaktır . Yazdığım bir güvenlik modülünde linux çekirdek işlevlerine bağlanma yöntemlerinden birini gösterdim:
https://github.com/cormander/tpe-lkm
Bunun için "yüksek seviye" kodu içindeki hijack_syscalls()
yöntemde security.c
ve arkasındaki ayrıntılardaki şeytan büyüsü hijacks.c
dosyada.
Bağlanmak istediğiniz işlevleri muhtemelen fs/proc/
linux çekirdeğinin kaynak kodunun dizininde bulacaksınız . Linux'un kararlı bir ABI sağlamadığını unutmayın, bu nedenle linux çekirdeğinin farklı sürümlerinde çalışmasını sağlamak için kodunuzun biraz değişmesi gerekecektir. Ayrıca, bu kodu ekleyebilmek için makineye tam root erişimine ihtiyacınız olduğunu unutmayın.
GÜNCELLEME:
Eğer sarın Eğer pid_getattr
bunu yapmak gerçek kolay için bazı ek kod ile çekirdek sembolü. Son zamanlarda yukarıdaki çekirdek modülüne işlemleri gizleyen bir şey ekledim:
https://github.com/cormander/tpe-lkm/commit/899bd5d74764af343d5fee1d8058756ddc63bfe3
Belirli bir kullanıcının veya grubun işlemlerini root ve o kullanıcı dışında kimse tarafından görüntülenemez hale getirerek benzer bir şey yapabilirsiniz. İşlem adı ile yapmak biraz daha karmaşıktır, ancak mümkündür. Bu exe_from_mm()
işleve bir göz atın . İçinde kullanmanın performans sonuçları olabileceğini unutmayın pid_getattr
.
İki ana seçenek gibi görünüyor.
Selinux, farklı insanları farklı güvenlik alanlarına yerleştirerek ve bir anlamda onları birbirleriyle karşılaşamayacakları şekilde kumlamak suretiyle çalışır. Bu, bu soruda ele alınmıştır . Selinux hızla Linux dünyasında fiili güvenlik çerçevesi haline geldiğinden, bu muhtemelen bakmanız gereken yön.
Diğeri, marioosh tarafından belirtildiği ve bu soruda sorulduğu gibi grsecurity'dir . Bazı dağıtımlarda grsecurity yamaları uygulanmış alternatif çekirdek paketleri bulunur. Sizinkine sahipseniz bunları kullanmayı düşünebilirsiniz.
Herhangi bir nedenden dolayı bunu selinux veya grsecurity gibi bir güvenlik çerçevesi eklemeden yapmak istiyorsanız, lütfen ne yaptığınızın bir kök kiti yazmadığını açıklayın.
Standart linux kutusunda o kadar basit değil. Bak grsecurity ama yama çekirdek vb gerektirir
argv [0] 'nızı başka bir adla geçersiz kılabilirsiniz ... ama daha doğrusu, bir çeşit rootkit arıyorsunuz. bu size yardımcı olabilir: http://stupefydeveloper.blogspot.com/2008/10/linux-change-process-name.html
Aynı şekilde çalışan top
, ancak belirli bir adla eşleşen işlemleri görüntülemeyen eşdeğer bir komut yazabilirsiniz . Alternatif olarak top
komutun kaynak kodunu alıp buna göre değiştirebilirsiniz. Daha sonra içindeki top
komutu /usr/sbin
(veya nerede olursa olsun) sürümünüzle değiştirebilirsiniz.
top
komut için nasıl görünmez hale getirileceğini sordu .
this_is_not_the_process_you_are_looking_for
?