Conociendo como es la estructura de las reglas en Snort, el siguiente paso lógico seria, escribir reglas para intentar proteger un sistema o segmento de red, si se desea se puede solicitar las reglas oficiales de Snort conocidas como VRT (Vulnerability Research Team) http://www.snort.org/snort-rules/ que definen un conjunto de reglas muy robusto y estable que permite tener un entorno empresarial seguro, sin embargo, cuestan dinero… Si se trata de implantar Snort en una organización, no cabe duda que es una excelente elección, sin embargo, para fines educativos y para dominar correctamente este IDS lo mas recomendable es optar por rule-sets libres, es aquí donde entra el juego de reglas Bleeding Edge para Snort, como se ha dicho son libres y tiene una característica que desde mi perspectiva resulta muy interesante y es la separación lógica de cada uno de los ficheros de reglas, es decir, existe un fichero de reglas para visitas a sitios indebidos, maleware, virus, ataques a servidores web, exploits, conexiones p2p… todo un compendio de reglas para proteger el entorno de agentes maliciosos y para limitar, obviamente, las libertades de los usuarios internos, sin embargo en próximas entradas se verán técnicas de evasión de IDS Firewall y otras “fortalezas” de los mecanismos de seguridad modernos. Por lo pronto, indicare los pasos para instalar y conocer a fondo las reglas Bleeding Edge de Snort, ademas de como ponerlas a funcionar adecuadamente en Snort v 2.9.x

INSTALAR LAS REGLAS BLEEDING-EDGE

Para instalar este juego de reglas, simplemente basta con seguir los pasos definidos aquí: http://www.bleedingsnort.com/general-security/using-bleedingsnort-rules-for-the-impatient/ consiste simplemente en descargar las reglas y finalmente descomprimirlas en el directorio de reglas de snort, el cual posteriormente sera utilizado para el arranque de Snort como se ha visto anteriormente. Para esto esta el script oinkmaster.pl descrito en el enlace anterior.

Por otro lado existe otro conjunto de reglas un poco mas completas utilizadas en versiones superiores a la 2.8.6 y que pueden ser instaladas de la misma forma utilizando el siguiente enlace en el fichero de configuración de oinkmaster.conf:

http://rules.emergingthreats.net/open/snort-2.8.6/emerging.rules.tar.gz

No se deben mezclar todas, solamente se deben utilizar las reglas Bleeding-Edge o la versión Emerging.

Utilizando Bleeding-Edge.>./oinkmaster.pl -q -C oinkmaster.conf -o /etc/snort/rules

WARNING: SID 2001286 depends on flowbit «netbios.lsass.bind.attempt» which is not set in any rule

[***] Results from Oinkmaster started 20110627 23:15:44 [***]

[*] Rules modifications: [*]

None.

[*] Non-rule line modifications: [*]

None.

[+] Added files (consider updating your snort.conf to include them if needed): [+]

-> bleeding-attack_response.rules

-> bleeding-dos.rules

-> bleeding-drop-BLOCK.rules

-> bleeding-drop.rules

-> bleeding-dshield-BLOCK.rules

-> bleeding-dshield.rules

-> bleeding-exploit.rules

-> bleeding-game.rules

-> bleeding-inappropriate.rules

-> bleeding-malware.rules

-> bleeding-p2p.rules

-> bleeding-policy.rules

-> bleeding-scan.rules

-> bleeding-sid-msg.map

-> bleeding-virus.rules

-> bleeding-web.rules

-> bleeding.conf

-> bleeding.rules

Utilizando Emerging-rules.

/oinkmaster.pl -q -C oinkmaster.conf -o /etc/snort/rules/

WARNING: SID 2012816 depends on flowbit «ET.http.binary» which is set in INACTIVE SID 2000427 (SID 2012816 is broken unless you also enable SID 2000427).

[***] Results from Oinkmaster started 20110703 01:34:31 [***]

[*] Rules modifications: [*]

None.

[*] Non-rule line modifications: [*]

None.

[+] Added files (consider updating your snort.conf to include them if needed): [+]

