Mencegah malware dari mengendus password sudo


10

Saya sering mendengar orang mengutip sudosebagai salah satu hambatan utama malware menginfeksi komputer Linux.

Argumen yang paling umum sepertinya sejalan: Hak akses root diperlukan untuk mengubah konfigurasi sistem, dan kata sandi diperlukan untuk mendapatkan hak akses root, sehingga malware tidak dapat mengubah konfigurasi sistem tanpa meminta kata sandi.

Tetapi bagi saya tampaknya secara default pada sebagian besar sistem, begitu malware telah menginfeksi akun admin, eskalasi hak istimewa itu sepele - malware hanya harus menunggu pengguna untuk menjalankannya sudo.

Metode apa yang ada untuk malware untuk mendapatkan hak akses root ketika pengguna berjalan sudo, dan bagaimana kita bisa melindunginya?

Sunting: Saya secara khusus tertarik untuk melindungi terhadap akun admin yang disusupi; artinya, sebuah akun yang memiliki hak root penuh sudo(misalnya akun pengguna pada sistem desktop yang khas).


Untuk contoh hal yang saya cari, lihat jawaban saya . Saya berharap seseorang dapat menguraikan beberapa risiko keamanan yang ditimbulkan di sana (atau orang lain yang dapat mereka pikirkan), dan menyediakan cara untuk memitigasi mereka.
Zaz

Anda meminta sesuatu seperti UAC atau urutan perhatian yang aman di Windows. Sistem unixy tidak memilikinya. Cara memilih admin (bukan) adalah dengan tidak menggunakan akun mereka untuk hal-hal konyol. Beberapa hal yang Anda sebutkan dalam jawaban Anda sendiri dapat dijaga dengan sistem kontrol akses berbasis peran dan wajib seperti SELinux atau Grsecurity. Di sana Anda dapat menetapkan kebijakan bahwa biner yang dapat ditulis non-root tidak dapat dieksekusi, jadi tidak ada trojan di tingkat itu. Btw, jika Anda tidak percaya pada X, maka jangan percayai sistem sama sekali, karena X berjalan dengan hak superuser.
countermode

Terima kasih, saya telah melihat ke SELinux, tetapi tampaknya dirancang lebih untuk instalasi besar, membutuhkan banyak waktu untuk administrasi dan pengaturan; Saya berharap untuk sesuatu yang sedikit lebih sederhana. Saya seorang pengembang, jadi kebijakan ketat tentang menjalankan program juga bukan pilihan.
Zaz

"X berjalan dengan hak superuser" - Apa? Pada instalasi default X , startxberfungsi dengan baik sebagai pengguna normal. Sebenarnya, saya menjalankan X sebagai pengguna normal saat ini.
Zaz

Ya kurva learnig curam. Lihatlah Grsecurity, ini lebih sederhana namun kuat. ~ Hak istimewa X: pada kotak saya server X adalah SUID root dan menjalankan root.
countermode

Jawaban:


9

Setelah sepotong malware memperoleh akses ke akun pengguna, ia dapat:

1. Buat alias bash (di shell saat ini, dan di ~/.bashrc) ke perintah yang memalsukan [sudo] password for $USER:prompt, dan mencuri kata sandi pengguna.

alias sudo='echo -n "[sudo] password for $USER: " && \
            read -r password && \
            echo "$password" >/tmp/sudo-password'

2. Demikian pula, dapat menempatkan eksekusi bernama sudodi ~/.bin, dan memodifikasi PATHvariabel untuk mencapai efek yang sama:PATH="$HOME/.bin:$PATH"

3. Menangkap penekanan tombol melalui server X, perhatikan kata sudo, lalu coba teks di antara dua Enterpenekanan tombol berikutnya sebagai kata sandi.

4. Hal serupa dapat dilakukan di lingkungan apa pun (konsol, Wayland , X) menggunakan mis $LD_PRELOAD.

5. Jika malware menginfeksi shell yang menggunakan sudo, dan sudocache kredensial, malware tersebut dapat terus memeriksa apakah mungkin untuk melakukannya sudotanpa kata sandi:

while : ; do
    echo | sudo -S echo "test" &>/dev/null && break
    sleep 10
