Cara Mencegah Serangan DDoS

Korban jatuh dari serangan DDoS (Distributed Denial of Service) dapat menjadi bencana besar: Biaya rata-rata untuk organisasi atas serangan DDoS yang berhasil adalah sekitar $ 100.000 untuk setiap jam serangan itu berlangsung, menurut perusahaan keamanan Cloudflare. Itulah kenapa Mencegah Serangan DDoS sangat penting untuk diterapkan.

Ada juga biaya jangka panjang: kehilangan reputasi, degradasi merek, dan pelanggan yang hilang, semuanya mengarah pada bisnis yang hilang. Itu sebabnya perlu menginvestasikan sumber daya yang signifikan untuk mencegah serangan DDoS, atau setidaknya meminimalkan risiko menjadi korban, daripada berkonsentrasi pada bagaimana menghentikan serangan DDoS begitu telah dimulai.

Mengerti Apa itu Serangan DDoS

Serangan volumetrik dasar dari Denial of Service (DoS) sering melibatkan cara membombardir alamat IP dengan volume lalu lintas (traffic) yang besar. Jika alamat IP mengarah ke server Web, traffic yang sah atau bersih tidak akan dapat menghubunginya dan Website menjadi tidak dapat diakses. Jenis lain dari serangan DoS adalah serangan flood, di mana sekelompok server dibanjiri permintaan yang perlu diproses oleh mesin korban. Ini sering dihasilkan dalam jumlah besar oleh skrip yang berjalan pada mesin yang terkompromikan yang merupakan bagian dari botnet, dan mengakibatkan melelahkan sumber daya server korban seperti CPU atau memori.

Serangan DDoS beroperasi pada prinsip yang sama, kecuali traffic jahat yang dihasilkan dari berbagai sumber, meskipun diatur dari satu titik pusat. Fakta bahwa sumber traffic DDoS didistribusikan, membuat pencegahan serangan DDoS jauh lebih sulit daripada mencegah serangan DoS yang berasal dari satu alamat IP.

Alasan lain yang mencegah serangan DDoS adalah sebuah tantangan adalah bahwa banyak dari serangan hari ini adalah serangan “amplifikasi”. Ini melibatkan pengiriman paket data kecil ke server yang terkompromi dan dikonfigurasi dengan buruk di seluruh dunia, yang kemudian merespons dengan mengirimkan paket yang jauh lebih besar ke server yang sedang diserang. Contoh yang terkenal dari ini adalah serangan amplifikasi DNS, di mana permintaan DNS 60 byte dapat mengakibatkan respons 4.000 byte terkirim ke korban – sebuah faktor amplifikasi sekitar 70 kali ukuran paket asli.

Baru-baru ini, hacker telah mengeksploitasi fitur server yang disebut memcache untuk meluncurkan serangan amplifikasi memcached, di mana permintaan 15 byte dapat menghasilkan respons 750 kb, faktor amplifikasi lebih dari 50.000 kali ukuran paket asli. Serangan DDoS terbesar di dunia, diluncurkan terhadap Github pada awal tahun 2018, adalah serangan amplifikasi memcached yang memuncak pada 1,35 Tbps data yang mengenai server Github.

Manfaat bagi pelaku jahat dari serangan amplifikasi adalah bahwa mereka hanya membutuhkan bandwidth dalam jumlah terbatas yang mereka miliki untuk melancarkan serangan yang jauh lebih besar pada korban mereka daripada yang bisa mereka lakukan dengan menyerang korban secara langsung.

Secara umum, serangan DoS dan DDoS dapat dibagi menjadi tiga jenis:

Serangan Berbasis Volume

Termasuk dengan cara membanjiri UDP, ICMP, dan membanjiri paket palsu lainnya. Tujuan serangan adalah untuk menjenuhkan bandwidth Website yang diserang, dan besarnya diukur dalam bit per detik (Bps).

Serangan Protokol

Termasuk SYN-Flood, serangan paket terfragmentasi, Ping of Death, Smurf DDoS dan banyak lagi. Jenis serangan ini menghabiskan sumber daya server aktual, atau orang-orang dari peralatan komunikasi menengah, seperti firewall dan load balancer, dan diukur dalam paket per detik (Pps).

