Krypton Solid

La última tecnología en raciones de 5 minutos

Uso de Snort 2.8.3 para inspeccionar el tráfico HTTP

Conclusión del proveedor de soluciones: los proveedores de soluciones aprenderán nuevas funciones en Snort 2.8.3 para mejorar la granularidad …[**]

de inspeccionar el tráfico HTTP.[**]

¡Bienvenido a la vigésima edición del Informe Snort! En julio, describimos nuevas funciones en Snort 2.8.2 y cómo identificarlas en comparación con Snort 2.8.0 y versiones intermedias. Desde entonces, han llegado Snort 2.8.2.1, 2.8.2.2 y 2.8.3. En esta edición del Informe Snort, usaremos las técnicas explicadas anteriormente para aprender las novedades de Snort 2.8.3 y luego probaremos esas técnicas nosotros mismos.[**]

El primer lugar para buscar noticias sobre las funciones recientes de Snort siguen siendo las notas de la versión. Un vistazo a las notas de la versión 2.8.2.1 y 2.8.2.2 muestran principalmente «mejoras» que involucran una acción de «arreglar», como «* Solucionar problema con la verificación de rango de dsize».[**]

Más sobre Snort
Para obtener más información sobre el software de detección de intrusiones en la red de código abierto, consulte nuestros Informes Snort.

Eso es interesante, me pregunto qué problema se solucionó. La palabra clave dsize se utiliza para probar el tamaño de la carga útil del paquete. Por ejemplo, podría decirle a Snort que acepte una coincidencia solo si la carga útil de un paquete (por encima de la capa 4) es menor que una cierta cantidad de bytes, o mayor que una cierta cantidad de bytes, o entre una cierta cantidad de bytes.[**]

Por ejemplo, la siguiente regla de amenazas emergentes utiliza la palabra clave dsize para hacer coincidir solo los paquetes con cargas útiles de datos de menos de 30 bytes.[**]

alert tcp $ HOME_NET cualquiera -> $ EXTERNAL_NET 20000 (msg: «ET MALWARE Realtimegaming.com Registro de juegos de software espía de casino en línea»; flujo: establecido, to_server; dsize: <30; contenido: "| 43 01 00 |"; profundidad: 4 ; contenido: "Casino"; nocase; classtype: trojan-activity; sid: 2008402; rev: 2;)[**]

La siguiente regla de amenazas emergentes busca paquetes con cargas útiles de datos entre 9 y 18 bytes, (probablemente) inclusive.[**]

alert tcp $ EXTERNAL_NET 1024: 5000 -> $ HOME_NET 1024: 65535 (msg: «ET MALWARE SOCKSv4 Port 25 Inbound Request (Windows Source)»; dsize: 9 <> 18; flujo: establecido, to_server; contenido: «| 04 01 00 19 | «; desplazamiento: 0; profundidad: 4; umbral: escriba ambos, seguimiento por_src, cuenta 2, segundos 900; classtype: protocol-command-decode; sid: 2003256; rev: 3;)[**]

