sábado, 16 de agosto de 2014

Identificar ataques desde el log de Apache con PHPIDS

Pues eso... ¿Quién no ha revisado los logs de Apache después de un ataque web? Yo suelo tirar de "grep" como comenté en algún post anterior. Lo malo es que ¿Y si no "grepeo" el string correcto? A veces hecho de menos alguna herramienta sencilla que revise los logs, reconozca ataques y me de la info necesaria para seguir tirando de la madeja... Algo como la fusión entre un parser de logs y un IDS. Y sí, de eso es lo que va esta entrada...

Para este experimento utilicé PHPIDS pues ya me había dado algo de juego antes en un par de posts. Y aunque ya no han salido más versiones, desde la 0.7 en el 2011, en su repositorio de Github se puede ver que eventualmente hacen alguna actualización (la última hace apenas 3 meses).

La idea es muy simple: parseamos el access.log de Apache con algo de PHP y expresiones regulares, reconstruimos el array GET con los datos del log y le pasamos ese array a PHPIDS para que lo examine y detecte ataques. Luego solo tenemos que mostrar los resultados.

En mi caso voy a usar la versión 0.7 que se puede descargar desde aquí. Si prefieres clonar el repositorio Github tendrás que adaptar el código que expongo más adelante para que incluya adecuadamente todas las clases (lo puedes hacer modificando el "example.php" que viene con PHPIDS).

Un paso a paso...

Primero creamos un directorio en el DocumentRoot para colocar ahí el programa en PHP. Yo le llamaré "logids"

# mkdir /var/www/html/logids

De PHPIDS necesito el directorio "lib/IDS" y todo su contenido. Así que copiaré ese directorio al que creamos previamente.

# cp -r lib/IDS /var/www/html/logids

PHPIDS necesita que el directorio "IDS/tmp" tenga permisos de escritura. Le damos los permisos.

# cd /var/www/html/logids 
# chmod 777 IDS/tmp

Por último creamos el archivo "index.php".

# vim index.php

El contenido del "index.php" lo he dejado en un pastebin:

http://pastebin.com/BzS9sxWt

Algunas capturas de pantalla:

Fig. 1 - Formulario para enviar el fichero access.log

Fig. 2 - Ataque SQL Injection (SQLi) detectado

Fig. 3 - Ataque Cross Site Scripting (XSS) detectado

Fig. 4 - Ataque Local File Inclusion (LFI) detectado

Hasta la próxima.

Un saludo.

No hay comentarios:

Publicar un comentario