Mejoras en el lenguaje de firmas de IDP
Las construcciones del lenguaje de firmas de IDP permiten a IDP generar firmas más eficientes que ayudan a reducir los falsos positivos. Esto se puede lograr utilizando el lenguaje de firmas, que define patrones de ataque utilizando sintaxis basada en reglas, contextos y condiciones de coincidencia.
Descripción de las construcciones del lenguaje de firmas
Las construcciones del lenguaje de firmas IDP de Junos OS son las construcciones disponibles en el lenguaje de firmas de IDP. Las construcciones están diseñadas para mejorar las capacidades de detección y prevención de las medidas de seguridad de red. El lenguaje proporciona un conjunto de herramientas y capacidades para definir firmas que pueden detectar varios tipos de actividades maliciosas y patrones de tráfico anómalos. Los administradores de red pueden crear firmas de seguridad eficaces. Los constructos incluyen opciones para definir patrones de tráfico, especificar condiciones para alertas e incorporar información contextual para mejorar la precisión y relevancia de las detecciones.
El código del motor de IDP admite las siguientes construcciones:
-
Depth: especifica la profundidad de un paquete para buscar el patrón dado. El valor de profundidad no es relativo. Por ejemplo, puede especificar la profundidad como 100.
<Depth>100</Depth>
-
Offset: le permite especificar por dónde empezar a buscar un patrón dentro de un paquete. El valor de desplazamiento no es relativo. Por ejemplo, puede especificar un valor para el desvío como 100.
<Offset>100</Offset>
-
Within: garantiza que haya un máximo de N bytes entre las coincidencias de patrones. La coincidencia de patrón siempre es relativa a una coincidencia anterior. Por ejemplo, si el valor de N es 10.
<Attack> <Member>m01</Member> - - - - - - </Attack> <Attack> <Member>m02</Member> - - - - - - <Within>10</Within> - - - - - - </Attack>
-
Distance: permite especificar dónde debe buscar el motor IDP el patrón especificado en relación con la coincidencia de patrón anterior. Esto siempre es relativo al partido anterior y el valor de la distancia puede ser negativo. Por ejemplo, si el valor de N es 10, una vez que m01 coincide, m02 debería aparecer 10 bytes después del final de la coincidencia m01:
<Attack> <Member>m01</Member> - - - - - - </Attack> <Attack> <Member>m02</Member> - - - - - - <Distance>10</Distance> - - - - - - </Attack>
-
Ipopts—Todos los ipopts enumerados tienen anomalías correspondientes definidas en el paquete de seguridad y se pueden detectar cuando se configuran en el dispositivo o en el motor IDP:
-
rr - Ruta de registro
-
eol - Fin de la lista
-
nop - Sin operación
-
ts - Marca de tiempo
-
sec - Seguridad IP
-
esec - Seguridad IP extendida
-
lsrr - Enrutamiento de origen suelto
-
ssrr - Enrutamiento de origen estricto
-
satid - Identificador de flujo
-
-
Byte extract—La palabra clave Byte extract ayuda a escribir firmas contra protocolos codificados en longitud, lee la carga del paquete en bytes y la guarda como una variable para su uso posterior. El extracto de bytes puede ser tanto relativo como no relativo. Puede haber cualquier número de extracciones de bytes utilizadas por ataque en cadena.Por ejemplo:
<Byte_Extract> <Byte>4</Byte> <Offset>12</Offset> <Relative>True</Relative> <Endian>Big</Endian> <Bitmask>0x45</Bitmask> <Multiplier>2</Multiplier> <String>dec</String> <align>True</align> <Name>msg_len</align> </Byte_Extract>
En la tabla 1 se enumeran los campos del
Byte extract
constructo.Tabla 1: Campos de salida de extracción de bytes Campo
Descripción del campo
align
Especifique la alineación de bytes.
bitmask
Especifique la máscara de bits (1-4 bytes) para la operación AND en formato hexadecimal.
bytes
Especifique el número de bytes que desea extraer del paquete (1-10).
endianness
Especifique la endianness con la que se deben procesar los bytes leídos por el motor IDP.
multiplier
Especifique el valor que se va a multiplicar por los bytes leídos.
offset
Especifique el número de bytes de desplazamiento de la carga desde donde el motor IDP debe comenzar a procesarse.
relative
Especifique si desea utilizar o no un desplazamiento relativo a la última coincidencia de patrón.
string
Especifique el tipo de datos en el que se deben analizar los datos de cadena.
var-name
Especifique el nombre de la variable a la que se va a hacer referencia en otras opciones de regla.
-
Byte test: la palabra claveByte test permite probar el campo byte con un valor operativo. La prueba de bytes puede ser tanto relativa como no relativa.
> , < , =, &, ^ ,<=,>=
son los operadores admitidos y el número máximo de bytes extraídos es 4.Por ejemplo:M02 <SLE_Constructs> <Within>50</Within> <Byte_Test> <Byte>4</Byte> <Operator>=</Operator> <Offset>12</Offset> <Value>12</Value> <Relative>True</Relative> <Endian>Big</Endian> <Bitmask>0x45</Bitmask> <String>dec</String> <align>True</align> </Byte_Test>
En la tabla 2 se enumeran los campos del
Byte test
constructo.Tabla 2: Campos de salida de prueba de bytes Campo
Descripción del campo
bitmask
Especifique la máscara de bits (1-4 bytes) para la operación AND en formato hexadecimal.
bytes
Especifique el número de bytes que desea extraer del paquete (1-10).
endianness
Especifique la endianness con la que se deben procesar los bytes leídos por el motor IDP.
negate
Compruebe si el operador no es verdadero.
offset
Mencione el nombre de la variable de desplazamiento o el valor de desvío
operator
Especifique la operación que se va a realizar en un valor extraído.
relative
Especifique si desea utilizar o no un desplazamiento relativo a la última coincidencia de patrón.
rvalue
El valor convertido se prueba con rvalue. .
string
Especifique el tipo de datos en el que se deben analizar los datos de cadena.
-
Byte jump—La palabra clave Byte jump se utiliza para firmas escritas para protocolos codificados en longitud para omitir porciones específicas de la carga útil y realizar la detección en ubicaciones muy específicas. El valor de salto de bytes puede ser tanto relativo como no relativo.Por ejemplo:
<Byte_jump> <Byte>2</Byte> <Offset>8</Offset> <Relative>true</Relative> <Multiplier>2</Multiplier> <From_beginning>true</From_beginning> Endianess>little</Endianess> </Byte_jump>
En la tabla 3 se enumeran los campos del
Byte jump
constructo.Tabla 3: Campos de salida de salto de bytes Campo
Descripción del campo
align
Especifique la endianness con la que se deben procesar los bytes leídos por el motor IDP.
bitmask
Especifique la máscara de bits (1-4 bytes) para la operación AND en formato hexadecimal.
bytes
Especifique el número de bytes que desea extraer del paquete (1-10).
endianness
Especifique la endianness con la que se deben procesar los bytes leídos por el motor IDP.
from-beginning
Habilite el salto desde el principio de la carga.
from-end
Habilite el salto desde el final de la carga.
multiplier
Especifique el valor que se va a multiplicar por los bytes leídos.
offset
Mencione el nombre de la variable de desvío o el valor de desvío que se va a utilizar.
post-offset
Especifique el número de bytes que desea saltar hacia adelante o hacia atrás (-65535..65535).
relative
Especifique si desea utilizar o no un desplazamiento relativo a la última coincidencia de patrón.
string
Especifique el tipo de datos en el que se deben analizar los datos de cadena.
-
Byte math—La palabra clave matemática Byte permite realizar una operación matemática en un valor extraído, un valor especificado o una variable existente. El valor matemático del byte almacena el resultado en una nueva variable resultante. Las operaciones como
1) '+' | '-' | '*' | '/' | '<<' | '>>'
son compatibles. Puede ser tanto relativo como no relativo.Por ejemplo:<SLE_Constructs> <Byte_Math> <Byte>4</Byte> <Operator>+</Operator> <Offset>12</Offset> <rValue>12</rValue> <Relative>True</Relative> <Endian>Big</Endian> <Bitmask>0x45</Bitmask> <String>dec</String> <align>True</align> <result_var>var1</result_var> </Byte_Math> <SLE_Constructs>
En la tabla 4 se enumeran los campos del
Byte math
constructo.Tabla 4: Campos de salida de matemáticas de bytes Campo
Descripción del campo
bitmask
Especifique la máscara de bits (1-4 bytes) para la operación AND en formato hexadecimal.
bytes
Especifique el número de bytes que desea extraer del paquete (1-10).
endianness
Especifique la endianness con la que se deben procesar los bytes leídos.
offset
Especifique el número de bytes en la carga para iniciar el procesamiento (0..65535).
operator
Especifique la operación que se va a realizar en el valor extraído.
relative
Especifique si desea utilizar o no un desplazamiento relativo a la última coincidencia de patrón.
result
Especifique el nombre de la variable en la que se debe almacenar el resultado.
rvalue
Especifique el valor que se va a utilizar para la operación matemática específica.
string
Especifique el tipo de datos en el que se deben analizar los datos de cadena.
-
Is-data-at— La palabra clave is-data-at le permite verificar que la carga contiene los datos necesarios en una ubicación especificada. Por ejemplo:
M02 <SLE_Constructs> <Isdataat> <Value>50</Value> <negate>false</negate> </Isdataat> <SLE_Constructs>
En la tabla 5 se enumeran los campos del
Is-data-at
constructo.Tabla 5: Campos de salida de Isdataat Campo
Descripción del campo
negate
Niega los resultados de la prueba is-data-at .
offset
Mencione el nombre o el valor de la variable de desvío.
relative
Especificar si se debe utilizar o no un desplazamiento relativo a la última coincidencia de patrón
-
Detection Filter— El filtro de detección define la velocidad a la que el ataque debe coincidir. Se mantiene un recuento para el origen o el destino según el valor de opción especificado en la firma. El filtro de detección está fuera
<SLE_Constructs>
y se especifica por ataque y no por miembro del ataque. Si un ataque se detecta 5 veces en un intervalo de 10 segundos desde la misma IP de origen, se marcará como un ataque. Por ejemplo:<Detection_filter> <count>5</count> <scope>src</scope> other options dst/session <time>10</time> </Detection_filter>