14 diciembre 2011

Scalparser: Estadísticas para Scalp

En uno de nuestros primeros post en SbD, hablábamos sobre Scalp, una gran herramienta pensada para analizar los logs de peticiones (típicamente access.log o ssl_access.log) realizadas al servidor web Apache.

A la hora de realizar un análisis forense sobre dichos logs, Scalp, utiliza el fichero utilizado por PHPIDS (otra herramienta que también comentamos en SbD) "defaultfilter.xml", que contiene firmas y expresiones regulares referentes a ataques web. Scalp procesará el fichero de logs de apache que seleccionemos, y elaborará un informe detallado con los resultados con las peticiones que han sido, con alta probabilidad, un ataque web.

La forma en la que Scalp, después de una alta variedad de flags por línea de comandos, es capaz de generar dicho informe, es en texto sin formato o en XML.

Si el fichero analizado es de un servidor web con una alta densidad de tráfico, producirá un informe que puede tener varios cientos de Megabytes, lo cuál, hará prácticamente imposible su análisis.

Con la idea de facilitar el mismo, y en la línea de ser capaz de evaluar el impacto repercutido en un servidor web, he desarrollado una herramienta en Perl, que he bautizado como Scalparser.

Para ello, previamente deberemos haber ejecutado Scalp con el flag -x para que la salida la genere en formato XML. El resto de los flags pueden haberse o no habilitado. Esta entrada, no pretende ser un tutorial sobre Scalp, por lo que, dejamos a criterio del lector, las opciones a utilizar. La recomendación, sin embargo sería algo así como: ./scalp-0.4.py -f default_filter.xml -e -u -x -l access_log.



¿Qué genera Scalparser?
La herramienta, produce en modo texto un resumen del fichero generado con lo siguiente:
  • Número total de ataques detectados en todo el fichero
  • Porcentaje de ataques por tipo de ataque e impacto, ordenados por porcentaje de mayor a menor.
  • Top 10 (por defecto) de direcciones IP más atacantes, con número de ataques por cada IP, ordenadas de mayor a menor número de ataques
  • Top 20 (por defecto) páginas web, con número de ataques recibidos, ordenadas de mayor a menor número de ataques
Los resultados pueden ser utilizados en conjunción con una hoja de cálculo para producir vistosos gráficos que muestren porcentajes, tablas con TOP atacantes/atacados, etc,… pudiéndose entregar como complemento a un informe forense o ser un factor más de enriquecimiento de un cuadro de mandos de seguridad.

Como opción de configuración, hay una variable al principio del script llamada "my @whitelist". Como indica el comentario, podemos indicar direcciones IP "blancas" que no queremos que la herramienta tenga en cuenta en sus estadísticas. Así, se permite no "manchar" o adulterar las estadísticas obtenidas con análisis hechas desde determinadas direcciones IP blancas, o de auditoría. 
 Asimismo, por defecto vienen definidos en dos variables, $cuantas_ips y $cuantas_webs, los valores sobre cuántas IPs y páginas, atacantes y atacadas respectivamente, tendremos en cuenta en el script. Por defecto son 10 y 20 respectivamente.


Las opciones a tener en cuenta con el script son las siguientes: 
  • -f fichero_XML -> el fichero XML generado por Scalp. Habrá que editarlo y eliminar las primeras 4 líneas del fichero, dejando como primera línea la que empieza por:
  • [-a attack1,attack2] -> (Opcional) En caso que queramos que nos muestre con detalle el contenido de determinados ataques, podemos especificar con el flag -a y separados por comas los ataques en los que queramos profundizar nuestro análisis. Ejemplos de ataques a indicar pueden ser por ejemplo: xss (Cross-site Scripting), csrf (Cross-site Request Forgery), spam, lfi (Local file Inclusion), sqli (SQL Injection), rfe (Remote File Execution), dos (Denial of Service), id (Information Disclosure),...
  • [-p 1] -> (Opcional) Por defecto, Scalparser tendrá en cuenta direcciones IP públicas y privadas. En caso que queramos que no cuente los ataques que se detecten desde direcciones IP privadas, habría que ejecutadlo con el flag "-p 1". 
Me queda pendiente en mi cada vez más largo To Do
  • Implementar scalp de forma más óptima. Para procesar un access_log de 40GB se ha demorado más de 3 días en un servidor potente.
  • Poder mostrar los ataques ejecutados por una única dirección IP. Ahora mismo se puede hacer con un "grep direccion_IP fichero_XML", pero puede ser interesante tenerlo en con un único flag -i
Por supuesto, quedo a vuestra disposición para que propongáis ideas para mejorar o criticar (constructivamente, por favor) la herramienta, en comentarios, correos, tweets o tomando unas cañas ;D 

Podéis descargar Scalparser desde aquí para vuestro libre albeldrío y ejecución

2 comments :

Cesar Neira dijo...

Hace algún tiempo buscaba una herramienta para analisis de logs y nunca di con Scalp. Tube que pasar los logs de apache a una tabla de MySQL y así buscar lo que quería xD

Buen post, provaré esa tool. Gracias.

Luisco dijo...

Desde que lo menciono Lorenzo en CSI2013, tenia ganas de probarlo y hoy que tuve la oportunidad me gusto muchisimo, esta buenisimo el script. Una recomendación para los que no les funcione en BT5, es ejecutar el comando "aptitude install libxml-smart-perl".


Esta genial, gracias lorenzo
Un saludo, (el teniente de CSI2013) jajajjajajja