La belleza de un programa de código abierto como Snort es que uno puede leer detenidamente el código fuente o, mejor aún, el árbol CVS en busca de cambios como el que involucra la palabra clave dsize. En los viejos tiempos, el proyecto Snort apoyaba una lista de correo (https://lists.sourceforge.net/lists/listinfo/snort-cvsinfo) que publicaba comentarios individuales como mensajes de correo electrónico. Si ese método aún fuera compatible, se podría buscar en los archivos de la lista las menciones recientes de «dsize».[**]

Dado que ese mecanismo ya no es compatible, decidí hacer grep en el directorio src / del archivo 2.8.3 para «dsize» para ver qué podría aparecer. Me di cuenta de que decode.c, decode.hy varios archivos .c en el directorio de complementos de detección contenían la cadena dsize. Acudí al sitio web en línea de Snort CVS y examiné el contenido del directorio src /, con los contenidos ordenados por edad:[**]

http://cvs.snort.org/viewcvs.cgi/snort/src/?sortby=date#dirlist[**]

No vi nada interesante en los registros de CVS para decode.cy decode.h, así que me mudé al directorio de complementos de detección. De inmediato, encontré la última entrada de registro para sp_dsize_check.c con lo siguiente: «Soluciona el problema con la verificación de rango de la opción de regla ‘dsize’. Gracias a Bhadresh Patel». Eso tiene sentido, incluso el archivo .c lleva el nombre del problema que estoy investigando aquí. Al visitar el registro de CVS para sp_dsize_check.c, pude comparar la última versión (1.23) con la anterior (1.22) haciendo clic en el enlace «Diff to previous 1.22».[**]

Finalmente, veo que estas líneas:[**]

caso DSIZE_RANGE:
if ((ds_ptr-> dsize <= p-> dsize) &&
(ds_ptr-> dsize <= p-> dsize))
rval = DETECTION_OPTION_MATCH;
descanso;[**]

se cambiaron a estos:[**]

caso DSIZE_RANGE:
if ((ds_ptr-> dsize <= p-> dsize) &&
(ds_ptr-> dsize2 <= p-> dsize))
rval = DETECTION_OPTION_MATCH;
descanso;[**]

No soy un programador de C, por lo que no puedo decir si hay implicaciones de seguridad de este cambio. Lo dudo, porque Sourcefire tiende a decirle al mundo cuándo se requiere un aviso de seguridad. Aún así, si tiene la voluntad y la habilidad, podría determinar el impacto de este cambio por sí mismo.[**]

Antes de pasar a la verdadera joya en las notas de la versión 2.8.3, me gustaría mencionar brevemente la segunda forma en que me gustaría conocer las nuevas funciones de Snort: examinar los cambios en el archivo snort.conf. En el siguiente ejemplo, utilizo diff para buscar diferencias entre el snort.conf enviado con 2.8.2 y el snort.conf en 2.8.3:[**]

freebsd70: / usr / local / src # diff snort-2.8.2 / etc / snort.conf snort-2.8.3 / etc / snort.conf
2c2
<# http://www.snort.org Snort 2.8.2 Conjunto de reglas

> # http://www.snort.org Snort 2.8.3 Conjunto de reglas
490c490
<

> #[**]

Como puede ver, el único cambio es una nueva numeración de 2.8.2 a 2.8.3.[**]

Volviendo a las notas de la versión, vemos este artículo interesante:[**]

* Nueva función para HTTP Inspect para dividir las solicitudes en 5 componentes:
Método, URI, Encabezado (sin cookies), Cookies, Cuerpo. Servidor HTTP agregado
configuraciones específicas para normalizar el encabezado HTTP y / o búferes de cookies.
Contenido proporcionado y modificadores de PCRE para permitir búsquedas dentro de uno o
más de esos búferes individuales. Se agregó un modificador de contenido para permitir la regla.
escritor para especificar el contenido que se utilizará para el emparejador de patrones rápido.
API de reglas dinámicas actualizada para permitir búsquedas dentro de los nuevos búferes.[**]

Esto me recuerda el tercer lugar que me gusta revisar para comprender las nuevas funciones de Snort: el directorio doc /. Una forma rápida de encontrar nuevas funciones es ver el directorio CVS doc / e identificar los archivos más recientes. (README.dcerpc ha sido muy modificado, pero ese es un tema para un informe Snort futuro). Una mirada a las diferencias entre README.http_inspect 1.23 y 1.24 explica las nuevas capacidades de ese preprocesador, básicamente cambiando «flow_depth» a «server_flow_depth» y «client_flow_depth», y agregando «normalize_headers» y «normalize_cookies».[**]

Este descubrimiento nos lleva al último lugar donde se pueden buscar más detalles sobre las funciones de Snort: el manual. Un vistazo a la entrada para el ejemplo de HTTP Inspect proporciona detalles sobre los cuatro cambios que se acaban de enumerar. Sin embargo, la solicitud HTTP dividida en «cinco componentes» no aparece allí. En cambio, al revisar la sección Opciones de reglas de detección de carga útil del manual, se muestran cinco nuevas opciones de reglas: http_client_body, http_cookie, http_header, http_method y http_uri.[**]

Probemos esas opciones, utilizando la metodología descrita en el número del Informe Snort sobre las nuevas funciones de Snort 2.8.0: IPv6 y listas de puertos. Comience compilando Snort 2.8.3 y moviendo los archivos críticos a su lugar.[**]

freebsd70: /usr/local/src/snort-2.8.3# mkdir /usr/local/snort-2.8.3[**]

freebsd70: /usr/local/src/snort-2.8.3# ./configure –enable-dynamic-plugin –prefix = / usr / local / snort-2.8.3
freebsd70: /usr/local/src/snort-2.8.3# make
freebsd70: /usr/local/src/snort-2.8.3# make install[**]

freebsd70: /usr/local/src/snort-2.8.3# cp etc / snort.conf /usr/local/snort-2.8.3/
freebsd70: /usr/local/src/snort-2.8.3# cp etc / snort.conf /usr/local/snort-2.8.3/snort.conf.2.8.3
freebsd70: /usr/local/src/snort-2.8.3# cp etc / unicode.map /usr/local/snort-2.8.3/
freebsd70: /usr/local/src/snort-2.8.3# cp etc / class.config /usr/local/snort-2.8.3/
freebsd70: /usr/local/src/snort-2.8.3# cp etc / reference.config /usr/local/snort-2.8.3/
freebsd70: /usr/local/src/snort-2.8.3# cd /usr/local/snort-2.8.3/[**]

Siguiente prueba Snort 2.8.3.[**]

freebsd70: /usr/local/snort-2.8.3# bin / snort -V[**]

,, _ – *> ¡Resoplido! <* -
o «) ~ Versión 2.8.3 (Compilación 16) FreeBSD
» » Por Martin Roesch y The Snort Team: http://www.snort.org/team.html
(C) Copyright 1998-2008 Sourcefire Inc., et al.
Utilizando la versión PCRE: 7.4 2007-09-21[**]

