Introducción
El lenguaje usado por
Snort es flexible y potente, basado en una serie de normas que serán las que nos sirvan de guía para la escritura de las reglas.
Dentro de estas normas tenemos:
- la descripción de cada regla
- cabecera
- opciones
- uso de preprocesadores
Dentro del lenguaje
Snort de rules (reglas) veremos el
uso intensivo de nociones de TCP/IP, en concreto de
TCP, flag, números de secuencia, etc, etc, por lo cual es
imprescindible su repaso para una mejor comprensión.
Recomendado el uso tambíén de
software de captura de paquetes tipo
Ethereal o
TCPdump/Windump para ver en un escenario real la función de las nociones aprendidas sobre
TCP como:
- el establecimiento de una conexión TCP (ver explicación en el cápítulo dedicado a Nmap APÉNDICE 1.1)
- el flujo de datos
- el uso de flags
- conexiones half-open usadas en escaneos de puertos
- etc.
Reglas
La reglas
Snort las podemos dividir en dos secciones lógicas, a saber:
cabecera de la regla y opciones:
- La cabecera contiene la acción de la regla en sí, protocolo, IPs, máscaras de red, puertos origen y destino y destino del paquete o dirección de la operación.
- La sección opciones contiene los mensajes y la información necesaria para la decisión a tomar por parte de la alerta en forma de opciones.
Resumiendo lo visto hasta ahora,
las reglas Snort las dividiremos de la siguiente manera:
|| CABECERA ~- Acción ~- Protocolos involucrados ~- Direcciones IP ~- Números de puerto ~- Dirección de la operación || OPCIONES ~- Mensaje ~- Opciones de decisión ||
EJEMPLO 1
Veamos ahora un
ejemplo de regla Snort para alertar de un
escaneo nmap del
tipo TCP ping:
alert tcp $EXTERNAL_NET any -> $HOME_NET any
(msg:"Escaneo ping con nmap";flags:A;ack:0; reference:arachnids,28;classtype:attempted-recon; sid:628; rev:1;)
Analicemos esta alerta:
CABECERA
- Acción de la regla: alert
- Protocolo: tcp
- Direccion IP origen: $EXTERNAL_NET (toda la red)
- Puerto IP origen: any (cualquiera)
- Direccion IP destino: $HOME_NET (toda nuestra red)
- Puerto IP destino: any (cualquiera)
- Dirección de la operación: -> (puede ser ->, <-, <>)
OPCIONES
- Mensaje: msg
- Opciones: flags:A;ack:0; reference:arachnids..(1)
Un poco de teoría:
- flags:A Establece el contenido de los flags o banderas TCP, en este caso ACK (puede tener varios valores y operadores que veremos más adelante).
- ack: Caso particular para valor ACK=0, es el valor que pone nmap para TCP ping scan.
- reference:arachnids,28 Referencia un a un Advisory, alerta tipo Bugtrac, etc.
- classtype:attempted-recon Categoría de la alerta según unos niveles predefinidos y prioridades (veremos más adelante las categorías).
- sid:628 Identificación única para esta regla snort según unos tramos determinados.
- rev:1 Identificación de la revisión o versión de la regla.
EJEMPLO 2
En el
manual oficial del
Snort como primer ejemplo tenemos:
alert tcp any any -> 192.168.1.0/24 111
(content:"|00 01 86 a5|"; msg: "mountd access";)
Acceso al
demonio de administración mountd de
UNIX, el cual tiene tiene diversos problemas de desbordamiento de memoria intermedia, que permiten a un
atacante remoto obtener
privilegios de administrador en los sistemas vulnerables.
Dos consideraciones:
- El orden de la sección opciones. Primero las opciones y después el mensaje. El orden, pues, es indiferente.
- La opción 'content'. Es una de las opciones más importantes ya que nos permite la búsqueda de contenidos dentro del campo datos del paquete IP. Se puede añadir 'nocase' para que la búsqueda de los datos no sea sensible a las mayúsculas. Estos datos pueden estar en formato hexadecimal, texto plano o binario.