Prácticas recomendadas de YARA-L

En este documento, se describen las prácticas recomendadas de Chronicle para escribir reglas en YARA-L.

Filtrar valores cero

Es posible que los campos se omitan automáticamente en los eventos en los que ejecuta sus reglas. Cuando se omiten campos, su valor predeterminado es cero.

Por ejemplo, el valor predeterminado de una cadena omitida es "".

Si equivales dos campos que se omiten, es posible que ambos tengan sus valores de cero de forma predeterminada. Esto podría generar coincidencias involuntarias en las que coinciden dos campos porque ambos tienen valores de cero. Puedes evitar este comportamiento si especificas de forma explícita el valor cero.

Por ejemplo, si tienes una regla que equivale a dos eventos sobre la base de dos campos, existe la posibilidad de que ambos campos estén vacíos y se genere 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 tipo de evento

En el siguiente ejemplo, las direcciones IP para cada evento de 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 YARA-L solo detecta eventos de UDM de un tipo de evento determinado, agregar un filtro de tipo de evento puede ayudar a optimizar tu regla, ya que reduce la cantidad de eventos que esta 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 regex o cualquier otra comparación. Los filtros se aplican en el orden en que aparecen en la regla.