Inicio > Hacking, Services - Software > Utilizando RuleSets en Snort para Detección de Amenazas y Generación de Alarmas – Parte II

Utilizando RuleSets en Snort para Detección de Amenazas y Generación de Alarmas – Parte II

En la entrada anterior se ha indicado la estructura y las principales opciones con las que es posible declarar una regla en Snort, en esta ocasión intentare indicar opciones avanzadas para la detección de payloads en Snort, estas opciones se incluyen en la estructura de cualquier regla declarada en Snort, sin embargo permiten profundizar y filtrar aun más en los paquetes capturados por Snort en modo IDS/NIDS.

A continuación se listan las principales opciones diseñadas específicamente para filtrar ataques llevados a cabo desde el exterior del segmento de red o desde el interior.

nocase

Se trata de una opción que permite a Snort ignorar patrones específicos en los formatos de cadena (mayúsculas/minúsculas), es decir, indica que no debe diferenciar entre mayúsculas y minúsculas.

alert tcp any any -> any 21 (msg:”user ADASTRA”; content:”root USER”; nocase;)

content

Busca un contenido especifico en el paquete y genera una respuesta en base a los datos filtrados, el contenido con el que se filtrará cada paquete es case-sensitive por esta razón es valido utilizarlo en conjunto con la opción nocase, ademas también ejecuta la búsqueda del patrón en todos los campos del paquete. Una de las características de esta opción es que no solamente admite cadenas de texto para buscar en el contenido del paquete, sino que también se pueden declarar datos binarios y cadenas de texto mezcladas con datos binarios (payloads en hexadecimal “pipeados” con el carácter “|”). Otra característica interesante es que pueden existir múltiples declaraciones de content en una misma regla lo que permite declarar múltiples filtros en el contenido del paquete

alert tcp any any -> any 139 (content:”|5c 00|P|00|I|00|P|00|E|00 5c|”;)