Crea una regla simple:[**]

# cat snortconf.test
alert icmp any any -> any any (msg: «Prueba de eco ICMP LOCAL»; itype: 8; sid: 2000000;)[**]

Ejecute Snort con la regla usando el interruptor -T:[**]

freebsd70: /usr/local/snort-2.8.3# bin / snort -T -c snortconf.test
Ejecutando en modo de prueba con archivo de configuración: snortconf.test
Ejecutando en modo IDS
… editado …
¡Snort cargó con éxito todas las reglas y verificó todas las cadenas de reglas![**]

Finalmente, intente ejecutar la regla simple en una interfaz en vivo. Tenga en cuenta que tenemos que especificar un directorio de registro con la opción -l. En una terminal separada, genero un solo paquete ICMP usando «ping -c 1» para activar la alerta de prueba simple.[**]

freebsd70: /usr/local/snort-2.8.3# bin / snort -i le0 -c snortconf.test -Una consola -l / tmp /[**]

Ejecutando en modo IDS
… editado …
Inicializando la interfaz de red le0
Decodificación de Ethernet en la interfaz le0[**]

[ Port Based Pattern Matching Memory ][**]

– == Inicialización completa == -[**]

,, _ – *> ¡Resoplido! <* -
o «) ~ Versión 2.8.3 (Compilación 16) FreeBSD
» » Por Martin Roesch y The Snort Team: http://www.snort.org/team.html
(C) Copyright 1998-2008 Sourcefire Inc., et al.
Utilizando la versión PCRE: 7.4 2007-09-21[**]

Sin usar PCAP_FRAMES
27 / 09-22: 29: 37.455614 [**] [1:2000000:0] Prueba de eco ICMP LOCAL [**] [Priority: 0] {ICMP} 192.168.237.1 -> 192.168.237.131[**]

Hasta ahora tan bueno. Creemos reglas que prueben todas las funciones excepto http_client_body. Tenemos que habilitar frag3, stream5 y http_inspect antes de poder usar cualquier regla que se base en http_inspect.[**]

freebsd70: /usr/local/snort-2.8.3# cat snortconf.test[**]

preprocesador frag3_global: max_frags 65536
preprocesador frag3_engine: política primero detect_anomalías[**]

preprocesador stream5_global: max_tcp 8192, track_tcp sí,
track_udp no
preprocesador stream5_tcp: política primero, use_static_footprint_sizes[**]

preprocesador http_inspect: global
iis_unicode_map unicode.map 1252[**]

preprocesador http_inspect_server: servidor predeterminado
perfilar todos los puertos {80 8080 8180} oversize_dir_length 500[**]

alert icmp any any -> any any (msg: «Prueba de eco ICMP LOCAL»; itype: 8; sid: 2000000;)
alert tcp any any -> any 80 (msg: «LOCAL http_header test for gzip»; content: «gzip»; http_header; sid: 2000001;)
alert tcp any any -> any 80 (msg: «LOCAL http_method test for GET»; content: «GET»; http_method; sid: 2000002;)
alert tcp any any -> any 80 (msg: «LOCAL http_uri test for books»; content: «books»; http_uri; sid: 2000003;)
alerta tcp any any -> any 80 (msg: «Prueba http_cookie LOCAL para PHPSES»; contenido: «PHPSES»; http_cookie; sid: 2000004;)[**]

Sid 2000001 busca la cadena gzip en cualquier encabezado HTTP enviado por el cliente. Sid 2000002 busca un método GET. Sid 2000003 busca los libros de cuerdas en el URI. Sid 2000004 busca PHPSES en las cookies enviadas por el cliente.[**]

