Bagaimana membuat proses tidak terlihat oleh pengguna lain?

19

Bagaimana Anda bisa meluncurkan suatu proses dan membuatnya tidak terlihat oleh topperintah? Proses ini dimulai oleh pengguna normal (bukan root), dan tidak boleh terlihat oleh pengguna normal lainnya.

Debugger
sumber
1
Jenis itu mengalahkan tujuan top dan akan terlalu mudah untuk disalahgunakan. Mengapa tidak mengganti nama prosesnya? this_is_not_the_process_you_are_looking_for?
Begitu ya, bagaimana dengan menyembunyikan pengguna?
5
Tolong beritahu kami Anda tidak mencoba untuk menulis root-kit. Bisakah Anda menjelaskan skenario Anda sehingga mungkin kami dapat menyarankan arsitektur keamanan yang lebih baik daripada yang biasanya dianggap sebagai perilaku "jahat"?
Caleb
2
Anda dapat menggunakan grsecurity atau SELinux . Keduanya memerlukan intervensi root untuk pengaturan awal.
Gilles 'SO- stop being evil'

Jawaban:

14

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.

Jofel
sumber
11

The topperintah 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.cfile.

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_getattrsimbol 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.

Corey Henderson
sumber
4

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.

Caleb
sumber
1

Tidak begitu sederhana pada kotak linux standar. Lihatlah grsecurity , tetapi membutuhkan patching kernel, dll.

marioosh
sumber
2
Saya pikir ini standar dengan kernel selinux.
user606723
0

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 topperintah dan memodifikasinya. Anda kemudian dapat mengganti topperintah di /usr/sbin(atau di mana pun itu) dengan versi Anda.

LawrenceC
sumber
2
Mengganti 'top' tidak menghentikan pengguna dari melakukan apa yang top lakukan.
Tim Post
2
Tidak, tetapi pertanyaannya adalah bagaimana membuat proses tidak terlihat oleh topperintah.
LawrenceC