Zusammengesetzte Erkennungsregeln
Bei der zusammengesetzten Erkennung in Google SecOps werden mehrere YARA-L-Regeln miteinander verknüpft. In diesem Dokument wird beschrieben, wie Sie eine zusammengesetzte Regel erstellen. Weitere Informationen finden Sie unter Übersicht über zusammengesetzte Erkennungen.
Regelstruktur
Zusammengesetzte Erkennungsregeln sind immer Mehrfachereignisregeln und folgen derselben Struktur und Syntax wie eine Einzelereignisregel.
Eine zusammengesetzte Regel besteht aus den folgenden wesentlichen Komponenten:
Abschnitt
events: Definiert die Eingaben, also die spezifischen Erkennungen oder Ereignisse, die von der Regel analysiert werden.Abschnitt
match: Gibt an, wie die Eingaben über einen definierten Zeitraum hinweg verbunden werden sollen.Abschnitt
condition: Enthält die endgültige Logik, mit der bestimmt wird, ob die verknüpften Ereignisse die Kriterien zum Auslösen einer Benachrichtigung erfüllen.
Eingaben im Abschnitt events definieren
Der erste Schritt beim Erstellen einer zusammengesetzten Erkennungsregel besteht darin, die Eingaben der Regel im Abschnitt events zu definieren. Die Eingaben für zusammengesetzte Regeln stammen aus Sammlungen, in denen die von anderen Abfragen generierten Erkennungen gespeichert werden.
Google SecOps bietet die folgenden zwei Methoden für den Zugriff auf Daten aus Sammlungen.
Referenzieren von Inhalten zur Erkennung mit Variablen oder Meta-Labels
Wenn Sie auf Daten aus einer Erkennung zugreifen möchten, ohne auf die ursprünglichen UDM-Ereignisse zu verweisen, können Sie outcome-Variablen, match-Variablen oder meta-Labels verwenden. Wir empfehlen diesen Ansatz, da er mehr Flexibilität und eine bessere Kompatibilität mit verschiedenen Regeltypen bietet.
Beispielsweise können mit mehreren Regeln ein String (z. B. eine URL, ein Dateiname oder ein Registrierungsschlüssel) in einer gemeinsamen outcome-Variablen gespeichert werden, wenn Sie in verschiedenen Kontexten nach diesem String suchen. Wenn Sie über eine zusammengesetzte Regel auf diesen String zugreifen möchten, beginnen Sie mit detection und suchen Sie die relevanten Informationen mithilfe von Elementen aus der Erfassungsressource.
Beispiel:Angenommen, eine Erkennungsregel liefert die folgenden Informationen:
Ergebnisvariable:
dest_domain = "cymbal.com"UDM-Feld:
target.hostname = "cymbal.com"
In der zusammengesetzten Regel können Sie über die folgenden Pfade auf diese Daten zugreifen:
detection.detection.outcomes["dest_domain"], um auf die Ergebnisvariabledest_domainzuzugreifen.detection.collection_elements.references.event.target.hostname, um auf das UDM-Feldtarget.hostnamezuzugreifen.detection.time_window.start_time.seconds, um auf den Startzeitstempel der Erkennung zuzugreifen.
Die Collection API und die SecurityResult API bieten Zugriff auf beides:
- Metadaten und Ergebniswerte für die Erkennung (
detection.detection) - Zugrunde liegende UDM-Ereignisse aus referenzierten Regeln (
collection_elements)
Inhalte mit Regel-ID oder ‑name referenzieren
Sie können auf eine Regel entweder über ihren Namen oder ihre ID verweisen. Wir empfehlen diesen Ansatz, wenn Ihre Erkennungslogik von bestimmten Regeln abhängt und Sie die analysierten Daten auf diese Regelergebnisse beschränken möchten. Wenn Sie anhand des Namens oder der ID auf relevante Regeln verweisen, wird die Leistung verbessert und es werden Zeitüberschreitungen verhindert, da weniger Daten analysiert werden. Sie können beispielsweise Felder wie target.url oder principal.ip direkt aus einer bekannten vorherigen Erkennung abfragen.
Auf eine Regel anhand der Regel-ID verweisen (empfohlen): Verwenden Sie das Feld
detection.detection.rule_id, um anhand der ID auf eine Regel zu verweisen. Die Regel-ID finden Sie in der URL der Regel in Google SecOps. Nutzergenerierte Regeln haben IDs im Formatru_UUID, kuratierte Erkennungen haben IDs im Formatur_UUID. Beispiel:detection.detection.rule_id = "ru_e0d3f371-6832-4d20-b0ad-1f4e234acb2b"Auf eine Regel anhand des Namens verweisen:Verwenden Sie das Feld
detection.detection.rule_name, um anhand des Namens auf eine Regel zu verweisen. Sie können den genauen Namen der Regel angeben oder einen regulären Ausdruck verwenden, um ihn abzugleichen. Beispiel:detection.detection.rule_name = "My Rule Name"detection.detection.rule_name = "/PartOfName/"
Eingaben im Abschnitt match zusammenführen
Wenn Sie zusammengehörige Erkennungen, Ereignisse oder Entitäten in einer zusammengesetzten Regel verknüpfen möchten, definieren Sie den Abschnitt match mit Variablen, die im Abschnitt events definiert sind. Diese Variablen können Regel-Labels, Ergebnisvariablen, Abgleichsvariablen, Erkennungsfelder oder Erfassungselemente enthalten.
Informationen zur Syntax finden Sie unter Syntax des Abgleichsabschnitts.
condition-Abschnitt definieren
Definieren Sie den Abschnitt condition, um die Ergebnisse des Abschnitts match auszuwerten.
Wenn die Bedingung true ist, wird eine Benachrichtigung generiert. Informationen zur Syntax finden Sie unter Syntax des Bedingungsabschnitts.
Erweiterte Techniken auf zusammengesetzte Regeln anwenden
In diesem Abschnitt wird beschrieben, wie Sie beim Erstellen zusammengesetzter Regeln erweiterte Techniken anwenden.
Ereignisse und Erkennungen kombinieren
In zusammengesetzten Regeln können mehrere Datenquellen kombiniert werden, darunter UDM-Ereignisse, Daten aus dem Entity-Diagramm und Erkennungsfelder. Hierfür gelten folgende Richtlinien:
Unterschiedliche Variablen pro Quelle verwenden: Weisen Sie jeder Datenquelle eindeutige Ereignisvariablen zu (z. B.
$efür Ereignisse,$dfür Erkennungen), wobei die Datenquelle Ereignisse, Entitäten und Erkennungen umfasst.Quellen anhand von gemeinsamem Kontext verknüpfen: Verknüpfen Sie Datenquellen mit gemeinsamen Werten wie Nutzer-IDs, IP-Adressen oder Domainnamen in den Bedingungen Ihrer Regel.
Abstimmungszeitraum definieren: Fügen Sie immer eine
match-Klausel mit einem Zeitraum von höchstens 48 Stunden ein.
Beispiel: Ereignisse und Erkennungen kombinieren
rule CheckCuratedDetection_with_EDR_and_EG {
meta:
author = "noone@cymbal.com"
events:
$d.detection.detection.rule_name = /SCC: Custom Modules: Configurable Bad Domain/
$d.detection.collection_elements.references.event.network.dns.questions.name = $domain
$d.detection.collection_elements.references.event.principal.asset.hostname = $hostname
$e.metadata.log_type = "LIMACHARLIE_EDR"
$e.metadata.product_event_type = "NETWORK_CONNECTIONS"
$domain = re.capture($e.principal.process.command_line, "\\s([a-zA-Z0-9.-]+\\.[a-zA-Z0-9.-]+)$")
$hostname = re.capture($e.principal.hostname, "([^.]*)")
$prevalence.graph.metadata.entity_type = "DOMAIN_NAME"
$prevalence.graph.metadata.source_type = "DERIVED_CONTEXT"
$prevalence.graph.entity.hostname = $domain
$prevalence.graph.entity.domain.prevalence.day_count = 10
$prevalence.graph.entity.domain.prevalence.rolling_max <= 5
$prevalence.graph.entity.domain.prevalence.rolling_max > 0
match:
$hostname over 1h
outcome:
$risk_score = 80
$CL_target = array($domain)
condition:
$e and $d and $prevalence
}
Sequenzielle zusammengesetzte Erkennungen erstellen
Bei sequenziellen zusammengesetzten Erkennungen werden Muster von zusammenhängenden Ereignissen erkannt, bei denen die Reihenfolge der Erkennungen wichtig ist, z. B. die Erkennung eines Brute-Force-Anmeldeversuchs, gefolgt von einer erfolgreichen Anmeldung. Diese Muster können mehrere Basis-Erkennungen, UDM-Rohereignisse oder beides kombinieren.
Wenn Sie eine sequenzielle zusammengesetzte Erkennung erstellen möchten, müssen Sie diese Reihenfolge in Ihrer Regel erzwingen. Verwenden Sie eine der folgenden Methoden, um die erwartete Reihenfolge zu erzwingen:
Gleitende Fenster:Definieren Sie die Reihenfolge der Erkennungen mit gleitenden Fenstern in Ihren
match-Bedingungen.Zeitstempelvergleiche:Vergleichen Sie die Zeitstempel von erkannten Ereignissen in Ihrer Regel-Logik, um zu prüfen, ob sie in der ausgewählten Reihenfolge auftreten.
Beispiel: Sequenzielle zusammengesetzte Erkennungen
events:
$d1.detection.detection.rule_name = "fileEvent_rule"
$userid = $d1.detection.detection.outcomes["user"]
$hostname = $d1.detection.detection.outcomes["hostname"]
$d2.detection.detection.rule_name = "processExecution_rule"
$userid = $d2.detection.detection.outcomes["user"]
$hostname = $d2.detection.detection.outcomes["hostname"]
$d3.detection.detection.rule_name = "networkEvent_rule"
$userid = $d3.detection.detection.outcomes["user"]
$hostname = $d3.detection.detection.outcomes["hostname"]
$d3.detection.collection_elements.references.event.metadata.event_timestamp.seconds > $d2.detection.collection_elements.references.event.metadata.event_timestamp.seconds
match:
$userid over 24h after $d1
Benötigen Sie weitere Hilfe? Antworten von Community-Mitgliedern und Google SecOps-Experten erhalten