Serangan Lapisan Aplikasi

Termasuk serangan rendah dan lambat, membanjiri GET / POST, serangan yang menargetkan kerentanan Apache, Windows atau OpenBSD dan banyak lagi. Terdiri dari permintaan yang tampaknya sah dan tidak bersalah, tujuan serangan ini adalah untuk menghancurkan Web Server, dan besarnya diukur dalam Permintaan per detik (Rps).

Jenis serangan DDoS umum

Beberapa jenis serangan DDoS yang paling umum digunakan adalah:

UDP-Flood

UDP-Flood, menurut definisi, adalah setiap serangan DDoS yang membanjiri target dengan paket User Datagram Protocol (UDP). Tujuan serangan adalah membanjiri port acak pada host jarak jauh. Ini menyebabkan Server berulang kali memeriksa aplikasi yang mendengarkan di port itu, dan ketika tidak ada aplikasi ditemukan, maka host membalas dengan paket ICMP ‘Destination Unreachable’. Proses ini menguras sumber daya host, yang pada akhirnya dapat menyebabkan tidak dapat diaksesnya Server tersebut

ICMP (Ping) Flood

Pada prinsipnya, ini mirip dengan UDP-Flood, ICMP-Flood membanjiri sumber daya target dengan paket ICMP Echo Request (ping), umumnya mengirimkan paket secepat mungkin tanpa menunggu balasan. Jenis serangan ini dapat menghabiskan bandwidth keluar dan masuk, karena server korban akan sering berusaha merespons dengan paket ICMP Echo Reply, yang mengakibatkan perlambatan keseluruhan sistem yang signifikan.

SYN Flood

Serangan DDoS SYN-Flood mengeksploitasi kelemahan yang diketahui dalam urutan koneksi TCP (“three-way handshake”), di mana permintaan SYN untuk memulai koneksi TCP dengan host harus dijawab oleh respons SYN-ACK dari host itu, dan kemudian dikonfirmasi oleh respons ACK dari pemohon. Dalam skenario SYN-Flood, pemohon mengirim beberapa permintaan SYN, tetapi tidak menanggapi respon dari SYN-ACK, atau mengirim permintaan SYN dari alamat IP palsu. Bagaimanapun juga, sistem host terus menunggu pengakuan untuk setiap permintaan yang ada, mengikat sumber daya sampai tidak ada koneksi baru dapat dibuat, dan pada akhirnya menghasilkan penolakan layanan.

Ping of Death

Serangan ping of death (“POD”) melibatkan penyerang yang mengirimkan beberapa ping yang cacat atau jahat ke komputer. Panjang IP paket maksimum (termasuk header) adalah 65.535 byte. Namun, Data Link Layer biasanya memberikan batasan pada ukuran frame maksimum – misalnya 1500 byte melalui jaringan Ethernet. Dalam hal ini, paket IP besar dibagi menjadi beberapa paket IP (dikenal sebagai fragmen), dan host penerima menyusun kembali fragmen IP ke dalam paket lengkap. Dalam skenario Ping of Death, setelah manipulasi konten fragmen berbahaya, penerima berakhir dengan paket IP yang lebih besar dari 65.535 byte saat dipasang kembali. Ini dapat meluap buffer memori yang dialokasikan untuk paket, menyebabkan penolakan layanan untuk paket yang sah.

Slowloris

Slowloris adalah serangan yang sangat tertarget, memungkinkan satu server web untuk menjatuhkan server lain, tanpa mempengaruhi layanan atau port lain pada jaringan target. Slowloris melakukan ini dengan memegang sebanyak mungkin koneksi ke server web target yang terbuka selama mungkin. Ini menyelesaikan dengan membuat koneksi ke server target, tetapi hanya mengirimkan sebagian permintaan. Slowloris secara konstan mengirim lebih banyak header HTTP, tetapi tidak pernah menyelesaikan permintaan. Server yang ditargetkan menjaga setiap koneksi palsu ini terbuka. Ini pada akhirnya melebihi kumpulan koneksi konkurensi maksimum, dan mengarah pada penolakan koneksi tambahan dari klien yang sah.

