Amankan Web Server dengan ModSecurity & Mod Evasive

Sekarang ini kita sering mendengar berita tentang peretasan situs pemerintahan Indonesia oleh orang yang mengatasnamakan dirinya adalah ‘hacker‘. Tak lupa juga pesan yang selalu mereka tinggalkan untuk sang web administrator ataupun kritikan keburukan sistem yang ada. Banyak metode yang bisa dilakukan untuk menyerang suatu website dari mulai PHP Script, Web Server, Web Hosting dan masih banyak cara lainnya.

Mungkin diantara kita sudah tak asing lagi dengan istilah SQL Injection, XSS, Local File Inclusion (LFI), Remote File Inclusion(RFI) dan lain-lain yang digunakan oleh attacker untuk mendapatkan akses  terhadap website ataupun sistem itu sendiri dari celah yang ia temukan. Aplikasi yang bagus harus memperhatikan 3 hal, yaitu : Jaringan(Network), Aplikasi dan Manusia. Ketiga hal tersebut berkesinambungan dalam menjadikan aplikasi yang bagus–dalam artian keamanan–, karena seorang attacker akan melakukan serangan melalui 3 hal tersebut. Bisa jadi aplikasi yang dibuat sudah bagus dan jaringan pun bagus tapi ada celah pada manusia itu sendiri untuk dieksploitasi dengan Social Engineering. Seperti kata pepatah seorang Social Engineer

If you cannot hack the machine, then hack the human

Dalam artikel ini akan membahas untuk melakukan pengamanan dari segi web server. Kita akan menggunakan ModSecurity sebagai Web Application Firewall(WAF) –atau bisa juga menjadi Intrusion Detection System(IDS)– yang berguna untuk melakukan proses filtering terhadap data yang masuk melalui protokol HTTP dan juga mampu melakukan tindakan tertentu sesuai dengan aturan(rules) yang sudah dibuat untuk menangani setiap proses data filtering. Sedangkan, Mod Evasive akan kita gunakan untuk DDoS Protection.

 

Apa yang bisa dilakukan ModSecurity?

  • Real-time application security monitoring and access control
  • Full HTTP traffic logging
  • Web application hardening
  • etc

Menggunakan ModSecurity membutuhkan rules tambahan agar lebih maksimal dalam mendeteksi serangan. Yang disebut sebagai Core Rule Set(CRS) dan kita masih bisa membuat rules sendiri.

Serangan apa yang bisa dideteksi oleh CRS?

  • HTTP Protection – detecting violations of the HTTP protocol and a locally defined usage policy.
  • Real-time Blacklist Lookups – utilizes 3rd Party IP reputation.
  • HTTP Denial of Service Protection – defense against HTTP flooding and slow HTTP DoS attacks.
  • Common Web Attacks Protection – detecting common web application security attacks.
  • Automation Detection – Detecting bots, crawlers, scanners and other surface malicious activity.
  • Integration with AV Scanning for File Uploads – detects malicious files uploaded through the web application.
  • Tracking Sensitive Data – Tracks credit card usage and blocks leakages.
  • Trojan Protection – Detects trojan horses.
  • Identification of Application Defects – alerts on application mis-configurations.
  • Error Detection and Hiding – Disguising error messages sent by the server.

Sebelum memulai instalasi ModSecurity dan OWASP Core Rule Set, ada baiknya untuk melakukan pembaruan sistem. Saya disini menggunakan CentOS 7 dengan Apache 2 dan untuk distro lain bisa disesuaikan.

Beberapa dependencies diperlukan sebelum melakukan instalasi ModSecurity. Semua tergantung dari konfigurasi server dan paket yang mungkin sudah terinstal. Yum akan melakukan instalasi untuk paket yang belum terpasang dan akan menginformasikan bila sudah terpasang pada sistem

Unduh source code dari website ModSecurity. Versi stabil saat ini adalah 2.9.1

Extract arsip ModSecurity

Konfigurasi dan lakukan proses kompilasi terhadap source code

Salin konfigurasi bawaan ModSecurity dan file unicode mapping ke direktori Apache

Konfigurasi Apache agar menggunakan modul ModSecurity

Oke, sekarang restart Apache

