Best Practices für YARA-L

In diesem Dokument werden die von Chronicle empfohlenen Best Practices für das Schreiben von Regeln in YARA-L beschrieben.

Nullwerte herausfiltern

In den Ereignissen, für die Sie Ihre Regeln ausführen, werden möglicherweise Felder automatisch weggelassen. Wenn Felder weggelassen werden, werden standardmäßig Nullwerte verwendet.

Wenn ein Stringwert beispielsweise weggelassen wird, wird standardmäßig "" verwendet.

Wenn Sie zwei Felder gleichsetzen, die beide weggelassen werden, können beide den Standardwert null haben. Dies kann zu unbeabsichtigten Übereinstimmungen führen, wenn zwei Felder übereinstimmen, weil beide Werte null haben. Sie können dieses Verhalten vermeiden, indem Sie den Nullwert explizit angeben.

Wenn Sie beispielsweise eine Regel haben, die zwei Ereignisse basierend auf zwei Feldern gleicht, ist es möglich, dass beide Felder leer sind, was zu einer Übereinstimmung führt:

$e1.field1 = $e2.field2

Wenn sowohl e1.field1 als auch e2.field2 in den Daten weggelassen werden, ist "" = "" „true“ (wahr) und führt zu einer Übereinstimmung.

Mit den folgenden Vergleichsausdrücken können Sie dafür sorgen, dass Sie keine Übereinstimmung erhalten, weil e1.field1 und e2.field2 keine Daten enthalten:

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

Ereignistypfilter hinzufügen

Im folgenden Beispiel werden die IP-Adressen für jedes UDM-Ereignis mit der Referenzliste abgeglichen, wobei viele Ressourcen verbraucht werden:

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

Wenn Ihre YARA-L-Regel nur UDM-Ereignisse eines bestimmten Ereignistyps erkennt, können Sie die Regel durch Hinzufügen eines Ereignistypfilters optimieren, indem Sie die Anzahl der Ereignisse reduzieren, die von der Regel ausgewertet werden müssen.

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

Fügen Sie diese Filter am Anfang des Ereignisbereichs hinzu. Außerdem sollten Sie Gleichheitsfilter vor regulären Ausdrücken oder anderen Vergleichen platzieren. Filter werden in der Reihenfolge angewendet, in der sie in der Regel aufgeführt sind.