done
sudo echo "We now have root access"


Pencegahan:

1 & 2. Gunakan \/bin/sudo. The \mengabaikan alias, dan /bin/…abaikan $PATH. Atau, tambahkan alias seperti:, ssudo="\/bin/sudo"dan selalu gunakan ssudosebagai ganti sudo. Sepertinya tidak mungkin virus akan cukup pintar untuk memetakan ulang alias ini.

3. Hindari mengetik kata sandi Anda saat menggunakan X11. Sebagai gantinya, gunakan konsol virtual, atau Weston .

5. Set timestamp_timeout=0in /etc/sudoers.


Satu-satunya cara untuk benar-benar menghilangkan kemungkinan sudokata sandi dihirup, adalah dengan menghindarinya sama sekali. Sebagai gantinya, masuk sebagai root ke konsol virtual.

Menurut Alexander Peslyak : "satu-satunya penggunaan aman untuk su [dan sudo] adalah beralih dari akun yang lebih istimewa ke yang kurang istimewa ..."


Sebagai tambahan, sudo memang memiliki beberapa tindakan pencegahan:

  • sudomembaca dari ttyalih-alih stdin, jadi alias sudo='tee -a /tmp/sudo-password | sudo'rusak sudo(tetapi tidak menangkap kata sandi).

sudo bertanya dari kata sandi pengguna, sehingga malware tersebut akan menangkap kata sandi pengguna yang sudah dapat diaksesnya.
merampok

3
@rob: Ini sebenarnya tergantung pada bagaimana Anda sudomengonfigurasi, tetapi bagaimanapun, malware sekarang memiliki kata sandi yang diperlukan sudo, jadi jika pengguna memiliki akses root, begitu juga malware.
Zaz

3

Tidak ada perlindungan nyata.

Akses yang dilindungi kata sandi ke sudo mengingatkan kembali ke era sebelum lingkungan shell yang kompleks dengan perintah yang dijalankan oleh shims. Setelah kata sandi dikirimkan, ada jendela peluang di mana shim dapat menjalankan perintah melalui sudo, tanpa pemberitahuan apa pun, dan dengan kontrol sistem penuh.

Jika saya berniat untuk mengakses, saya akan membuat shim berguna untuk bash dan zsh dan fish, dll. Saya akan memonitor perintah yang dieksekusi. Segera setelah sudo kembali dengan status nol, saya akan mulai mengeluarkan "sudo chmod + s / bin / sh" atau nastiness lainnya.

Saat sudo diberikan kata sandi yang memuaskan, dan Anda memiliki shell yang menjalankan perintah untuk mendapatkan prompt, Anda berpotensi dalam masalah. Tidak ada perlindungan, selain optimisme.

Jawaban lain berfokus pada perlindungan kata sandi. Sebagai agresor, saya tidak akan khawatir tentang itu. Saya akan fokus pada durasi setelah kata sandi diberikan, ketika kata sandi tidak diperlukan. Itu waktu yang paling berisiko, ketika penyerang perlu melakukan paling tidak untuk kompromi sistem sepenuhnya.

Melindungi dari itu? Anda harus melindungi file RC Anda. Periksa shims atau perintah lain yang digunakan dalam perintah baris perintah. Cari co-proses yang terhubung ke shell dan alat yang digunakan untuk menjaga lingkungan shell. Pertahanan utama akan menjadi alat intrusi tuan rumah, tapi itu setelah fakta. Mencegah serangan? Hanya menggunakan kerang sederhana tanpa konfigurasi otomatis yang rumit dan konfirmasi aktif - itulah lingkungan tempat sudo dikembangkan.

Saya biasa bermain game dengan pengembang lain (1980-an) di mana kami akan mencoba menulis hal-hal yang akan mendapatkan terminal yang digunakan pengembang lain, untuk memasukkan perintah - ini pada dasarnya masalah yang sama. Dan kami telah membuatnya lebih mudah untuk menyematkan alat yang akan melakukan penyisipan perintah tanpa jejak yang terlihat. :)


1

