ModSecurity : mettez un WAF dans votre Apache

ModSecurity : mettez un WAF dans votre ApacheUn WAF, un Web Application Firewall, est un dispositif logiciel associé à votre serveur Web – avec, en option, un mécanisme de reverse proxy – dont l’objet est de vous protéger d’attaques en DDoS, d’injections SQL, de requêtes parasites et agressives ou encore d’attaques de type XSS. S’appuyant notamment sur les travaux du projet OWASP, ModSecurity est un module associé à Apache, Nginx ou IIS, qui fournit des règles faisant office de WAF.

Installer ModSecurity sur Apache

J’ai installé les paquets RPM mod_security, mod_security_crs, mod_security_crs-extras sur ma Fedora 24 à partir des dépôts de la distribution :

dnf install mod_security  mod_security_crs mod_security_crs-extras

Vous devez ensuite recharger la configuration de votre serveur Apache :

systemctl reload httpd

Activer le mode Debug

Du fait de règles parfois un peu strictes, je vous conseille d’afficher l’origine des blocages provoquées par la mise en œuvre de ModSecurity. Éditez le fichier /etc/httpd/conf.d/mod_security.conf et modifier la directive SecDebugLogLevel en la passant à 1 :

SecDebugLog /var/log/httpd/modsec_debug.log
SecDebugLogLevel 1

Vous devez recharger la configuration de votre serveur Apache en tapant à partir de la ligne de commande :

systemctl reload httpd

Pour consulter le fichier, afin de savoir quelles sont les règles bloquantes, prenez le temps d’analyser le fichier de log :

tail -f /var/log/httpd/modsec_debug.log

Exemple de log et action corrective

[20/Jul/2016:08:21:03 +0200] [www.dsfc.net/sid#5651ed228e08][rid#7f34e8015f40][/favicon.ico][1] Access denied with code 403 (phase 2). Operator EQ matched 0 at REQUEST_HEADERS. [file "/etc/httpd/modsecurity.d/activated_rules/modsecurity_crs_21_protocol_anomalies.conf"] [line "47"] [id "960015"] [rev "1"] [msg "Request Missing an Accept Header"] [severity "NOTICE"] [ver "OWASP_CRS/2.2.8"] [maturity "9"] [accuracy "9"] [tag "OWASP_CRS/PROTOCOL_VIOLATION/MISSING_HEADER_ACCEPT"] [tag "WASCTC/WASC-21"] [tag "OWASP_TOP_10/A7"] [tag "PCI/6.5.10"]

A l’observation du log ci-dessus, j’ai décidé de commenter en ligne 47 la règle 960015 du fichier /etc/httpd/modsecurity.d/activated_rules/modsecurity_crs_21_protocol_anomalies.conf. J’ai même dû désactiver certains fichiers de règles extrêmement bloquant en les renommant avec l’extension .old !

Le souci est qu’il faut redémarrer le serveur Apache pour que cette modification soit prise en compte :

systemctl restart httpd

Gérer les exceptions

Plutôt que de désactiver des règles issues de ModSecurity, il peut être intéressant de gérer des exceptions dans votre .htaccess ou dans la configuration de votre VirtualHost ainsi :

<LocationMatch "/wp-admin ">
    <IfModule security2_module>
        SecRuleRemoveById 973300
    </IfModule>
</LocationMatch>

NB Il existe une distribution BSD pré-packagée, du nom de Vulture, qui fait tout ça très bien.

 

Apache / , , , , , , , ,