Mientras navegaba por bestbookbuys.com a través de Lynx para activar alertas, vi lo siguiente:[**]

27 / 09-22: 45: 55.530086 [**] [1:2000004:0] Prueba de http_cookie LOCAL para PHPSES [**] [Priority: 0] {TCP} 192.168.237.131:54767 -> 66.186.18.10:80
27 / 09-22: 46: 03.596011 [**] [1:2000003:0] Prueba http_uri LOCAL para libros [**] [Priority: 0] {TCP} 192.168.237.131:55476 -> 66.186.18.10:80
27 / 09-22: 46: 03.596011 [**] [1:2000001:0] Prueba de http_header LOCAL para gzip [**] [Priority: 0] {TCP} 192.168.237.131:55476 -> 66.186.18.10:80
27 / 09-22: 46: 03.596011 [**] [1:2000002:0] Prueba de http_method LOCAL para GET [**] [Priority: 0] {TCP} 192.168.237.131:55476 -> 66.186.18.10:80[**]

Cuando tenga un ejemplo decente de una regla http_client_body que funcione, la publicaré en mi blog.[**]

Con suerte, este artículo compartió métodos que puede utilizar para conocer las nuevas funciones de Snort y también mostró cómo las mejoras recientes de HTTP Inspect pueden cobrar vida en el entorno de su cliente.[**]

Sobre el Autor
Richard Bejtlich es fundador de TaoSecurity, autor de varios libros sobre monitoreo de seguridad de red, incluido Extrusion Detection: Security Monitoring for Internal Intrusions, y operador del blog TaoSecurity.
[**]

Deja un comentario

También te puede interesar...

Oracle quiere un nuevo trozo de pastel de hosting

Oráculo buscando una nueva área para ganancias adicionales: hospedaje y administración de la base de datos de clientes y software de servidor de aplicaciones web. Los ejecutivos de Oracle confían en los servicios alojados para

Caso de éxito de Getty Images: Chrome Enterprise

Acerca de Getty Images Getty Images trabaja con más de 350,000 colaboradores y cientos de socios de imágenes para brindar una cobertura integral de más de 160,000 eventos de noticias, deportes y entretenimiento cada año,

Conociendo el proxy de la API

El aumento de trabajadores remotos ha renovado el interés en los proxies de API, incluso para organizaciones que tienen un largo historial de exposición de API para acceso remoto. Los trabajadores remotos requieren acceso a

Banco de la Reserva Federal de Boston

¿Qué es el Banco de la Reserva Federal de Boston? El Banco de la Reserva Federal de Boston es uno de los 12 bancos de reserva del Sistema de la Reserva Federal (FRS). El banco

¿Qué son las personas compradoras?

Una persona compradora es una representación compuesta de una subdivisión específica de un segmento de mercado. Mientras que un segmento de mercado representa una colección de clientes que comparten una necesidad común, una persona compradora

OpenStack: ¿Estás listo para emprender más negocios?

Según Forrester Research, OpenStack está listo para la implementación empresarial, pero hay momentos difíciles que probablemente lo revelarán a nuevas cargas de trabajo y al uso de desarrolladores de autoservicio. Dadas las noticias de la

5 lecciones del pasado

La industria petrolera está impulsada por auges y crisis. Los precios suelen subir durante los períodos de poder económico mundial cuando la demanda supera la oferta. Los precios caen cuando ocurre lo contrario y la

Usando Vista para presentar Linux

Tiendo a mirar y pensar en términos de TI en organizaciones más grandes. Tomemos una empresa con unos pocos miles de escritorios y es relativamente difícil defender el escritorio Linux, porque el problema fundamental es

NASTD: gasto en TI de EE. UU. Krypton Solid

Acepta recibir actualizaciones, promociones y alertas de Krypton Solid.com. Puede darse de baja en cualquier momento. Al registrarse, acepta recibir boletines seleccionados de los que puede darse de baja en cualquier momento. Tu tambien estas

Las acciones tecnológicas lideran el mercado

Aparentemente, los inversores optimistas han perdonado el horrible desempeño de los mercados asiáticos durante la noche para hacer que el promedio industrial Dow Jones y el índice compuesto NASDAQ regresen a territorio positivo al mediodía.

Nueva vulnerabilidad de Azure corregida por Microsoft

Una vulnerabilidad recientemente revelada en Azure Container Instances podría haber permitido a los actores de amenazas ejecutar código en los contenedores de otros usuarios. Microsoft dijo el miércoles que la vulnerabilidad se ha solucionado y