alert tcp any any -> any 80 (content:!”PUT”; content:!”HEAD”; content:!”TRACE”;

rawbytes

Permite a las reglas buscar directamente en el contenido crudo de cada paquete ignorando las decodificaciones realizadas por cualquier preprocesador (Recordar que los preprocessors se ejecutan justo antes que las reglas en Snort).

alert tcp any any -> any 21 (msg:”Telnet NOP”; content:”|FF F1|”; rawbytes;)

depth

Indica el número de bytes que debe utilizar Snort para la búsqueda por un contenido determinado, esta opción altera el comportamiento de la opción content explicada anteriormente, por esta razón, es obligatorio declarar la opción content antes de declarar esta opción. El valor que se indique determina el número de bytes del paquete que Snort buscará, por ejemplo si se declara el valor de 20, Snort inspeccionará solamente los primeros 20 bytes del paquete empleando en el patrón declarado en la opción content. Los valores validos estan entre 1 y 65535. Esta opción en la versión actual de Snort no puede ir acompañada de las opciones within o distance aplicando sobre el mismo filtro de content

offset

Es similar depth, sin embargo este atributo indica a partir de cuantos bytes debe comenzar a inspeccionarse el contenido de un paquete. Al igual que depth debe estar definida después de declarar la opción content. Si por ejemplo se declara un valor de 20, Snort inspeccionara todo el paquete hasta el final de su contenido, pero omitiendo los 20 primeros bytes del contenido, nuevamente aplicando el patrón de búsqueda declarado en la opción content. Los valores validos están entre -65535 y 65535. Esta opción en la versión actual de Snort no puede ir acompañada de las opciones within o distance aplicando sobre el mismo filtro de content.

distance

Se trata de un atributo similar a offset, sin embargo se diferencia en que mientras que la opción offset intenta aplicar el filtro de la opción content después de los primeros N bytes, mientras que distance intentara aplicar aplicar este numero de bytes al final del ultimo patrón (recordar que se pueden definir múltiples patrones de búsqueda con la opción content). El valor de este atributo esta entre -65535 y 65535. Este atributo no puede ser declarado con offset o depth (aplicando al mismo content)

alert tcp any any -> any any (content:”1234″; content:”567″; distance:1;)

En la regla anterior se declara realmente una expresión regular que indica que si se encuentra un paquete que coincida con el contenido “1234” debe inspeccionar que el siguiente byte de dicho paquete contenga “567”.

within

Esta opcion intenta asegurar que al menos N bytes están entre el patron de coincidencia usado y el content, suele ir acompañado de la opcion distance y no se puede utilizar junto con las opciones offset y depth el valor debe ser mayor o igual a la longitud del patron que se esta buscando (longitud de la opcion content) y menor o igual a 65535

alert tcp any any -> any any (content:”ABC”; content:”EFG”; within:10;)

Indica que una existe una coincidencia del filtro “ABC” a partir de los proximos 10 bytes, se debe encontrar la cadena “EFG” para que la alarma se active.

http_client_body

Modificador de contenido que restringue la busqueda solamente al cuerpo de una peticion HTTP, actua de forma similar a la opcion content, sin embargo, esta depende del preprocessor HTTP Inspect, en concreto de la opcion post_depth de dicho preprocessor, en el caso de que su valor sea -1, esta opcion no funcionara correctamente.

alert tcp any any -> any 80 (content:”1234″; content:”evilware”; http_client_body;)

La regla anterior buscara el contenido “evilware” en el cuerpo de la peticion HTTP.

http_cookie

Modificador de contenido que restringue la busqueda solamente a las cookies extraidas de una peticion o respuesta HTTP. Depende del preprocessor HTTP inspect en concreto de que se encuentre activada la opcion enable_cookie

alert tcp any any -> any 80 (content:”1234″; content:”evilcookie”; http_cookie;)

La regla anterior buscara el contenido “evilcookie” de las cookies extraidas de los encabezados de la peticion HTTP.

http_header

Modificador de contenido que restringue la busqueda solamente al header extraido de una peticion o respuesta HTTP

alert tcp any any -> any 80 (content:”ABC”; content:”EFG”; http_header;)

Esta regla buscara el patron de busqueda “EFG” en el header de la peticion HTTP.

http method

Modificador de contenido que restringue la busqueda solamente sobre el metodo HTTP utilizado en una peticion HTTP

alert tcp any any -> any 80 (content:”ABC”; content:”GET”; http_method;)

Esta regla buscará el patrón de búsqueda “GET” para el metodo HTTP utilizado en una peticion.

pcre

Esta opción permite utilizar expresiones regulares escritas en Perl para mayor información ver: http://www.pcre.org

alert ip any any -> any any (pcre:”/EVIL/i”;)

Ejecuta una búsqueda por el patrón EVIL sin tener en cuenta mayúsculas y minúsculas.

uricontent

Se trata de un atributo que intenta buscar peticiones normalizadas en la URI de una petición HTTP, funciona correctamente en conjunto con el preprocessor HTTP Inspect, este atributo realiza búsquedas sobre contenido normalizado, para realizar búsquedas sobre contenido no normalizado se debe utilizar el atributo content.

urilen

Permite indicar una búsqueda del contenido de la URI en función a su tamaño, se puede establecer si tiene un valor exacto o especificar un rango concreto, por ejemplo

alert tcp any any -> any 80 (content:”ABC”; content:”GET”; urilen:5;)

La Longitud de la URI es de 5 bytes

alert tcp any any -> any 80 (content:”ABC”; content:”GET”; urilen:<5;)

La Longitud de la URI es menor a 5 bytes

alert tcp any any -> any 80 (content:”ABC”; content:”GET”; urilen:5<>10;)

La longitud de la URI es mayor a 5 bytes y menor de 10.

ftpbounce

Detecta ataques FTP Bounce.

alert tcp any any -> any 80 (content:”ABC”; ftpbounce;)

asn1

Se trata de un plugin que intenta decodificar un paquete (o porción de él) y buscar encodings maliciosos, acepta múltiples argumentos que son evaluados con instrucciones OR lo que quiere decir que si cualquiera de las evaluaciones llevadas sobre de dichos argumentos retorna true, la regla completa retorna true. Las opciones soportadas por asn son:

bitstring_overflow

Detecta cadenas de bytes codificadas que son conocidas como remotamente explotables.

double_overflow

Detecta doble codificación ASCII que es mayor al tamaño de buffer estándar

oversize_length <numero>

Compara las longitudes del paquete y el argumento y si es mayor que el argumento, la regla se evaluá a True.

csv

Ayuda a la detección del bug CVE-2004-0396 de CSV decodificado el contenido de los paquetes, sin embargo, estos no pueden viajar encriptados, ya que de ser así, esta opción no funcionará de forma correcta.

alert tcp any any -> any 80 (content:”ABC”; csv;)

Estas han sido solamente algunas de las opciones disponibles en Snort para controlar el comportamiento de las reglas escritas, sin embargo existen algunas otras que seguramente son útiles dependiendo del entorno que se desea proteger, para mayor información ver el manual de referencia de Snort.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: