Bagaimana cara mendeteksi proses tersembunyi di linux?

10

Kami memiliki kotak yang kami curigai telah di-root di tempat kerja. Pertanyaannya adalah bagaimana kita menemukannya? Saya bukan administrator sistem, tetapi saya dibawa ke tim untuk menyelesaikan situasi dan saya ingin tahu di mana tempat yang baik untuk mencari seperti masalah mungkin?

Alasan kami menduga ini adalah bahwa kami telah memperhatikan pemanfaatan jaringan yang lebih tinggi dari normal pada mesin dari port tinggi (yang tampaknya acak).

Apa yang bisa kita lakukan untuk menemukan anak yang bermasalah? Apa yang bisa kita lakukan untuk melindungi dari ini di masa depan? Adakah pemantauan yang bisa kita jalankan untuk membuat kita mengetahui hal ini di masa depan? (Selain dari pemantauan jaringan yang kami sedang berusaha menjaga lebih dekat.)

Terima kasih sebelumnya dan saya dapat memberikan rincian lebih lanjut jika diperlukan. Hargai waktu Anda.

Chris
sumber
2
Perbaikan yang dijamin: Lepaskan dari orbit dan pulihkan dari cadangan.
Chris S
Tampaknya ini menggandakan pertanyaan terakhir ini .
Steven Senin
1
"Saya bukan administrator sistem, tetapi saya dibawa ke tim untuk menyelesaikan situasi" - ini sangat berharga. Untuk menghapusnya: pertanyaan Anda benar-benar OK. Situasi nyata Anda tidak. Siapa pun yang memutuskan untuk melibatkan Anda salah.
Hentikan
@ Chris S: Ini adalah pertanyaan pembelajaran yang bukan cara paling cepat untuk menyelesaikan pertanyaan masalah.
Chris
halp: Saya tidak bertanggung jawab untuk menyelesaikan ini tetapi saya harus belajar darinya. Saya lulusan cse baru-baru ini hanya mendapatkan kaki saya basah di tempat kerja.
Chris

Jawaban:

6

Anda tidak dapat mempercayai semua alat sistem yang Anda miliki di mesin. Rootkit akan menggantikan ps, netstat, ls, dan lainnya untuk menyembunyikan keberadaan mereka. Anda harus membuat mesin offline, mengeluarkan hard drive, membuat salinan forensik (pikirkan dd) kemudian bekerja dari itu pada mesin seoncdary untuk memindai rootkit.

Jika Anda bersikeras bekerja pada mesin langsung (yang biasanya sia-sia) maka Anda dapat mencoba mengunduh distribusi penyelamatan pada CD (yang sangat penting salinannya hanya baca-saja) dan gunakan salinan ps, lsmod, dll.

Bahkan ini mungkin gagal karena rootkit dapat menginstal modul kernel untuk menyembunyikan entri di / proc di mana alat seperti ps biasanya beroperasi.

Semoga berhasil!

bot403
sumber
Jika ia memiliki distribusi berbasis RPM, ia dapat berlari rpm -V -f /bin/psuntuk memeriksa apakah itu dimodifikasi jika tidak. Tentu saja, ini hanya akan berfungsi jika penyerang belum juga memodifikasi rpmatau database RPM. Meskipun dia bisa memodifikasi beberapa rpmfile kemudian jalankan rpm -V rpmdan periksa apakah itu bohong atau tidak.
Cristian Ciupitu
5

Masalah dengan rootkit yang dibangun dengan baik adalah mereka memodifikasi perintah sistem Anda; seperti ps dan atas untuk tidak menunjukkan proses rootkit dan ls untuk tidak menampilkan file-file rootkit.

Jadi yang perlu Anda lakukan adalah mendapatkan perintah ini dari sumber atau dalam bentuk binairies. (Pastikan ditandatangani dengan baik). Tetapi trik dari root kit (saya pernah melihatnya) adalah mereka mungkin merusak kompiler Anda juga. Jadi ketika kompiler tahu dia mengkompilasi ls atau ps atau perintah apa pun dia menginfeksi mereka juga.

Ketika saya melihat masalah ini saya katakan baik-baik saja mari kita mengkompilasi ulang gcc, tapi tidak apa yang saya butuhkan untuk mengkompilasi gcc ... infecte gcc .... jadi ketika dia tahu dia sedang menyusun sendiri dia menginfeksi itu sehingga dapat menginfeksi perintah.

Anda akan mengatakan bahwa ini menjadi besar dan sulit untuk dideteksi, ya tapi jarang adalah root kit yang begitu anti peluru.

Serius, jika Anda yakin ada root kit di server Anda, pasang kembali!