-> BSD-License.txt

-> classification.config

-> compromised-ips.txt

-> emerging-activex.rules

-> emerging-attack_response.rules

-> emerging-botcc-BLOCK.rules

-> emerging-botcc.rules

-> emerging-chat.rules

-> emerging-ciarmy.rules

-> emerging-compromised-BLOCK.rules

-> emerging-compromised.rules

-> emerging-current_events.rules

-> emerging-deleted.rules

-> emerging-dns.rules

-> emerging-dos.rules

-> emerging-drop-BLOCK.rules

-> emerging-drop.rules

-> emerging-dshield-BLOCK.rules

-> emerging-dshield.rules

-> emerging-exploit.rules

-> emerging-ftp.rules

-> emerging-games.rules

-> emerging-icmp.rules

-> emerging-icmp_info.rules

-> emerging-imap.rules

-> emerging-inappropriate.rules

-> emerging-malware.rules

-> emerging-misc.rules

-> emerging-mobile_malware.rules

-> emerging-netbios.rules

-> emerging-p2p.rules

-> emerging-policy.rules

-> emerging-pop3.rules

-> emerging-rbn-BLOCK.rules

-> emerging-rbn.rules

-> emerging-rpc.rules

-> emerging-scada.rules

-> emerging-scan.rules

-> emerging-shellcode.rules

-> emerging-smtp.rules

-> emerging-snmp.rules

-> emerging-sql.rules

-> emerging-telnet.rules

-> emerging-tftp.rules

-> emerging-tor-BLOCK.rules

-> emerging-tor.rules

-> emerging-trojan.rules

-> emerging-user_agents.rules

-> emerging-virus.rules

-> emerging-voip.rules

-> emerging-web_client.rules

-> emerging-web_server.rules

-> emerging-web_specific_apps.rules

-> emerging-worm.rules

-> emerging.conf

-> gen-msg.map

-> gpl-2.0.txt

-> rbn-ips.txt

-> reference.config

-> sid-msg.map

-> snort-2.8.6-open.txt

-> unicode.map

Ahora es necesario indicar estas reglas en el fichero de configuración de Snort para que las pueda incluir en la ejecución de Snort, en concreto es necesario indicar las siguientes lineas en dicho fichero

INCLUYENDO BLEEDING-EDGE

include $RULE_PATH/bleeding-attack_response.rulesinclude $RULE_PATH/bleeding-drop.rules

include $RULE_PATH/bleeding-game.rules

include $RULE_PATH/bleeding-policy.rules

include $RULE_PATH/bleeding-virus.rules

include $RULE_PATH/bleeding-dshield-BLOCK.rules

include $RULE_PATH/bleeding-inappropriate.rules

include $RULE_PATH/bleeding-web.rules

include $RULE_PATH/bleeding-dos.rules

include $RULE_PATH/bleeding-dshield.rules

include $RULE_PATH/bleeding-malware.rules

include $RULE_PATH/bleeding-scan.rules

include $RULE_PATH/bleeding-drop-BLOCK.rules

include $RULE_PATH/bleeding-exploit.rules

include $RULE_PATH/bleeding-p2p.rules

include $RULE_PATH/bleeding-sid-msg.map

INCLUYENDO EMERGING-RULES

include $RULE_PATH/emerging-activex.rules

include $RULE_PATH/emerging-attack_response.rules

include $RULE_PATH/emerging-botcc-BLOCK.rules

include $RULE_PATH/emerging-botcc.rules

include $RULE_PATH/emerging-chat.rules

include $RULE_PATH/emerging-ciarmy.rules

include $RULE_PATH/emerging-compromised-BLOCK.rules

include $RULE_PATH/emerging-compromised.rules

include $RULE_PATH/emerging-current_events.rules

include $RULE_PATH/emerging-deleted.rules

include $RULE_PATH/emerging-dns.rules

include $RULE_PATH/emerging-dos.rules

include $RULE_PATH/emerging-drop-BLOCK.rules

include $RULE_PATH/emerging-drop.rules

include $RULE_PATH/emerging-dshield-BLOCK.rules