Amplifikasi NTP

Dalam serangan amplifikasi NTP, pelaku mengeksploitasi server Network Time Protocol (NTP) yang dapat diakses publik untuk membanjiri server yang ditargetkan dengan lalu lintas UDP. Serangan didefinisikan sebagai serangan amplifikasi karena rasio kueri-ke-respons dalam skenario seperti itu berkisar antara 1:20 dan 1: 200 atau lebih. Ini berarti bahwa setiap penyerang yang memperoleh daftar server NTP terbuka (mis., Dengan menggunakan alat seperti Metasploit atau data dari Proyek NTP Terbuka) dapat dengan mudah menghasilkan serangan DDoS volume tinggi, bandwidth tinggi yang menghancurkan.

HTTP Flood

Dalam serangan DDoS HTTP-Flood, penyerang mengeksploitasi permintaan HTTP GET atau POST yang tampaknya sah untuk menyerang Web Server atau Aplikasi. HTTP Flood tidak menggunakan paket cacat, teknik spoofing atau refleksi, dan membutuhkan bandwidth lebih sedikit daripada serangan lain untuk menjatuhkan situs atau server yang ditargetkan. Serangan itu paling efektif ketika memaksa server atau aplikasi untuk mengalokasikan sumber daya maksimum yang mungkin dalam menanggapi setiap permintaan tunggal.

Cara untuk Mencegah Serangan DDoS

1. Bangun redundansi ke dalam infrastruktur Anda

Untuk membuatnya sesulit mungkin bagi penyerang untuk berhasil meluncurkan serangan DDoS terhadap server Anda, pastikan Anda membangun redundansi di beberapa Datacenter dengan sistem load balancing yang baik untuk mendistribusikan traffic di antara mereka. Jika memungkinkan, pusat data ini harus di wilayah yang berbeda, atau setidaknya di berbagai provinsi di negara yang sama.

Agar strategi ini benar-benar efektif, penting untuk Anda memastikan bahwa Data Center terhubung ke jaringan yang berbeda dan bahwa tidak ada hambatan jaringan yang jelas atau titik kegagalan tunggal pada jaringan ini.

Mendistribusikan Server Anda secara geografis dan topografi akan menyulitkan penyerang untuk berhasil menyerang lebih dari sebagian server Anda, membuat server lain tidak terpengaruh dan mampu melakukan setidaknya beberapa lalu lintas tambahan yang biasanya ditangani oleh server yang terpengaruh.

2. Konfigurasikan perangkat keras jaringan Anda terhadap serangan DDoS

Ada sejumlah perubahan konfigurasi perangkat keras sederhana yang dapat Anda lakukan untuk membantu mencegah serangan DDoS.

Misalnya, mengonfigurasi firewall atau router Anda untuk mematikan paket ICMP yang masuk atau memblokir respons DNS dari luar jaringan Anda (dengan memblokir port UDP 53) dapat membantu mencegah serangan volumetrik berbasis DNS dan ping tertentu.

3. Menggunakan perangkat keras dan perangkat lunak anti-DDoS

Server Anda harus dilindungi oleh firewall jaringan dan firewall aplikasi web yang lebih khusus, dan Anda mungkin harus menggunakan load balancers juga. Banyak vendor perangkat keras sekarang menyertakan perlindungan perangkat lunak terhadap serangan protokol DDoS seperti serangan SYN Flood, misalnya, dengan memantau berapa banyak koneksi tidak lengkap yang ada dan membilasnya ketika jumlahnya mencapai nilai ambang batas yang dapat dikonfigurasi.

Modul perangkat lunak tertentu juga dapat ditambahkan ke beberapa perangkat lunak server web untuk menyediakan beberapa fungsi pencegahan DDoS. Sebagai contoh, Apache 2.2.15 dikirimkan dengan modul yang disebut mod_reqtimeout untuk melindungi dirinya dari serangan lapisan aplikasi seperti serangan Slowloris, yang membuka koneksi ke server web dan kemudian menahannya terbuka selama mungkin dengan mengirimkan permintaan sebagian hingga server tidak dapat menerima lagi koneksi baru.