Gopoi
sumber
Hargai jawabannya, dan ya instal ulang itu adalah solusi untuk saat ini. Masalahnya adalah, saya ingin belajar tentang ini sehingga di ujung jalan saya mungkin dapat mendeteksi dan memulihkannya tanpa harus membangun kembali seluruh server. Eksekutif kami tidak suka downtime lagi dari eksekutif berikutnya.
Chris
@ Chris, pencegahan adalah satu-satunya obat Anda .. Cari tahu bagaimana hal itu terjadi sehingga kami dapat membantu menjawab .. "bagaimana" untuk menghindari hal itu terjadi lagi
Arenstar
Apakah Anda akan memilih penjawab yang baik untuk pertanyaan itu?
Gopoi
5

Cara terbaik untuk mengetahui apakah server Anda telah "di-rooting" adalah menjalankan sistem deteksi intrusi berbasis host (HIDS). Sayangnya, jika Anda tidak menjalankan HIDS sekarang, maka sudah terlambat untuk menginstalnya. Waktu yang tepat untuk menginstal HIDS adalah ketika server pertama kali diinstal, dan sebelum dimasukkan ke jaringan.

Secara singkat, sebagian besar HIDS bekerja dengan menghitung hash kriptografi semua biner sistem, dan menyimpan hash tersebut (bersama dengan banyak statistik file lainnya) ke dalam basis data, yang disebut basis data dasar. Kemudian, secara berkala, HIDS memindai ulang sistem Anda, membandingkan semua file dalam basis data dasarnya dengan file sistem yang sebenarnya.

Ya, tentu saja, dimungkinkan untuk rootkit untuk memodifikasi basis data Anda, itulah sebabnya Anda perlu mengambil salinan dari database itu dan menyimpannya secara terpisah dari server sebelum Anda menempatkan server online. Kemudian, jika Anda mencurigai bahwa Anda "di-root" (dan Anda mencurigai basis data dasar Anda juga dirusak), Anda dapat mem-boot sistem Anda dari media instal, mengembalikan database yang dikenal baik dari cadangan Anda, dan kemudian menjalankan pemindaian terhadap dikenal baik. Akan tetapi, jauh lebih mungkin bahwa rootkit tidak akan mengantisipasi keharusan mengalahkan HIDS khusus Anda, dan karenanya Anda akan menerima pemberitahuan dari HIDS bahwa file sistem telah berubah, yang mengindikasikan kemungkinan intrusi sistem.

Karena Anda tidak menjalankan HIDS, Anda tidak memiliki cara cepat untuk menentukan dengan pasti apakah Anda telah di-rooting, atau file sistem apa yang telah dimodifikasi. Anda bisa menghabiskan banyak waktu membandingkan file sistem Anda dengan file yang dikenal baik yang diambil dari media instalasi yang dikenal baik, tetapi waktu itu kemungkinan besar lebih baik dihabiskan menginstal ulang sistem Anda dari media itu. Jika Anda ingin menyelidiki bagaimana Anda di-root setelah fakta, tentu saja yang terbaik adalah mengambil gambar sistem Anda sebelum Anda menghapusnya dan menginstal ulang.

Steven Monday
sumber
Samhain adalah HIDS.
pefu
4

Silakan merujuk ke posting sebelumnya yang dibuat

Rasa sakit menghapus perl rootkit

Sangat penting Anda membaca ini ..

Untuk menjawab pertanyaan Anda ..

Saya biasanya menjalankan IDS / IPS (deteksi intrusi / sistem perlindungan) seperti mendengus .. ia melakukan pekerjaan yang bagus terhadap pelanggaran, dan saya telah melihatnya melakukan pekerjaan BESAR dalam aksi ..

Saya juga menggunakan Server Syslog untuk menjaga pesan log dari server produksi, sehingga Anda dapat melacak kembali masalah dan perubahan / menjadi rootkit

Saya juga sering menggunakan alat manajemen seperti cacti, yang menggambarkan cpu, memori, disk, penggunaan jaringan dan melaporkan jika ada yang tidak biasa ..

Menjadi rootkit adalah masalah serius, pasti mencoba mencari penyebabnya ..

Semoga ini bisa membantu ..: D

Arenstar
sumber
3

Port tinggi acak adalah porta sesaat, yang menunjukkan bahwa Anda kemungkinan memiliki satu atau lebih koneksi program keluar dari sistem ini.

Jika tidak di-root, maka netstat -np | grep -v ^unixdapat memberi Anda petunjuk tentang program mana yang menghasilkan lalu lintas.

