ModSecurity - Désactivation d'une règle
Alasta 9 Juin 2014 security Apache CentOS Linux ModSecurity Reverse Proxy Security
Description : Nous allons voir comment désactiver une régle de blocage.
La démarche :
Nous partirons de la configuration faite dans l'article .
Nous allons voir une règle qui bloque l'accès, par exemple celle qui interdit l'accès via adresse IP même si se n'est pas à faire en production, ensuite nous allons voir comment la désactiver pour une URL puis pour le site.
Vérification de la configuration de base :
Configuration du VirtualHost :
<VirtualHost *:80> ServerName alasta.lab ServerAlias www.alasta.lab #Pour les pages erreurs qui sont en locales ProxyPass /waf_pages ! #Application a proteger ProxyPass / http://192.168.5.41/ ProxyPassReverse / http://192.168.5.41/ #Pages d erreurs ErrorDocument 403 /waf_pages/errors/err_page_403.php </VirtualHost>
Résultat :
Pour la suite nous avons besoins d'avoir l'id de la règle de blocage.
[27/May/2014:16:14:40 +0200] U4Sd0MCoBSgAACS4Au0AAAAD 192.168.5.26 55378 192.168.5.40 80 --d2cc1505-B-- GET /dvwa/ HTTP/1.1 Host: 192.168.5.40 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:29.0) Gecko/20100101 Firefox/29.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding: gzip, deflate Cookie: security=high; PHPSESSID=fprfeh08669oes7ipookf8g314 Connection: keep-alive --d2cc1505-F-- HTTP/1.1 403 Forbidden Content-Length: 1274 Connection: close Content-Type: text/html; charset=UTF-8 --d2cc1505-H-- Message: Access denied with code 403 (phase 2). Pattern match "^[\d.:]+$" at REQUEST_HEADERS:Host. [file "/etc/httpd/modsecurity.d/base_rules/modsecurity_crs_21_protocol_anomalies.conf"] [line "98"] [id "960017"] [rev "2"] [msg "Host header is a numeric IP address"] [data "192.168.5.40"] [severity "WARNING"] [ver "OWASP_CRS/2.2.8"] [maturity "9"] [accuracy "9"] [tag "OWASP_CRS/PROTOCOL_VIOLATION/IP_HOST"] [tag "WASCTC/WASC-21"] [tag "OWASP_TOP_10/A7"] [tag "PCI/6.5.10"] [tag "http://technet.microsoft.com/en-us/magazine/2005.01.hackerbasher.aspx"] Apache-Error: [file "/builddir/build/BUILD/php-5.3.3/sapi/apache2handler/sapi_apache2.c"] [line 326] [level 3] PHP Notice: Undefined variable: txt in /var/www/html/waf_pages/errors/err_page_403.php on line 19 Action: Intercepted (phase 2) Apache-Handler: php5-script Stopwatch: 1401200080369910 2171 (- - -) Stopwatch2: 1401200080369910 2171; combined=442, p1=317, p2=76, p3=0, p4=0, p5=48, sr=91, sw=1, l=0, gc=0 Producer: ModSecurity for Apache/2.7.3 (http://www.modsecurity.org/); OWASP_CRS/2.2.8. Server: Apache/2.2.15 (CentOS) DAV/2 Engine-Mode: "ENABLED" --d2cc1505-Z--
C'est la règle ayant l'id "960017" qui bloque l'accès.
Désactivation pour une page ou répertoire :
Pour ce test nous allons seulement désactiver cette règle pour la page d'authentification, donc nous aurons la page d'authentification mais une fois celle-ci validée nous serons bloqué.
Configuration du VirtualHost :
<VirtualHost *:80> ServerName alasta.lab ServerAlias www.alasta.lab #Pour les pages erreurs qui sont en locales ProxyPass /waf_pages ! #Application a proteger ProxyPass / http://192.168.5.41/ ProxyPassReverse / http://192.168.5.41/ #Pages d erreurs ErrorDocument 403 /waf_pages/errors/err_page_403.php <location "/dvwa/login.php" > #Desactivation de la regle 960017 pour le location indiqué ci-dessus SecRuleRemoveById 960017 </location> </VirtualHost>
Redémarrage d'Apache :
service httpd graceful
Résultat :
Page d'authentification :
Une fois la page d'authentification effectuée :
Désactivation pour l'application :
Nous allons désactiver le règle précédente mais pour toute l'application/site. Je le répéte cette règle n'est pas à désactiver en production, surtout sur un reverse proxy.
Configuration du VirtualHost :
<VirtualHost *:80> ServerName alasta.lab ServerAlias www.alasta.lab #Pour les pages erreurs qui sont en locales ProxyPass /waf_pages ! #Application a proteger ProxyPass / http://192.168.5.41/ ProxyPassReverse / http://192.168.5.41/ #Pages d erreurs ErrorDocument 403 /waf_pages/errors/err_page_403.php #Desactivation de la regle SecRuleRemoveById 960017 </VirtualHost>
Redémarrage d'Apache :
service httpd graceful
Résultat :
Page d'authentification :
Une fois la page d'authentification effectuée, on peut naviguer sur l'application sans soucis :
Conclusion :
Nous avons vu comment désactiver une règle assez facilement mais il faut grader à l'esprit que ce n'est pas parce qu'on a désactiver une règle pour une raison x ou y qu'une autre règle derrière ne va pas bloquer la requête.
Il est aussi possible de désactiver la règle pour une adresse IP, mais dans un environnement de production on ne connait pas l'adresse IP des clients.
Sinon dans le cas d'une autre règle, par exemple pour une requête SQL, on custom une règle mais là il faut connaître l'application.