4. Menggunakan alat perlindungan DDoS

Banyak vendor keamanan termasuk NetScout Arbor, Fortinet, Check Point, Cisco dan Radware menawarkan peralatan yang berada di depan firewall jaringan dan dirancang untuk memblokir serangan DDoS sebelum serangan tersebut masuk dalam jaringan kita.

Mereka melakukan ini menggunakan sejumlah teknik, termasuk melakukan baseline perilaku lalu lintas dan kemudian memblokir lalu lintas abnormal, dan memblokir lalu lintas berdasarkan tanda serangan yang dikenal.

Kelemahan utama dari jenis perlindungan serangan DDoS ini adalah bahwa peralatan itu sendiri terbatas dalam jumlah traffic throughput yang dapat mereka tangani. Sementara peralatan canggih mungkin dapat memeriksa traffic yang masuk dengan kecepatan hingga 80 Gbps, serangan DDoS saat ini dapat dengan mudah menjadi urutan besarnya lebih besar dari ini.

5. Lindungi DNS Server Anda

Jangan lupa bahwa aktor jahat mungkin dapat membuat Web Server Anda offline dengan melakukan DDoS kepada server DNS Anda. Untuk alasan itu, penting bahwa server DNS Anda memiliki redundansi, dan menempatkannya di Data Center yang berbeda di belakang load balancers juga merupakan ide bagus. Solusi yang lebih baik mungkin adalah pindah ke penyedia DNS berbasis cloud yang dapat menawarkan bandwidth tinggi dan beberapa titik kehadiran di Data Center di seluruh dunia. Layanan ini dirancang khusus dengan mempertimbangkan pencegahan DDoS.

Mengamankan Server atau VPS Linux

Server atau VPS yang kita gunakan untuk menghosting website kita terkoneksi dengan Internet, siapa saja dapat mengaksesnya. Untuk melindungi dari akses tangan-tangan jahil, kita perlu mengamankan server atau VPS tersebut. Kita akan memasang firewallSSH key pair authentication dan sistem blokir otomatis yang disebut dengan fail2ban. Diharapkan dengan langkah-langkah tersebut dibawah ini, server atau VPS kita bisa mampu terlindungi dari serangan pihak yang tidak bertanggungjawab.

Login Non Root

root adalah user yang sangat powerful di mesin Linux. Tapi masalah muncul apabila login sebagai root ialah kita dapat mengeksekusi semua perintah, baik perintah yang standar maupun perintah yang bisa menghancurkan server kita! Oleh sebab itu, ada baiknya kita tidak login ke server atau VPS menggunakan root, yakni dengan membuat user lain dan menggunakannya disaat kita bekerja pada server atau VPS. Walaupun login dengan user non-root, kita masih bisa mengeksekusi perintah root dengan menggunakan sudo.

Berikut cara membuat user baru non root:

  1. Login seperti biasa menggunakan root ke server atau VPS.
  2. Install program sudo dulu jika belum ada dengan perintah berikut:
    apt-get install sudo
  3. Buat user baru dengan perintah seperti berikut. Ganti user_baru dengan nama user yang kita inginkan:
    adduser user_baru
  4. Tambahkan user_baru ke grup administrator sistem (admin) dengan menggunakan perintah berikut. Ganti user_baru dengan user yang tadi kita buat:
    usermod -a -G sudo user_baru
  5. Kemudian kita keluar dari root agar bisa masuk dengan user yang baru kita buat, dengan perintah:
    logout
  6. Sekarang kita coba login lagi ke server atau VPS kita dengan user baru.

 

Sekarang anda bisa mengelola server dengan menggunakan nama user yang barusan anda buat, tanpa harus sebagai root. Jika anda ingin mengeksekusi perintah superuser (sebagai root), anda bisa menambahkan sudo didepan perintah tsb. Sebagai contoh jika anda ingin mengupdate server, gunakan perintah sudo apt-get update. Hampir semua perintah superuser bisa dieksekusi dengan menggunakan sudo, dan semua perintah yang dieksekusi dengan sudo akan di catat /var/log/auth.log.

