Web Application Firewall (WAF) Opensource

Modsecurity(TM) è un IDS (intrusion detection system) per le applicazioni web.
In sostanza impedisce che un utente malintenzionato possa, sfruttando vulnerabilità varie (cgi/php) compromettere la sicurezza di un sistema.
Il suo funzionamento è alquanto semplice: essendo un mod per apache si integra perfettamente (ed esclusivamente) con lo stesso e permette di controllare tutte le richieste web in ingresso ed in uscita, graficamente l'impostazione è questa:

caso A) http get ---> [mod security] ---> [apache web server] ---> reply
caso B) vuln.cgi&file=|uname| ---> [mod security] ---> { LOG-IP/BLOCK/FORWARD }

Il sito ufficiale del progetto è http://www.modsecurity.org.

Installazione:

-- da sorgenti

Attraverso DSO l'installazione è molto semplice.
Decomprimiamo il tarball da qualche parte ed installiamolo comodamente con attraverso il comando apxs:

# <apache-home>/bin/apxs -cia mod_security.c

dopodichè restariamo apache con apachectl restart

Per compilarlo staticamente con Apache 1.x portiamoci nella directory contenente i sorgenti di apache e copiamo mod_security in /src/modules/extra; fatto questo procediamo compilando:

$ cd <apache1.x-source>
$ cp <modsecurity-source>/apache1/mod_security.c ./src/modules/extra
$ ./configure \
> --activate-module=src/modules/extra/mod_security \
> -–enable-module=security


Per quanto concerne invece Apache 2, il procedimento è simile:

$ cd <apache2-source>
$ cp <modsecurity-source>/apache2/mod_security.c ./modules/proxy
$ ./configure \
> -enable-security \
> --with-module=proxy:mod_security.c


-- da binari

Per Apache 1.x bisogna copiare il modulo mod_security.so in libexec/ e, dopo aver fatto questo, modificare il file httpd.conf aggiungendo la seguente riga:

LoadModule security_module    libexec/mod_security.so

Per Apache 2.x il discorso è pressochè identico con l'unica eccezione dovuta al fatto che al posto di copiare il modulo in libexec/ lo copieremo in modules/ e quindi al file httpd.conf aggiungeremo:

LoadModule security_module    modules/mod_security.so

Configurazione:
Editiamo il file di configurazione del nostro web server aggiungendoci una direttiva al file che fungerà da configurazione di modsecurity:

# echo "#include /path_a_piacere/modsec.conf" >> /var/www/conf/httpd.conf (la path dell'httpd.conf varia, questa è quella che uso io su OpenBSD).

A questo punto scriviamo il file /path_a_piacere/modsec.conf:

# Abilitiamo ModSecurity
SecFilterEngine On

# Impostiamo il comportamento di default da assumere in caso di infrazione
# di una regola ove questo comportamento
# non è impostato direttamente dalla direttiva della regola stessa.
#
SecFilterDefaultAction "deny,log,status:403"

# Abilitiamo lo scan del POST, dell'encoding dell'URL e parsiamo l'unicode
SecFilterScanPOST On
SecFilterCheckURLEncoding On
SecFilterCheckUnicodeEncoding Off

# Usiamo un server-banner a piacere
# SecServerSignature "Micro$oft-IIS/9.0"

# Definiamo il margine d'importanza affinchè un evento venga loggato ed impostiamo la cartella dei logs.
SecAuditEngine RelevantOnly
SecAuditLog /path_a_piacere/logs.modsecurity

# Parametri opzionali:
SecFilterSelective REQUEST_METHOD "!^(GET|HEAD)$" chain
SecFilterSelective HTTP_Content-Type \
"!(^application/x-www-form-urlencoded$|^multipart/form-data;)"
SecFilterSelective REQUEST_METHOD "^(GET|HEAD)$" chain
SecFilterSelective HTTP_Content-Length "!^$"
SecFilterSelective REQUEST_METHOD "^POST$" chain
SecFilterSelective HTTP_Content-Length "^$"

# Definiamo gli attacchi che vanno per la maggiore tra le comunità di lamers ed impostiamo il logging ed, ovviamente il bloccaggio:

# CSS
SecFilter "../../../" "deny,log"
# Remote exec.
SecFilter "uname" "deny,log"
SecFilter "/etc/passwd" "deny,log"
SecFilter "echo" "deny,log"


Buon divertimento!

Privacy Policy