by Muqorrobien Marufi - Sun 22:50:19 May 12 2019

Slowloris adalah jenis serangan denial of service (DoS) yang memungkinkan penyerang untuk menghentikan sebuah layanan pada server terhenti dengan biaya yang cukup murah. Yang dimaksud biaya murah di sini adalah penyerang tidak membutuhkan mesin yang canggih dan bandwidth yang besar untuk mematikan sebuah server. Berbeda dengan teknik DoS pada umumnya yang biasanya membutuhkan resource cukup besar untuk membuat target server benar-benar down. Karena itulah Slowloris juga dikenal sebagai low bandwidth denial of service attack.

Cara Kerja

Bagaimana cara kerjanya? Slowloris bekerja dengan cara sebagai berikut (dalam protokol http):

  1. Penyerang akan mengirimkan paket http ke server dengan misal tambahan header Connection: Keep-Alive yang menandakan bahwa penyerang membutuhkan koneksi yang tak terputus.
  2. Penyerang melakukan langkah 1 secara terus menerus sehingga terdapat banyak koneksi yang jalan secara parallel dan tanpa pernah ditutup kembali koneksinya.
  3. Apabila server menutup salah satu koneksi maka penyerang mengirimkan kembali paket seperti di langkah 1.
  4. Lakukan terus sampai server tidak lagi dapat menerima atau merespon permintaan koneksi baru.

slowloris attack gambar: Youtube Radware

Cara tersebut adalah cara yang paling umum, sebenarnya ada banyak varian lain, sebagai contoh mengirimkan paket POST multipart/form-data, tetapi data yang dikirim ke server dikirimkan secara pelan-pelan byte-per-byte dan tanpa akhir, sehingga server akan kehabisan resource untuk menerima request baru karena thread pools-nya sedang menunggu semua paket dari client.

Nah dengan cara ini, bahkan satu komputer dengan bandwidth kecilpun bisa membuat server yang mahal lumpuh.

Cara Penanggulangan

Bagi Anda para web developer tidak perlu cemas, karena yang Anda butuhkan hanya minta kepada sysadmin untuk menggunakan http server yang tepat dengan konfigurasi yang benar dan jalankan aplikasi web di belakang http server tersebut, alias jangan serving secara langsung.

Yang dimaksud dengan http server yang tepat adalah http server yang tidak menggunakan thread pooling untuk meng-handle request dari client, kebanyakan server http masih menggunakan cara ini soalnya.

Http server yang saya rekomendasikan adalah nginx, mengapa? Karena nginx menggunakan event driven untuk meng-handle setiap request dari client, sehingga setiap request akan diproses secara asynchronous tanpa blocking.

Selanjutnya kita perlu untuk mengkonfigurasinya dengan:

1. Membatasi jumlah koneksi per-alamat IP

Sebenarnya cara ini masih bisa di-by pass menggunakan tor, tapi mungkin saya akan membahasnya di lain waktu.

Contoh cara membatasi jumlah koneksi per-alamat IP pada server Nginx:

limit_conn_zone $binary_remote_addr zone=addr:10m;

location /upload {
   limit_conn addr 1;
}

2. Perkecil waktu tunggu per koneksi http

Segera tutup koneksi yang terlalu lama:

client_body_timeout 5s;
client_header_timeout 5s;

3. Perbesar jumlah worker

Ini akan membuat jumlah worker yang akan menghandle request semakin besar.

Contoh konfigurasi pada Nginx:

events {
    worker_connections 100000;
}

Biasanya dengan 3 cara tersebut saja sudah cukup, namun apabila ingin lebih mantap bisa dengan menambahkan:

fs.file-max = 500000

Pada file /etc/sysctl.conf lalu jalankan perintah:

$ sudo sysctl -p

Konfigurasi sistem pada Linux tersebut akan meningkatkan batasan open file dan walaupun sifatnya system-wide namun Linux biasanya juga membatasi open file per-user, sehingga kita perlu untuk mengkonfigurasinya juga untuk user yang digunakan untuk menjalankan nginx, nama user-nya biasanya www-data, www, atau nginx.

Contoh untuk meningkatkan batasan open file untuk user www-data:

Edit file /etc/security/limits.conf lalu isi dengan:

*                soft    nofile          102400
*                hard    nofile          409600
www-data         soft    nofile          102400
www-data         hard    nofile          409600

Anda perlu melakukan restart/reboot untuk mendapatkan efek perubahannya.

Kesimpulan

Slowloris adalah teknik serangan denial of service (DoS) yang sederhana tetapi cerdas dan mematikan karena memanfaatkan kelemahan multi-threading dengan memperlambat sebuah request untuk membuat thread pada server menunggu tanpa harapan, apabila saya boleh membuat analogi untuk menggambarkannya secara sederhana maka Slowloris adalah teknik serangan yang membuat server mati karena harapan palsu yang lama digantungkan 😀

Demikian artikel saya kali ini, semoga bermanfaat.

