ModSecurity adalah Web Application Firewall (WAF) untuk web server Apache. Selain menyediakan kemampuan logging, ModSecurity dapat memonitor trafik HTTP secara real time dalam mendeteksi serangan. ModSecurity juga beroperasi sebagai Instrusion Detection System (IDS), memungkinkan Anda untuk bereaksi terhadap peristiwa mencurigakan yang terjadi pada sistem web Anda.
1. Pendahuluan
Panduan ini menggunakan OWASP ModSecurity Core Rule Set (CRS) versi 3.2. Tujuan proyek OWASP adalah untuk “memberikan seperangkat aturan deteksi serangan generik yang mudah dipasang yang memberikan perlindungan tingkat dasar untuk setiap aplikasi web,” dan CRS dimaksudkan untuk “melindungi aplikasi web dari berbagai serangan dengan minimum False Alerts”. Versi CRS ini membutuhkan ModSecurity 2.8.0 atau lebih tinggi. Konfigurasi dilakukan melalui kumpulan aturan untuk mencegah serangan umum seperti SQL Injection, remote code execution.
2. Instalasi ModSecurity
# yum install mod_security
Contoh output :
Loaded plugins: downloadonly, fastestmirror, priorities, protectbase
Loading mirror speeds from cached hostfile
* epel: www.gtlib.gatech.edu
* base: mirror.skiplink.com
* updates: centos.aol.com
* addons: mirror.cs.vt.edu
* extras: mirror.trouble-free.net
0 packages excluded due to repository protections
Setting up Install Process
Parsing package install arguments
Resolving Dependencies
--> Running transaction check
---> Package mod_security.x86_64 0:2.5.9-1.el5 set to be updated
--> Finished Dependency Resolution
Dependencies Resolved
================================================================
Package Arch Version Repository Size
================================================================
Installing:
mod_security x86_64 2.5.9-1.el5 epel 935 k
Transaction Summary
============================================================================================================================================
Install 1 Package(s)
Update 0 Package(s)
Remove 0 Package(s)
Total download size: 935 k
Is this ok [y/N]: y
Downloading Packages:
mod_security-2.5.9-1.el5.x86_64.rpm | 935 kB 00:00
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
Installing : mod_security [1/1]
Installed: mod_security.x86_64 0:2.5.9-1.el5
Complete!
Restart web server :
# /etc/init.d/httpd restart atau
# service httpd restart
Cek versi ModSecurity yang diinstal :
# yum info mod_security
Contoh output :
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: centos.biz.net.id
* epel: mirror.xeonbd.com
* extras: centos.biz.net.id
* updates: centos.biz.net.id
Installed Packages
Name : mod_security
Arch : x86_64
Version : 2.9.2
Release : 1.el7
Size : 980 k
Repo : installed
From repo : base
Summary : Security module for the Apache HTTP Server
URL : http://www.modsecurity.org/
License : ASL 2.0
Description : ModSecurity is an open source intrusion detection and prevention eng inefor web applications. It operates embedded into the web server, acting as a powerful umbrella - shielding web applications from attacks.
3. Konfigurasi File
Ada beberapa file konfigurasi terkait dengan ModSecurity, antara lain :
a) File Konfigurasi Utama
Merupakan file konfigurasi utama untuk modul apache mod_security.
# /etc/httpd/conf.d/mod_security.conf
b) Direktori Konfigurasi
Berisi semua file konfigurasi lain untuk Apache mod_security.
# /etc/httpd/modsecurity.d/
c) Konfigurasi Core Rule Set (CRS)
Konfigurasi yang terdapat dalam file ini harus disesuaikan untuk persyaratan khusus sebelum penerapan.
# /etc/httpd/modsecurity.d/crs-setup.conf
d) Debugging ModSecurity Rules
Untuk mendebug rules mod_security dan masalah lainnya.
# /var/log/httpd/modsec_debug.log
e) File Log ModSecurity
Semua permintaan yang memicu peristiwa ModSecurity (seperti yang dideteksi) atau kesalahan server dicatat (“RelevantOnly”) masuk ke file ini.
# /var/log/httpd/modsec_audit.log
4. Langkah Konfigurasi ModSecurity
Persiapan mendapatkan Core Rule Set (CRS)
# mkdir /etc/httpd/crs
# cd /etc/httpd/crs
# git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
Masuk ke dalam direktori OWASP CRS
# cd /etc/httpd/crs/owasp-modsecurity-crs/
Pada direktori CRS OWASP, ditemukan file sampel dengan aturan “crs-setup.conf.example”. Anda perlu menyalin isinya ke file baru bernama “crs-setup.conf”.
# cp crs-setup.conf.example crs-setup.conf
Selanjutnya mengkonfigurasi Apache untuk menggunakan konfigurasi file tersebut yang dapat dilakukan dengan mengedit file konfigurasi utama ModSecurity:
# nano /etc/httpd/conf.d/mod_security.conf
Dan sesuaikan konfigurasi sebagai berikut :
# ModSecurity Core Rules Set configuration
#IncludeOptional modsecurity.d/*.conf
#IncludeOptional modsecurity.d/activated_rules/*.conf
IncludeOptional /etc/httpd/crs/owasp-modsecurity-crs/crs-setup.conf
IncludeOptional /etc/httpd/crs/owasp-modsecurity-crs/rules/*.conf
Restart Web Server
# /etc/init.d/httpd restart
Sesuaikan file konfigurasi sendiri dalam direktori conf.d.
# nano /etc/httpd/conf.d/mod_security.conf
Sesuaikan script berikut :
SecResponseBodyAccess On
Restart Web Server :
# /etc/init.d/httpd restart
5. ModSecurity Testing
Untuk menguji ModSecurity, dapat menggunakan file Image pada artikel : https://govcsirt.bssn.go.id/write-up-cyber-security-drill-test-sektor-pemerintah-2019-case-insiden-web-defacement/ atau Image dapat diundunh pada https://s.id/isoDrill2019 (password : dr11lbs5n2019).
Testing akses shell command pada server dengan alamat IP 192.168.1.80 :
# curl 192.168.1.80/index.php?exec=/bin/bash
Output :
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access /index.php
on this server.</p>
</body></html>
Testing melakukan serangan SQL Injection :
# python sqlmap.py --url http://192.168.1.80/read.php?id=26 --dbs
Hasil yang diharapkan :
[13:24:24] [WARNING] GET parameter 'id' does not seem to be injectable
[13:24:24] [CRITICAL] all tested parameters do not appear to be injectable. Try to increase values for '--level'/'--risk' options if you wish to perform more tests. If you suspect that there is some kind of protection mechanism involved (e.g. WAF) maybe you could try to use option '--tamper' (e.g. '--tamper=space2comment')
[13:24:24] [WARNING] HTTP error codes detected during run:
Berdasarkan pengujian diatas, ModSecurity berhasil mencegah akses illegal ataupun serangan SQL Injection.
6. Logging ModSecurity
# tail -f /var/log/httpd/modsec_audit.log
Hasil yang diharapkan :
--3e883d77-A--
[29/May/2019:13:27:47 +0700] XO4mY5S34ZFW3ALy@--gwQAAAAU 192.168.1.77 45828 192.168.1.80 80
--3e883d77-B--
GET /read.php?id=26%25%27%20UNION%20ALL%20SELECT%20NULL%2CNULL%2CNULL%2CNULL%2CNULL%2CNULL%2CNULL%2CNULL%2CNULL%2CNULL--%20oeaq HTTP/1.1
Accept-Encoding: gzip,deflate
Host: 192.168.1.80
Accept: */*
User-Agent: sqlmap/1.2.5.15#dev (http://sqlmap.org)
Connection: close
Cache-Control: no-cache
--3e883d77-F--
HTTP/1.1 403 Forbidden
Content-Length: 210
Connection: close
Content-Type: text/html; charset=iso-8859-1
--3e883d77-E--
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access /read.php
on this server.</p>
</body></html>
7. Whitelist IP Address menggunakan ModSecurity
Untuk melakukan pembatasan ijin akses terhadap sebuah halaman tertentu, perlu adanya aturan tertentu, misalkan halaman login administrator hanya dapat diakses oleh IP Address tertentu. Untuk itu perlu dibuat sebuah file yang mengimplementasikan aturan tersebut.
Membuat file adminPage.conf :
# touch /etc/httpd/conf.d/admminPage.conf
# nano /etc/httpd/conf.d/admminPage.conf
Masukan konfigurasi sebagai berikut :
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_URI} ^(.*)admin(.*)$
RewriteCond %{REMOTE_ADDR} !^192\.168\.1\.65$ ## IP Addr
RewriteRule .* / [R=302,L]
<LocationMatch "/administrator">
SecRuleEngine DetectionOnly
</LocationMatch>
</IfModule>
ModSecurity adalah Web Application Firewall (WAF) untuk web server Apache. Selain menyediakan kemampuan logging, ModSecurity dapat memonitor trafik HTTP secara real time dalam mendeteksi serangan. ModSecurity juga beroperasi sebagai Instrusion Detection System (IDS), memungkinkan Anda untuk bereaksi terhadap peristiwa mencurigakan yang terjadi pada sistem web Anda.
1. Pendahuluan
Panduan ini menggunakan OWASP ModSecurity Core Rule Set (CRS) versi 3.2. Tujuan proyek OWASP adalah untuk “memberikan seperangkat aturan deteksi serangan generik yang mudah dipasang yang memberikan perlindungan tingkat dasar untuk setiap aplikasi web,” dan CRS dimaksudkan untuk “melindungi aplikasi web dari berbagai serangan dengan minimum False Alerts”. Versi CRS ini membutuhkan ModSecurity 2.8.0 atau lebih tinggi. Konfigurasi dilakukan melalui kumpulan aturan untuk mencegah serangan umum seperti SQL Injection, remote code execution.
2. Instalasi ModSecurity
# yum install mod_security
Contoh output :
Loaded plugins: downloadonly, fastestmirror, priorities, protectbase
Loading mirror speeds from cached hostfile
* epel: www.gtlib.gatech.edu
* base: mirror.skiplink.com
* updates: centos.aol.com
* addons: mirror.cs.vt.edu
* extras: mirror.trouble-free.net
0 packages excluded due to repository protections
Setting up Install Process
Parsing package install arguments
Resolving Dependencies
--> Running transaction check
---> Package mod_security.x86_64 0:2.5.9-1.el5 set to be updated
--> Finished Dependency Resolution
Dependencies Resolved
================================================================
Package Arch Version Repository Size
================================================================
Installing:
mod_security x86_64 2.5.9-1.el5 epel 935 k
Transaction Summary
============================================================================================================================================
Install 1 Package(s)
Update 0 Package(s)
Remove 0 Package(s)
Total download size: 935 k
Is this ok [y/N]: y
Downloading Packages:
mod_security-2.5.9-1.el5.x86_64.rpm | 935 kB 00:00
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
Installing : mod_security [1/1]
Installed: mod_security.x86_64 0:2.5.9-1.el5
Complete!
Restart web server :
# /etc/init.d/httpd restart atau
# service httpd restart
Cek versi ModSecurity yang diinstal :
# yum info mod_security
Contoh output :
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: centos.biz.net.id
* epel: mirror.xeonbd.com
* extras: centos.biz.net.id
* updates: centos.biz.net.id
Installed Packages
Name : mod_security
Arch : x86_64
Version : 2.9.2
Release : 1.el7
Size : 980 k
Repo : installed
From repo : base
Summary : Security module for the Apache HTTP Server
URL : http://www.modsecurity.org/
License : ASL 2.0
Description : ModSecurity is an open source intrusion detection and prevention eng inefor web applications. It operates embedded into the web server, acting as a powerful umbrella - shielding web applications from attacks.
3. Konfigurasi File
Ada beberapa file konfigurasi terkait dengan ModSecurity, antara lain :
a) File Konfigurasi Utama
Merupakan file konfigurasi utama untuk modul apache mod_security.
# /etc/httpd/conf.d/mod_security.conf
b) Direktori Konfigurasi
Berisi semua file konfigurasi lain untuk Apache mod_security.
# /etc/httpd/modsecurity.d/
c) Konfigurasi Core Rule Set (CRS)
Konfigurasi yang terdapat dalam file ini harus disesuaikan untuk persyaratan khusus sebelum penerapan.
# /etc/httpd/modsecurity.d/crs-setup.conf
d) Debugging ModSecurity Rules
Untuk mendebug rules mod_security dan masalah lainnya.
# /var/log/httpd/modsec_debug.log
e) File Log ModSecurity
Semua permintaan yang memicu peristiwa ModSecurity (seperti yang dideteksi) atau kesalahan server dicatat (“RelevantOnly”) masuk ke file ini.
# /var/log/httpd/modsec_audit.log
4. Langkah Konfigurasi ModSecurity
Persiapan mendapatkan Core Rule Set (CRS)
# mkdir /etc/httpd/crs
# cd /etc/httpd/crs
# git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
Masuk ke dalam direktori OWASP CRS
# cd /etc/httpd/crs/owasp-modsecurity-crs/
Pada direktori CRS OWASP, ditemukan file sampel dengan aturan “crs-setup.conf.example”. Anda perlu menyalin isinya ke file baru bernama “crs-setup.conf”.
# cp crs-setup.conf.example crs-setup.conf
Selanjutnya mengkonfigurasi Apache untuk menggunakan konfigurasi file tersebut yang dapat dilakukan dengan mengedit file konfigurasi utama ModSecurity:
# nano /etc/httpd/conf.d/mod_security.conf
Dan sesuaikan konfigurasi sebagai berikut :
# ModSecurity Core Rules Set configuration
#IncludeOptional modsecurity.d/*.conf
#IncludeOptional modsecurity.d/activated_rules/*.conf
IncludeOptional /etc/httpd/crs/owasp-modsecurity-crs/crs-setup.conf
IncludeOptional /etc/httpd/crs/owasp-modsecurity-crs/rules/*.conf
Restart Web Server
# /etc/init.d/httpd restart
Sesuaikan file konfigurasi sendiri dalam direktori conf.d.
# nano /etc/httpd/conf.d/mod_security.conf
Sesuaikan script berikut :
SecResponseBodyAccess On
Restart Web Server :
# /etc/init.d/httpd restart
5. ModSecurity Testing
Untuk menguji ModSecurity, dapat menggunakan file Image pada artikel : https://govcsirt.bssn.go.id/write-up-cyber-security-drill-test-sektor-pemerintah-2019-case-insiden-web-defacement/ atau Image dapat diundunh pada https://s.id/isoDrill2019 (password : dr11lbs5n2019).
Testing akses shell command pada server dengan alamat IP 192.168.1.80 :
# curl 192.168.1.80/index.php?exec=/bin/bash
Output :
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access /index.php
on this server.</p>
</body></html>
Testing melakukan serangan SQL Injection :
# python sqlmap.py --url http://192.168.1.80/read.php?id=26 --dbs
Hasil yang diharapkan :
[13:24:24] [WARNING] GET parameter 'id' does not seem to be injectable
[13:24:24] [CRITICAL] all tested parameters do not appear to be injectable. Try to increase values for '--level'/'--risk' options if you wish to perform more tests. If you suspect that there is some kind of protection mechanism involved (e.g. WAF) maybe you could try to use option '--tamper' (e.g. '--tamper=space2comment')
[13:24:24] [WARNING] HTTP error codes detected during run:
Berdasarkan pengujian diatas, ModSecurity berhasil mencegah akses illegal ataupun serangan SQL Injection.
6. Logging ModSecurity
# tail -f /var/log/httpd/modsec_audit.log
Hasil yang diharapkan :
--3e883d77-A--
[29/May/2019:13:27:47 +0700] XO4mY5S34ZFW3ALy@--gwQAAAAU 192.168.1.77 45828 192.168.1.80 80
--3e883d77-B--
GET /read.php?id=26%25%27%20UNION%20ALL%20SELECT%20NULL%2CNULL%2CNULL%2CNULL%2CNULL%2CNULL%2CNULL%2CNULL%2CNULL%2CNULL--%20oeaq HTTP/1.1
Accept-Encoding: gzip,deflate
Host: 192.168.1.80
Accept: */*
User-Agent: sqlmap/1.2.5.15#dev (http://sqlmap.org)
Connection: close
Cache-Control: no-cache
--3e883d77-F--
HTTP/1.1 403 Forbidden
Content-Length: 210
Connection: close
Content-Type: text/html; charset=iso-8859-1
--3e883d77-E--
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access /read.php
on this server.</p>
</body></html>
7. Whitelist IP Address menggunakan ModSecurity
Untuk melakukan pembatasan ijin akses terhadap sebuah halaman tertentu, perlu adanya aturan tertentu, misalkan halaman login administrator hanya dapat diakses oleh IP Address tertentu. Untuk itu perlu dibuat sebuah file yang mengimplementasikan aturan tersebut.
Membuat file adminPage.conf :
# touch /etc/httpd/conf.d/admminPage.conf
# nano /etc/httpd/conf.d/admminPage.conf
Masukan konfigurasi sebagai berikut :
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_URI} ^(.*)admin(.*)$
RewriteCond %{REMOTE_ADDR} !^192\.168\.1\.65$ ## IP Addr
RewriteRule .* / [R=302,L]
<LocationMatch "/administrator">
SecRuleEngine DetectionOnly
</LocationMatch>
</IfModule>
Sumber : https://govcsirt.bssn.go.id/tutorial-instalasi-modsecurity-pada-centos-7/