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.

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, un 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 no deseadas en las que dos campos coinciden 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 causará 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 ningún dato:

$e1.field1 = $e2.field2
$e1.field != ""

Agrega un filtro de tipos de eventos

En el siguiente ejemplo, las direcciones IP para cada evento UDM 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 filtros de igualdad antes de las regex o las otras comparaciones. Los filtros se aplican en el orden en que aparecen en la regla.