[] Robin Sy.

Slowloris adalah jenis serangan denial of service (DoS) yang memungkinkan penyerang untuk menghentikan sebuah layanan pada server terhenti dengan biaya yang cukup murah. Yang dimaksud biaya murah di sini adalah penyerang tidak membutuhkan mesin yang canggih dan bandwidth yang besar untuk mematikan sebuah server. Berbeda dengan teknik DoS pada umumnya yang biasanya membutuhkan resource cukup besar untuk membuat target server benar-benar down. Karena itulah Slowloris juga dikenal sebagai low bandwidth denial of service attack.

Cara Kerja

Bagaimana cara kerjanya? Slowloris bekerja dengan cara sebagai berikut (dalam protokol http):

  1. Penyerang akan mengirimkan paket http ke server dengan misal tambahan header Connection: Keep-Alive yang menandakan bahwa penyerang membutuhkan koneksi yang tak terputus.
  2. Penyerang melakukan langkah 1 secara terus menerus sehingga terdapat banyak koneksi yang jalan secara parallel dan tanpa pernah ditutup kembali koneksinya.
  3. Apabila server menutup salah satu koneksi maka penyerang mengirimkan kembali paket seperti di langkah 1.
  4. Lakukan terus sampai server tidak lagi dapat menerima atau merespon permintaan koneksi baru.

slowloris attack gambar: Youtube Radware

Cara tersebut adalah cara yang paling umum, sebenarnya ada banyak varian lain, sebagai contoh mengirimkan paket POST multipart/form-data, tetapi data yang dikirim ke server dikirimkan secara pelan-pelan byte-per-byte dan tanpa akhir, sehingga server akan kehabisan resource untuk menerima request baru karena thread pools-nya sedang menunggu semua paket dari client.

Nah dengan cara ini, bahkan satu komputer dengan bandwidth kecilpun bisa membuat server yang mahal lumpuh.

Cara Penanggulangan

Bagi Anda para web developer tidak perlu cemas, karena yang Anda butuhkan hanya minta kepada sysadmin untuk menggunakan http server yang tepat dengan konfigurasi yang benar dan jalankan aplikasi web di belakang http server tersebut, alias jangan serving secara langsung.

Yang dimaksud dengan http server yang tepat adalah http server yang tidak menggunakan thread pooling untuk meng-handle request dari client, kebanyakan server http masih menggunakan cara ini soalnya.

Http server yang saya rekomendasikan adalah nginx, mengapa? Karena nginx menggunakan event driven untuk meng-handle setiap request dari client, sehingga setiap request akan diproses secara asynchronous tanpa blocking.

Selanjutnya kita perlu untuk mengkonfigurasinya dengan:

1. Membatasi jumlah koneksi per-alamat IP

Sebenarnya cara ini masih bisa di-by pass menggunakan tor, tapi mungkin saya akan membahasnya di lain waktu.

Contoh cara membatasi jumlah koneksi per-alamat IP pada server Nginx:

limit_conn_zone $binary_remote_addr zone=addr:10m;

location /upload {
   limit_conn addr 1;
}

2. Perkecil waktu tunggu per koneksi http

Segera tutup koneksi yang terlalu lama:

client_body_timeout 5s;
client_header_timeout 5s;

3. Perbesar jumlah worker

Ini akan membuat jumlah worker yang akan menghandle request semakin besar.

Contoh konfigurasi pada Nginx:

events {
    worker_connections 100000;
}

Biasanya dengan 3 cara tersebut saja sudah cukup, namun apabila ingin lebih mantap bisa dengan menambahkan:

fs.file-max = 500000

Pada file /etc/sysctl.conf lalu jalankan perintah:

$ sudo sysctl -p

Konfigurasi sistem pada Linux tersebut akan meningkatkan batasan open file dan walaupun sifatnya system-wide namun Linux biasanya juga membatasi open file per-user, sehingga kita perlu untuk mengkonfigurasinya juga untuk user yang digunakan untuk menjalankan nginx, nama user-nya biasanya www-data, www, atau nginx.

Contoh untuk meningkatkan batasan open file untuk user www-data:

Edit file /etc/security/limits.conf lalu isi dengan:

*                soft    nofile          102400
*                hard    nofile          409600
www-data         soft    nofile          102400
www-data         hard    nofile          409600

Anda perlu melakukan restart/reboot untuk mendapatkan efek perubahannya.

Kesimpulan

Slowloris adalah teknik serangan denial of service (DoS) yang sederhana tetapi cerdas dan mematikan karena memanfaatkan kelemahan multi-threading dengan memperlambat sebuah request untuk membuat thread pada server menunggu tanpa harapan, apabila saya boleh membuat analogi untuk menggambarkannya secara sederhana maka Slowloris adalah teknik serangan yang membuat server mati karena harapan palsu yang lama digantungkan 😀

Demikian artikel saya kali ini, semoga bermanfaat.

[] Robin Sy.