Sebelum memasuki langkah selanjutnya, pastikan tidak menampilakan kesalahan saat restart service Apache. Bila tidak terjadi kesalahan, maka langkah selanjutnya unduh OWASP Core Rule Set

Konfigurasi OWASP Core Rule Set

Selanjutnya, tambahkan ruleset ke konfigurasi Apache dengan menambahkan ruleset di /etc/httpd/conf/httpd.conf agar ModSecurity terkonfigurasi sesuai acuan pada CRS.

Restart kembali Apache

Secara bawaan, ModSecurity berjalan dengan mode detection-only. Yang artinya akan melakukan log terhadap semua event tapi tidak akan ada tindakan. Setelah melakukan peninjauan terhadap log, maka selanjutnya kita memilih untuk membuat sebuah ruleset, memodifikasi ruleset yang sedang berjalan atau bahkan menonaktifkan ruleset dikarenakan oleh laporan yang tidak sesuai. Untuk melihat log bisa dengan menggunakan

Ini adalah contoh laporan dari ModSecurity ketika mendapatkan masalah serangan dengan menggunakan sqlmap pada FreePBX

Untuk merubah ModSecurity dari mode detection-only menjadi protection, cukup buka file /etc/httpd/conf.d/modsecurity.conf dan rubah

menjadi

Bila ingin melakukan perubahan terhadap ruleset yang ada atau menonaktifkan ruleset, bisa modifikasi file /etc/httpd/owasp-modsecurity-crs/modsecurity_crs_10_config.conf . Informasi lebih lanjut bisa melihat pada bagian referensi untuk melakukan konfigurasi ruleset.

Perlu dicatat, bagi yang menggunakan CodeIgniter sebagai web framework nya, sangat tidak disarankan untuk menampilkan ci_session di HTTP Header. Karena itu akan membuat ModSecurity memberikan laporan yang salah dengan isi dari ci_session yang mengandung karakter khusus yang sudah dikategorikan sebagai sebuah serangan. Karena apa yang ada pada CRS itu adalah data pattern yang bisa identik dengan serangan pada umumnya, diperlukan konfigurasi ulang bila memang menjumpai kasus yang berbeda.

Setelah proses instalasi dan konfigurasi ModSecurity, sekarang kita lanjutkan proses tahap instalasi Mod Evasive untuk DDoS/DoS Protection.

Mod Evasive

Mod_evasive adalah sebuah evasive modul yang disediakan oleh Apache untuk menangani sebuah serangan seperti HTTP DoS, DDoS dan brute force pada Apache Server.  Modul ini bekerja dengan membuat internal dynamic hash table untuk IP Adress dan URI, dan melakukan penolakan request bila sesuai dengan kriteria berikut:

  • Melakukan request pada halaman yang sama berkali-kali dalam jangka waktu yang singkat
  • Membuat lebih dari 50 request bersamaan pada proses yang sama per detik
  • Membuat request ketika status masih dalam blacklist

Sebelum melakukan instalasi, kita diharuskan sudah memasang EPEL Repo pada sistem bila menggunakan CentOS.

Untuk CentOS 7:

Untuk CentOS 6:

Oke, sekarang kita lakukan instalasi untuk modul mod_evasive

Lakukan pengecekan terlebih dahulu untuk mengetahui bahwa mod_evasive sudah ter-load oleh Apache

Bila sudah terpasang, maka akan tampil seperti ini

Konfigurasi mod_evasive

Sekarang saat nya melakukan proses konfigurasi untuk mod_evasive agar berjalan sesuai dengan kondisi yang kita inginkan. Semua konfigurasi berada di /etc/httpd/conf.d/mod_evasive.conf . Maka, kita buka file tersebut

Saya akan jelaskan masing-masing kegunaan parameter yang terdapat pada file konfigurasi

DOSPageCount untuk menentukan jumlah batasan per request pada halaman yang sama dalam jangka waktu 1 detik oleh IP Address. Ketika request menyentuh batas dari yang ditentukan, maka IP akan dimasukkan kedalam blocked list karena dianggap tidak wajar. Kita bisa mengatur sesuai dengan kebutuhan masing-masing, misal menjadi 20 atau 30.

