Cómo escribir reglas de detección de bufidos
1. Conceptos básicos
snort utiliza un lenguaje de descripción de reglas simple, que es fácil de expandir y tiene funciones poderosas. Estas son algunas de las cosas más básicas:
Cada regla en snort debe estar en una línea, y su intérprete de reglas no puede analizar reglas que abarquen líneas. Nota: Por motivos de diseño, algunos ejemplos de este artículo se dividen en dos líneas.
Cada regla en Snort se puede dividir en dos partes lógicas: encabezado de regla y opciones de regla. El encabezado de la regla incluye: acción de la regla, protocolo, dirección IP de origen/destino, máscara de subred y puerto de origen/destino. Las opciones de reglas incluyen información de alarma e información de paquetes anormales (firmas), y estas firmas se utilizan para decidir si se deben tomar las acciones especificadas por las reglas.
Este es un ejemplo:
alert tcp any any -gt; 192.168.1.0/24 111(content: "|00 01 86 a5|"; msg: "mountd access" ;)
Tabla 1. Una regla de snort simple
Los corchetes desde el principio hasta el extremo izquierdo pertenecen al encabezado de la regla, y la parte entre corchetes pertenece a las opciones de la regla. Las palabras antes de los dos puntos en las opciones de la regla se denominan palabras clave de opción. Tenga en cuenta que las opciones de regla no son necesarias para cada regla; se utilizan para definir con más detalle qué paquetes se deben recopilar o alertar. Sólo los paquetes que coincidan con todas las opciones realizarán el comportamiento de regla. Si se combinan muchas opciones, existe una relación lógica Y entre ellas. Comencemos con el encabezado de reglas.
1.1 incluir
El archivo de reglas utilizado por snort se especifica en la línea de comando. La palabra clave include permite que este archivo de reglas incluya reglas en otros archivos de reglas, lo cual es muy similar a ese. en lenguaje C. snort leerá el contenido del archivo incluido, reemplazando la palabra clave include.
Formato:
incluir lt; ruta de archivo/nombre de archivo gt;
Nota: no hay punto y coma al final de la línea.
1.2 variables
Las variables se pueden definir en archivos de reglas de Snort.
Formato:
var
Ejemplo:
var MY_NET 192.168.1.0/24, 10.1.1.0/24] $MY_NET cualquiera (flags: S; msg: 'SYNMETA paquete";)
Tabla 2. Definición y uso de variables
Los nombres de las variables de regla se pueden modificar de muchas maneras, puede usar operadores $ para definir metavariables Estos métodos de modificación se pueden utilizar junto con los operadores de modificación de variables: y -
$var: define metavariables
$(. var): Utilice el contenido de la variable var como nombre de la variable
$(var:-default): utilice el contenido de la variable var como nombre de la variable. Si var no está definido, utilice default como nombre de la variable.
$(var:?message): utilice el contenido de la variable var como nombre de la variable. Si no tiene éxito, imprima el mensaje de error y salga.
Por ejemplo:
var MY_NET $(MYU_NET:-192.168.1.0/24) tcp any any -gt; $(MY_NET:?MY_NET no está definido!) 23
Tabla 3. Aplicación de variables avanzadas
2. Encabezados de reglas
2.1 Acción de regla
El encabezado de la regla contiene información, que incluye: Qué datos paquetes, el origen de los paquetes de datos, qué tipo de paquetes de datos y cómo procesar los paquetes de datos coincidentes. El primer elemento de cada regla es la acción de la regla. El comportamiento de la regla le dice a Snort qué hacer cuando encuentra un paquete coincidente. En Snort, hay cinco métodos de procesamiento predeterminados: alerta, registro, aprobación, activación y dinámico.
alerta: utilice el método de alarma seleccionado para generar información de alarma y registrar paquetes de datos
registro: registrar paquetes de datos
pasar: ignorar paquetes de datos
activar: alarma, luego abrir otras reglas dinámicas
dinámico: permanecer inactivo hasta que lo active la regla activa, como una regla de registro
También puede definir sus propios tipos de reglas. asociarlos con uno o varios complementos de salida. Luego puedes usar estos tipos de reglas en reglas de snort.
Este ejemplo creará un tipo que solo generará registros en formato tcpdump:
tipo de regla sospechoso
{
tipo de registro
{
tipo de registro
p>salida log_tcpdump: suspocious.log
}
El siguiente ejemplo creará un tipo para enviar registros a syslog y a la base de datos MySql:
ruletype redalert
{
tipo de alerta
salida alert_syslog: LOG_AUTH LOG_ALERT
salida de base de datos: log, usuario=snort dbname=snort host= localhost
}
2.2 Protocolo
El segundo elemento de cada regla es el elemento de protocolo. Actualmente, los protocolos que puede analizar snort son: TCP, UDP e ICMP. En el futuro, es posible que se proporcione soporte para ARP, ICRP, GRE, OSPF, RIP, IPX y otros protocolos.
2.3 Dirección IP
La parte debajo del encabezado de la regla es la dirección IP y la información del puerto. La palabra clave cualquiera se puede utilizar para definir cualquier dirección IP. snort no admite la resolución de nombres de host. Por lo tanto, la dirección solo puede tener la forma de números/CIDR. /24 representa una red de Clase C; /16 representa una red de Clase B; y /32 representa una dirección de host específica. Por ejemplo: 192.168.1.0/24 representa las direcciones de 192.168.1.1 a 192.168.1.255.
En las reglas, puedes utilizar el operador de negación para operar en direcciones IP. Le indica a Snort que coincida con todas las direcciones IP excepto las enumeradas. El operador de negación está representado por !. Por ejemplo, las reglas de la Tabla 1 se pueden reescribir fácilmente para alertar sobre datos entrantes de la red externa utilizando el operador de negación.
alerta tcp !192.168.1.0/24 any -gt; 192.168.1.0/24 111(contenido: "|00 01 86 a5|"; msg: "acceso externo montado";)
Tabla 4. Reglas para usar el operador de negación de direcciones IP
La dirección IP en la regla anterior significa: todas las direcciones IP de origen no son direcciones de red interna y las direcciones de destino son direcciones de red interna.
También puedes definir una lista de direcciones IP (lista de IP). El formato de la lista de direcciones IP es el siguiente:
[Dirección IP 1/CIDR, dirección IP/CIDR,....]
Tenga en cuenta que no puede haber espacios entre cada una. Dirección IP. Por ejemplo:
alerta tcp ![192.168.1.0/24, 10.1.1.1.0/24] cualquier -gt; [192.168.1.0/24, 10.1.1.0/24] 111 (contenido: " | 00 01 86 a5|"; msg: "external mountd access";)
2.4 Número de puerto
En las reglas, hay varias formas de especificar el número de puerto, incluyendo: cualquiera , definición del número de puerto estático (puerto estático), rango de puertos y uso de definiciones no operativas. cualquiera representa cualquier número de puerto legal; el número de puerto estático representa un único número de puerto, como: 111 (portmapper), 23 (telnet), 80 (o conversación POP3). Las siguientes reglas representan la grabación de transmisión de datos bidireccional. una conversación de telnet:
log !192.168.1.0/24 any lt;gt; 192.168.1.0/24 23
Tabla 7. Reglas de Snort usando operadores bidireccionales
activar/reglas dinámicas
El par de reglas activar/dinámicas extiende la funcionalidad de snort. Usando el par de reglas activar/dinámicas, puede usar una regla para activar otra regla si desea que snort continúe al registrar paquetes calificados. , es muy conveniente utilizar el par de reglas activadas/dinámicas. Excepto por la opción requerida activa, la regla de activación es muy similar a la regla de alerta (la regla dinámica es similar, pero requiere una opción: activada_por). Las reglas dinámicas también requieren otra opción: contar. Cuando se inicia una regla activada, se abre la regla dinámica indicada por el número después de la opción activado/activado por Registrar paquetes de recuento.
La siguiente es una regla para activar. /par de reglas dinámicas:
activar tcp !$HOME_NET any -gt; $HOME_NET 143 (flags: PA; contenido: "|E8C0FFFFFF|in|; activa: 1;
Tabla 8.activar/par de reglas dinámicas
Esta regla hace que snort emita una alarma y registre cuando detecta un desbordamiento del búfer IMAP. Los siguientes 50 paquetes se envían desde fuera de $HOME_NET al puerto 143 de $HOME_NET. el desbordamiento del búfer es exitoso, luego los siguientes 50 paquetes se envían al mismo puerto de servicio en esta red (puerto 143 en este ejemplo). Habrá datos muy importantes en el paquete de datos, que serán muy útiles para análisis futuros.
3. Opciones de reglas
Las opciones de reglas forman el núcleo del motor de detección de intrusiones de Snort. Son muy fáciles de usar, potentes y fáciles de ampliar. En cada regla de snort, se utilizan puntos y coma para separar las opciones. Utilice dos puntos para separar la palabra clave de opción de regla y sus parámetros. Al momento de escribir este artículo (snort versión 1.7), snort tiene 23 palabras clave de opción de regla:
msg: mensajes impresos en alarmas y registros
logto: registrar registros en un archivo especificado por el usuario. de salida al archivo de salida estándar
ttl: prueba el valor del campo TTL del encabezado IP
tos: prueba el valor del campo TOS del encabezado IP
p>id: prueba si el campo ID del fragmento de IP es un valor específico
ipoption: ve el campo de opción de IP
fragbits: prueba el bit de fragmentación del encabezado de IP p>
dsize: prueba el tamaño del segmento de datos del paquete de datos
flags: prueba si el indicador TCP (bandera) tiene un valor determinado
seq: prueba si el número de secuencia del paquete TCP tiene un valor determinado
ack: prueba si el campo de confirmación del paquete TCP tiene un valor determinado
tipo: prueba el campo de tipo (tipo) de paquete ICMP
icode: prueba el campo (código) de codificación del paquete ICMP
icmp_id: prueba si el identificador del paquete de eco ICMP (ICMP ECHO ID) es para un valor determinado
content: busca el patrón en el segmento de datos del paquete de datos
content-list: busca la lista de patrones en el segmento de datos del paquete de datos
offset: establece el desplazamiento en iniciar la búsqueda
profundidad: establece la profundidad máxima de la búsqueda
nocase: coincide con la cadena de contenido sin distinguir entre mayúsculas y minúsculas
sesión: elimina la capa de aplicación información de una conversación
rpc: Observar llamadas de servicio RPC a aplicaciones específicas
resp: Activar medidas reactivas (desconectar, etc.)
react: Activar medidas reactivas (bloqueo de sitios WEB)
3.1 msg
La opción de regla msg le dice al motor de registro qué información imprimir al mismo tiempo al copiar el paquete y qué mensaje de advertencia genera el motor de alarma . Es solo una simple cadena de texto utilizada como carácter de escape.
Formato:
msg: "";
3.2 logto
La opción logto le dice a snort que enumere todos los paquetes que desencadenan un determinado La regla se registra en el archivo especificado. Usar esta opción es muy conveniente para procesar datos de escaneos nmap y escaneos HTTP CGI. Tenga en cuenta que esta opción estará deshabilitada si se utiliza el modo de registro binario.
Formato:
logto: "lt; nombre de archivo gt;";
3.3 ttl
Esta opción establece la vida como Valor del período probado (tiempo de vida). La prueba sólo tendrá éxito si el TTL del paquete coincide exactamente con el valor establecido por esta opción. Esta opción se utiliza principalmente para detectar intentos de enrutamiento.
Formato:
ttl: "";
3.4 tos
Puedes utilizar la palabra clave tos para comprobar los TOS (tipo de servicio) es un valor específico. Esta prueba sólo tendrá éxito si el valor del campo TOS del paquete detectado coincide exactamente con el valor dado.
Formato:
tos: "";
3.5 ID
Esta palabra clave de opción se utiliza para probar el ID del fragmento de IP dominio de cabecera. Algunas herramientas de piratería configuran este campo con valores especiales para diferentes propósitos. Por ejemplo, 31337 es un valor popular entre algunos piratas informáticos. Este ataque se puede prevenir usando esta opción.
Formato:
id: "";
3.6 lpoption
Si hay un campo de opción en el paquete IP, puede utilice esta opción de regla Buscar encabezados IP para opciones específicas, como el enrutamiento de origen. Los parámetros que se pueden utilizar para esta opción de regla son los siguientes:
rr: registro de enrutamiento
eof: Fin de lista
nop: sin operación p>
ts: marca de tiempo
sec: opciones de seguridad IP
lsrr: enrutamiento de origen flexible (enrutamiento de origen flexible)
ssrr: enrutamiento de origen estricto ( enrutamiento de origen estricto)
satid: identificador de flujo
Las opciones de IP más comunes son el enrutamiento de origen estricto y flexible, pero ninguna de las opciones se utiliza en ninguna aplicación ampliamente utilizada en Internet. Solo se puede establecer una regla de IP en cada regla.
Formato:
ipopts: ;
3.7 fragbits
Utilice esta opción de regla para observar los bits de fragmentación y los bits reservados de la IP. encabezado. Tienen un máximo de 3 bits en el campo de identificación del encabezado IP, que son: bit reservado (RB), bit de fragmento de paquete (más fragmentos, MF) y no fragmentable (no fragmentar, DF). Estos bits se pueden comprobar en varias combinaciones, especificadas utilizando los siguientes valores:
R: Bit reservado
D: Bit DF
M: Bit MF
D: Bit DF
M: Bit MF
También puedes usar modificadores para combinar lógicamente bits específicos:
--ALL flag, el bit especificado más cualquier otro bit es verdadero
*--ANY flag, cualquier bit especificado es verdadero
!--NO marca, el bit especificado no es verdadero
Formato:
fragbits:
Ejemplo:
alerta tcp !$HOME_NET cualquiera -gt; $HOME_NET cualquiera (fragbits: R; mensaje: "¡Bit de IP reservado establecido!";)