Datentabellen verwenden
Datentabellen sind mehrspaltige Datenkonstrukte, mit denen Sie Ihre eigenen Daten in Google Security Operations eingeben können. Sie können als Suchtabellen mit definierten Spalten und in Zeilen gespeicherten Daten dienen. Sie können eine Datentabelle über die Google SecOps-Benutzeroberfläche, die Data Tables API oder eine YARA-L-Abfrage in Regeln erstellen oder in Ihr Google SecOps-Konto importieren.
Datentabellen über die Benutzeroberfläche von Google SecOps verwalten
In den folgenden Abschnitten wird beschrieben, wie Sie Datentabellen über die Benutzeroberfläche verwalten. Dazu gehört auch, wie Sie auf Ihre Datentabellen zugreifen, eine neue Datentabelle hinzufügen und ihren Inhalt bearbeiten, Daten in Ihre Tabelle importieren, Zeilen hinzufügen, Daten mit Kommas oder Tabulatoren trennen und eine Datentabelle aus Ihrem Konto entfernen.
Auf Datentabellen zugreifen
Klicken Sie in der linken Seitenleiste auf Erkenntnisse > Datentabellen, um die Seite mit den Datentabellen aufzurufen. Sie können nach einer vorhandenen Datentabelle suchen, indem Sie den Namen in das Suchfeld oben in der Seitenleiste eingeben.
Neue Datentabelle hinzufügen
So fügen Sie Google SecOps eine neue Datentabelle hinzu:
Klicken Sie rechts oben in der Seitenleiste auf Hinzufügen Hinzufügen.
Geben Sie im Dialogfeld Neue Datentabelle erstellen einen Namen für die neue Tabelle ein und fügen Sie optional eine Beschreibung hinzu.
Klicken Sie auf Erstellen. Die neue Datentabelle wird im Hauptfenster angezeigt und kann jetzt Daten aufnehmen.
Daten in die Datentabelle importieren
Wenn Sie Ihrer Datentabelle Daten hinzufügen möchten, können Sie sie so direkt in Google SecOps importieren:
Klicken Sie auf Daten importieren.
Wählen Sie eine Standard-CSV-Datei aus. Nur CSV-Dateien können in Google SecOps importiert werden.
Klicken Sie auf Öffnen, wenn Sie die Daten in Ihre Datentabelle importieren möchten.
Datentabelle eine neue Datenzeile hinzufügen
Wenn Sie einer Datentabelle manuell eine neue Datenzeile hinzufügen möchten, können Sie sie direkt eingeben. Die erste Zeile dient dabei als Tabellenüberschrift. Gehen Sie dazu so vor:
Setzen Sie auf dem Tab Details den Cursor ans Ende einer vorhandenen Zeile und drücken Sie die Eingabetaste.
Geben Sie eine neue Datenzeile ein:
- Trennen Sie die Datenfelder durch Kommas oder Tabulatoren.
- Ordnen Sie jedem Datenelement die richtige Datenspalte zu.
- Wenn Sie Zeilendaten auf dem Tab Details eingeben, werden sie im Tabelleneditor angezeigt.
Angeben, ob Daten durch Kommas oder Tabulatoren getrennt werden sollen
So trennen Sie Daten mit Kommas oder Tabulatoren:
Klicken Sie neben Daten importieren auf
Trennzeichentyp bearbeiten.Wählen Sie im Dialogfeld Trennzeichentyp bearbeiten im Menü Trennzeichen entweder Komma oder Tabulator aus.
Datentabelle entfernen
So entfernen Sie eine Datentabelle:
Wählen Sie links 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. Die API bietet Funktionen, die denen der Benutzeroberfläche entsprechen, sowie einige zusätzliche Funktionen, mit denen Sie Datentabellen mit höherer Leistung und größerem Umfang verwalten können.
Hier sind die REST-Ressourcen für Datentabellen:
Datentabellen in Google SecOps verwenden
Nachdem Sie Datentabellen in Ihre Google SecOps-Instanz importiert haben, können Sie sie verwenden, um Ihre Daten mithilfe von Regeln zu filtern, zu verbessern und zu ergänzen. Dieses Dokument enthält zahlreiche Beispiele in YARA-L-Syntax, die Sie in die Google SecOps-Regeln in Ihrer Instanz einbinden können. Weitere Informationen zum Bearbeiten von Regeln in Google SecOps finden Sie unter Regeln mit dem Rules Editor verwalten.
Sie haben folgende Möglichkeiten, Datentabellen in Verbindung mit Regeln zu verwenden:
UDM-Ereignis- oder -Entidaten mithilfe einer Datentabelle filtern Sie können UDM-Telemetrieereignisse und -Entitäten filtern, indem Sie sie mit Einträgen in einer Datentabelle vergleichen.
Datentabelle mit einem Ereignis oder einer Entität zusammenführen Sie können UDM-Ereignisse mithilfe des Gleichheitsoperators für den zeilenbasierten Vergleich mit einer Datentabelle verknüpfen. Anhand dieses Vergleichs können Sie die Daten filtern. Damit ein zeilenbasierter Vergleich als wahr ausgewertet wird, müssen alle Bedingungen in der Anweisung mit einer Zeile übereinstimmen.
Verwenden Sie eine Datentabelle als mehrspaltige Referenzliste. Sie können eine Datentabelle als mehrspaltige Referenzliste verwenden. Mit einer Referenzliste können Sie auf Daten in einer einzelnen Dimension zugreifen. Mit Datentabellen können Sie jedoch auf Daten in mehreren Dimensionen zugreifen und so Daten filtern.
UDM-Ereignis- und -Entitätsdaten mithilfe einer Datentabelle filtern
Sie können UDM-Ereignisse und -Entitäten filtern, indem Sie sie mit Einträgen in einer Datentabelle vergleichen.
Sie haben zwei Möglichkeiten, UDM-Ereignisse mit Datentabellen zu verknüpfen:
Verwenden Sie einen Gleichheitsoperator (
=, !=, >, >=, <, <=
) für den zeilenbasierten Vergleich. Beispiel:$<udm_variable>.<field_path> = %<data_table_name>.<column_name>
.Verwendung des Schlüsselworts
in
für den spaltenbasierten Vergleich Beispiel:$<udm_variable>.<field_path> in %<data_table_name>.<column_name>
.`
Wie bei Referenzlisten können für jede Spalte der Datentabelle die Datentypen string
, regex
oder CIDR
verwendet werden.
Wenn Sie eine Datentabellenspalte vom Typ CIDR oder regulärer Ausdruck 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 eine Datentabellenspalte vom Typ CIDR oder regulärer Ausdruck 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
Wenn Sie den Datentyp der Spalte als CIDR oder regulären Ausdruck angegeben haben, schließen Sie das Schlüsselwort cidr
oder regex
aus.
Sie können den not
-Operator auch mit Datentabellen verwenden. Mit der folgenden Beispielregel werden Einträge herausgefiltert, bei denen die IP-Adressen ($e.principal.ip
) mit keinem der CIDR-Bereiche in der Spalte benign_ip
in cidr_data_table
übereinstimmen:
not $e.principal.ip in cidr %cidr_data_table.benign_ip
Datentabelle mit einem UDM-Ereignis oder einer UDM-Entität zusammenführen
Sie können UDM-Ereignisse mithilfe einer Datentabelle und des Gleichheitsoperators (=, !=, >, >=, <, <=
) für den zeilenbasierten Vergleich filtern.
Im folgenden Beispiel wird mit der YARA-L-Regel geprüft, ob die Nutzer-ID eines Nutzers, der sich anmeldet, in der Datentabelle (example_table
) vorhanden ist. In derselben Zeile der Datentabelle, in der die Übereinstimmung stattgefunden hat, wird auch geprüft, ob das Nutzerkonto aktiv ist, bevor das Anmeldeereignis registriert wurde.
// Check if a user exists in a data table and the user is active for all user login events.
rule udm_join_data_table {
meta:
description = "Join data table with UDM event"
event:
$e.metadata.event_type = USER_LOGIN
$e.security_result.action = ALLOW
$e.principal.user.userid = $userid
// Event must match at least one row in the table where the uid in the table
// row is the userid for the event and the active date in the same table
// row is before the event timestamp
%example_table.uid = $userid
$e.principal.hostname = %example_table.hostname
match:
$userid over 1h
condition:
$e
}
Im folgenden Beispiel sind eine Datentabelle und UDM-Ereignisdaten zu sehen. Basierend auf der Logik in der vorherigen YARA-L-Regel wird ein Nutzer mit der Nutzer-ID 32452 erkannt, da der Hostname des Nutzers im System mit dem Hostnamen in der Datentabelle übereinstimmt.
Datentabelle | ||
uid | title | hostname |
32452 | Personalwesen | host1 |
64452 | Finanzen | host2 |
46364 | IT-Team | host3 |
UDM-Ereignistabelle | |||
principal | metadata | security_result | principal |
32452 | USER_LOGIN | ZULASSEN | host1 |
64589 | USER_LOGIN | ZULASSEN | host9 |
87352 | USER_LOGIN | ZULASSEN | host4 |
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, können Sie mit Datentabellen auf Daten in mehreren Dimensionen zugreifen und so Daten filtern.
Sie können UDM-Ereignisse mithilfe des Schlüsselworts in
für einen spaltenbasierten Vergleich mit einer Datentabelle verknüpfen.
Datentabellen können als mehrspaltige Referenzlisten mit derselben Syntax wie Referenzlisten referenziert werden:
%<data_table_name>.<column_name>.
Im folgenden Beispiel werden Benachrichtigungen für Netzwerkverbindungen mit verdächtigen Port- und Protokollkombinationen ausgelöst. Port
und protocol
sind Spalten in der Datentabelle badApps
.
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 port matches at least one value in table column port
$e.target.port in %badApps.port
// event IP matches at least 1 value in table column protocol
$e.target.network.ip in %badApps.ip
match:
$assetid over 1h
condition:
$e
}
Datentypen einzelnen Tabellenspalten zuordnen
Ordnen Sie jedem Datentyp eine einzelne Spalte der Datentabelle zu. Spalten mit Werten für mehrere Felder müssen aufgeteilt werden, bevor sie als Datentabellen verwendet werden können.
Im folgenden Beispiel enthält die Spalte Field_value
der Datentabelle Werte für mehrere Felder:
Field_value | Feldname |
altostrat.com | FQDN |
192.0.2.135 | IP-Adresse |
Charlie | Nutzer-ID |
Beispiel | Hostname |
Die obige Tabelle ist in vier Spalten unterteilt, wobei jeder Spalte nur ein Feldtyp zugewiesen ist, bevor sie für einen der in diesem Dokument vorgestellten Anwendungsfälle für Datentabellen verwendet werden kann.
FQDN | IP | User-ID | Hostname |
altostrat.com | 192.0.2.135 | Charlie | Beispiel |
… | … | … | … |
Spaltennamen Entitätsfeldern zuordnen
Wenn Sie eine Datentabelle erstellen, können Sie die Spaltennamen der Datentabelle Entitätsfeldern zuordnen.
In der folgenden Beispieldatentabelle werden die Spalten Userid
und Role
den Spalten entity.user.userid
und entity.user.attribute.role.name
zugeordnet:
Userid
(entspricht entity.user.userid) |
Rolle
(entspricht entity.user.attribute.role.name) |
|
Anschluss | jack123@gmail.com | Admin |
tony | tony123@gmail.com | Techniker*in |
Die Spalte Email
kann nicht dem Entitätspfad
entity.user.email_address
zugeordnet werden, da es sich um ein wiederholtes Feld handelt. Sie können einer Spalte einer Datentabelle kein wiederholtes Feld zuordnen.
Sie können eine Spalte einer Datentabelle mit dem Feld mapped_column_path
der DataTable-Ressource einem Entitätsprotofeld zuordnen.
Für Spalten, für die kein Elementpfad definiert ist, z. B. Email
in dieser Beispieltabelle, müssen Sie einen Datentyp definieren. Wie bei Referenzlisten sind die unterstützten Datentypen für Datentabellen string
, regex
und cidr
.
Mit der Join-Bedingung können Sie sowohl zugeordnete als auch nicht zugeordnete Spalten in der Datentabelle angeben. Nicht zugeordnete Spalten werden als Schlüssel/Wert-Paare in das Feld additional
der Entität (mit der die Datentabelle zusammengeführt wird) eingefügt. Dabei ist der Schlüssel der Spaltenname und der Wert der Zeilenwert für diese Spalte.
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 ergänzen.
Sie können die YARA-L-Regeln für Datentabellen für Folgendes verwenden:
YARA-L-Syntax zum Schreiben von Regelergebnissen in Datentabellen definieren Sie können dieselbe Syntax für die Suche und Dashboards verwenden.
Datentabellen für Bedrohungsinformationen, Reaktion auf Vorfälle und andere Sicherheitsanwendungsfälle verwenden
Achten Sie darauf, dass die Daten den YARA-L-Konventionen entsprechen.
Erkennungen und Benachrichtigungen mithilfe von Regeln in Datentabellen schreiben
Sie können YARA-L-Regeln verwenden, um Erkennungen und Benachrichtigungen an Datentabellen zu senden.
Mit der Funktion write_row können Sie eine Tabellenzeile mit dem übereinstimmenden Schlüssel in der Tabelle überschreiben. Dazu verwenden Sie die Ergebnisse einer Regel. 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 Regel sein. So wird sichergestellt, dass die Ergebnisvariablen in die Datentabelle geschrieben werden.
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 eine Datentabelle mit YARA-L geändert wird:
TableName:ip_user_domain_table
(Schlüsselspalten für den Primärschlüssel werden beim Erstellen definiert)
ip_address | employee_id* | domain |
192.0.2.10 | Dana | altostrat.com |
192.0.2.20 | Quinn | altostrat.com |
192.0.2.30 | Lee | cymbalgroup.com |
* steht für den Primärschlüssel.
Mit der folgenden Regel werden eindeutige Kombinationen von principal.ip
, principal.user.employee_id
und target.domain
erfasst. Die Ergebnisse werden anhand der Verbreitung der target.domain
gefiltert:
rule unique_principal_userid_and_ip_and_target_domain_with_low_prevalence {
meta:
author = "GP"
description = "Captures unique combinations of principal.ip,
principal.user.employee_id, and target.domain where
target.domain.prevalence is less than 5"
rule_version = "1.0"
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
condition:
$e
}
Regelergebnisse:
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“ Regelausgabe in eine Datentabelle schreiben
rule write_to_data_table {
meta:
author = "GP"
description = "Captures uniqueprincipal.user.employee_id, and target.domain where target.domain.prevalence is less than 5"
rule_version = "1.0"
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,
)
}
Beispiel: write_row
Im folgenden Beispiel sind user
und ip
Primärschlüssel. Jede Erkennung, die in der Tabelle „Erkannt“ gespeichert bleibt, führt zu einer Auswertung des Funktionsaufrufs im Exportabschnitt der Regel.
Hier ist die Regel:
rule successful_logins_by_user_to_ip {
meta:
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(user:$user, ip:$ip)
}
Und 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
}
Die folgenden Erkennungen werden zurückgegeben:
Erkennungs-ID | Mit $user abgleichen | Match $ip |
0 | Charlie | 192.0.2.135 |
1 | Charlie | 192.0.2.136 |
Die Datentabelle enthält Folgendes:
Nutzer | ip |
Charlie | 192.0.2.135 |
Charlie | 192.0.2.136 |
Entitätsgraph mit einer Datentabelle anreichern
Mithilfe von Datentabellen können Sie die im Entitätsgraphen dargestellten Entitäten hinzufügen, entfernen oder ersetzen. Verwenden Sie Funktionen im Bereich setup
der Regel, um anzugeben, wie die Datentabelle mit Entitätsereignissen im Bereich events
zusammengeführt, angehängt oder verwendet werden soll, um Entitäten daraus zu entfernen.
Mit der folgenden Regelvorlage können Sie eine Entitätsgrafik ändern:
rule entity_graph_template {
meta:
...
setup:
// import the data table into entity graph
<enrichment_keyword> <join_condition>
events:
...
match:
...
condition:
...
}
Mit den folgenden YARA-L 2.0-Funktionen können Sie den Entitätsgraphen um eine Datentabelle ergänzen:
graph_override
: Die Zeilen in der Entitätsgrafik, die der Zusammenführungsbedingung entsprechen, werden mit Daten aus der Datentabelle überschrieben.Beispiel:
[graph_override](?tab=t.0#heading=h.v0fps7eke1if)
graph_append
: Fügen Sie die Zeilen aus der Datentabelle den Zeilen im Entitätsgraphen an. Für den Vorganggraph_append
ist kein Join-Bedingung, sondern ein Array erforderlich, das eine Datentabellenvariable und eine Ereignisvariable für Entitäten enthält.Im folgenden Beispiel ist
$g1
die Entitätsgraphenvariable undexample_table
die Datentabelle:graph_append [$g1, %example_table]
graph_exclude
: Entfernen Sie die Zeilen in der Entitätsgrafik, die der Join-Bedingung entsprechen.Beispiel:
[graph_exclude](?tab=t.0#heading=h.o0qbb5paki6g)
Die Join-Bedingung muss ein Gleichheitsausdruck zwischen der Spalte der Datentabelle und dem Feld der Entitätsgrafik sein. Für die Funktionen graph_override
und graph_exclude
lautet die Syntax für den Zugriff auf eine Datentabelle:
<data_table_name>.<column_name>
Alle Filter, die im Ereignisbereich für die <entity_variable>
angegeben sind, werden nach der Erweiterung mit der Datentabelle angewendet.
Nachdem die Entität im Entitätsgraphen mit der Entität in der Datentabelle angereichert wurde, muss die Entitätsvariable im Entitätsgraphen mit der UDM-Entität zusammengeführt werden.
Entitätsgraph mit Daten aus Datentabelle überschreiben
Mit der Funktion graph_override
werden Felder, die sowohl im Entitätsgraphen als auch in der Datentabelle vorhanden sind, durch Felder aus der Datentabelle ersetzt. Felder, die im Entitätsgraphen und nicht in der Datentabelle vorhanden sind, bleiben unverändert. Felder, die nicht im Entitätsgraphen, aber in der Datentabelle vorhanden sind, werden eingeschlossen.
Nur die zugeordneten Spalten der Datentabelle überschreiben die Spalten des Entitätsdiagramms. Die nicht zugeordneten Spalten werden dem Feld additional
der Entitätsgrafik hinzugefügt, mit der die Datentabelle zusammengeführt wird.
Beispiel: Übereinstimmung bei einzelnem Zusammenführen
Im folgenden Beispiel werden die Zeilen in der Entitätsgrafik, die der Zusammenführungsbedingung zwischen der Spalte der Datentabelle und dem Feld der Entitätsgrafik ($g1.graph.entity.ip = %example_table.my_ip
) entsprechen, von der 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 der Datentabelle verwenden möchten (z. B. „Inhaber“), verwenden Sie eine entsprechende Anweisung für $g1.graph.entity.owner = "alice" is $g1.graph.additional.fields["Owner"] = "alice"
.
Das liegt daran, dass alle nicht zugeordneten Spalten der Datentabelle in das Feld additional
des Entitätsgraphen ($g1)
aufgenommen werden.
In den folgenden Tabellen wird ein Überschreibungsvorgang veranschaulicht, bei dem Zeilen in der Entitätsgrafik angereichert werden, wenn das IP-Feld in der Datentabelle mit dem IP-Feld in der Entitätsgrafik ü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 |
Angereichertes Entitätsgraph | |||
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ätsgraphen, die den mehreren Zusammenführungsbedingungen ($g1.graph.entity.ip = %example_table.my_ip
und $g1.graph.entity.hostname = %example_table.my_hostname
) entsprechen, von der 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ätsgraphs angereichert werden, wenn sowohl das IP-Feld als auch das Hostnamen-Feld in der Datentabelle mit dem IP-Feld und dem Hostnamen-Feld im Entitätsgraphen ü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 |
Angereichertes Entitätsgraph | |||
Hostname | IP | MAC | Inhaber |
ftp01 | 10.1.1.4 | …:bb | Alice |
www01 | 10.1.1.5 | …:02 |
Daten aus der Datentabelle an die Entitätsgrafik 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ätsgraphen 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 Beispieltabelle wird ein Anfügenvorgang veranschaulicht, bei dem die Zeilen der Datentabelle an die Zeilen im Entitätsgraphen angehängt werden:
Vorhandenes Entitätendiagramm | ||
Hostname | IP | MAC |
ftp01 | 10.1.1.4 | …:01 |
www01 | 10.1.1.5 | …:02 |
Datentabelle | |||
Hostname | 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 |
Angereichertes Entitätsgraph | |||
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 Entitätsgraphen entfernen
Mit der Funktion graph_exclude
werden Zeilen im Entitätsgraphen, die der Zusammenführungsbedingung entsprechen, aus dem Entitätsgraphen entfernt.
Im folgenden Beispiel werden alle Zeilen im Entitätsgraphen entfernt, die der angegebenen Join-Bedingung (zwischen der Spalte der Datentabelle und dem Feld des Entitätsgraphen) entsprechen. Dem Entitätsgraph 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ätsgraphs entfernt werden, die mit dem IP-Feld der Datentabelle übereinstimmen:
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 |
Angereichertes Entitätsgraph | ||
Hostname | IP | MAC |
www01 | 10.1.1.5 | …:02 |
Beschränkungen
Die Grenzwerte für die Anzahl der
in
-Anweisungen, wenn in einer Regel auf eine Referenzliste verwiesen wird, gelten auch fürin
-Anweisungen in einer Datentabelle.Für Uploads wird nur der CSV-Dateityp unterstützt.
Die maximale Größe einer Datentabelle beträgt 10 GB.
Das Gesamtlimit für das Datenvolumen in Datentabellen in einem Tenant beträgt 1 TB.
Maximale Anzahl von
in
-Anweisungen in einer Regel, mit oder ohne spezielle Operatoren: 7Maximale Anzahl von
in
-Anweisungen mit dem Operatorregex
: 4Maximale Anzahl von
in
-Anweisungen mit dem Operatorcidr
: 2Platzhalter sind im neuen Bereich „Einrichtung“ 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 zusammengeführt werden.Verwenden Sie nur nicht zugeordnete Spalten in einer Datentabelle, deren Datentyp für CIDR oder reguläre Ausdrücke auf
cidr
oderregex
festgelegt ist.Sie können die Spalte einer Datentabelle keinem wiederholten Feld zuordnen.
Datentabellen mit Regeln verwenden
Für Datentabellen, die mit Regeln verwendet werden, gelten die folgenden Einschränkungen:
Ausführungshäufigkeit
Die Ausführungshäufigkeit in Echtzeit wird für Regeln mit Datentabellen nicht unterstützt.
Joins
Im Gegensatz zu Entitäten und UDM werden in Datentabellen keine Platzhalter unterstützt. Das bedeutet, dass Sie nicht eine Gruppe von Filtern auf eine Datentabelle anwenden, sie mit einer UDM-Entität zusammenführen und dann eine andere Gruppe von Filtern auf dieselbe Datentabelle anwenden und sie mit einer anderen UDM-Platzhaltervariablen zusammenführen können.
Beispiel: Eine Datentabelle mit dem Namen
dt
mit den drei Spaltenmy_hostname
,org
undmy_email
und der folgenden Regel:
events:
$e1.principal.hostname = %dt.my_hostname
%dt.org ="hr"
$e2.principal.email = %dt.my_email
%dt.org !="hr"
Zuerst werden alle Filter auf eine Datentabelle angewendet und dann werden die gefilterten Zeilen aus der Datentabelle mit dem UDM zusammengeführt. In diesem Fall wird eine leere Datentabelle mit e1
und e2
zusammengeführt, da sich die beiden Filter in der Datentabelle dt
widersprechen (%dt.org ="hr" and %dt.org !="hr"
).
Ausgabe in Datentabellen
Sie können nur Ergebnisvariablen in eine Datentabelle exportieren. Ereignispfad- oder Datentabellenspalten können nicht direkt exportiert werden.
Spaltenlisten müssen die Primärschlüsselspalten für Datentabellen enthalten.
Sie können maximal 20 Ergebnisse haben.
In Datentabellen werden keine wiederholten Werte unterstützt. Alle Ergebnisvariablen, die in eine Datentabelle geschrieben werden, müssen also Einzelwerte sein.
Wenn keine Datentabelle vorhanden ist, wird eine neue Tabelle mit dem Standardstringdatentyp für alle Spalten in der angegebenen Reihenfolge erstellt.
In eine Datentabelle kann jeweils nur eine Regel schreiben. Wenn eine Regel versucht, in eine Datentabelle zu schreiben, in die bereits eine andere Regel schreibt, schlägt die Regelkompilierung fehl.
Es kann nicht garantiert werden, dass eine Erzeugerregel einer Datentabelle Zeilen hinzufügen kann, bevor eine Verbraucherregel für diese Datentabelle beginnt.
Die Anzahl der Zeilen mit Ergebnissen ist für eine Regel begrenzt. Für die Ergebnisse und die gespeicherten Daten gilt ein Limit von 10.000 Zeilen. Dasselbe Limit gilt für Datentabellen: Bei einer einzelnen Regelausführung können maximal 10.000 Zeilen in eine Datentabelle ausgegeben werden.
Wenn in der Datentabelle bereits eine Zeile mit demselben Primärschlüssel vorhanden ist, werden Spalten ohne Primärschlüssel durch die neuen Werte ersetzt.
Sie können nur einen einzigen Anreicherungsvorgang (
override
,append
oderexclude
) auf eine einzelne Entitätsgraphenvariable anwenden.Für jeden Datenanreicherungsvorgang kann nur eine Datentabelle verwendet werden.
Sie können im Abschnitt
setup
einer YARA-L-Regel maximal zwei Anreicherungsvorgänge beliebigen Typs definieren.
Im folgenden Beispiel wird ein Überschreibungsvorgang auf die Entitätsgraphenvariable $g1
und ein append
-Vorgang auf die Entitätsgraphenvariable $g2
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 Entitätsgraphen zu ergänzen. Sie können auch verschiedene Datentabellen verwenden, um die verschiedenen Entitätsgrafiken zu ergänzen:
setup:
graph_override($g1.graph.entity.user.userid = %table1.myids)
graph_append [$g2, %table2]