include $RULE_PATH/emerging-dshield.rules

include $RULE_PATH/emerging-exploit.rules

include $RULE_PATH/emerging-ftp.rules

include $RULE_PATH/emerging-games.rules

include $RULE_PATH/emerging-icmp.rules

include $RULE_PATH/emerging-icmp_info.rules

include $RULE_PATH/emerging-imap.rules

include $RULE_PATH/emerging-inappropriate.rules

include $RULE_PATH/emerging-malware.rules

include $RULE_PATH/emerging-misc.rules

include $RULE_PATH/emerging-mobile_malware.rules

include $RULE_PATH/emerging-netbios.rules

include $RULE_PATH/emerging-p2p.rules

include $RULE_PATH/emerging-policy.rules

include $RULE_PATH/emerging-pop3.rules

include $RULE_PATH/emerging-rbn-BLOCK.rules

include $RULE_PATH/emerging-rbn.rules

include $RULE_PATH/emerging-rpc.rules

include $RULE_PATH/emerging-scada.rules

include $RULE_PATH/emerging-scan.rules

include $RULE_PATH/emerging-shellcode.rules

include $RULE_PATH/emerging-smtp.rules

include $RULE_PATH/emerging-snmp.rules

include $RULE_PATH/emerging-sql.rules

include $RULE_PATH/emerging-telnet.rules

include $RULE_PATH/emerging-tftp.rules

include $RULE_PATH/emerging-tor-BLOCK.rules

include $RULE_PATH/emerging-tor.rules

include $RULE_PATH/emerging-trojan.rules

include $RULE_PATH/emerging-user_agents.rules

include $RULE_PATH/emerging-virus.rules

include $RULE_PATH/emerging-voip.rules

include $RULE_PATH/emerging-web_client.rules

include $RULE_PATH/emerging-web_server.rules

include $RULE_PATH/emerging-web_specific_apps.rules

include $RULE_PATH/emerging-worm.rules

Con esto en teoría debería bastar para tener las reglas funcionando en Snort, pero…

PROBLEMAS ENCONTRADOS

Aunque las reglas definidas en el fichero de configuración son aplicadas correctamente por Snort, en las ultimas versiones de Snort, he encontrado problemas con algunas de ellas, lo que me ha obligado a editarlas manualmente, a continuación indico los problemas encontrados y la solución que he aplicado para que no falle en el proceso de interpretación de la regla.

NOTA 1:

En todos los casos se ha producido el warning relacionado con la propiedad threshold (que no son pocas), que debe ser reemplazada con el atributo detection_filter, de este modo las reglas que empleen esta propiedad quedan con valores similares a los siguientes:

detection_filter: track by_src, count 10, seconds 60;

Sin embargo, al ser un warning no afecta de forma considerable el funcionamiento del motor.

NOTA 2:

Por otro lado en las reglas de Emerging, siempre se utiliza una propiedad llamada fwsam la cual ya no se encuentra las ultimas versiones de Snort, por lo tanto es necesario eliminarla de los ficheros, este ha sido el único conflicto que se ha producido utilizando las reglas Emerging.

  1. bleeding-attack_response.rules:
ERROR: rules/bleeding-policy.rules(921) Invalid tag arguments: sessionFatal Error, Quitting..

En este caso, el argumento sesión es invalido, simplemente se elimina de la regla.

  1. bleeding-drop.rules:
ERROR: rules/bleeding-policy.rules(921) Invalid tag arguments: sessionFatal Error, Quitting..

En este caso, el argumento sesión es invalido, simplemente se elimina de la regla.

  1. bleeding-policy.rules:
ERROR: rules/bleeding-policy.rules(921) Invalid tag arguments: sessionFatal Error, Quitting..

En este caso, el argumento sesión es invalido, simplemente se elimina de la regla.

  1. bleeding-virus.rules
ERROR: rules/bleeding-virus.rules(454) within (5) is smaller than size of patternERROR: /etc/snort/rules/bleeding-virus.rules(455) within (5) is smaller than size of pattern

