La regla de Snort no funciona cuando se combinan campos de "contenido"

2

Estoy intentando escribir una regla de snort que genera una alerta cada vez que un servidor web devuelve un documento HTML que contiene una cadena específica.

Se me ocurrió la siguiente regla:

alert tcp any any -> any any (msg:"Yay"; flow:to_client,established; content:"Content-Type: text/html"; http_header; content:"Hello there"; metadata:service http; sid:12345678; rev:1;)

La primera consulta content comprueba si la respuesta contiene un documento HTML, la segunda comprueba la presencia de la cadena específica con la que quiero probar la respuesta.

Lo extraño es que, al eliminar cualquiera de los campos content , la alerta funciona bien. En combinación, sin embargo, no lo hace.

¿Alguien sabe por qué?

    
pregunta ruhleder 03.06.2015 - 23:48
fuente

1 respuesta

1

Sé que esta es una pregunta antigua, pero esto es algo con lo que me he topado muchas veces, así que creo que dar una respuesta puede ayudar a otros que se han encontrado con esto.

Mi explicación

En mi experiencia, algunas versiones de Snort tienen problemas al cambiar de usar las opciones de HTTP que responden en el análisis del preprocesador y luego cambiar a no usarlas. Dada la regla que proporcionó, la primera cadena de contenido:

content:"Content-Type: text/html"; http_header;

Utiliza el preprocesador http y el motor de Snort entra en el modo de analizar partes de la solicitud / respuesta. Siguiendo con la cadena de contenido:

content:"Hello there";

... sin especificar dónde encontrarlo, el motor Snort tiene dificultades para encontrarlo.

Por supuesto, esta es mi "teoría" basada en la experiencia y la resolución de problemas de prueba y error.

Soluciones posibles

  1. Especifique content:"Hello there"; antes del otro contenido (muévase a la izquierda). Si corresponde, especifique fast_pattern:only; .

  2. Deje el content:"Hello there"; donde está, pero intente agregar la opción pkt_data; antes. Esto le indicaría a Snort que se olvide de analizar los elementos de solicitud / respuesta HTTP y que mueva doe_ptr al comienzo de la solicitud HTTP (es decir, el paquete) y luego busque el contenido. O, si ese contenido es esperado en los datos del archivo de la respuesta, use la opción file_data; en su lugar. Nuevamente, pkt_data; o file_data; requieren que coloques esas opciones antes antes las opciones content que deben verse afectadas.

respondido por el Damian T. 13.07.2018 - 18:49
fuente

Lea otras preguntas en las etiquetas