Metti in Sicurezza il Tuo Apache Con mod_security
Versione 1.0
Autore: Falko Timme
Questo articolo mostra come installare e configurare mod_security. mod_security è un modulo Apache (per Apache 1 e 2) che fornisce rilevamento e prevenzione delle intrusioni per le applicazioni web. Mira a proteggere le applicazioni web da attacchi noti e sconosciuti, come attacchi di SQL injection, cross-site scripting, attacchi di traversamento di percorso, ecc.
Nel primo capitolo mostrerò come installare mod_security su Debian Sarge, Ubuntu 6.06 LTS (Dapper Drake) e su Fedora Core 5, e nel secondo capitolo descriverò come configurare Apache per mod_security, che è indipendente dalla distribuzione che stai utilizzando.
Voglio dire prima che questo non è l’unico modo per impostare un sistema del genere. Ci sono molti modi per raggiungere questo obiettivo, ma questo è il modo che seguo. Non fornisco alcuna garanzia che questo funzionerà per te!
1 Installazione
1.1 Debian Sarge
mod_security è disponibile come pacchetto Debian nei repository Debian predefiniti, quindi l’installazione è semplice come questo:
apt-get install libapache2-mod-security
a2enmod mod-security
/etc/init.d/apache2 force-reload
1.2 Ubuntu 6.06 LTS (Dapper Drake)
L’installazione è esattamente la stessa che su Debian Sarge:
apt-get install libapache2-mod-security
a2enmod mod-security
/etc/init.d/apache2 force-reload
1.3 Fedora Core 5
Su Fedora, puoi installare e attivare mod_security in questo modo:
yum install mod_security
/etc/init.d/httpd restart
Ora dovresti trovare il file /etc/httpd/conf.d/mod_security.conf che contiene già una configurazione di base di mod_security:
vi /etc/httpd/conf.d/mod_security.conf
| # Esempio di file di configurazione per il modulo Apache mod_security LoadModule security_module modules/mod_security.so # Attiva o disattiva il motore di filtraggio SecFilterEngine On # Il motore di audit funziona in modo indipendente e # può essere attivato o disattivato a livello di server o # a livello di directory SecAuditEngine RelevantOnly # Assicurati che la codifica URL sia valida SecFilterCheckURLEncoding On # Controllo della codifica Unicode SecFilterCheckUnicodeEncoding On # Consenti solo byte di questo intervallo SecFilterForceByteRange 1 255 # Controlli del formato dei cookie. SecFilterCheckCookieFormat On # Il nome del file di log dell'audit SecAuditLog logs/audit_log # mod_security deve ispezionare i payload POST SecFilterScanPOST On # Azione predefinita impostata SecFilterDefaultAction "deny,log,status:406" # Esempio di filtro semplice # SecFilter 111 # Previeni attacchi di traversamento di percorso (..) # SecFilter "\.\./" # Protezione XSS più debole ma consente tag HTML comuni # SecFilter "<( |\n)*script" # Previeni attacchi XSS (iniezione HTML/Javascript) # SecFilter "<(.|\n)+>" # Filtri molto grezzi per prevenire attacchi di SQL injection # SecFilter "delete[[:space:]]+from" # SecFilter "insert[[:space:]]+into" # SecFilter "select.+from" # Richiedi intestazioni HTTP_USER_AGENT e HTTP_HOST SecFilterSelective "HTTP_USER_AGENT|HTTP_HOST" "^$" # Accetta solo codifiche di richiesta che sappiamo come gestire # escludiamo le richieste GET da questo perché alcuni (automizzati) # client forniscono "text/html" come Content-Type SecFilterSelective REQUEST_METHOD "!^GET$" chain SecFilterSelective HTTP_Content-Type "!(^$|^application/x-www-form-urlencoded$|^multipart/form-data)" # Richiedi Content-Length da fornire con # ogni richiesta POST SecFilterSelective REQUEST_METHOD "^POST$" chain SecFilterSelective HTTP_Content-Length "^$" # Non accettare codifiche di trasferimento che sappiamo di non gestire # (e non ne hai bisogno comunque) SecFilterSelective HTTP_Transfer-Encoding "!^$" # Alcune regole comuni relative alle applicazioni da # http://modsecrules.monkeydev.org/rules.php?safety=safe #Nuke Bookmarks XSS SecFilterSelective THE_REQUEST "/modules\.php\?name=Bookmarks\&file=(del_cat\&catname|del_mark\&markname|edit_cat\&catname|edit_cat\&catcomment|marks\&catname|uploadbookmarks\&category)=(<[[:space:]]*script|(http|https|ftp)\:/)" #Nuke Bookmarks Marks.php Vulnerabilità di SQL Injection SecFilterSelective THE_REQUEST "modules\.php\?name=Bookmarks\&file=marks\&catname=.*\&category=.*/\*\*/(union|select|delete|insert)" #Tentativo generale di XSS di PHPNuke #/modules.php?name=News&file=article&sid=1&optionbox= SecFilterSelective THE_REQUEST "/modules\.php\?*name=<[[:space:]]*script" # Tentativo di SQL injection di PHPNuke SecFilterSelective THE_REQUEST "/modules\.php\?*name=Search*instory=" #inserimento sql di phpnuke SecFilterSelective THE_REQUEST "/modules\.php*name=Forums.*file=viewtopic*/forum=.*'/'" # WEB-PHP phpbb quick-reply.php tentativo di comando arbitrario SecFilterSelective THE_REQUEST "/quick-reply\.php" chain SecFilter "phpbb_root_path=" #Attacco di Cross-Site Scripting per il Mod Calendario di phpBB SecFilterSelective THE_REQUEST "/calendar_scheduler\.php\?start=(<[[:space:]]*script|(http|https|ftp)\:/)" # phpMyAdmin: Sicuro #phpMyAdmin Export.PHP Vulnerabilità di divulgazione file SecFilterSelective SCRIPT_FILENAME "export\.php$" chain SecFilterSelective ARG_what "\.\." #phpMyAdmin path vln SecFilterSelective REQUEST_URI "/css/phpmyadmin\.css\.php\?GLOBALS\[cfg\]\[ThemePath\]=/etc" |
Puoi mantenere questa configurazione, ma per avere una migliore comprensione di cosa può fare mod_security, dovresti commentare la parte …, riavviare Apache e seguire il capitolo 2. Successivamente puoi creare il tuo set di regole mod_security, o semplicemente tornare a questo.