Datentabellen verwenden
Datentabellen sind mehrspaltige Datenkonstrukte, mit denen Sie Ihre eigenen Daten in Google Security Operations eingeben können. Datentabellen können als Suchtabellen mit definierten Spalten und in Zeilen gespeicherten Daten dienen. Sie können eine Datentabelle mit der Google SecOps-Weboberfläche, der Data Tables API oder einer YARA-L 2.0-Abfrage erstellen oder in Ihr Google SecOps-Konto importieren.
Bereiche mithilfe von RBAC für Daten Datentabellen zuweisen
Wenn Sie Datentabellen verwenden möchten, müssen Sie ihnen mithilfe der rollenbasierten Zugriffssteuerung (RBAC) für Daten Bereiche zuweisen. Durch die Zuweisung von Bereichen zu einer Datentabelle können Sie steuern, welche Nutzer und Ressourcen darauf zugreifen und sie verwenden können. Weitere Informationen finden Sie unter Rollenbasierte Zugriffssteuerung für Datentabellen konfigurieren.
Datentabellen über die Google SecOps-Weboberfläche verwalten
In den folgenden Abschnitten wird beschrieben, wie Sie Datentabellen über die Weboberfläche verwalten. Dazu gehört, wie Sie auf Datentabellen zugreifen, eine neue Datentabelle hinzufügen, ihren Inhalt bearbeiten, Zeilen hinzufügen und eine Datentabelle aus Ihrem Konto entfernen.
Auf Datentabellen zugreifen
So rufen Sie die Seite Datentabellen auf:
- Wählen Sie in der Seitenleiste Untersuchung > Datentabellen aus.
Wenn Sie eine bestimmte Datentabelle suchen möchten, geben Sie oben in der Seitenleiste Datentabellen den Namen in das Feld Suchen ein.
Neue Datentabelle hinzufügen
Wenn Sie eine neue Datentabelle hinzufügen, können Sie CSV-Daten manuell eingeben, CSV-Daten einfügen oder eine CSV- oder TSV-Datei in die Datentabelle importieren.
Die folgenden Konfigurationen sind dauerhaft und können nicht mehr geändert werden, nachdem eine neue Datentabelle gespeichert wurde:
- Spaltenüberschriften
- Datenzuordnung
- Primärschlüssel
- Wiederkehrende Felder
- Zuordnung von Spaltennamen zu Entitätsfeldern
So fügen Sie Google SecOps eine neue Datentabelle hinzu:
Wählen Sie in der Seitenleiste Untersuchung > Datentabellen aus.
Klicken Sie oben in der Seitenleiste Datentabellen auf Erstellen.
Geben Sie im Dialogfeld Neue Datentabelle erstellen einen Namen für die Tabelle ein und fügen Sie optional eine Beschreibung hinzu.
Führen Sie einen der folgenden Schritte aus:
- Geben Sie CSV-Daten manuell ein oder fügen Sie sie in den Bereich Text (Bearbeitungsmodus) ein.
- So importieren Sie Daten aus einer CSV- oder TSV-Datei in die Datentabelle:
- Klicken Sie auf Datei importieren.
- Rufen Sie die Datei auf und klicken Sie auf Öffnen. Das Dialogfeld Datei importieren wird geöffnet.
- Wenn Sie im vorherigen Schritt eine TSV-Datei ausgewählt haben, gehen Sie so vor:
- Wählen Sie in der Liste Separator Type (Trennzeichentyp) die Option Detect automatically (Automatisch erkennen) oder Tab (Tabulator) aus.
- Geben Sie in der Liste Import starten bei Zeile die Zeile in der Datei an, ab der die Daten importiert werden sollen.
- Klicken Sie auf Daten importieren.
Wählen Sie den Bearbeitungsmodus Tabelle aus und konfigurieren Sie die folgenden Einstellungen nach Bedarf:
Klicken Sie auf Speichern. Die neue Datentabelle wird in der Seitenleiste Datentabellen angezeigt und kann zusätzliche Daten aufnehmen.
Datentypen Datentabellenspalten zuordnen
Wenn Sie eine neue Datentabelle hinzufügen, können Sie Datentypen (String, regulärer Ausdruck, CIDR oder Zahl) den Spalten der Datentabelle zuordnen.
Sie können einzelne Datenfelder einer Datenspalte zuordnen und wiederholte Datenfelder einer Datenspalte über die Weboberfläche oder die API zuordnen.
Trennen Sie die Werte der Datenfelder sowohl in der Weboberfläche als auch in der API mit einem senkrechten Strich (
|). Wenn ein Wert in der Weboberfläche einen senkrechten Strich (|) enthält, wird er standardmäßig als wiederholter Wert behandelt.Legen Sie für API-Anfragen
repeated_valuesauftruefest.
Weitere Informationen finden Sie unter Wiederkehrende Felder.
Im folgenden Beispiel enthält die Datentabellenspalte Field_value Werte für mehrere Felder:
| Field_value | Field_name |
| altostrat.com | FQDN |
| 192.0.2.135 | IP-Adresse |
| charlie | userid |
| Beispiel | Hostname |
Die Tabelle oben ist in vier Spalten unterteilt. Jede Spalte wird nur einem Feldtyp zugeordnet, bevor sie für einen der in diesem Dokument beschriebenen Anwendungsfälle für Datentabellen verwendet werden kann.
| FQDN | IP | Userid | Hostname |
| altostrat.com | 192.0.2.135 | charlie | Beispiel |
| … | … | … | … |
Schlüsselspalten festlegen
Wenn Sie eine neue Datentabelle hinzufügen, können Sie bestimmte Spalten als Schlüsselspalten festlegen.
Wenn Sie eine Spalte als Schlüsselspalte kennzeichnen, werden die Werte in dieser Spalte eindeutig identifiziert. Außerdem wird die Duplizierung von Daten verhindert und die Daten können durch Regeln und Suchvorgänge effizienter gefunden werden.
Spalten für wiederkehrende Felder festlegen
Wenn Sie eine neue Datentabelle hinzufügen, können Sie bestimmte Spalten für die Unterstützung von wiederholten Feldern festlegen.
Spalten, in denen Felder mit mehreren Werten oder wiederholte Felder gespeichert werden sollen, müssen beim Erstellen der Datentabelle explizit als repeated gekennzeichnet werden.
Spaltennamen Entitätsfeldern zuordnen (optional)
Wenn Sie eine neue Datentabelle hinzufügen, können Sie die Spaltennamen der Datentabelle den entity-Feldern zuordnen.
In der folgenden Beispieldatentabelle werden die Spalten Userid und Role den Spalten entity.user.userid bzw. entity.user.attribute.role.name zugeordnet:
| Userid
(entity.user.userid zuordnen) |
Rolle
(map to entity.user.attribute.role.name) |
|
| Anschluss | jack123@gmail.com | Administrator |
| tony | tony123@gmail.com | Techniker |
Sie können eine Spalte einer Datentabelle mit dem Feld mapped_column_path der Ressource DataTable einem Protofeld für Entitäten zuordnen.
Für Spalten ohne definierten Entitätspfad, z. B. Email in dieser Beispielstabelle, müssen Sie manuell einen Datentyp angeben. Wie bei Referenzlisten sind die unterstützten Datentypen für Datentabellen number, string, regex und cidr.
Sie können sowohl zugeordnete als auch nicht zugeordnete Spalten in eine Datentabelle einfügen, indem Sie eine join-Bedingung angeben.
Nicht zugeordnete Spalten werden im Feld additional der Entität gespeichert, mit der die Tabelle verknüpft wird. Sie werden als Schlüssel/Wert-Paare hinzugefügt, wobei key der Spaltenname und value der entsprechende Zeilenwert ist.
Einer Datentabelle eine neue Zeile hinzufügen
So fügen Sie eine neue Zeile hinzu:
- Wählen Sie auf dem Tab Details den Bearbeitungsmodus Tabelle aus.
- Klicken Sie mit der rechten Maustaste auf eine vorhandene Zeile und wählen Sie Zeile darüber einfügen aus.
- Geben Sie Daten für eine neue Zeile ein. Die erste Zeile wird als Tabellenüberschrift behandelt. Achten Sie darauf, dass jedes Datenelement der richtigen Datenspalte und dem richtigen Datentyp zugeordnet wird.
- Klicken Sie auf Speichern.
Zeile in einer Datentabelle bearbeiten
So bearbeiten Sie eine Zeile:
- Klicken Sie auf das Feld, das Sie ändern möchten. Das Feld kann jetzt bearbeitet werden.
- Nehmen Sie die gewünschten Änderungen vor.
- Klicken Sie auf Speichern.
In Datentabellenzeilen suchen
Über die Weboberfläche können Sie in einer Datentabelle nach bestimmten Informationen suchen. Geben Sie auf dem Tab Details einen Suchstring in das Suchfeld ein und klicken Sie auf Suchen. Es werden Zeilen angezeigt, die Ihren Suchstring enthalten.
TTL für Tabellenzeilen verwalten
So verwalten Sie den TTL-Wert (Time to Live) für Tabellenzeilen:
Klicken Sie auf TTL pro Zeile anzeigen. Es wird eine TTL-Spalte angezeigt, in der angegeben ist, ob die einzelnen Zeilen abgelaufen sind. Wenn sie noch nicht abgelaufen ist, wird die verbleibende Zeit bis zum Ablauf angezeigt.
Klicken Sie auf die Standardablaufzeit für Zeilen, um das Dialogfeld Standardablaufzeit für Zeilen aktualisieren aufzurufen und die TTL für Tabellenzeilen anzupassen.
Geben Sie einen neuen TTL-Wert in Stunden oder Tage ein. Der Mindestwert beträgt 24 Stunden. Der Höchstwert beträgt 365 Tage.
Klicken Sie auf Speichern.
Tabellenzeile löschen
Wenn Sie eine Zeile löschen möchten, klicken Sie mit der rechten Maustaste darauf und wählen Sie Zeilen löschen aus.
Wenn Sie mehrere Zeilen löschen möchten, wählen Sie jede Zeile aus, die Sie entfernen möchten. Klicken Sie dann mit der rechten Maustaste auf eine der ausgewählten Zeilen und wählen Sie Zeilen löschen aus.
Datentabelle entfernen
So entfernen Sie eine Datentabelle:
Wählen Sie in der Seitenleiste in der Liste Datentabellen eine Datentabelle aus.
Klicken Sie auf Löschen.
Datentabellen mit der Chronicle API verwalten
Sie können auch die in der Chronicle API verfügbaren REST-Ressourcen verwenden, um Datentabellen in Google SecOps zu verwalten. Mit der API lassen sich alle Funktionen des Web-Interfaces nachbilden. Außerdem bietet sie einige zusätzliche Funktionen, mit denen Sie Datentabellen leistungsstärker und in größerem Umfang verwalten können.
Hier sind die REST-Ressourcen für Datentabellen:
Beispiel: Filtersyntax
Im folgenden Chronicle API-Beispiel wird gezeigt, wie Sie mit der filter-Syntax nach google.com in Datenzeilen suchen:
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
"https://staging-chronicle.sandbox.googleapis.com/v1alpha/projects/{$PROJECT}/locations/${REGION}/instances/${INSTANCE}/dataTables/${DATA_TABLE_NAME}/dataTableRows?filter=google.com"
Datentabellen in Google SecOps verwenden
Nachdem Sie Ihrer Google SecOps-Instanz Datentabellen hinzugefügt haben, können Sie sie verwenden, um Ihre Daten mit YARA-L-Abfragen zu filtern, zu optimieren und anzureichern. Dieses Dokument enthält zahlreiche Beispiele in YARA-L-Syntax, die Sie in Google SecOps einbinden können.
Sie können Datentabellen in Verbindung mit YARA-L-Abfragen sowohl in der Suche als auch in Regeln verwenden.
Datentabellen können auf folgende Arten verwendet werden:
UDM-Ereignis- oder ‑Entitätsdaten mit einer Datentabelle filtern
Sie können UDM-Telemetrieereignisse und ‑Entitäten filtern, indem Sie sie mit Einträgen in einer Datentabelle vergleichen.
Datentabelle als mehrspaltige Referenzliste verwenden
Sie können eine Datentabelle als mehrspaltige Referenzliste verwenden. Während eine Referenzliste auf Daten in einer einzelnen Dimension zugreifen kann, ermöglichen Datentabellen den Zugriff auf Daten in mehreren Dimensionen und damit das Filtern von Daten.
Datentabelle mit einem Ereignis oder einer Einheit verknüpfen
Sie können UDM-Ereignisse mit einer Datentabelle verknüpfen, indem Sie den Gleichheitsoperator (
=) für zeilenbasierte Vergleiche verwenden. Mit diesem Vergleich können Sie die Daten filtern. Ein zeilenbasierter Vergleich wird nur dann alstrueausgewertet, wenn alle Bedingungen in der Anweisung mit einer einzelnen Zeile in der Datentabelle übereinstimmen.
UDM-Ereignis- und ‑Entitätsdaten mit einer Datentabelle filtern
Sie können UDM-Ereignisse und ‑Entitäten filtern, indem Sie sie mit Einträgen in einer Datentabelle vergleichen. Verknüpfen Sie die Datentabelle mit einem UDM-Ereignis oder einer UDM-Entität mithilfe von zeilenbasierten oder spaltenbasierten Vergleichen.
Zeilen- und spaltenbasierte Vergleiche in Datentabellen
| Vergleichstyp | Wichtige Logik | Häufige Operatoren | Beispielsyntax | Geeignet für |
|---|---|---|---|---|
| Zeilenbasiert | Alle Bedingungen müssen in DERSELBEN Zeile übereinstimmen | =, !=, >, >=, <, <= |
$e.field = %table.col_a |
Wenn die Beziehung zwischen mehreren Spaltenwerten in derselben Zeile wichtig ist. |
| Spaltenbasiert | Der Wert muss IRGENDWO in der Spalte vorhanden sein. | IN, IN regex, IN cidr |
$e.field IN %table.col_b |
Wenn Sie prüfen möchten, ob ein Wert in einer Gruppe von Werten in einer einzelnen Spalte vorhanden ist. |
UDM-Ereignisse mit Datentabellen verknüpfen – mit den Vergleichsmethoden zeilenbasiert oder spaltenbasiert:
Zeilenbasierter Vergleich zum Verknüpfen von UDM-Ereignissen mit Datentabellen
Wenn Sie UDM-Ereignisse mithilfe eines zeilenbasierten Vergleichs mit Datentabellen verknüpfen möchten, verwenden Sie Gleichheitsoperatoren (
=,!=,>,>=,<,<=).Beispiel:
$<udm_variable>.<field_path> = %<data_table_name>.<column_name>- Wenn Sie mehrere Vergleichsanweisungen verwenden, müssen alle Felder oder Bedingungen in derselben Datenzeile übereinstimmen.
Wenn Sie Operatoren (z. B.
not,!=,>,>=,<,<=) in Ihrer Abfrage verwenden möchten, müssen Sie mindestens einejoin-Bedingung zwischen UDM-Feldern und Datentabellenzeilen einfügen.In Google SecOps wird jede Regel mit einer Datentabelle
joinals Multi-Event-Regel behandelt, für die in der Regeldefinition einmatch-Abschnitt erforderlich ist.
Wenn Sie Daten filtern möchten, indem Sie übereinstimmende Werte aus UDM-Ereignissen mit Zeilen in der Datentabelle vergleichen, verwenden Sie die folgende Join-Syntax:
Korrekte Join-Syntax:
Für die zeilenbasierte „Kombinationsausschließung“ sind beispielsweise ein
left outer-Join und einewhere-Klausel erforderlich, mit der nachnullsgesucht wird.Falsche Join-Syntax:
Schließen Sie nicht mehrere zeilenbasierte Gleichheitsbedingungen in
NOTein. Mit dieser Syntax wird keine „Ausschließen, wenn diese Kombination gefunden wird“-Wirkung erzielt.Verwenden Sie beispielsweise nicht diese Syntax:
NOT (field1 = %table.col1 AND field2 = %table.col2)Das liegt daran, dass der Abgleich weiterhin zeilenweise erfolgt. Wenn eine Zeile die kombinierte innere Bedingung nicht erfüllt, führt
NOTdazu, dass die Auswertung dieser Zeiletrueist. Das Ereignis wird dann möglicherweise einbezogen statt ausgeschlossen.
Wenn Sie eine Datentabellenspalte vom Typ
CIDRoderregexfür einen zeilenbasierten Vergleich verwenden möchten, verwenden Sie die folgende Syntax:net.ip_in_range_cidr($e.principal.ip, %<data_table_name>.<column_name>) re.regex($e.principal.hostname, %<data_table_name>.<column_name>)
Spaltenbasierter Vergleich zum Verknüpfen von UDM-Ereignissen mit Datentabellen
Wenn Sie UDM-Ereignisse mithilfe eines spaltenbasierten Vergleichs mit Datentabellen verknüpfen möchten, verwenden Sie das Keyword
in.Beispiel:
$<udm_variable>.<field_path> in %<data_table_name>.<column_name>Wenn Sie Ereignisse herausfiltern möchten, bei denen der Feldwert in der angegebenen Spalte vorhanden ist (z. B. eine Sperrliste oder Zulassungsliste), verwenden Sie diese Syntax:
NOT (... IN %table.column)Beispiel:
not ($evt_username in %my_data_table.username)Wenn Sie eine Datentabellenspalte vom Typ
CIDRoderregexfür den spaltenbasierten Vergleich verwenden möchten, verwenden Sie die folgende Syntax:$e.principal.ip in cidr %cidr_data_table.column_name $e.principal.hostname in regex %regex_data_table.column_nameBeim Vergleichen von Spalten in Datentabellen, die CIDR- oder reguläre Ausdrucksdatentypen sind, sind die Keywords
cidrundregexoptional.Sie können den
not-Operator auch mit Datentabellen verwenden.In der folgenden Beispielabfrage werden Einträge herausgefiltert, in denen die IP-Adressen (
$e.principal.ip) mit keinem der CIDR-Bereiche übereinstimmen, die in der Spaltebenign_ipincidr_data_tableaufgeführt sind:not $e.principal.ip in %data_table.benign_ip
Datentabelle als mehrspaltige Referenzliste verwenden
Sie können eine Datentabelle als mehrspaltige Referenzliste verwenden. Eine Referenzliste kann zwar auf Daten in einer einzelnen Dimension (einer Spalte) zugreifen, Datentabellen unterstützen jedoch mehrere Spalten. So können Sie Daten über mehrere Dimensionen hinweg filtern und darauf zugreifen.
Sie können UDM-Ereignisse mit dem in-Schlüsselwort für den spaltenbasierten Vergleich mit einer Datentabelle verknüpfen. So können Sie Werte in einem bestimmten UDM-Feld mit Werten in einer einzelnen Spalte der Datentabelle vergleichen.
Im folgenden Beispiel enthält die Datentabelle badApps zwei Spalten: hostname und ip. Die Abfrage gleicht beide Werte unabhängig voneinander ab (Wert basierend auf dem UDM-Feld und Wert basierend auf der Datentabelle, beide vom Datentyp „String“).
Beispiel für eine Regel:
rule udm_in_data_table { meta: description = "Use data table as multicolumn reference list" events: $e.metadata.event_type = "NETWORK_CONNECTION" $e.security_result.action = "ALLOW" $e.target.asset.asset_id = $assetid // Event hostname matches at least one value in table column hostname. $e.target.hostname in %badApps.hostname // Event IP matches at least one value in table column ip. $e.target.ip in %badApps.ip match: $assetid over 1h condition: $e }Suchbeispiel:
events: $e.metadata.event_type = "NETWORK_CONNECTION" $e.security_result.action = "ALLOW" $e.target.asset.asset_id = $assetid // Event hostname matches at least one value in table column hostname. $e.target.hostname in %badApps.hostname // Event IP matches at least one value in table column ip. $e.target.ip in %badApps.ip
Zeilenbasierte Joins zwischen einer Datentabelle und einem UDM-Ereignis oder einer UDM-Entität
Sie können UDM-Ereignisse mit Gleichheits- und Vergleichsoperatoren (=, !=, >, >=,
<, <=) mit einer Datentabelle verknüpfen, um zeilenbasierte Vergleiche durchzuführen. Bei diesem Ansatz können Sie Daten filtern, indem Sie Werte aus UDM-Ereignissen mit Zeilen in der Datentabelle abgleichen. Wenn Sie mehrere Vergleichsanweisungen verwenden, müssen alle Felder oder Bedingungen in derselben Datenzeile übereinstimmen.
Sie müssen mindestens eine join-Bedingung zwischen UDM-Feldern und Datentabellenzeilen einfügen, damit Sie Operatoren (z. B. not, !=, >, >=, <, <=) in Ihrer Abfrage verwenden können.
In Google SecOps wird jede Regel mit einer Datentabelle join als Multi-Event-Regel behandelt, für die ein entsprechender match-Abschnitt in der Regeldefinition erforderlich ist.
Wenn ein Join erfolgt, sind die Zeilen der verknüpften Datentabelle in der Suche sichtbar. Weitere Informationen finden Sie unter Zeilen der Datentabelle in der Suche ansehen.
Platzhalter werden für Datentabellen im
event-Abschnitt einer Abfrage unterstützt, müssen aber mit einem UDM-Ereignis oder einer UDM-Entität verknüpft sein.Im folgenden Beispiel wird eine Datentabellenspalte vom Typ
stringverwendet.In diesem YARA-L-Beispiel wird geprüft, ob ein Nutzeranmeldeereignis mit einer Zeile in
example_tableübereinstimmt.Eine Bedingung ist, dass
user IDinexample_tablevorhanden ist.Beide Bedingungen müssen in derselben Zeile in der
example_tableübereinstimmen, damit die Regel ausgelöst wird.
// Check if a user exists in a data table and that the user is active for all user login events.
Beispiel für eine Regel:
// Check if user exists in a data table and is active in all user login events.
rule udm_join_data_table {
meta:
description = "Join data table with UDM event"
events:
$e.metadata.event_type = "USER_LOGIN"
$e.security_result.action = "ALLOW"
$e.principal.user.userid = $userid
// Event must match at least 1 row in the data table
// where the uid in the data table row is the userid on the event
// and the active date in the same data table row is before the event timestamp.
%example_table.uid = $userid
$e.principal.hostname = %example_table.hostname
match:
$userid over 1h
condition:
$e
}
Suchbeispiel:
events:
$e.metadata.event_type = "USER_LOGIN"
$e.security_result.action = "ALLOW"
$e.principal.user.userid = $userid
// Event must match at least 1 row in the data table
// where the uid in the data table row is the userid on the event
// and the active date in the same data table row is before the event timestamp
%example_table.uid = $userid
$e.principal.hostname = %example_table.hostname
Das folgende Beispiel veranschaulicht, wie eine Datentabelle und UDM-Ereignisdaten zusammenarbeiten.
Gemäß der Logik in der vorherigen YARA-L-Abfrage wird ein Nutzer mit
user ID 32452in der Erkennung alshostnamedes Nutzers aus dem System angezeigt und stimmt mit demhostnamein der Datentabelle überein.Datentabelle uid title hostname 32452 Personalwesen host1 64452 Finanzen host2 46364 IT-Team host3 UDM-Ereignistabelle Hauptkonto metadata security_result Hauptkonto 32452 USER_LOGIN ZULASSEN host1 64589 USER_LOGIN ZULASSEN host9 87352 USER_LOGIN ZULASSEN host4
Ergebnisse aus YARA-L-Abfragen in Datentabellen schreiben
Sie können die Ergebnisse von YARA-L-Abfragen in eine Datentabelle schreiben. Mit dieser Funktion können Sie Datentabellen aus Ihren Google SecOps-Daten erstellen und diese Tabellen verwenden, um andere Daten zu filtern und zu optimieren.
Sie können die YARA-L-Abfragesyntax für Folgendes verwenden:
YARA-L-Syntax zum Schreiben von Abfrageergebnissen in Datentabellen definieren
Verwenden Sie Datentabellen für Threat Intelligence, die Reaktion auf Vorfälle und andere Sicherheitsanwendungsfälle.
Die Daten sollten der YARA-L-Syntax und den YARA-L-Konventionen entsprechen.
Erkennungen und Benachrichtigungen mit YARA-L in Datentabellen schreiben
Mit einer YARA-L-Abfrage können Sie Erkennungen und Benachrichtigungen an Datentabellen senden.
Mit der Funktion write_row können Sie eine Zeile in einer Datentabelle mit dem entsprechenden Schlüssel in der Datentabelle mit den Ergebnissen einer Regel überschreiben. Wenn der Schlüssel nicht in der Tabelle gefunden wird, fügen Sie stattdessen eine neue Zeile hinzu.
Geben Sie die Funktion write_row im Exportbereich einer YARA-L-Abfrage an. Das Schreiben von Daten in die Datentabelle muss die letzte Aktion der Abfrage sein. Dadurch werden die Ergebnisvariablen in die Datentabelle geschrieben.
export:
%<data_table_name>.write_row(
data_table_column_x_name: <value>,
data_table_column_y_name: <value>,
...,
...,
data_table_column_z_name: <value>
)
// depending on the key column(s), the rows will be updated for existing keys
and appended for new keys
Datentabelle mit YARA-L ändern
Im Folgenden wird gezeigt, wie Sie eine Datentabelle mit YARA-L ändern:
TableName: ip_user_domain_table (Schlüsselspalten für den Primärschlüssel werden bei der Erstellung definiert)
| IP-Adresse | employee_id* | domain |
| 192.0.2.10 | Dana | altostrat.com |
| 192.0.2.20 | Quinn | altostrat.com |
| 192.0.2.30 | Lee | cymbalgroup.com |
* gibt den Primärschlüssel an.
Mit der folgenden Abfrage werden eindeutige Kombinationen von principal.ip, principal.user.employee_id und target.domain erfasst. Die Ergebnisse werden anhand der Häufigkeit von target.domain gefiltert:
events:
$e.principal.ip = $principal_ip
$e.principal.user.employee_id = $principal_user_employee_id
$e.target.domain.name = $target_domain
$e.target.domain.prevalence.day_count < 5
// To run this query as a rule, add Condition Section here
// condition:$e
Abfrageergebnisse:
| ip | empid | domain |
| 192.0.2.10 | Dana | altostrat.com |
| 192.0.2.30 | Lee | examplepetstore.com |
| 192.0.2.20 | Quinn | altostrat.com |
Beispiel: Mit „write_row“ die Abfrageausgabe in eine Datentabelle schreiben
Beispiel für eine Regel:
rule udm_write_data_table {
meta:
description = "Writeto data table"
events:
$e.principal.user.employee_id = $principal_user_employee_id
$e.target.domain.name = $target_domain
$e.target.domain.prevalence.day_count < 5
outcome:
$hostname = $target_domain
$principal_emp_id = $principal_user_employee_id
condition:
$e
export:
%ips_with_hostnames.write_row(
employeeid:$principal_emp_id,
hostname:$hostname
)
}
Suchbeispiel:
events: $e.principal.user.employee_id = $principal_user_employee_id $e.target.domain.name = $target_domain $e.target.domain.prevalence.day_count < 5 outcome: $hostname = $target_domain $principal_emp_id = $principal_user_employee_id export: %ips_with_hostnames.write_row( employeeid:$principal_emp_id, hostname:$hostname )
Beispiel: write_row verstehen
Im folgenden Beispiel werden user und ip als Primärschlüssel verwendet. Jeder erfasste Wert, der in der Tabelle „Erfassungen“ verbleibt, führt zu einer Auswertung des Funktionsaufrufs im Exportbereich der Abfrage.
Beispiel für eine Regel:
rule udm_write_data_table {
meta:
description = "Write data table"
events:
$e.metadata.event_type = "USER_LOGIN"
all $e.security_result.action != "BLOCK"
all $e.security_result.action != "UNKNOWN_ACTION"
$user = $e.principal.user.userid
$ip = $e.target.ip
$ts = $e.metadata.event_timestamp.seconds
match:
$user, $ip over 1h
outcome:
$first_seen = min($ts)
condition:
$e
export:
%successful_logins.write_row(user:$user, ip:$ip)
}
Suchbeispiel:
events: $e.metadata.event_type = "USER_LOGIN" all $e.security_result.action != "BLOCK" all $e.security_result.action != "UNKNOWN_ACTION" $ts = $e.metadata.event_timestamp.seconds outcome: $user = $e.principal.user.userid $ip = $e.target.ip[0] export: %successful_logins.write_row(user:$user, ip:$ip)Hier sind die Ereignisdaten:
metadata: { event_type: USER_LOGIN event_timestamp: { seconds: 1283299200 } } principal: { user: { userid: "charlie" } } target: { ip: ["192.0.2.135", "192.0.2.136"] } security_result: { action: ALLOW }Bei Ausführung dieser Abfrage als Regel werden die folgenden Erkennungen zurückgegeben:
Erkennungs-ID Match $user Match $ip 0 charlie 192.0.2.135 1 charlie 192.0.2.136 Die Datentabelle enthält Folgendes:
Nutzer*in ip charlie 192.0.2.135 charlie 192.0.2.136
Die folgende Suchanfrage veranschaulicht die Unterstützung, die in der Google Suche für das Schreiben von Skalarwerten in Datentabellen angeboten wird.
events: $e.metadata.event_type = "NETWORK_CONNECTION" export: %summary_table.write_row(col_name: $e.metadata.product_name, Vendor_name: $e.metadata.vendor_name)
Entitätsdiagramm mit einer Datentabelle anreichern
Mit Datentabellen können Sie die in einem Entity-Diagramm dargestellten Einheiten aus Regeln hinzufügen, entfernen oder ersetzen. Verwenden Sie Funktionen im setup-Abschnitt der Regel, um anzugeben, wie die Datentabelle mit den im events-Abschnitt referenzierten Entitätsereignissen zusammengeführt, angehängt oder zum Entfernen von Entitäten verwendet werden soll.
Mit der folgenden Regelvorlage können Sie ein Entitätsdiagramm ändern:
rule entity_graph_template {
meta:
...
setup:
// import the data table into entity graph
<enrichment_keyword> <join_condition>
events:
...
match:
...
condition:
...
}
Sie können die folgenden YARA-L 2.0-Funktionen verwenden, um das Entity-Diagramm mit einer Datentabelle zu erweitern:
graph_override: Überschreibt die Zeilen im Entity-Diagramm, die der Join-Bedingung entsprechen, mit Daten aus der Datentabelle.Beispiel:
[graph_override](?tab=t.0#heading=h.v0fps7eke1if)graph_append: Die Zeilen aus der Datentabelle werden an die Zeilen im Entity-Diagramm angehängt. Für den Vorganggraph_appendist ein Array mit einer Datentabellenvariablen und einer Variablen für Ereignisse für Entitäten anstelle einer Join-Bedingung erforderlich.Im folgenden Beispiel ist
$g1die Variable für den Entity-Graphen undexample_tabledie Datentabelle:graph_append [$g1, %example_table]Für die Funktion
appendsollten Datentabellen die folgenden Spalten enthalten, um die Entität zu validieren:start_time(zugeordnet zumetadata.interval.start_time.seconds)end_time(zugeordnet zumetadata.interval.end_time.seconds)
Datentabellenspalten können nicht über die Weboberfläche Metadatenfeldern zugeordnet werden. Für
append-Anwendungsfälle müssen Datentabellen mit der Chronicle API erstellt werden (https://cloud.google.com/chronicle/docs/reference/rest/v1alpha/projects.locations.instances.dataTables/create).graph_exclude: Entfernt die Zeilen im Entitätsdiagramm, die der Bedingungjoinentsprechen.Beispiel:
[graph_exclude](?tab=t.0#heading=h.o0qbb5paki6g)
Die Join-Bedingung muss ein Gleichheitsausdruck zwischen der Datentabellenspalte und dem Entitätsdiagrammfeld sein. Für die Funktionen graph_override und graph_exclude lautet die Syntax für den Zugriff auf eine Datentabelle so:
<data_table_name>.<column_name>
Alle Filter, die für die <entity_variable> im Ereignisabschnitt angegeben sind, werden angewendet, nachdem sie mit der Datentabelle erweitert wurden.
Nachdem die Entität im Entitätsdiagramm mit der Entität in der Datentabelle angereichert wurde, muss die Entitätsvariable im Entitätsdiagramm mit der UDM-Entität verknüpft werden.
Entitätsdiagramm mit Daten aus Datentabelle überschreiben
Mit der Funktion graph_override werden Felder, die sowohl im Entitätsdiagramm als auch in der Datentabelle vorhanden sind, durch Felder aus der Datentabelle ersetzt. Felder, die im Entitätsdiagramm, aber nicht in der Datentabelle vorhanden sind, bleiben unverändert. Felder, die nicht im Entitätsdiagramm, aber in der Datentabelle vorhanden sind, werden berücksichtigt.
Nur die Spalten der Datentabelle, die zugeordnet sind, überschreiben die Spalten des Entitätsdiagramms. Die nicht zugeordneten Spalten werden dem Feld additional des Entity-Diagramms hinzugefügt, mit dem die Datentabelle verknüpft ist.
Beispiel: Übereinstimmung bei einem einzelnen Join
Im folgenden Beispiel werden die Zeilen im Entity-Diagramm, die dem Join-Kriterium zwischen der Datentabellenspalte und dem Entity-Diagrammfeld ($g1.graph.entity.ip = %example_table.my_ip) entsprechen, durch die Datentabelle überschrieben.
rule rule_override {
meta:
description = "Override entity context with data table before joining with UDM event"
setup:
//Rows in the entity graph that match the join condition are overridden by the data table
graph_override ($g1.graph.entity.ip = %example_table.my_ip)
events:
$e.metadata.event_type = "NETWORK_CONNECTION"
$e.security_result.action = "ALLOW"
// Filter will be applied after graph is overridden by data table
$g1.graph.entity.hostname = "ftp01"
// Accessing unmapped columns
$g1.graph.additional.fields["Owner"] = "alice"
// Joining the UDM event with the enriched entity graph
$e.target.ip = $iocip
$g1.graph.entity.ip = $iocip
match:
$iocip over 1h
condition:
$e and $g1
}
Wenn Sie eine nicht zugeordnete Spalte (z. B. „Inhaber“) der Datentabelle verwenden möchten, müssen Sie eine entsprechende Anweisung für $g1.graph.entity.owner = "alice" is $g1.graph.additional.fields["Owner"] = "alice" angeben.
Das liegt daran, dass alle nicht zugeordneten Spalten der Datentabelle in das Feld additional des Entity-Diagramms ($g1) aufgenommen werden.
In den folgenden Tabellen wird ein Überschreibungsvorgang veranschaulicht, bei dem Zeilen im Entity-Diagramm angereichert werden, wenn das IP-Feld in der Datentabelle mit dem IP-Feld im Entity-Diagramm übereinstimmt.
| Vorhandenes Entitätendiagramm | ||
| Hostname | IP | MAC |
| ftp01 | 10.1.1.4 | …:01 |
| www01 | 10.1.1.5 | …:02 |
| Datentabelle | |||
| Hostname | IP | MAC | Inhaber |
| ftp01 | 10.1.1.4 | …:bb | alice |
| h1 | 10.1.1.6 | …:cc | bob |
| h2 | 10.1.1.7 | …:dd | chris |
| h3 | 10.1.1.4 | …:ee | doug |
| Angereicherte Entitätsgrafik | |||
| Hostname | IP | MAC | Inhaber |
| ftp01 | 10.1.1.4 | …:bb | alice |
| www01 | 10.1.1.5 | …:02 | |
| h3 | 10.1.1.4 | …:ee | doug |
Beispiel: Übereinstimmung mit mehreren Joins
Im folgenden Beispiel werden die Zeilen im Entitätsdiagramm, die den mehreren Join-Bedingungen ($g1.graph.entity.ip = %example_table.my_ip und $g1.graph.entity.hostname = %example_table.my_hostname) entsprechen, durch die Datentabelle überschrieben.
rule rule_override {
meta:
description = "Override Entity context with Data Table before joining with UDM event"
setup:
// example with more than one condition
graph_override ($g1.graph.entity.ip = %example_table.my_ip and
$g1.graph.entity.hostname = %example_table.my_hostname)
events:
$e.metadata.event_type = "NETWORK_CONNECTION"
$e.security_result.action = "ALLOW"
// Filter will be applied after graph is overridden by data table
$g1.graph.entity.hostname = "ftp01"
// joining the UDM event with the enriched entity graph
$e.target.ip = $iocip
$g1.graph.entity.ip = $iocip
match:
$iocip over 1h
condition:
$e and $g1
}
In den folgenden Tabellen wird ein Überschreibungsvorgang veranschaulicht, bei dem die Zeilen des Entitätsdiagramms angereichert werden, wenn sowohl das IP-Feld als auch das Hostname-Feld in der Datentabelle mit dem IP-Feld und dem Hostname-Feld im Entitätsdiagramm übereinstimmen.
| Vorhandenes Entitätendiagramm | ||
| Hostname | IP | MAC |
| ftp01 | 10.1.1.4 | …:01 |
| www01 | 10.1.1.5 | …:02 |
| Datentabelle | |||
| Hostname | IP | MAC | Inhaber |
| ftp01 | 10.1.1.4 | …:bb | alice |
| h1 | 10.1.1.5 | …:cc | bob |
| h2 | 10.1.1.6 | …:dd | chris |
| h3 | 10.1.1.4 | …:ee | doug |
| Angereicherte Entitätsgrafik | |||
| Hostname | IP | MAC | Inhaber |
| ftp01 | 10.1.1.4 | …:bb | alice |
| www01 | 10.1.1.5 | …:02 | |
Daten aus der Datentabelle an den Entitätengraphen anhängen
Bei der Funktion graph_append ist keine Join-Bedingung erforderlich.
Im folgenden Beispiel werden alle Zeilen in der Datentabelle an die Zeilen im Entitätsdiagramm angehängt.
rule rule_append {
meta:
description = "Data table append entity"
setup:
graph_append [$g1, %example_table]
events:
// filter UDM events
$e.metadata.event_type = "NETWORK_CONNECTION"
$e.security_result.action = "ALLOW"
// Join the filtered UDM events with the enriched graph
$e.target.ip = $iocip
$g1.graph.entity.ip = $iocip
match:
$iocip over 1h
condition:
$e and $g1
}
In der folgenden Beispielstabelle wird ein Anfügevorgang veranschaulicht, bei dem die Zeilen der Datentabelle an die Zeilen im Entity-Diagramm angehängt werden:
| Vorhandenes Entitätendiagramm | ||
| Hostname | IP | MAC |
| ftp01 | 10.1.1.4 | …:01 |
| www01 | 10.1.1.5 | …:02 |
| Datentabelle | ||
| IP | MAC | Inhaber |
| 10.1.1.4 | …:01 | alice |
| 10.1.1.6 | …:cc | bob |
| 10.1.1.7 | …:dd | chris |
| 10.1.1.4 | …:ee | doug |
| Angereicherte Entitätsgrafik | |||
| Hostname | IP | MAC | Inhaber |
| ftp01 | 10.1.1.4 | …:01 | |
| www01 | 10.1.1.5 | …:02 | |
| 10.1.1.4 | …:bb | alice | |
| 10.1.1.6 | …:cc | bob | |
| 10.1.1.7 | …:dd | chris | |
| 10.1.1.4 | …:ee | doug | |
Mit „graph_exclude“ Zeilen aus dem Entity-Diagramm entfernen
Mit der Funktion graph_exclude werden Zeilen im Entitätsdiagramm, die der Join-Bedingung entsprechen, aus dem Entitätsdiagramm entfernt.
Im folgenden Beispiel werden alle Zeilen im Entity-Diagramm entfernt, die der angegebenen Join-Bedingung (zwischen der Datentabellenspalte und dem Entity-Diagrammfeld) entsprechen. Dem Entitätsdiagramm werden keine Zeilen aus der Datentabelle hinzugefügt.
rule rule_exclude {
meta:
setup:
graph_exclude ($g1.graph.entity.ip = %example_table.ip)
events:
$e.metadata.event_type = "NETWORK_CONNECTION"
$e.security_result.action = "ALLOW"
$e.target.ip = $iocip
$g1.graph.entity.ip = $iocip
match:
$iocip over 1h
condition:
$e and $g1
}
In den folgenden Tabellen wird ein Ausschlussvorgang veranschaulicht, bei dem die Zeilen des Entitätsdiagramms, die mit dem IP-Feld der Datentabelle übereinstimmen, entfernt werden:
| Vorhandenes Entitätendiagramm | ||
| Hostname | IP | MAC |
| ftp01 | 10.1.1.4 | …:01 |
| www01 | 10.1.1.5 | …:02 |
| Datentabelle | ||
| IP | MAC | Inhaber |
| 10.1.1.4 | …:bb | alice |
| 10.1.1.6 | …:cc | bob |
| 10.1.1.7 | …:dd | chris |
| Angereicherte Entitätsgrafik | ||
| Hostname | IP | MAC |
| www01 | 10.1.1.5 | …:02 |
Beschränkungen
Maximale Anzahl von Datentabellen für ein Google SecOps-Konto: 1.000.
Datentabellen unterstützen nur CSV-Daten. Datentabellen unterstützen tabulatorgetrennte Werte nur, wenn Sie eine neue Datentabelle hinzufügen und eine TSV-Datei (tabulatorgetrennte Werte) importieren.
In Feldern der Datentabelle werden keine Kommas (
,) unterstützt.Die Grenzwerte für die Anzahl der
in-Anweisungen beim Verweisen auf eine Referenzliste in einer Abfrage gelten auch fürin-Anweisungen in einer Datentabelle.Maximale Anzahl von
in-Anweisungen in einer Abfrage für Spalten vom DatentypStringundNumber: 7.Maximale Anzahl von
in-Anweisungen mit Operatoren für reguläre Ausdrücke: 4.Maximale Anzahl von
in-Anweisungen mit CIDR-Operatoren: 2.Maximale Anzahl von Spalten pro Datentabelle: 1.000
Maximale Anzahl von Zeilen pro Datentabelle: 10 Millionen.
Maximales aggregiertes Datenvolumen für alle Datentabellen in einem Konto: 1 TB.
Maximales Anzeigelimit auf der Webseite für Zeilen in Datentabellen in der Text- und Tabelleneditoransicht: 10.000 Zeilen.
Maximale Dateigröße für den Upload zum Erstellen einer Datentabelle: 10 GB.
Platzhalter sind im Einrichtungsbereich nicht zulässig.
Nicht zugeordnete Spalten einer Datentabelle, deren Datentyp auf
stringfestgelegt ist, können nur mit Stringfeldern von UDM-Ereignissen oder UDM-Entitäten verknüpft werden.Verwenden Sie in einer Datentabelle nur nicht zugeordnete Spalten mit dem Datentyp
cidroderregexfür CIDR oder regulären Ausdruck.Datentabellen-Lookups: Platzhalter für reguläre Ausdrücke werden nicht unterstützt und Suchbegriffe sind auf 100 Zeichen begrenzt.
Einschränkungen für Joins von Datentabellen in Regeln
Für das Verknüpfen von Datentabellen in Regeln gelten die folgenden Einschränkungen.
Das Abrufen aller Ereignisstichproben für Erkennungen wird nicht unterstützt, wenn Sie Datenzusammenführungen mit Ereignissen verwenden.
Im Gegensatz zu Entitäten und UDM werden in Datentabellen keine Platzhalter unterstützt. Daraus ergeben sich die folgenden Einschränkungen:
Sie können nicht einen Satz von Filtern auf eine Datentabelle anwenden und sie mit einer UDM-Entität verknüpfen.
Sie können nicht mehrere Filter auf dieselbe Datentabelle anwenden, während Sie sie mit einem anderen UDM-Platzhalter verknüpfen.
Beispiel: Eine Datentabelle mit dem Namen
dtmit drei Spalten:my_hostname,orgundmy_emailund mit der folgenden Regel:events: $e1.principal.hostname = %dt.my_hostname %dt.org ="hr" $e2.principal.email = %dt.my_email %dt.org !="hr"
Alle Filter für eine Datentabelle werden zuerst angewendet. Anschließend werden die gefilterten Zeilen aus der Datentabelle mit UDM verknüpft. In diesem Fall führen die widersprüchlichen Filter (%dt.org ="hr" and %dt.org !="hr") in der Tabelle dt zu einer leeren Datentabelle, die dann mit e1 und e2 verknüpft wird.
Einschränkungen bei der Verwendung von Datentabellen mit Regeln
Für Datentabellen, die mit Regeln verwendet werden, gelten die folgenden Einschränkungen.
Einschränkungen für die Ausführungshäufigkeit
Die Echtzeit-Ausführungshäufigkeit wird für Regeln mit Datentabellen nicht unterstützt.
Einschränkungen für die Ausgabe in Datentabellen
Die Modifikatoren
anyundallwerden für Spalten mit wiederholten Feldern in Datentabellen nicht unterstützt.Die Array-Indexierung wird für Spalten mit wiederholten Feldern in Datentabellen nicht unterstützt.
Sie können nur Ergebnisvariablen in eine Datentabelle exportieren. Sie können Ereignispfade oder Datentabellenspalten nicht direkt exportieren.
Spaltenlisten müssen die Primärschlüsselspalten für Datentabellen enthalten.
Sie können maximal 20 Ergebnisse haben.
Wenn keine Datentabelle vorhanden ist, wird eine neue Tabelle mit dem Standarddatentyp
stringfür alle Spalten in der angegebenen Reihenfolge erstellt.Es kann jeweils nur eine Regel in eine Datentabelle schreiben. Wenn eine Regel versucht, in eine Datentabelle zu schreiben, in die bereits eine andere Regel schreibt, schlägt die Regelkompilierung fehl.
Es gibt keine Garantie dafür, dass mit einer Erzeugerregel Zeilen in eine Datentabelle eingefügt werden können, bevor eine Verbraucherregel für diese Datentabelle beginnt.
Für eine einzelne Regel gilt ein Grenzwert für die Anzahl der Ergebniszeilen. Für das Ergebnis,die gespeicherten Daten und die Datentabellen gilt ein Limit von maximal 10.000 Zeilen.
Wenn Sie eine Zeile aktualisieren, werden die alten Werte für alle Spalten, die keine Schlüsselspalten sind, durch die neuen Werte ersetzt. Es dauert etwa fünf Minuten, bis Aktualisierungen, einschließlich des Hinzufügens einer neuen Zeile, für Abfragen verfügbar sind.
Einschränkungen bei der Entitätsanreicherung aus Datentabellen
Sie können nur einen Anreicherungsvorgang (entweder
override,appendoderexclude) auf eine einzelne Entitätsdiagrammvariable anwenden.Für jeden Anreicherungsvorgang kann nur eine Datentabelle verwendet werden.
Sie können maximal zwei Anreicherungen beliebigen Typs im Abschnitt
setupeiner YARA-L-Regel definieren.
Im folgenden Beispiel wird ein override-Vorgang auf die Variable $g1 des Entitätengraphen und ein append-Vorgang auf die Variable $g2 des Entitätengraphen angewendet.
setup:
graph_override($g1.graph.entity.user.userid = %table1.myids)
graph_append [$g2, %table1]
Im vorherigen Beispiel wird dieselbe Datentabelle (table1) verwendet, um verschiedene Entity-Diagramme zu optimieren. Sie können auch verschiedene Datentabellen verwenden, um die verschiedenen Entity-Diagramme zu optimieren:
setup:
graph_override($g1.graph.entity.user.userid = %table1.myids)
graph_append [$g2, %table2]
Einschränkungen bei der Verwendung von Datentabellen mit Search
Für Datentabellen, die mit Search verwendet werden, gelten die folgenden Einschränkungen:
Mit der Chronicle API können Sie keine Suchanfragen für Datentabellen ausführen. Abfragen werden nur über die Weboberfläche unterstützt.
Bei der Ausführung einer einzelnen Abfrage können maximal 1 Million Zeilen oder 1 GB in einer Datentabelle ausgegeben werden, je nachdem, welches Limit zuerst erreicht wird.
Bei der Ausgabe von Suchergebnissen in eine Datentabelle werden Ereigniszeilen übersprungen, wenn sie 5 MB überschreiten.
Die Anreicherung von Entitäten wird bei der Suche nicht unterstützt.
Datentabellen werden für Nutzer von kundenverwalteten Verschlüsselungsschlüsseln (Customer-Managed Encryption Keys, CMEK) nicht unterstützt.
Schreibvorgänge sind auf 6 pro Minute und Kunde begrenzt.
API-Unterstützung ist für Tabellenvorgänge für Suchdaten nicht verfügbar.
Statistikabfragen werden bei Joins von Datentabellen nicht unterstützt.
Datentabellen und Datentabellen-Joins werden nur für UDM-Ereignisse und nicht für Entitäten unterstützt.
Unterstützt:
%datatable1.column1 = %datatable2.column1Nicht unterstützt:
graph.entity.hostname = %sample.testSie können keine
match-Variable in denexport-Abschnitt einer Statistikabfrage aufnehmen.Das folgende Beispiel wird nicht unterstützt:
match: principal.hostname export: %sample.write_row( row: principal.hostname )
Benötigen Sie weitere Hilfe? Antworten von Community-Mitgliedern und Google SecOps-Experten erhalten