Bagaimana Anda bisa meluncurkan suatu proses dan membuatnya tidak terlihat oleh top
perintah? Proses ini dimulai oleh pengguna normal (bukan root), dan tidak boleh terlihat oleh pengguna normal lainnya.
linux
top
process-management
Debugger
sumber
sumber
this_is_not_the_process_you_are_looking_for
?Jawaban:
Kernel Linux sejak 3.3 berisi dukungan untuk proses persembunyian ke pengguna lain.
Hal ini dilakukan oleh
hidepid=
dangid=
me - mount opsi untuk / proc seperti yang dijelaskan dalam komit dan Dokumentasi / filesystems / proc.txt yang sesuai .Debian Wheezy juga menyertakan fitur ini.
sumber
The
top
perintah membaca data dari proc, yang disediakan langsung dari kernel. Untuk menyembunyikan proses, Anda harus menggunakan kode di dalam kernel untuk melakukan masking.Selain menggunakan kerangka kerja keamanan seperti SELinux dan grsecurity (disebutkan dalam jawaban lain), kode gaya rootkit adalah satu-satunya pilihan yang tersisa. Saya katakan "style" karena "rootkit" dengan sendirinya tidak buruk, itu bagaimana digunakan. Ada alasan sah yang sempurna di balik proses persembunyian dari pengguna lain, itulah sebabnya kemampuan ini ada dalam kerangka kerja keamanan.
Rute dasar yang harus Anda ikuti untuk mendapatkan ini bekerja adalah untuk menghubungkan ke (atau membajak, tergantung pada bagaimana Anda melihatnya) fungsi (s) di kernel linux yang membagikan
/proc/pid/
data. Saya mendemonstrasikan satu metode mengaitkan ke fungsi kernel linux dalam modul keamanan yang saya tulis:https://github.com/cormander/tpe-lkm
Kode "tingkat tinggi" untuk ini ada di dalam
hijack_syscalls()
metodesecurity.c
, dan sihir setan di belakangnya ada di dalamhijacks.c
file.Anda mungkin akan menemukan fungsi yang ingin Anda kaitkan di
fs/proc/
direktori kode sumber kernel linux. Ingatlah bahwa linux tidak menyediakan ABI yang stabil, jadi kode Anda perlu diubah agar bisa bekerja di berbagai versi kernel linux. Juga, perlu diingat bahwa Anda memerlukan akses root penuh ke mesin untuk dapat memasukkan kode ini.MEMPERBARUI:
Jika Anda membungkus
pid_getattr
simbol kernel dengan beberapa kode tambahan, sangat mudah untuk melakukannya. Saya baru-baru ini menambahkan sesuatu yang menyembunyikan proses ke modul kernel di atas:https://github.com/cormander/tpe-lkm/commit/899bd5d74764af343d5fee1d8058756ddc63bfe3
Anda dapat melakukan hal serupa dengan membuat proses pengguna atau grup tertentu tidak dapat dilihat oleh siapa pun kecuali root dan pengguna itu. Melakukannya dengan nama proses sedikit lebih kompleks, tetapi mungkin. Lihatlah
exe_from_mm()
fungsinya. Perhatikan bahwa mungkin ada implikasi kinerja menggunakannya di dalampid_getattr
.sumber
Tampaknya ada dua opsi utama.
Selinux bekerja dengan menempatkan orang yang berbeda ke dalam domain keamanan yang berbeda dan dalam beberapa hal mengampelas mereka sehingga mereka tidak dapat melihat satu sama lain. Ini tercakup dalam pertanyaan ini . Karena selinux dengan cepat menjadi kerangka kerja keamanan de-facto di dunia Linux, ini mungkin arah yang harus Anda perhatikan.
Yang lainnya adalah grsecurity sebagaimana disebutkan oleh marioosh dan seperti yang ditanyakan dalam pertanyaan ini . Beberapa distro memiliki paket kernel alternatif dengan patch grsecurity yang diterapkan. Jika Anda memiliki ini, Anda mungkin ingin menggunakannya.
Jika karena alasan tertentu Anda ingin melakukan ini tanpa penambahan kerangka kerja keamanan seperti selinux atau grsecurity, tolong jelaskan bagaimana apa yang Anda lakukan bukan menulis root-kit.
sumber
Tidak begitu sederhana pada kotak linux standar. Lihatlah grsecurity , tetapi membutuhkan patching kernel, dll.
sumber
Anda dapat mengganti argv Anda [0] dengan nama lain ... tetapi secara tegas, Anda sedang mencari semacam rootkit. ini dapat membantu Anda: http://stupefydeveloper.blogspot.com/2008/10/linux-change-process-name.html
sumber
Anda bisa menulis perintah setara yang berfungsi seperti itu
top
, tetapi tidak menampilkan proses yang cocok dengan nama tertentu. Atau Anda bisa mendapatkan kode sumber daritop
perintah dan memodifikasinya. Anda kemudian dapat menggantitop
perintah di/usr/sbin
(atau di mana pun itu) dengan versi Anda.sumber
top
perintah.