ModSecurity è un Web Application Firewall (WAF) open source per server Web Apache Nginx e IIS. Questo firewall a livello di applicazione è sviluppato da SpiderLabs di Trustwave e rilasciato con licenza Apache 2.0. ModSecurity protegge i siti Web dagli hacker utilizzando una serie di regole di espressione regolare per filtrare gli exploit comunemente noti, consente il monitoraggio del traffico HTTP, la registrazione, l'analisi in tempo reale e il rilevamento degli attacchi. Sono disponibili più di 16.000 regole per rilevare attacchi come SQL Injection, Cross-site Scripting (XSS), inclusione di file locali, inclusione di file remoti e regole specifiche dell'applicazione per molte applicazioni Web come Wordpress, Joomla, Drupal ecc.
In questo tutorial, ti mostrerò come installare mod_security per il veloce server web Nginx. Configurarò ModSecurity come modulo autonomo e quindi compilerò Nginx dal sorgente per includere ModSecurity.
Prerequisiti
- Un server Ubuntu 15.04, userò l'IP qui 192.168.1.106.
- privilegi radice
Cosa faremo in questo tutorial:
- Aggiorna il sistema e il repository di Ubuntu 15.04.
- Installa le dipendenze richieste per creare Nginx e ModSecurity.
- Scarica ModSecurity e Nginx.
- Installa ModSecurity e Nginx.
- Configura Nginx.
- Configura ModSecurity.
- Configura il set di regole di base OWASP (CRS).
- Test.
Tutti i comandi seguenti devono essere eseguiti come root. Corri:
sudo -i
per diventare utente root sul tuo server.
1. Aggiorna sistema e repository
Prima di iniziare a installare tutte le dipendenze, aggiorna il tuo sistema:
apt-get update
apt-get upgrade
2. Installa le dipendenze di build
Installa tutti i pacchetti necessari per compilare Nginx e ModSecurity con il comando apt di seguito:
apt-get install git build-essential libpcre3 libpcre3-dev libssl-dev libtool autoconf apache2-prefork-dev libxml2-dev libcurl4-openssl-dev
3. Scarica ModSecurity e Nginx
Vai alla directory "/usr/src/" , quindi clona il repository ModSecurity da Github:
cd /usr/src/
git clone https://github.com/SpiderLabs/ModSecurity.git modsecurity
Scarica Nginx con il comando wget, userò la versione stabile di Nginx 1.8 qui. Se desideri utilizzare un'altra versione, vai alla pagina di download di Nginx per ottenere un elenco di tutte le versioni disponibili.
wget http://nginx.org/download/nginx-1.8.0.tar.gz
4. Installa ModSecurity e Nginx
Ora è il momento di installare ModSecurity, vai nella directory /usr/src/modsecurity:
cd /usr/src/modsecurity/
E compila ModSecurity come modulo autonomo sul tuo server, così possiamo includerlo in Nginx:
./autogen.sh
./configure --enable-standalone-module --disable-mlogc
make
Ora vai alla directory nginx, compila Nginx e includi il modulo ModSecurity:
cd ../nginx-1.8.0
./configure \
--user=www-data \
--group=www-data \
--with-debug \
--with-ipv6 \
--with-http_ssl_module \
--add-module=/usr/src/modsecurity/nginx/modsecurity
Il comando di configurazione ha spiegato:
Nginx verrà eseguito sotto l'utente e il gruppo "www-data" e attiviamo il debug, ipv6 e ssl moduli. E infine includiamo il modulo ModSecurity in Nginx.
Ora installa Nginx:
make
make install
Al termine del comando make install, puoi vedere che Nginx è installato in "/usr/local/nginx" directory:
cd /usr/local/nginx/
ll
drwxr-xr-x 2 root root 4096 Oct 3 07:21 conf/
drwxr-xr-x 2 root root 4096 Oct 3 07:21 html/
drwxr-xr-x 2 root root 4096 Oct 3 07:21 logs/
drwxr-xr-x 2 root root 4096 Oct 3 07:21 sbin/
5. Configura Nginx
Modifica il file di configurazione di nginx con vi/vim e configura nginx per l'esecuzione sotto l'utente "www-data" .
cd /usr/local/nginx/
vi conf/nginx.conf
Sulla prima riga, decommenta la riga "user" e cambia l'utente in www-data:
user www-data;
Salva ed esci.
Crea un collegamento simbolico per il binario nginx in modo da poter usare il comando "nginx" direttamente.
ln -s /usr/local/nginx/sbin/nginx /bin/nginx
Successivamente creeremo uno script systemd per Nginx che viene utilizzato per avviare/arrestare il demone Nginx. Vai alla directory "/lib/systemd/system/" e crea un nuovo file "nginx.service" con vi:
cd /lib/systemd/system/
vi nginx.service
Incolla lo script qui sotto:
[Service] Type=forking ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf ExecReload=/usr/local/nginx/sbin/nginx -s reload KillStop=/usr/local/nginx/sbin/nginx -s stop KillMode=process Restart=on-failure RestartSec=42s PrivateTmp=true LimitNOFILE=200000 [Install] WantedBy=multi-user.target
Salva ed esci.
Ora ricarica il demone systemd in modo che systemd carichi il nostro nuovo file di servizio Nginx.
systemctl daemon-reload
Testare la configurazione di nginx e avviare nginx con il comando systemctl:
nginx -t
systemctl start nginx
6. Configura ModSecurity
Copia il file di configurazione di ModSecurity nella directory nginx e chiamalo "modsecurity.conf" :
cp /usr/src/modsecurity/modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf
cp /usr/src/modsecurity/unicode.mapping /usr/local/nginx/conf/
Apri il file modsecurity.conf con l'editor vi:
cd /usr/Local/nginx/conf/
vi modsecurity.conf
Nella riga 7, cambia "Solo rilevamento" su "acceso" .
SecRuleEngine On
Nella riga 38, aumenta il valore di "SecRequestBodyLimit " a "100000000".
SecRequestBodyLimit 100000000
Nella riga 192, modificare il valore di "SecAuditLogType " a "Simultanei " e commenta la riga SecAuditLog e decommenta la riga 196.
SecAuditLogType Concurrent
#SecAuditLog /var/log/modsec_audit.log
# Specify the path for concurrent audit logging.
SecAuditLogStorageDir /opt/modsecurity/var/audit/
Salva ed esci.
Ora crea una nuova directory per il registro di controllo di ModSecurity e cambia il proprietario in www-data.
mkdir -p /opt/modsecurity/var/audit/
chown -R www-data:www-data /opt/modsecurity/var/audit/
7. Configura OWASP Core Rule Set (CRS)
Scarica il set di regole di base OWASP da github.
cd /usr/src/
git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
Vai alla directory "owasp-modsecurity-crs " e copia la directory "base_rules" nella directory nginx.
cd owasp-modsecurity-crs
cp -R base_rules/ /usr/Local/nginx/conf/
Modifica modsecurity.conf e aggiungi OWASP CRS.
cd /usr/Local/nginx/conf/
vi modsecurity.conf
Vai alla fine del file e aggiungi la seguente configurazione:
#DefaultAction SecDefaultAction "log,deny,phase:1" #If you want to load single rule /usr/loca/nginx/conf #Include base_rules/modsecurity_crs_41_sql_injection_attacks.conf #Load all Rule Include base_rules/*.conf #Disable rule by ID from error message (for my wordpress) SecRuleRemoveById 981172 981173 960032 960034 960017 960010 950117 981004 960015
Salva ed esci.
Come ultimo passaggio, aggiungi il file modsecurity.conf alla configurazione di Nginx modificando "nginx.conf " file.
vi conf/nginx.conf
Aggiungi modsecurity.conf:
[.....]
#Enable ModSecurity ModSecurityEnabled on; ModSecurityConfig modsecurity.conf; root html; index index.php index.html index.htm;
[.....]
Salva ed esci.
Riavvia Nginx per applicare le modifiche alla configurazione:
systemctl restart nginx
8. Test
Ho un sito WordPress in esecuzione su Nginx e ModSecurity, funziona correttamente. Per il test installerò un nuovo plug-in vulnerabile per XSS e SQL injection.
Ecco i risultati:
XSS vietato
https://www.exploit-db.com/exploits/37107/
Accesso al browser:
Registro del server:
Iniezione SQL vietata
https://www.exploit-db.com/exploits/37560/
Accesso al browser:
Registro del server:
Nginx e ModSecurity con successo.
Conclusione
ModSecurity è un WAF (Web Application Firewall) open source sviluppato da SpiderLabs di Trustwave per proteggere le tue applicazioni web. Sono disponibili più di 16.000 regole per rilevare attacchi come SQL Injection, XSS, LFI, RFI ecc. ModSecurity è facile da installare e disponibile come modulo per Apache, Nginx e IIS per Windows.
Riferimento
- https://www.modsecurity.org/documentation.html
- https://www.owasp.org/index.php/Category:OWASP_ModSecurity_Core_Rule_Set_Project
- https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual