Prácticas recomendadas de YARA-L
En este documento, se describen las prácticas recomendadas de Google Security Operations para escribir reglas en YARA-L.
Cómo filtrar los valores cero
Los campos pueden omitirse automáticamente en los eventos en los que ejecute sus reglas. Cuando se omiten los campos, el valor predeterminado es cero.
Por ejemplo, el valor de cadena omitido es ""
de forma predeterminada.
Si igualas dos campos que se omiten, es posible que ambos tengan el valor cero de forma predeterminada. Esto podría generar coincidencias inesperadas en las que dos campos coinciden porque ambos tienen valores cero. Para evitar este comportamiento, especifica explícitamente el valor cero.
Por ejemplo, si tienes una regla que iguala dos eventos en función de dos campos, es posible que ambos campos estén vacíos, lo que provocará una coincidencia:
$e1.field1 = $e2.field2
Si se omiten e1.field1
y e2.field2
en los datos, "" = ""
es verdadero, lo que genera una coincidencia.
Las siguientes expresiones de comparación se aseguran de que no obtengas una coincidencia porque e1.field1
y e2.field2
no incluyen ningún dato:
$e1.field1 = $e2.field2
$e1.field != ""
Agrega un filtro de tipos de eventos
En el siguiente ejemplo, las direcciones IP de cada evento de la AUA se comparan con la lista de referencia, lo que consume muchos recursos:
events:
// For every UDM event, check if the target.ip is listed in
// the suspicious_ip_addresses reference list.
$e.target.ip in %suspicious_ip_addresses
Si tu regla de YARA-L solo detecta eventos UDM de un tipo determinado de evento, puedes agregar un filtro de tipo de evento para optimizar la regla reduciendo la cantidad de eventos que debe evaluar.
events:
// For every UDM event of type NETWORK_DNS, check if the target.ip is
// listed in the suspicious_ip_addresses reference list.
$e.metadata.event_type = "NETWORK_DNS"
$e.target.ip in %suspicious_ip_addresses
Agrega estos filtros al comienzo de la sección de eventos. También debes colocar los filtros de igualdad antes de la regex o de otras comparaciones. Los filtros se aplican en el orden en que aparecen en la regla.
Para ver los blogs de la comunidad sobre cómo trabajar con YARA-L, consulta:
- Conceptos básicos de YARA-L
- Variables de reglas de YARA-L
- Operadores y modificadores de YARA-L
- Cómo crear una regla de evento único con una expresión regular
- Agrega eventos en reglas
- Configura un umbral en las condiciones
- Navegación del editor de reglas
- Opciones de reglas de YARA-L
- Cómo crear una regla de evento único: coincidencia de cadenas
- Cómo crear una regla de varios eventos: Cómo unir eventos
- Cómo crear una regla de varios eventos: Cómo ordenar eventos
- Compila una regla de varios eventos: Múltiples uniones y recuentos en condiciones
- Cómo crear una regla de varios eventos: ventanas deslizantes
- Presentamos los resultados en una regla de evento único
- Resultados en una regla de varios eventos: recuentos
- Resultados en las reglas de varios eventos: arrays
- Resultados de una regla de eventos múltiples: máx., mínimo, suma
- Resultados: Puntuación de riesgo, operadores lógicos condicionales y matemáticos
- Funciones: strings.concat
- Funciones: strings.coalesce
- Funciones: red
- Lista de referencias
- Listas de referencia de CIDR
- Listas de referencia de expresiones regulares
- Función de cadenas: mayúsculas o minúsculas
- Función de expresión regular: re.regex
- Función de expresión regular: re.capture
- Función de string: strings.base64_decode
- Función de expresión regular: re.replace
- Cómo comenzar a usar la Búsqueda estadística
- Búsqueda estadística: más de una cantidad