Bagaimana jika kita menjalankan Fork Bomb di Android?


Halo teman-teman, selamat datang di IHY Programming blog. Kali ini saya mau cerita tentang salah satu jenis program DoS (Denial of Service) yang biasanya ditargetkan untuk sistem Linux/Unix.

Namanya adalah Fork Bomb. Program ini jika dijalankan akan membuat salinan dirinya sendiri sampai menghabiskan kapasitas proses sistem.

Pada dasarnya Fork Bomb merupakan sebuah fungsi rekursif dalam Bahasa Pemrograman Bash. Apa itu fungsi rekursif? Fungsi rekursif adalah sebuah fungsi yang memanggil dirinya sendiri selama eksekusi fungsi tersebut berlangsung.

Berikut contoh fungsi sederhana dalam bash:

foo() {
    # isi dari fungsi disini
    echo "Hello, World!"
}

Contoh di atas adalah fungsi dengan nama foo yang bisa dijalankan dengan memanggil nama fungsinya

foo

Maka akan menghasilkan output Hello, World! di console.

Running contoh di bash shell termux

Nah, berikut adalah struktur kode dari fork bomb:

:(){ :|:& };:
Atau biar lebih mudah dibaca:
:() {
    :|: &
}; :

Rincian:

  • Kode diatas membuat fungsi dengan nama :
  • Simbol | merupakan operator pipe, yang kegunaannya untuk menyalurkan output fungsi di sebelah kiri sebagai input fungsi di sebelah kanan. Yang artinya fungsi ini menjalankan 2 lagi salinan dirinya.
  • Simbol & digunakan untuk menaruh proses sebelumnya di latar belakang, sehingga susah dihancurkan.
  • Tanda ; digunakan untuk mengakhiri fungsi lalu setelah itu kita jalankan fungsinya dengan memanggil namanya yaitu :

Jadi fungsi ini akan menjalankan dua fungsi yang sama di latar belakang, dimana dua fungsi tersebut juga akan membuat masing-masing dua salinan dirinya di latar belakang, dan seterusnya sampai resource sistem habis.

Ilustrasi fork bomb yang bertambah secara eksponensial

Fork Bomb di Android

Beberapa hari lalu saya melakukan keisengan kecil dengan menjalankan fork bomb di hp utama saya.

Hasilnya semua proses android dihancurkan demi membuat ruang untuk program fork bomb tersebut hingga akhirnya semua proses esensial android hancur dan fork bomb memenuhi RAM dan proses CPU. HP saya pun menjadi tidak responsif.

Tapi HP saya tidak mati/crash karena yang dihancurkan hanya lapisan atas OS yaitu android itu sendiri, sementara kernel linux nya masih aktif dan mengelola proses fork bomb dengan santai.

Lho kenapa tidak dihancurkan? ya mungkin karena linux nya ini menganggap kalo program tersebut adalah program biasa (dan memang iya, cuma fungsi bash sederhana). Jadi ya dibiarkan hidup.

Diagram struktur aplikasi android dimana kernel berada di paling bawah
Diagram arsitektur android.
Sumber: web developer android

Dan karena kernel masih hidup juga lah, HP nya masih bisa di charge atau jika usb debugging sudah dinyalakan, bisa akses shell linux lewat adb di PC. 

Solusi Potensial

Jika sebuah sistem sudah terkena fork bomb, maka satu-satunya cara adalah dengan menghancurkan semua salinan fork bomb secara bersamaan.

Hal ini bisa dilakukan lewat shell linux jika bisa login ke shell dengan akses root. Tapi kalau tidak bisa ya, harus reboot sistem.

Tapi, kita tidak bisa membuat proses lagi untuk reboot karena stok prosesnya sudah dihabiskan oleh si fork bomb itu. Jadi satu kemungkinan cara adalah mencabut power dari sistem.

Dan karena baterai HP saya tidak bisa dicabut, maka satu-satunya pilihan adalah menunggu sampai baterainya benar-benar habis (yang kurang lebih memakan waktu sekitar 4 hari).

Untuk mencegah fork bomb kalian bisa menaruh limit berapa banyak user process yang bisa dijalankan di sistem linux menggunakan perintah ulimit.

ulimit -u 5000

Perintah di atas akan membatasi limit proses pada sesi saat ini menjadi maksimal 5000 proses.

Singkatnya jangan coba-coba fork bomb di sistem kalian kalau belum siap-siap menghadapinya (saya kapok).


Terima kasih sudah membaca sampai akhir. Apa pendapatmu mengenai hal ini? Tulis di komentar yaa!

Sampai jumpa di post selanjutnya di IHY Programming Blog.

Komentar

Postingan populer dari blog ini

Setup Apache2 Server dan PHP 8 di Android menggunakan Termux

Memasang dan menjalankan PHPMyAdmin pada Android

Array pada Java