Dalam artikel ini saya akan menjelaskan mengenai jenis serangan yang
bisa dikatakan tidak ada obatnya, yaitu denial of service atau DoS. Bila
serangan DoS ini dilakukan secara beramai-ramai dan terorganisir dengan
baik, maka akan menghasilkan kerusakan yang dahsyat dan sanggup
melumpuhkan situs-situs populer seperti twitter.com dan metasploit.com.
Apa itu DoS
Denial
of service adalah jenis serangan yang tujuannya adalah mencegah
pengguna yang sesungguhnya menikmati layanan yang diberikan server.
Server sesuai namanya adalah pelayan yang harus selalu siap melayani
permintaan pengguna, yang umumnya beroperasi 24 jam tanpa henti.
Contohnya adalah web server yang bertugas melayani pengunjung web
menyediakan informasi dalam bentuk halaman html. Dalam kondisi normal,
pengunjung dapat meminta resource dari web server untuk ditampilkan
dalam browsernya, namun bila web server terkena serangan DoS maka
pengunjung tidak bisa menikmati layanan web server.
Secara umum ada 2 cara melakukan serangan DoS:
1. Mematikan Server
2. Menyibukkan Server
* Tanpa bug/vulnerability
* Meng-exploit bug/vulnerability
DoS dengan Mematikan Server: Kill Them!
Anda
pernah mengalami ingin memakai telepon umum atau ATM namun tidak bisa
karena di mesin tersebut ditempel kertas berisi pesan “Out of Service”
atau “Sedang dalam perbaikan”. Telepon umum adalah target serangan DoS
yang biasa terjadi, dimana-mana kita menemukan telpon umum yang rusak
karena serangan DoS seperti membanting gagang telpon, mencabut kabel,
memecahkan LCD dan aksi-aksi lainnya.
Tujuan serangan ini adalah
membuat server shutdown, reboot, crash, “not responding”. Jadi serangan
ini menghasilkan kerusakan yang sifatnya persisten artinya kondisi DoS
akan tetap terjadi walaupun attacker sudah berhenti menyerang, server
baru normal kembali setelah di-restart/reboot.
Bagaimana cara
serangan DoS ini dilakukan? Serangan ini dilakukan dengan meng-exploit
bug/vulnerability pada server. Kata kunci pada vulnerability jenis ini
biasanya adalah “specially/carefully crafted packet/request”, yang
artinya paket yang dirancang khusus. Kenapa dirancang khusus? Sebab
dalam paket itu mengandung sifat tertentu yang membuat server mati
ketika mengolah paket khusus itu.
Mari kita perhatikan beberapa contoh vulnerability yang berakibat pada DoS attack:
* Ping of Death ( CA-1996-26 )
Ini adalah jenis bug yang sudah sangat tua. Praktis sudah tidak
ada lagi sistem yang vulnerable terhadap bug ini. Bug ini bila diexploit
akan membuat server crash, freeze atau reboot. Serangan ini dilakukan
dengan mengirimkan “specially crafted” paket berupa oversized ICMP
packet, yaitu paket yang ukurannya di atas normal. Ketika server
menerima dan memproses paket yang “aneh” ini, maka server akan crash,
freeze atau reboot. Ini adalah contoh serangan DoS “one shot one kill”
karena bisa merusak server hanya dengan satu tembakan saja.
* MySQL IF Query DoS ( SA25188 )
Bug ini akan membuat mysql server menjadi crash hanya dengan
mengirim sql khusus yang mengandung fungsi IF() contohnya: “SELECT id
from example WHERE id IN(1, (SELECT IF(1=0,1,2/0)))”. Ini juga jenis
serangan “one shot one kill”.
* Cisco Global Site Selector DNS Request Denial of Service (SA33429)
Bug ini membuat DNS server Cisco mati dengan mengirimkan beberapa
“specially crafted” paket request DNS dalam urutan tertentu.
Tiga
contoh di atas kiranya cukup memberikan gambaran tentang bagaimana
serangan DoS jenis ini dilakukan. Pada intinya adalah attacker
memanfaatkan (baca:mengexploit) bug yang membuat server berhenti bekerja
dan biasanya dilakukan sendirian secara remote dengan mengirimkan
specially crafted packet.
DoS dengan Menyibukkan Server: Make Them As Busy As Possible!
Pada
waktu menjelang lebaran kita sering merasa begitu sulit mengirim sms,
bahkan sering terjadi gagal kirim. Begitu juga ketika berlangsung acara
kuis di TV, mengelpon ke nomor untuk menjawab kuis terasa begitu sulit.
Hal ini terjadi karena ada begitu banyak orang yang mengirim sms pada
saat lebaran dan menelpon pada waktu kuis sehingga membuat jaringan
telekomunikasi menjadi begitu sibuk sampai tidak bisa melayani pengguna
lain. Peristiwa itu mirip dengan yang terjadi ketika sebuah server
mendapat serangan denial of service. DoS yang terjadi pada peristiwa
tersebut bukan jenis DoS yang mematikan server, namun jenis DoS yang
menyibukkan server.
Jenis DoS ini bersifat sementara, server akan
kembali normal bila attacker berhenti mengirimkan request yang membuat
sibuk server.
DoS jenis ini terbagi lagi menjadi 2 jenis berdasarkan cara melakukan serangan:
* Exploiting vulnerability: Menyerang dengan malicious request/packet
* No vulnerability exploitation: Menyerang dengan normal request/packet
Membuat server sibuk dengan mengexploitasi vulnerability lebih cepat daripada tanpa mengeksploit vulnerability.
Make Server Busy by Exploiting Vulnerability
Dalam
serangan DoS jenis ini, attacker memanfatkan bug yang membuat server
berlebihan dalam menggunakan resource (cpu,memory,disk space dsb).
Attacker akan mencari cara bagaimana agar membuat server bekerja ekstra
keras (jauh lebih keras dari request normal) untuk melayani request dia.
Biasanya serangan DoS jenis ini tidak berupa serangan “one shot one
kill”. Serangan dilakukan dengan melakukan banyak request dengan setiap
request membuat server mengonsumsi lebih banyak resource dari request
yang normal.
Dalam hitungan matematika sederhana, bila attacker
bisa membuat server bekerja selama 10 detik hanya untuk melayani dia
(misal normalnya 0,1 detik), maka attacker bisa mengirimkan request
1.000x untuk membuat server melayani dia selama 10.000 detik (2,7 jam
lebih) sehingga membuat pengguna lain tidak bisa menikmati layanan
server.
Untuk lebih memahami DoS jenis ini, mari kita lihat
contoh-contoh vulnerability yang bisa diexploit untuk melancarkan
serangan DoS jenis ini:
* TCP SYN Flood DoS
Ini
adalah serangan DoS yang sudah sangat tua. Attacker menyerang dengan
cara membanjiri server dengan malicious request berupa paket SYN dengan
fake source IP address. SYN packet adalah paket dari client yang
mengawali terbentuknya koneksi TCP/IP, setelah itu server akan membalas
dengan SYN-ACK, dan dilengkapi dengan paket SYN-ACK-ACK dari client,
tiga proses ini disebut three way handshake.
Triknya adalah
pada fake source ip address pada paket SYN dari client. Akibatnya
server akan mengirim SYN-ACK (step 2) ke ip address yang salah sehingga
server juga tidak akan mendapatkan balasan SYN-ACK-ACK dari client.
Padahal untuk setiap client yang mencoba membuka koneksi, server akan
mengalokasikan resource seperti memori dan waktu untuk menunggu
datangnya balasan ACK dari client. Dengan cara ini attacker menghabiskan
resource server hanya untuk melayani request palsu dari attacker.
* Apache mod_deflate DoS
Apache menggunakan mod_deflate untuk memampatkan file. Bila
visitor meminta sebuah file, maka apache akan menggunakan mod_deflate
untuk memampatkannya kemudian mengirimkan ke visitor tersebut. Namun
bila di tengah proses pemampatan, visitor memutuskan koneksi TCP, Apache
masih terus bekerja memampatkan file untuk visitor yang sebenarnya
sudah tidak ada (sudah disconnect). Jadi bugnya adalah pada borosnya
pemakaian resource cpu untuk memampatkan file untuk client yang sudah
tidak ada.
Attacker memanfaatkan kelemahan ini dengan
meminta sebuah file yang berukuran besar, kemudian dalam waktu singkat
memutuskan koneksi sehingga membuat server bekerja keras mempatkan file
untuk visitor yang sudah tidak ada. Request ini diulang berkali-kali
sampai server begitu sibuknya dan semua resource cpu habis.
Dua
contoh vulnerability di atas cukup menjelaskan bagaimana serangan DoS
jenis ini dilakukan. Pada intinya adalah dengan mengirim banyak
malicious request/paket yang membuat server mengonsumsi resource lebih
banyak dan lebih lama untuk setiap requestnya.
Make Server Busy Without Exploiting Vulnerability
Ini
adalah jenis serangan yang mengandalkan pada kemampuan mengirimkan
normal request sebanyak-banyaknya sehingga server menjadi sibuk.
Perbedaan DoS jenis ini dengan DoS yang mengexploit vulnerability adalah
pada requestnya. Request yang dikirimkan pada DoS jenis ini adalah
request yang normal seperti yang dilakukan pengguna biasa, sehingga
server tidak mengonsumsi resource berlebihan. Sedangkan DoS yang
mengandalkan vulnerability mengirimkan specially crafted malicious
request untuk membuat server mengonsumsi resource lebih banyak untuk
melayani malicious request tersebut.
Normal request hanya membuat
server mengonsumsi resource dalam jumlah biasa-biasa saja, tidak akan
mengganggu kerja server secara keseluruhan. Diperlukan normal request
dalam jumlah yang sangat banyak untuk membuat server terganggu kerjanya.
Jadi agar serangan ini menjadi efektif, maka serangan harus dilakukan
beramai-ramai dari banyak tempat, semakin banyak penyerang semakin bagus
hasilnya. Serangan ini juga disebut dengan distributed DoS (DDoS)
karena dilakukan dari banyak lokasi yang terdistribusi (tersebar).
Serangan
DDoS dilakukan dengan menggunakan komputer zombie atau robot. Zombie
adalah komputer yang sudah dikuasai attacker sehingga bisa dikendalikan
dari jarak jauh. Sekumpulan komputer zombie membentuk jaringan yang
disebut bot-net. Attacker mendapatkan banyak zombie dengan menyebarkan
virus atau worm, setiap komputer yang terinfeksi akan diinstall program
yang membuat komputer bersedia menjalankan perintah dari attacker.
Serangan
jenis ini tidak ada obatnya karena attacker tidak meng-exploit bug atau
vulnerability apapun. Bila pada jenis DoS yang lain, serangan dapat
dicegah dengan melakukan patching atau update software, maka serangan
ini tidak bisa dihentikan dengan update atau patch.
Kesimpulan
Denial
of service adalah serangan yang membuat server tidak bisa melayani
pengguna yang sesungguhnya. Berikut adalah jenis-jenis serangan DoS
berdasarkan cara melakukan serangan:
* Mematikan Server: one shot, one kill untuk membuat server menjadi crash, hang, reboot.
* Menyibukkan Server: mengirim banyak sekali request untuk membuat server sibuk.
o Exploiting bug: mengirim banyak specially crafted request.
Jumlah request tidak sebanyak jenis DoS yang menyibukkan server dengan
normal request.
o Normal request: mengirim banyak request
normal seperti pengguna biasa. Diperlukan jumlah request yang lebih
banyak dibandingkan jenis DoS yang menyibukkan server dengan exploit
bug. Biasanya menggunakan botnet secara terdistribusi.