Non Aktifkan Root Login & Ubah Port SSH

Karena kita sudah membuat user baru untuk login SSH dengan kemampuan sudo, ada baiknya kita non aktifkan root login & mengganti default port SSH. Ini untuk meningkatkan keamanan dan meminimalisir serangan.

  1. Langkah pertama adalah dengan memperbarui file konfigurasi SSH dengan menggunakan perintah berikut:
    sudo nano /etc/ssh/sshd_config
  2. Ubah PermitRootLogin ke noseperti nampak berikut ini:
    PermitRootLogin no
  3. Ganti port SSH dari 22 ke port lain, semisal 3342. Cari konfigurasi port 22 dan ganti dengan port sesuai keinginan anda.
    Port 3342
  4. Simpan konfigurasi yang sudah kita ubah dengan menekan tombol keyboard Ctrl-X, dan kemudian Y.
  5. Restart SSH dengan menggunakan perintah berikut:
    sudo service ssh restart

    Setelah SSH di restart, konfigurasi baru akan dipakai oleh SSH.

Membuat Firewall

Selanjutnya kita akan membuat firewall untuk membatasi atau memblokir trafik inbound yang tidak diinginkan. Konfigurasi firewall berikut ini adalah contoh sederhana, yakni hanya membuka port 80 (http), 443 (https) dan 3342 (port SSH yang sebelumnya kita ganti dari port default 22). Anda bisa bebas mengubah konfigurasi sesuai dengan kebutuhan server.

  1. Periksa dulu konfigurasi firewall saat ini dengan menggunakan perintah:
    sudo iptables -L
  2. Lihat outputnya. Jika sebelumnya anda belum pernah mengedit firewall, maka akan melihat empty ruleset, seperti dibawah ini:
    Chain INPUT (policy ACCEPT)
    target     prot opt source               destination
    
    Chain FORWARD (policy ACCEPT)
    target     prot opt source               destination
    
    Chain OUTPUT (policy ACCEPT)
    target     prot opt source               destination
  3. Buat sebuah file untuk menyimpan konfigurasi firewall kita, dengan perintah:
    sudo nano /etc/iptables.firewall.rules
  4. Sekarang kita masukkan beberapa firewall rules ke file iptables.firewall.rules yang anda buat diatas.
    1. *filter
    2. #  Mengijinkan semua trafik loopback (lo0) dan drop semua trafik ke 127/8 yang tidak digunakan oleh lo0
    3. -A INPUT -i lo -j ACCEPT
    4. -A INPUT -d 127.0.0.0/8 -j REJECT
    5. #  Menerima semua koneksi inbound yang sudah terkoneksi
    6. -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT
    7. #  Ijinkan semua trafik outbound, anda bisa memodifikasi rule ini agar hanya mengijinkan trafik tertentu
    8. -A OUTPUT -j ACCEPT
    9. #  Ijinkan koneksi HTTP dan HTTPS dari mana saja (port standar untuk koneksi website dan SSL).
    10. -A INPUT -p tcp –dport 80 -j ACCEPT
    11. -A INPUT -p tcp –dport 443 -j ACCEPT
    12. #  Ijinkan koneksi SSH
    13. #
    14. #  Nomor pada -dport harus sama dengan konfigurasi file SSH yang kita lakukan sebelumnya.
    15. #
    16. -A INPUT -p tcp -m state –state NEW –dport 3342 -j ACCEPT
    17. #  Ijinkan ping
    18. -A INPUT -p icmp -j ACCEPT
    19. #  Catat koneksi yang ditolak
    20. -A INPUT -m limit –limit 5/min -j LOG –log-prefix “iptables denied: “ –log-level 7
    21. #  Tolak semua koneksi inbound lainnya
    22. -A INPUT -j REJECT
    23. -A FORWARD -j REJECT
    24. COMMIT
  5. Simpan konfigurasi diatas dengan menekan tombol Ctrl-X, dan kemudian Y.
  6. Aktifkan firewalldengan menjalankan perintah berikut:
    sudo iptables-restore < /etc/iptables.firewall.rules
  7. Cek ulang konfigurasi firewallkita dengan perintah:
    sudo iptables -L
  8. Periksa outputnya. Ruleset yang baru akan nampak seperti berikut:
    Chain INPUT (policy ACCEPT)
    target     prot opt source               destination
    ACCEPT     all  --  anywhere             anywhere
    REJECT     all  --  anywhere             127.0.0.0/8         reject-with icmp-port-unreachable
    ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
    ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:www
    ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:https
    ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ssh
    ACCEPT     icmp --  anywhere             anywhere            icmp echo-request
    LOG        all  --  anywhere             anywhere            limit: avg 5/min burst 5 LOG level debug prefix `iptables denied: '
    REJECT     all  --  anywhere             anywhere            reject-with icmp-port-unreachable
    
    Chain FORWARD (policy ACCEPT)
    target     prot opt source               destination
    REJECT     all  --  anywhere             anywhere            reject-with icmp-port-unreachable
    
    Chain OUTPUT (policy ACCEPT)
    target     prot opt source               destination
    ACCEPT     all  --  anywhere             anywhere
  9. Untuk memastikan konfigurasi firewall kita berjalan pada saat server di restart, kita harus membuat script baru dengan perintah:
    sudo nano /etc/network/if-pre-up.d/firewall
  10. Salin dan masukkan baris berikut:
    #!/bin/sh
    /sbin/iptables-restore < /etc/iptables.firewall.rules
  11. Tekan Ctrl-X dan kemudian Y untuk menyimpan script.
  12. Chmod script kita dengan perintah:
    sudo chmod +x /etc/network/if-pre-up.d/firewall

    Firewall sudah terinstal, dan akan melindungi server kita. Ingat, anda harus mengubah konfigurasi diatas jika menginstall software baru. Semisal jika anda menginstall layanan DNS, maka anda harus membuka port 53.

Instal Fail2Ban

Fail2Ban adalah aplikasi yang akan mendeteksi percobaan login secara berulang-ulang ke server kita, Fail2Ban akan membuat rule firewall sementara untuk memblokir alamat IP si penyerang server kita. Fail2Ban dapat memonitor bermacam protokol, seperti SSH, HTTP dan SMTP. Tetapi secara default, Fail2Ban hanya memonitor SSH saja.

Berikut adalah cara menginstal Fail2Ban:

  1. Instal Fail2Ban dengan menggunakan perintah:
    sudo apt-get install fail2ban
  2. Secara default Fail2Ban akan memproteksi SSH setelah diinstal, tidak perlu langkah lainnya. Tetapi jika anda mengubah konfigurasi default dari Fail2Ban, anda dapat membuat file jail.localbaru. Dengan perintah berikut:
    sudo nano /etc/fail2ban/jail.local
  3. Set variabel bantime untuk mengatur berapa lama blokir diterapkan (dalam detik).
  4. Set variabel maxretry untuk mengatur batasan berapa kali percobaan login yang bisa dilakukan sebelum alamat IP diblokir.
  5. Tekan tombol Ctrl-X dan kemudian Y untuk menyimpan konfigurasi.

Fail2Ban sekarang akan memonitor SSH server kita. Jika ada yang mencoba login ke server kita, hingga bebera kali percobaan gagal login, Fail2Ban akan memblokir alamt IP si penyerang dan akan mencatatnya di /var/log/fail2ban.log.

Instal (D)DoS Deflate

(D)DoS Deflate adalah bash shell script ringan yang didesain untuk membantu proses pemblokiran serangan DoS (Denial of Service).

Proses instalasinya sangat mudah, berikut langkahnya:

  1. Download script (D)DoS Deflate dengan perintah:
    wget https://www.inetbase.com/scripts/ddos/install.sh
  2. Kemudian chmod script instalasinya dengan perintah:
    chmod 0700 install.sh
  3. Jalankan script instalasinya
    ./install.sh
  4. Untuk keluar dari tampilan readme, ketikkan perintah
    :q

Selesai! Server anda sudah terproteksi dari serangan Denial of Service dengan menggunakan (D)Dos Deflate!