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.
Según el ejemplo, después de la coincidencia de m01, la coincidencia de m02 se produce dentro de los 10 bytes para activar una notificación de ataque.<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 extractconstructo.Tabla 1: Campos de salida de extracción de bytes Campo
Descripción del campo
alignEspecifique la alineación de bytes.
bitmaskEspecifique la máscara de bits (1-4 bytes) para la operación AND en formato hexadecimal.
bytesEspecifique el número de bytes que desea extraer del paquete (1-10).
endiannessEspecifique la endianness con la que se deben procesar los bytes leídos por el motor IDP.
multiplierEspecifique el valor que se va a multiplicar por los bytes leídos.
offsetEspecifique el número de bytes de desplazamiento de la carga desde donde el motor IDP debe comenzar a procesarse.
relativeEspecifique si desea utilizar o no un desplazamiento relativo a la última coincidencia de patrón.
stringEspecifique el tipo de datos en el que se deben analizar los datos de cadena.
var-nameEspecifique 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 testconstructo.Tabla 2: Campos de salida de prueba de bytes Campo
Descripción del campo
bitmaskEspecifique la máscara de bits (1-4 bytes) para la operación AND en formato hexadecimal.
bytesEspecifique el número de bytes que desea extraer del paquete (1-10).
endiannessEspecifique la endianness con la que se deben procesar los bytes leídos por el motor IDP.
negateCompruebe si el operador no es verdadero.
offsetMencione el nombre de la variable de desplazamiento o el valor de desvío
operatorEspecifique la operación que se va a realizar en un valor extraído.
relativeEspecifique si desea utilizar o no un desplazamiento relativo a la última coincidencia de patrón.
rvalueEl valor convertido se prueba con rvalue. .
stringEspecifique 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 jumpconstructo.Tabla 3: Campos de salida de salto de bytes Campo
Descripción del campo
alignEspecifique la endianness con la que se deben procesar los bytes leídos por el motor IDP.
bitmaskEspecifique la máscara de bits (1-4 bytes) para la operación AND en formato hexadecimal.
bytesEspecifique el número de bytes que desea extraer del paquete (1-10).
endiannessEspecifique la endianness con la que se deben procesar los bytes leídos por el motor IDP.
from-beginningHabilite el salto desde el principio de la carga.
from-endHabilite el salto desde el final de la carga.
multiplierEspecifique el valor que se va a multiplicar por los bytes leídos.
offsetMencione el nombre de la variable de desvío o el valor de desvío que se va a utilizar.
post-offsetEspecifique el número de bytes que desea saltar hacia adelante o hacia atrás (-65535..65535).
relativeEspecifique si desea utilizar o no un desplazamiento relativo a la última coincidencia de patrón.
stringEspecifique 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 mathconstructo.Tabla 4: Campos de salida de matemáticas de bytes Campo
Descripción del campo
bitmaskEspecifique la máscara de bits (1-4 bytes) para la operación AND en formato hexadecimal.
bytesEspecifique el número de bytes que desea extraer del paquete (1-10).
endiannessEspecifique la endianness con la que se deben procesar los bytes leídos.
offsetEspecifique el número de bytes en la carga para iniciar el procesamiento (0..65535).
operatorEspecifique la operación que se va a realizar en el valor extraído.
relativeEspecifique si desea utilizar o no un desplazamiento relativo a la última coincidencia de patrón.
resultEspecifique el nombre de la variable en la que se debe almacenar el resultado.
rvalueEspecifique el valor que se va a utilizar para la operación matemática específica.
stringEspecifique 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-atconstructo.Tabla 5: Campos de salida de Isdataat Campo
Descripción del campo
negateNiega los resultados de la prueba is-data-at .
offsetMencione el nombre o el valor de la variable de desvío.
relativeEspecificar 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>