DOSSiteCount hampir sama dengan DOSPageCount, hanya saja ini berhubungan dengan berapa banyak request keseluruhan yang bisa dilakukan sesuai dengan interval DOSSiteInterval.

DOSBlockingPeriod untuk menentukan durasi setiap IP yang terblokir dalam satuan detik.

Uncomment #DOSEmailNotify untuk mengaftikan pemberitahuan melalui email setiap ada serangan.

Uncomment #DOSSystemCommand untuk menggabungkan mod_evasive dengan perintah lain. Seperti menggabungkan mod_evasive dengan fail2ban.

Uncomment #DOSLogDir untuk mengaktifkan logging pada setiap aktivitas yang terjadi di Apache. Contoh, kita akan menggunakan /var/log/mod_evasive sebagai direktori tempat penyimpanan. Maka lakukan hal berikut:

Lalu, berikan hak akses kepada user apache

Maka, set DOSLogDir ke direktori yang sudah kita buat sebelumnya

Bila sudah, sekarang kita harus restart service Apache agar modul mod_evasive terpasang.

Testing mod_evasive

Setelah kita melalui tahap instalasi dan juga konfigurasi, sekarang saat nya kita melakukan uji coba terhadap sistem yang sudah diterapkan. Kita akan melakukan uji coba dengan hal yang sangat sederhana. Yaitu menggunakan test script yang diberikan oleh mod_evasive untuk melakukan uji coba terhadap konfigurasi. Kita diharuskan untuk memasang Perl terlebih dahulu

Test script sudah terpasang di /usr/share/doc/mod_evasive-1.10.1/test.pl . Seperti berikut:

Rubah nilai 100 menjadi nilai yang lebih besar untuk melakukan uji coba request. Misal kita ingin merubah menjadi 500. Simpan dan kemudian jalankan script tersebut

Kita akan mendapatkan tampilan yang menandakan bahwa request tersebut sudah ditolak seperti berikut:

Untuk melihat log aktivitas nya cukup menggunakan perintah berikut

Maka, akan tampil seperti berikut

Kesimpulan

ModSecurity dan mod_evasive cukup bagus untuk langkah pencegahan dari serangan yang banyak terjadi. Dengan adanya fitur Web Application Firewall, Intrusion Detection System, dan DoS/DDoS Protection sangat membantu dalam mengamankan Web Server ataupun Web Application. Tapi, tidak menutup kemungkinan adanya serangan lain yang bisa saja masuk dengan berbagai cara. Yang perlu diingat bahwa “No System is safe” .

Akhir kata, semoga artikel ini bermanfaat.

 

Referensi

  • https://github.com/SpiderLabs/ModSecurity/wiki/ModSecurity-Frequently-Asked-Questions-(FAQ)
  • https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual#OWASP_ModSecurity_Core_Rule_Set_CRS_Project
  • http://www.owasp.org
  • http://resources.infosecinstitute.com/avoiding-mod-security-false-positives-white-listing/
  • http://ezine.echo.or.id/ezine19/e19.010.txt
  • Social Engineering: The Art of Human Hacking
  • https://www.vultr.com/docs/modsecurity-and-owasp-on-centos-6-and-apache2
  • http://www.zdziarski.com/blog/?page_id=442
  • https://www.digitalocean.com/community/tutorials/how-to-protect-against-dos-and-ddos-with-mod_evasive-for-apache-on-centos-7
Aan Wahyu

Aan Wahyu

Hanya seorang penyuka Wayang( Terutama Wayang Golek) dan penggiat Open Source serta penikmat dan pembuat puisi. Saat ini memakai distro Arch Linux sebagai OS yang digunakan untuk kebutuhan sehari-hari. Founder dari Sinau Development. Tertarik dengan Research Development dan Non-Profit Organization yang bersifat Open Source dan juga sebagai kontributor di RumahVOIP serta Indonesian Research and Development Center( RNDC ) dan aktif juga diforum Open Source lainnya.
Aan Wahyu
  • Ali

    Mantap om, artikel yang seperti ini yang saya tunggu. Sebagai pengguna Nginx, apakah ada padanan keamaan seperti dalam tulisan ini? Thanks.