Afinando nuestro IDS con Rule2alert

Los sistemas de detección de intrusos (IDS) son sistemas que requieren un ajuste adecuado para evitar falsos positivos, falsos negativos, alertas repetitivas que colapsan la consola de operación etc. Cuando se decide implantar un IDS, como parte del proceso de implantación, se requiere haber diseñado una batería de pruebas para comprobar que lo implantado reacciona adecuadamente y poder tener una cierta garantía (garantía total es imposible debido a la heterogeneidad del tráfico que circula por las redes) de poseer un ajuste fino y con buen rendimiento. En esta entrada vamos a hablar de la herramienta Rule2alert [1], que nos ayudará a crear una batería de pruebas propia, con el fin de realizar el mejor ajuste posible de nuestros IDS.

Rule2alert, como se puede leer en la página oficial del proyecto, [1] toma como entrada reglas de Snort y genera tráfico de red a partir de ellas, pudiéndolo volcar a un fichero con formato pcap. Rule2alert es una herramienta que se basa en otra herramienta llamada Scapy[2], en la cual destaca su potencia para la manipulación de paquetes de red.

Vista la descripción, vamos a hacer una pequeña prueba a ver que tal se comporta la herramienta. Cabe mencionar que hemos realizado las pruebas sobre un sistema GNU/Linux Debian Testing.

Lo primero, descargamos la aplicación de una manera rápida (no hemos encontrado un tar.gz/zip disponible a la fecha de escritura de esta entrada) mediante wget:

$ wget -r http://rule2alert.googlecode.com/svn/trunk/

Una vez descargada, dentro del directorio «rule2alert.googlecode.com/svn/trunk» dispondremos de la aplicación r2a.py. Para comprobar que tenemos todas las dependencias (comentar que con la versión 2.5.2 de Python no nos funcionaba correctamente, en cambio, con la versión 2.6 no hay problema) y las versiones adecuadas, ejecutamos:

$ python r2a.py -h

Options:
-h, –help show this help message and exit
-c SNORT_CONF Read in snort configuration file
-f RULE_FILE Read in snort rule file
-F Write failed streams to pcap
-w PCAP Name of pcap file
-v Verbose hex output of raw alert
-t Test rule against current snort configuration
-T Test rule against current Suricata configuration
-m HOMENET Set $HOME_NET IP Address
-e EXTNET Set $EXTERNAL_NET IP Address
-s MANUALSID Manual SID Selection
-n MANUALNUM Number of times to alert SID
-E EVASION Evasion Technique

Para hacer las pruebas construimos un fichero test.rule con la siguiente regla:

«alert tcp $HOME_NET any -> $EXTERNAL_NET $HTTP_PORTS (msg:»ET TROJAN Win32.Dialer.buv Sending Information Home»; flow:established,to_server; uricontent:»/exit.php?if=»; nocase; content:»&cl=»; content:»&id=»; content:»&ov=»; content:»&site=»; content:»&tk=»; classtype:trojan-activity; reference:url; reference:url,www.emergingthreats.net/cgi-bin/cvsweb.cgi/sigs/VIRUS/TROJAN_Dialers; sid:2008430; rev:2;)»

$ python r2a.py -f test.rule -m 192.168.1.1 -e 1.1.1.1 -w test.pcap -v

Building Rule: 2008430

——– Hex Payload Start ———-
26 63 6c 3d 20 26 69 64
3d 20 26 6f 76 3d 20 26
73 69 74 65 3d 20 26 74
6b 3d
——— Hex Payload End ———–

Loaded 1 rules succesfully!
Writing packets to pcap…
Finished writing packets

En este instante, disponemos un fichero pcap de nombre test.pcap que, al abrirlo con Wireshark, podremos ver como ha generado el fichero:


Figura 1: test.pcap

Por lo que hemos podido comprobar, con Rule2alert generamos tráfico que va a encajar en nuestro IDS y debe generar una alerta, por lo que podemos realizar pruebas sobre nuestra configuración. Para probar este tráfico sobre el IDS, la manera más sencilla y rápida sería como nos indican en el propio Wiki de la herramienta:

$ snort -c /etc/snort/snort.conf -q -A console -k none -r test.pcap

A continuación, planteamos dos posibles ejemplos de pruebas (de los trillones de posibilidades) a realizar con la herramienta:

  • Una primera prueba sería inyectar “n” alertas iguales sobre nuestro IDS, de manera que probemos los umbrales de nuestras reglas (threshold, etc.). Si se da el caso de que disponemos de un correlador que recoge nuestras alertas del IDS, con esta prueba podemos comprobar que las reglas de correlación están haciendo su trabajo; resolviendo incógnitas como “¿agregará bien las alertas?”, “¿dispara un evento de criticidad superior?”, “¿me envía el correo y además un SMS?, etc.
  • Como bien sabéis, existen ocasiones en las que es necesario establecer filtros para determinado tipo de tráfico de red, debido a falsos positivos donde el tráfico es totalmente legítimo. En este caso puede ser interesante, para comprobar que no nos hemos pasado filtrando, lanzar una prueba con un paquete que sabemos que debe saltar alerta y otra donde no tendría que saltar. Siempre es mejor prevenir que curar :).

Queda claro que cualquier aspecto de la configuración de Snort es posible contrastarlo con Rule2alert, de manera que podamos afinar un poco más nuestra configuración. Esperamos que les resulte de utilidad la herramienta :).

[1] http://code.google.com/p/rule2alert/
[2] http://www.secdev.org/projects/scapy/

Comments

  1. Muy buena entrada!

  2. Y tanto que es útil para el IDS… muy interesante la verdad.