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.
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.
Jawaban:
Kernel Linux sejak 3.3 berisi dukungan untuk proses persembunyian ke pengguna lain.
Hal ini dilakukan oleh hidepid=
dan gid=
me - mount opsi untuk / proc seperti yang dijelaskan dalam komit dan Dokumentasi / filesystems / proc.txt yang sesuai .
Debian Wheezy juga menyertakan fitur ini.
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()
metode security.c
, dan sihir setan di belakangnya ada di dalam hijacks.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 dalam pid_getattr
.
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.
Tidak begitu sederhana pada kotak linux standar. Lihatlah grsecurity , tetapi membutuhkan patching kernel, dll.
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
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 dari top
perintah dan memodifikasinya. Anda kemudian dapat mengganti top
perintah di /usr/sbin
(atau di mana pun itu) dengan versi Anda.
top
perintah.
this_is_not_the_process_you_are_looking_for
?