Datentabellen verwenden

Unterstützt in:

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:

So fügen Sie Google SecOps eine neue Datentabelle hinzu:

  1. Wählen Sie in der Seitenleiste Untersuchung > Datentabellen aus.

  2. Klicken Sie oben in der Seitenleiste Datentabellen auf  Erstellen.

  3. Geben Sie im Dialogfeld Neue Datentabelle erstellen einen Namen für die Tabelle ein und fügen Sie optional eine Beschreibung hinzu.

  4. 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:
    1. Klicken Sie auf Datei importieren.
    2. Rufen Sie die Datei auf und klicken Sie auf Öffnen. Das Dialogfeld Datei importieren wird geöffnet.
    3. Wenn Sie im vorherigen Schritt eine TSV-Datei ausgewählt haben, gehen Sie so vor:
      1. Wählen Sie in der Liste Separator Type (Trennzeichentyp) die Option Detect automatically (Automatisch erkennen) oder Tab (Tabulator) aus.
      2. Geben Sie in der Liste Import starten bei Zeile die Zeile in der Datei an, ab der die Daten importiert werden sollen.
    4. Klicken Sie auf Daten importieren.
  5. Wählen Sie den Bearbeitungsmodus Tabelle aus und konfigurieren Sie die folgenden Einstellungen nach Bedarf:

  6. 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_values auf true fest.

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)
E-Mail 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:

  1. Wählen Sie auf dem Tab Details den Bearbeitungsmodus Tabelle aus.
  2. Klicken Sie mit der rechten Maustaste auf eine vorhandene Zeile und wählen Sie Zeile darüber einfügen aus.
  3. 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.
  4. Klicken Sie auf Speichern.

Zeile in einer Datentabelle bearbeiten

So bearbeiten Sie eine Zeile:

  1. Klicken Sie auf das Feld, das Sie ändern möchten. Das Feld kann jetzt bearbeitet werden.
  2. Nehmen Sie die gewünschten Änderungen vor.
  3. 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:

  1. 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.

  2. Klicken Sie auf die Standardablaufzeit für Zeilen, um das Dialogfeld Standardablaufzeit für Zeilen aktualisieren aufzurufen und die TTL für Tabellenzeilen anzupassen.

  3. Geben Sie einen neuen TTL-Wert in Stunden oder Tage ein. Der Mindestwert beträgt 24 Stunden. Der Höchstwert beträgt 365 Tage.

  4. 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:

  1. Wählen Sie in der Seitenleiste in der Liste Datentabellen eine Datentabelle aus.

  2. 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- 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:

  • 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 eine join-Bedingung zwischen UDM-Feldern und Datentabellenzeilen einfügen.

    • In Google SecOps wird jede Regel mit einer Datentabelle join als Multi-Event-Regel behandelt, für die in der Regeldefinition ein match-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 eine where-Klausel erforderlich, mit der nach nulls gesucht wird.

    • Falsche Join-Syntax:

      Schließen Sie nicht mehrere zeilenbasierte Gleichheitsbedingungen in NOT ein. 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 NOT dazu, dass die Auswertung dieser Zeile true ist. Das Ereignis wird dann möglicherweise einbezogen statt ausgeschlossen.

  • Wenn Sie eine Datentabellenspalte vom Typ CIDR oder regex fü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>)
    
  • 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 CIDR oder regex fü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_name
    
  • Beim Vergleichen von Spalten in Datentabellen, die CIDR- oder reguläre Ausdrucksdatentypen sind, sind die Keywords cidr und regex optional.

  • 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 Spalte benign_ip in cidr_data_table aufgefü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 string verwendet.

    • In diesem YARA-L-Beispiel wird geprüft, ob ein Nutzeranmeldeereignis mit einer Zeile in example_table übereinstimmt.

    • Eine Bedingung ist, dass user ID in example_table vorhanden 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 32452 in der Erkennung als hostname des Nutzers aus dem System angezeigt und stimmt mit dem hostname in 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 Vorgang graph_append ist ein Array mit einer Datentabellenvariablen und einer Variablen für Ereignisse für Entitäten anstelle einer Join-Bedingung erforderlich.

    Im folgenden Beispiel ist $g1 die Variable für den Entity-Graphen und example_table die Datentabelle: graph_append [$g1, %example_table]

    Für die Funktion append sollten Datentabellen die folgenden Spalten enthalten, um die Entität zu validieren:

    • start_time (zugeordnet zu metadata.interval.start_time.seconds)

    • end_time (zugeordnet zu metadata.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 Bedingung join entsprechen.

    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ür in-Anweisungen in einer Datentabelle.

  • Maximale Anzahl von in-Anweisungen in einer Abfrage für Spalten vom Datentyp String und Number: 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 string festgelegt 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 cidr oder regex fü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 dt mit drei Spalten: my_hostname, org und my_email und 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 any und all werden 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 string fü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, append oder exclude) 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 setup einer 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.column1

    Nicht unterstützt: graph.entity.hostname = %sample.test

  • Sie können keine match-Variable in den export-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