Ya que estamos en racha con mod_security, encontré recientemente un parseador de logs muy sencillo de utilizar que merece una entradilla. Es simple pero cumple su cometido.
Dicho script forma parte de la suite de repositorios del grupo SpiderLabs y está escrito en Python 2.7.
Para utilizarlo primero clonamos el repositorio:
git clone https://github.com/SpiderLabs/ModSecurity-log-utilities cd ModSecurity-log-utilities/
Lanzamos el script. Admite 3 parámetros para generar el resultado resumen (summary) que son: URI atacada, ID de la regla activada en mod_security para dicha URI y MSG que corresponde con el mensaje descriptivo del ataque. Por último especificamos la ruta del log:
./modsec-log-parser.py --summary="uri,id,msg" /var/log/apache2/error.log
Obteniendo la siguiente salida:
(['error.log'], 'uri,id,msg') /wp-json/oembed/1.0/embed 931130 Possible Remote File Inclusion (RFI) Attack: Off-Domain Reference/Link / 920350 Host header is a numeric IP address /administrator/index.php 913101 Found User-Agent associated with scripting/generic HTTP client / 913101 Found User-Agent associated with scripting/generic HTTP client /administrator/index.php 949110 Inbound Anomaly Score Exceeded (Total Score: 5) /robots.txt 913102 Found User-Agent associated with web crawler/bot /wp-json/oembed/1.0/embed 942430 Restricted SQL Character Anomaly Detection (args): # of special characters exceeded (12) /wp-json/oembed/1.0/embed 949110 Inbound Anomaly Score Exceeded (Total Score: 8) / 920320 Missing User Agent Header /robots.txt 949110 Inbound Anomaly Score Exceeded (Total Score: 5) / 920280 Request Missing a Host Header /index.php - None / 949110 Inbound Anomaly Score Exceeded (Total Score: 5)
Dicho script resulta muy útil por tanto para tener una visión general de los resultados de nuestro WAF. Podríamos ponerlo por ejemplo en un crontab para generar reportes diarios y posteriormente analizarlos para determinar las reglas más utilizadas, URIs más susceptibles de ser vulneradas, etc…