Práticas recomendadas da YARA-L
Este documento descreve as práticas recomendadas do Chronicle para escrever regras em YARA-L.
Filtrar valores zero
Os campos podem ser omitidos automaticamente nos eventos em que você executa suas regras. Quando os campos são omitidos, o valor padrão é zero.
Por exemplo, um valor de string omitido é ""
por padrão.
Se você igualar dois campos que foram omitidos, ambos poderão ter os valores zero por padrão. Isso pode gerar correspondências não intencionais em que dois campos são correspondentes porque ambos têm valores zero. Você pode evitar esse comportamento especificando explicitamente o valor zero.
Por exemplo, se você tiver uma regra que equivale a dois eventos com base em dois campos, é possível que ambos estejam vazios, causando uma correspondência:
$e1.field1 = $e2.field2
Se e1.field1
e e2.field2
forem omitidos nos dados, "" = ""
será verdadeiro, causando uma correspondência.
As expressões de comparação a seguir garantem que você não tenha uma correspondência porque e1.field1
e e2.field2
não incluem dados:
$e1.field1 = $e2.field2
$e1.field != ""
Adicionar um filtro de tipo de evento
No exemplo a seguir, os endereços IP de cada evento de UDM são comparados com a lista de referência, o que consome muitos 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
Se a regra YARA-L detectar apenas eventos de UDM de um determinado tipo, adicionar um filtro de tipo de evento vai ajudar a otimizar sua regra, reduzindo o número de eventos que ela precisa avaliar.
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
Adicione esses filtros ao início da seção de eventos. Coloque também filtros de igualdade antes da regex ou de outras comparações. Os filtros são aplicados na ordem em que aparecem na regra.