Installazione ModSecurity (WAF) in ambiente LAMP su Ubuntu 17.10
In questo tutorial andremo ad installare il componente ModSecurity in un ambiente LAMP ( Linux Apache Mysql PHP) su Ubuntu 17.10.
Consideriamo di partire da un ambiente preinstallato LAMP su Ubuntu 17.10 ( segui questo articolo), aggiorniamo il sistema
sudo apt-get update
sudo apt-get upgrade
installiamo la libreria di Modsecurity su Apache
apt-get install libapache2-modsecurity
verifichiamo la presenza del modulo
apachectl -M | grep security
security2_module (shared)
ed iniziamo a configurarlo
cd /etc/modsecurity/
conserviamo la configurazione originale
cp modsecurity.conf-recommended modsecurity.conf
vim modsecurity.conf
dalla configurazione è possibile configurare il WAF (Web Application Firewall) in modalità IPS o IDS, di default è configurato solo per la rilevazione, quindi IDS.
Nel nostro tutorial andremo a impostare il WAF per bloccare attacchi malevoli quindi il parametro
SecRuleEngine DetectionOnly
lo imposteremo
SecRuleEngine On
associato al motore di prevenzione ci saranno le regole da applicare, per fare ciò scarichiamo direttamente da GitHub mod_security CRS (Core Rule Security)
sudo rm -rf /usr/share/modsecurity-crs
installiamo git
sudo apt-get install git
scarichiamo il CRS
git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git /usr/share/modsecurity-crs
Configuriamo adesso il tutto per funzionare con Apache
cd /usr/share/modsecurity-crs
cp crs-setup.conf.example crs-setup.conf
A questo punto configuriamo il Modsecurity per lavorare con le regole che abbiamo scaricato
cd /etc/apache2/mods-enabled
vim security2.conf
ed impostiamo la configurazione a considerare il percorso precedente dove sono situate le regole
<IfModule security2_module>
# Default Debian dir for modsecurity’s persistent data
SecDataDir /var/cache/modsecurity# Include all the *.conf files in /etc/modsecurity.
# Keeping your local configuration in that directory
# will allow for an easy upgrade of THIS file and
# make your life easier
IncludeOptional /etc/modsecurity/*.conf
IncludeOptional “/usr/share/modsecurity-crs/*.conf
IncludeOptional “/usr/share/modsecurity-crs/rules/*.conf# Include OWASP ModSecurity CRS rules if installed
#IncludeOptional /usr/share/modsecurity-crs/owasp-crs.load
</IfModule>
salviamo e riavviamo Apache
service apache2 restart
L’installazione del WAF è finita, esistono moltissime regole da poter applicare e la community è molto attiva per aggiornare le regole contro possibili attacchi.
Un test che per la verifica del funzionamento è la simulazione di un attacco XSS, installiamo prima il comando curl
sudo apt-get install curl
curl 'http://localhost/article.php?title=<meta%20http-equiv="refresh"%20content="0;">'
avremo la seguente risposta da parte del web server
<!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 /
on this server.<br />
</p>
<hr>
<address>Apache/2.4.27 (Ubuntu) Server at localhost Port 80</address>
</body></html>
accesso negato.
E’ possibile analizzare i log al seguente percorso
cd /var/log/apache2
tail -50f modsec_audit.log
mostrando l’attacco ricevuto
Message: Warning. Pattern match “(?:\\bhttp\\/(?:0\\.9|1\\.[01])|<(?:html|meta)\\b)” at ARGS:title. [file “/usr/share/modsecurity-crs/rules/REQUEST-921-PROTOCOL-ATTACK.conf”] [line “152”] [id “921130”] [rev “2”] [msg “HTTP Response Splitting Attack”] [data “Matched Data: <meta found within ARGS:title: <meta http-equiv=\x22refresh\x22 content=\x220;\x22>”] [severity “CRITICAL”] [ver “OWASP_CRS/3.0.0”] [maturity “9”] [accuracy “9”] [tag “application-multi”] [tag “language-multi”] [tag “platform-multi”] [tag “attack-protocol”]
Message: Warning. detected XSS using libinjection……