Anda juga dapat memindai lalu lintas dari sistem terdekat menggunakan tcpdump untuk membuang paket yang berasal dari sistem yang Anda yakini telah di-root. Jika program masalah tidak berjalan sebagai root, Anda dapat melakukan ini dari sistem yang terinfeksi.

Ada beberapa hal yang dapat Anda lakukan untuk menghindari root:

  • Biarkan sistem Anda ditambal, terutama kernel. Pantau alasan rilis kernel untuk menentukan vektor serangan.
  • Hanya instal dan gunakan program yang diperlukan. Lakukan pemasangan seminimal mungkin.
  • Jalankan sesedikit mungkin sebagai root. Banyak program akan berubah menjadi userid yang tidak terjangkau setelah mereka menyelesaikan pengaturan yang membutuhkan hak akses root.

EDIT: Jika Anda di-root, maka menggunakan program ps dan ls yang terhubung secara statis dapat mengindikasikan perbedaan antara program yang sedang berjalan yang ditemukan kedua alat. Perbedaan dalam daftar juga dapat muncul ketika program yang berumur pendek mati.

BillThor
sumber
1

Perbaikan nyata untuk sistem yang mungkin di-rooting adalah menginstalnya kembali dari sumber yang aman. Suka CD instalasi. Kemudian pulihkan data Anda hanya dari cadangan. Setiap binari atau skrip di cadangan Anda mungkin telah disusupi dan disimpan ke dalam cadangan Anda.

Untuk menemukan root kit pada sistem yang sedang berjalan, salah satu cara untuk melakukannya adalah dengan mengkompilasi modul kernel yang dirancang untuk mendeteksi rootkit. Kompilasi pada mesin yang berbeda yang menjalankan versi OS yang sama. Kemudian salin dan masukkan.

Detektor rootkit akan memiliki alat yang dibangun ke dalam modul kernel untuk membuang tabel proses yang sedang berjalan, memverifikasi tabel syscall (untuk mencari intersepsi syscall) dan fitur lainnya. Mungkin memiliki skrip yang akan mengambil output dari modul dan membandingkannya dengan output dari ps, netstat, ls, dll. Atau mungkin dapat memindai memori dalam ruang kernel untuk tanda tangan dan laporan rootkit yang diketahui.

Zan Lynx
sumber
1

Ini seperti tikus: jika Anda melihatnya, ada seratus yang tinggal di sana. Jika Anda melihat tanda-tanda kompromi, Anda harus menganggap keseluruhan sistem terganggu. Itu sebabnya semua orang menyarankan agar Anda menginstal ulang sistem daripada menghabiskan banyak waktu mencari. Saya telah menemukan beberapa situasi di mana mesin dikompromikan dan sysadmin mengira mereka telah membersihkan kekacauan, hanya untuk menyesal nanti.

Sangat umum bagi rootkit untuk mengganti sistem binari seperti ps, top, netstat. Dan itu juga umum untuk trojan ssh. Jadi, mencari keanehan checksum dalam file-file itu adalah pendekatan utama. Jika Anda menggunakan sistem berbasis rpm, rpm -V biasanya merupakan alat yang bagus, atau verifikasi dpkg di Debian / Ubuntu. Atau Anda dapat memeriksa checksum secara langsung (tetapi waspada terhadap prelink, yang mengubah biner dengan cepat karena alasan kecepatan). Ini tidak dapat diandalkan, tetapi banyak serangan script-kiddie tidak mencakup jejak ini. (Dengan kata lain, jika Anda menemukan sesuatu, bagus. Jika Anda tidak menemukan sesuatu, itu tidak membuktikan Anda bersih.)

Hal-hal lain yang harus dicari: port yang ditampilkan terbuka dari eksternal nmapyang tidak terlihat terbuka melalui netstatpada mesin, dan pids di /procmana tidak muncul di ps. Dan jika syslog jarak jauh Anda diaktifkan, cari ssh login yang tidak memiliki catatan di lastlog.

mattdm
sumber
0

Ambil sendiri salinan RKhunter dan chkrootkit. Mereka biasanya cukup baik dalam membantu menemukan hal-hal yang seharusnya tidak ada di sana.

Itu selalu baik untuk menjalankan mod_security juga pada lapisan Apache Anda bersama dengan firewall. Biasanya mereka akan menemukan webapp atau skrip yang ketinggalan zaman dan meningkatkan akses dari sana dengan skrip shell Perl dan hal-hal menyenangkan lainnya.

ps auxfww biasanya bagus untuk menemukan proses yang bukan miliknya.

Juga: netstat -anp untuk melihat apa yang sedang mendengarkan pada port tertentu.

Sekali lagi ini bagus jika Anda belum di-root, cukup dikompromikan.

Steven Leggett
sumber