Jika Anda ingin mengatur secara global
alias ':(){ :|:& };:'='echo fork bomb averted'
apakah itu strategi keamanan yang efektif untuk menghindari eksekusi bom garpu Bash atau apakah masih ada cara untuk mengeksekusinya?
Saya kira pertanyaan itu menguap ke: apakah ada cara untuk mengeksekusi perintah ketika itu dialihkan ke sesuatu yang lain?
a(){ a|a& };a
Jawaban:
The
dua, tidak,tiga, ... Di antara hambatan utama untuk yang:Itu bukan nama yang valid untuk alias. Manual online Bash :
(
,)
,&
,|
Dan spasi keluar di Bash 4.4.String khusus itu bukan satu-satunya cara untuk menulis bom garpu di shell, hanya terkenal karena terlihat tidak jelas. Misalnya, tidak perlu memanggil fungsi
:
alih-alih sesuatu yang sebenarnya terdiri dari huruf.Jika Anda dapat mengatur alias, pengguna dapat menghapus alias, mengelaknya dengan keluar dari nama alias di baris perintah, atau menonaktifkan alias sama sekali, mungkin dengan menjalankan fungsi dalam skrip (Bash tidak memperluas alias dalam shell yang tidak aktif) .
Sekalipun shell dibatasi cukup untuk menghentikan semua versi bom fork, sistem tujuan umum akan memiliki utilitas lain yang dapat diprogram yang dapat mengembalikan dan memotong subproses. Punya Perl atau kompiler C? Cukup mudah. Bahkan awk mungkin bisa melakukannya. Bahkan jika Anda belum menginstalnya, Anda juga harus menghentikan pengguna dari memasukkan binari terkompilasi dari luar sistem, atau menjalankan
/bin/sh
yang mungkin perlu menjadi shell operasional penuh agar seluruh sistem berfungsi.Cukup gunakan
ulimit -u
(yaituRLIMIT_NPROC
) atau setara untuk membatasi jumlah proses yang dapat dimulai pengguna. Pada sebagian besar sistem Linux adapam_limits
yang dapat mengatur batas hitungan proses sebelum perintah yang dipilih oleh pengguna dimulai.Sesuatu seperti ini
/etc/security/limits.conf
akan membatasi 50 proses untuk semua pengguna:(Stephen Kitt sudah menyebutkan poin 1, Jeff Schaller menyebutkan 2 dan 3.)
sumber
&
?&
batasan.Tidak. Terlalu banyak cara untuk menulis bom fork.
Penulis fork-bomb jahat hanya akan mencoba lagi dengan nama fungsi yang berbeda. Atau perubahan lain sampai bom fork-nya berhasil.
Penulis fork-bom yang tidak disengaja tidak akan menghasilkan fork-bom kanonik.
Sebenarnya agak mudah untuk menjadi penulis fork-bom yang tidak sengaja sendiri. Misalnya, Anda bisa menggunakan rekursif
make
dengan eksternal, tidak dicentangcd
, menggabungkannya dengan-j
opsi dan subdirektori yang tidak ada - contoh nyata yang saya temui satu kali.Anda tidak dapat melindungi terhadap semua kemungkinan, dan tentu saja tidak terhadap penyerang yang gigih. Yang akan Anda capai adalah meningkatkan kompleksitas sistem Anda.
sumber
Anda tidak dapat alias bom fork, karena itu bukan nama alias yang valid :
Beberapa shell tidak memeriksa nama alias saat dideklarasikan, tetapi ketika menafsirkan perintah, dan melewatkan nama yang tidak valid itu. Bom fork akan selalu termasuk
&
, yang tidak bisa dimasukkan dalam nama alias yang valid, jadi melindungi diri dengan cara ini tidak mungkin.sumber
dash
danbosh
misalnya keduanya diam-diam mengabaikannya.Dua kali, tidak.
Itu bukan satu-satunya cara untuk menulis bom fork.
Ada juga beberapa cara untuk mengeksekusi "perintah" ketika ada alias:
Contoh:
sumber
\ls
tampiloutput.png
tetapicommand ls
tidak?