Bagaimana melindungi Ubuntu dari bom fork

72

Saya mendengar seseorang berbicara tentang bom fork, saya melakukan riset dan menemukan beberapa informasi mengerikan tentang beberapa karakter aneh yang dapat Anda minta Anda mengetik di baris perintah dan akibatnya melakukan hal-hal buruk di komputer. Saya pasti tidak akan mengeluarkan perintah yang tidak saya mengerti tetapi orang tidak pernah tahu apa yang bisa terjadi.

Saya mendengar bahwa beberapa OS memungkinkan administrator untuk membatasi proses pengguna untuk mengurangi efek bom fork, apakah ini perlindungan di Ubuntu secara default atau apakah orang dengan hak istimewa sudo harus mengatur ini? Jika ya, bagaimana caranya?

dblang
sumber

Jawaban:

73

Anda dapat dengan mudah membatasi jumlah proses yang dapat dihasilkan di Ubuntu dan sebagian besar distribusi Linux lainnya dengan memodifikasi /etc/security/limits.conf

sudoedit /etc/security/limits.conf

Kemudian tambahkan baris ini ke bagian bawah file itu:

*    hard     nproc     nnn

dimana:

  • hard menetapkan batas pada level kernel sehingga tidak dapat diubah tanpa me-reboot.
  • nproc adalah jumlah maksimum proses per pengguna.
  • nnn adalah angka yang harus Anda hitung untuk sistem Anda dengan:

    ps aux -L | cut --delimiter=" " --fields=1 | sort | uniq --count | sort --numeric-sort | tail --lines=1
    

Perintah di atas akan mencantumkan semua proses untuk semua pengguna termasuk utas , jumlahkan semuanya dan daftar nama pengguna dengan jumlah proses terbesar. Agar aman, buka aplikasi sebanyak yang biasanya Anda perlukan sebelum menjalankan perintah di atas dan kemudian gandakan nomor itu untuk keamanan.

Setelah batas ini diberlakukan, Anda harus melakukan reboot, tetapi akan memengaruhi setiap pengguna non-root pada sistem. Jadi jika bom fork dieksekusi oleh pengguna non-root, ia akan memiliki batas yang sulit.

Batas grup dan wildcard tidak berlaku untuk pengguna root secara default . Gunakan nama pengguna literal rootdalam aturan jika Anda ingin menerapkan aturan ke superuser.

Juga, jika Anda tidak ingin memulai kembali dalam waktu dekat, Anda dapat menggunakan sudo ulimit -u 800yang akan menempatkan pembatasan hanya pada sesi berlari tetapi dapat dengan mudah dielakkan dengan bom garpu dengan sudohak istimewa!

Setelah restart, apa pun yang ada di dalam /etc/security/limits.confakan digunakan.

Beberapa informasi tambahan tentang bom fork: Mereka bukan malware atau sesuatu yang mengerikan. Mereka biasanya terdiri dari sesuatu yang mendasar seperti sebuah skrip yang menyebut dirinya dua kali - sehingga menumbuhkan kehadirannya pada mesin secara eksponensial. Meskipun mereka memiliki footprint memori kecil mengingat kecepatan mereka yang cepat, mereka dengan cepat mengisi semua RAM yang tersedia dan mesin membeku atau reboot. Satu-satunya bahaya adalah kehilangan informasi yang belum disimpan. Saya akan mengklasifikasikan forkbomb lebih sebagai lelucon daripada perangkat lunak berbahaya.

Pengingat penting:

Anda seharusnya jarang pernah mengeksekusi apapun dalam command line ketika Anda tidak 98% yakin akan aksinya. Jika Anda tidak dapat membaca perintah yang Anda jalankan - jangan lakukan itu. Ini berlaku untuk bongkahan karakter hex / base64 yang tidak dapat dibaca, yang dapat digunakan untuk mengaburkan semua jenis nastiness. Jika Anda tidak yakin akan suatu perintah, Anda selalu dapat mencari tindakannya di Ubuntu Manpages dan berhati-hati saat menggunakan sudokarena itu akan dijalankan sebagai pengguna root.

Marco Ceppi
sumber
@MarcoCeppi: nomor Anda tidak jauh untuk pengguna Unity yang khas: output ke perhitungan saat ini adalah 404 untuk sistem saya ...
Fabby
1
Jika saya, katakan, memasukkan sesuatu seperti alias ":(){ :|: & };:"="echo 'No.'"pada saya .bashrc- akankah ia menjalankan setiap login?
UniversallyUniqueID
Apakah ada kerugian untuk memilih batas nproc yang lebih tinggi? Sepertinya tidak ada banyak ruang dengan batas pada atau bahkan dua kali lipat dari proses saat ini, apakah batas jauh lebih tinggi, bahkan 10.000 atau lebih, masih efektif terhadap bom garpu? Tentang berapa banyak ram yang dikonsumsi setiap garpu / proses? Mungkin ada batas yang diturunkan RAM yang lebih universal?
Xen2050
1

Cara sederhana yang saya suka adalah membuat alias meskipun alias 'tidak selalu diterapkan, periksa jawaban di atas.

alias :="echo No."

Sekarang

$ :(){ :|: & };:
bash: syntax error near unexpected token `('
Adrian Webster
sumber
22
tentu saja, ini adalah solusi umum; bagaimana ini berhenti a(){ a|a & };a? (atau nama fungsi lainnya?)
cat