Tidak yakin tentang apa metode untuk pengguna yang tidak sah untuk hak gain root, tapi aku tahu sesuatu yang dapat Anda lakukan untuk membuat sudosebuah sedikit kurang berbahaya , jika Anda ingin mengatakan bahwa. sudomemungkinkan Anda untuk mengonfigurasi izin granular, untuk menentukan grup pengguna dengan hak khusus, dan perintah khusus yang dapat dijalankan pengguna tertentu.

SUDO - PENGENDALIAN GRANULAR

  • Bagian Pengguna

    Ini tempat Anda dapat mengatur grup untuk pengguna yang akan Anda tentukan perintahnya. Mari kita siapkan grup Operasi;

    User_Alias  OPS = bob, jdoe 
    

    Ini menciptakan grup OPS dan menempatkan pengguna bernama bob dan jdoe ke dalam grup

  • Cmnd_Alias

    Di sini kita menentukan set perintah khusus. Anda harus menentukan path lengkap dan opsi perintah apa pun yang ingin Anda gunakan. Mari kita mengatur perintah operasi grup;

    Cmnd_Alias OPSCMD = /admin/bin/srvbkup, /admin/bin/test 
    

    Ini menambahkan tiga perintah yang ditentukan ke grup perintah OPSCMD.

  • Spesifikasi Privilege Pengguna

    Di sinilah kita akan menggunakan grup yang telah kita setup sejauh ini;

    OPS  ALL=(root)  OPSCMD 
    

    Hal pertama yang kami tentukan adalah pengguna, di sini kami menggunakan grup OPS yang kami siapkan. Kemudian ALL berarti itu berlaku untuk semua server, ini berguna hanya jika Anda atau menjalankan sudo lebih dari beberapa server masing-masing menggunakan file konfigurasi yang sama. Selanjutnya kita menentukan pengguna bahwa grup Operasi akan menjalankan perintah yang ditentukan, dalam hal ini kami ingin mereka berjalan sebagai root. Terakhir kami menentukan perintah yang kami inginkan agar grup OPS dapat dijalankan, khususnya kami menggunakan grup OPSCMD yang kami siapkan. Jika Anda tidak ingin mereka memasukkan kata sandi setiap kali menggunakan sudo, maka spesifikasi perintahnya lebih suka NOPASSWD: OPSCMD.

Keraskan sudokebijakan Anda sebanyak Anda tidak mempercayai pengguna Anda :)


Maaf jika saya tidak jelas dalam pertanyaan, tetapi saya tertarik untuk melindungi terhadap akun admin yang dikompromikan, yaitu, akun yang memiliki hak akses root penuh sudo. Secara khusus, saya berpikir tentang sistem desktop normal.
Zaz

1

Jika Anda tertarik pada sistem yang Anda yakini dapat dikompromikan, jalankan "Rootkit" dan gunakan "Tripwire" untuk memeriksa integritas sistem file.

Juga akan menyarankan Anda untuk memperkeras hak istimewa sudo, seperti Anda tidak perlu semua pengguna untuk mengakses semua perintah root daripada memberikan akses ke perintah tertentu melalui SUDO.


0

Pertama-tama lihat /etc/sudoersfile.

Sintaks akan menjadi user MACHINE=COMMANDSformat.

Misalnya pengguna root akan memiliki root ALL=(ALL) ALL Ini berarti bahwa pengguna root dapat menjalankan perintah (semua) di mana saja.

Jika entri Anda juga memiliki ALL=(ALL)maka Anda hampir sama dengan pengguna root. Jika ini bukan masalahnya dan Anda hanya memiliki hak istimewa terbatas, maka penyerang / malware hanya dapat melakukan sebanyak yang dapat dilakukan oleh hak sudo Anda.

Kiat yang dapat membantu Anda:

  1. Periksa Anda /etc/sudoersberkas.
  2. Jalankan pemindai keamanan seperti chkrootkit, pemburu rootkit, pemindai Config server Exploit, dengus dll.
  3. Gunakan visudoperintah untuk mengedit dan memodifikasi hak istimewa file sudoers Anda.
  4. Jalankan lagi pemindai.

Referensi: Halaman manual Linux sudoers dan sudo man sudoers

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.