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
Es posible que los campos se omitan automáticamente en los eventos en los que ejecutes tus reglas. Cuando se omiten campos, se establecen de forma predeterminada en sus valores cero.
Por ejemplo, si se omite un valor de cadena, se usa el valor predeterminado ""
.
Si igualas dos campos que se omitieron, es posible que ambos se establezcan en sus valores cero de forma predeterminada. Esto podría generar coincidencias no deseadas en las que dos campos coincidan porque ambos tienen valores cero. Puedes evitar este comportamiento si especificas de forma explícita el valor cero.
Por ejemplo, si tienes una regla que equipara dos eventos en función de dos campos, existe la posibilidad de que ambos campos estén vacíos, lo que generará 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 garantizan que no obtengas una coincidencia porque e1.field1
y e2.field2
no incluyen datos:
$e1.field1 = $e2.field2
$e1.field != ""
Valores cero y reglas que dependen del enriquecimiento
Si una regla depende de datos enriquecidos que aún no se actualizaron, el valor podría ser nulo o cero. Por lo tanto, es una práctica recomendada filtrar los valores cero (verificaciones de nulos) en las reglas que dependen del enriquecimiento. Obtén más información sobre cómo Google SecOps enriquece los datos de eventos y entidades y cómo usar los datos enriquecidos con contexto en las reglas.
Agrega un filtro de tipos de eventos
En el siguiente ejemplo, las direcciones IP de cada evento de UDM se verifican 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 del UDM de un determinado tipo de evento, agregar un filtro de tipo de evento puede ayudar a optimizar tu regla, ya que reduce 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 las comparaciones de regex o de otro tipo. Los filtros se aplican en el orden en que aparecen en la regla.
Para ver blogs de la comunidad sobre cómo trabajar con YARA-L, consulta los siguientes recursos:
- Conceptos básicos de YARA-L
- Variables de reglas de YARA-L
- Operadores y modificadores de YARA-L
- Cómo crear una regla de un solo evento con una expresión regular
- Cómo agregar eventos en reglas
- Cómo establecer un umbral en las condiciones
- Navegación por el editor de reglas
- Opciones de reglas de YARA-L
- Cómo crear una regla de evento único: Coincidencia de cadena
- Cómo crear una regla de eventos múltiples: combinación de eventos
- Cómo crear una regla de eventos múltiples: Orden de los eventos
- Cómo crear una regla de eventos múltiples: varias combinaciones y recuentos en las condiciones
- Cómo crear una regla de eventos múltiples: ventanas deslizantes
- Presentamos los resultados en una sola regla de eventos
- Resultados en una regla de eventos múltiples: recuentos
- Resultados en reglas de eventos múltiples: arreglos
- Resultados en una regla de eventos múltiples: Máx., mín. y suma
- Resultados: Puntuación de riesgo, lógica condicional y operadores matemáticos
- Functions - strings.concat
- Funciones: strings.coalesce
- Funciones: Red
- Lista de referencias
- Listas de referencia de CIDR
- Listas de referencia de expresiones regulares
- Función Strings: mayúsculas o minúsculas
- Función de expresión regular: re.regex
- Función de expresión regular: re.capture
- Función de cadena: 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 que un recuento
¿Necesitas más ayuda? Obtén respuestas de miembros de la comunidad y profesionales de Google SecOps.