El tamaño del atributo within debe ser igual a la longitud del atributo content mas uno, en las lineas 454 y 454 el valor del atributo content es el mismo (“email=”) por lo que el valor del atributo within debe ser 7.

  1. Bleeding-dshield-BLOCK.rules
ERROR: /etc/snort/rules/bleeding-dshield-BLOCK.rules(40) Unknown rule option: ‘fwsam’.

El atributo fwsam ya no se encuentra soportado en las ultimas versiones de Snort, por esta razón es necesario eliminarlo de la regla.

  1. bleeding-inappropriate.rules
ERROR: /etc/snort/rules/bleeding-inappropriate.rules(48) Unknown ClassType: kickass-porn

El error generado, indica que la clasificación “kickass-porn” no se ha incluido en el fichero de clasificaciones de Snort. Como se ha indicado en entradas anteriores de este blog, las clasificaciones de Snort, se declaran en un fichero independiente que posteriormente se incluye en el fichero de configuración global:
include classification.config

En el fichero classification.config se define la clasificacion faltante:
config classification: kickass-porn,WTF? Bad behavior,2

Donde se detalla, el nombre corto, la descripción y la prioridad

  1. bleeding-web.rules
ERROR: /etc/snort/rules/bleeding-web.rules(122) Tag host type must specify directionERROR: /etc/snort/rules/bleeding-web.rules Line 223 => unable to parse pcre regex «_px_config\x5bmanager_path\x5d=(http|ftp|https)\:/i»ERROR: /etc/snort/rules/bleeding-dos.rules(51) depth can’t be used with itself, distance, or within

El error indica que es necesario definir la dirección de los paquetes que serán registrados por la opción “tag”, la dirección quiere decir, el sentido en el que viajan los paquetes, si se trata del origen o el destino de los mismos, para esto se especifica uno de dos valores “scr” (origen) o “dst” (destino).

Existe una expresión regular que no se encuentra bien formada, se recomienda eliminar esta regla.

  1. bleeding-dos.rules
ERROR: /etc/snort/rules/bleeding-dos.rules(51) depth can’t be used with itself, distance, or withinFatal Error, Quitting..ERROR: /etc/snort/rules/bleeding-dos.rules (73): Invalid ICMP icode in rule: >1<5

En primer lugar es necesario eliminar el atributo depth de aquellos sitios de la regla ubicada en la linea 51, donde se utilice las propiedades distance y within

El valor de icode es incorrecto, dado que esta propiedad se utiliza para chequear un valor ICMP especifico o un rango, se puede establecer el valor de 1 a 5 (1<>5

  1. bleeding-maleware.rules
ERROR: /etc/snort/rules/bleeding-malware.rules(160) within (10) is smaller than size of patternERROR: /etc/snort/rules/bleeding-malware.rules Line 582 => unable to parse pcre regex «User-Agent\:[^\n]+SecureNet[^\n]+Xtra/i»

La longitud del contenido es de 15 caracteres, por este motivo el valor del atributo within es incorrecto, debería ser 16.
Existen mas errores relacionados con la longitud de este atributo, pero se solucionan fácilmente indicando el valor correcto de la longitud al atributo within por este motivo no se indican aquí.

Se recomienda eliminar la expresión regular que esta fallando.

  1. bleeding-exploit.rules
ERROR: /etc/snort/rules/bleeding-exploit.rules(411) within (5) is smaller than size of patternERROR: /etc/snort/rules/bleeding-exploit.rules(419) within can’t be used with itself, offset, or depth

Existen varios errores relacionados con el atributo within, solamente se debe indicar el valor correcto como se ha indicado anteriormente.

Por otro lado se debe remover cualquier inconsistencia con el uso de los atributos within, distance, offset y depth como se ha indicado en la entrada anterior.

Finalmente, las modificaciones anteriormente mencionadas se encuentran disponibles en la siguiente ruta: http://www.fileserve.com/file/MtJk8hU de esta forma, si el lector lo desea, puede utilizar directamente esta versión de las reglas que le permitirá probarlas sin necesidad de editarlas manualmente.