Nach Daten zum Entitätskontext suchen
Mit der Funktion „Entitätskontext in der Suche“ können Nutzer in ihrem Google Security Operations-Konto nach Kontextereignissen suchen, die mit Entitäten verknüpft sind, und diese ansehen. So lassen sich Sicherheitsuntersuchungen und die Reaktion auf Vorfälle verbessern. Im Gegensatz zu Suchvorgängen, die auf das Standard-UDM-Ereignisschema (Unified Data Model) beschränkt sind, wird mit dieser Funktion die Notwendigkeit berücksichtigt, über UDM-Ereignisdaten hinaus zu suchen, einschließlich des UDM-Entitätskontexts, und tiefere Einblicke in Sicherheitsvorfälle zu erhalten.
Hauptvorteile
- Sicherheitsanalysten und Threat Hunter können Kontextinformationen zu Entitäten abfragen.
- Unterstützung bei der Ursachenanalyse, der Suche nach Bedrohungen und der Forensik.
- Nutzer können statistische Suchen im Entitätskontext durchführen, um Telemetriemuster und betroffene Entitäten durch Telemetrieanalysen zu ermitteln.
Entitätskontext in der Suche verwenden
Sie können den Kontext von Entitäten nutzen, um auf folgende Weise Statistiken aus Ihren Suchergebnissen zu erhalten:
- Mit UDM-Entitätsfeldnamen suchen: Erstellen Sie Ihre Suchanfragen mit UDM-Entitätsfeldnamen. Wenn Sie beispielsweise alle Kontextereignisse für einen bestimmten Hostnamen finden möchten, erstellen Sie eine Suche mit
graph.entity.hostname
. - Tab „Übersicht“ aufrufen: Der Tab Übersicht bietet eine allgemeine Zusammenfassung der in Ihrer Suche gefundenen Einheiten. Dabei werden Informationen aus der vom Nutzer eingegebenen Anfrage verwendet, um Informationen anzuzeigen. Auf der Seite Übersicht werden Informationen für Entitätstypen wie
DOMAIN_NAME
,IP_ADDRESS
,ASSET
,USER
,FILE
,GROUP
undRESOURCE
angezeigt. - Tab „Entität“ verwenden: Auf dem Tab Entität werden alle empfangenen Ereignisse im Entitätskontext aufgeführt, einschließlich Unterkomponenten wie „Trend im Zeitverlauf“, „Snapshot-Filter“, „Aggregationen“ und „Ereignisse“. Die Entitäten werden in separaten Tabs in zeitbezogene und zeitlose Entitäten unterteilt.
- Aggregate ansehen: Aggregate werden für Felder angezeigt, ähnlich wie bei der UDM-Ereignissuche. Die Aggregationen werden weiter in Kontexttypen unterteilt: Entitätskontext, abgeleiteter Kontext und globaler Kontext.
Anwendungsfall: Kompromittiertes Nutzerkonto untersuchen
Stellen Sie sich folgendes Szenario vor: Ein Sicherheitsanalyst muss ein potenziell kompromittiertes Nutzerkonto (email@company.com) untersuchen. So gehen Sie vor:
Gehackten Nutzer identifizieren: In einer Benachrichtigung wird Nutzer email@company.com als verdächtiges Konto gekennzeichnet.
Kontextinformationen zur Identität erfassen: Rufen Sie Kontextdaten zum Nutzer ab, um den Umfang und die Auswirkungen zu verstehen.
Abfragen ausführen: Verwenden Sie Entitätskontext in der Suche, um die folgenden Abfragen auszuführen:
graph.entity.user.email_addresses = "email@company.com"
, um Informationen über den Nutzer abzurufen.graph.entity.user.email_addresses = "email@company.com" AND graph.metadata.product_name = "Google Cloud Compute Context"
, um den Produktnamen und andere Metadaten zu prüfen.
Tab „Übersicht“ analysieren: Auf dem Tab Übersicht wird die Zusammenfassung der Einheit für den Nutzer angezeigt, einschließlich:
- Prüfen Sie die Zeitstempel von
First Seen Hour
undLast Seen Hour
.
- Prüfen Sie die Zeitstempel von
- Prüfen Sie Hostnamen, IP-Adressen und MAC-Adressen (sofern verfügbar).
- Hardwaremodell, Betriebssystemplattform und Plattformversion prüfen
Tab „Ereignisse“ aufrufen: Hier sehen Sie die zugehörigen Ereignisse für diesen Nutzer, einschließlich Anmeldeversuchen und Anomalien.
Zusammenfassungen ansehen: Muster und Anomalien in Kontextdaten für Entitäten erkennen, die in die Kategorien „Entitätenkontext“, „Abgeleiteter Kontext“ und „Globaler Kontext“ unterteilt sind.
Beispiele für die Suche
Wenn Sie nach Entitätskontextdaten suchen möchten, verwenden Sie in Ihren Suchanfragen UDM-Entitätsfeldnamen:
graph.entity.hostname
graph.entity.ip = "8.8.8.8" and graph.metadata.entity_type = "ASSET"
Die Suchergebnisse enthalten wichtige Informationen zu den Entitäten, darunter:
- Entitätsmetadaten
- Messwerte (
First Seen Hour
,Last Seen Hour
) - Beziehungen (
Entity
,Direction
,Entity_label
,Entity_type
,Relationship
) - Je nach Entitätstyp sind bestimmte Felder erforderlich, z. B.
Principal_ip
für Assets,Mail_id
für Nutzer,File_name
für Hashes/Dateien sowieDomain_name
undIP_address
für Domains.
Beispiele für den Entitätskontext in der Suche
In diesem Abschnitt finden Sie praktische Beispiele für die Analyse von Entitätsstatistiken mit der Funktion „UDM Entity Context“.
UDM-Suche nach Statistiken für Entitäten
Wenn Sie die verfügbaren Kontextquellen und ‑typen aufrufen möchten, führen Sie die folgende Suche nach UDM-Entitätsstatistiken in der UDM-Suche aus:
graph.metadata.source_type = $sourceType
graph.metadata.entity_type = $entityType
match:
$sourceType, $entityType
outcome:
$total = count(graph.metadata.product_entity_id)
order:
$sourceType, $total desc
limit:
100
In der Zeitauswahl werden aktive Daten im Entity Graph angezeigt, nicht der Zeitpunkt, an dem die Kontextdaten aufgenommen wurden.
Da für die UDM Entity Search die standardmäßige UDM Search-Benutzeroberfläche verwendet wird, können Sie Funktionen wie den Bereich Zusammenfassungen (zum Anzeigen der höchsten oder niedrigsten Werte), die Ergebnistabelle und die erweiterten Ergebnisse von UDM Stats nutzen.
Beispiel: Einzelne ENTITY_TYPE
ansehen
Um die UDM-Entitätssuche zu erweitern, können Sie die Logquelle, den Namespace und ein Ergebnis-Array einfügen, um die beobachteten eindeutigen ENTITY_TYPE
s so darzustellen:
graph.metadata.source_type = "ENTITY_CONTEXT"
$logType = strings.to_upper(graph.metadata.event_metadata.base_labels.log_types)
$namespace = strings.to_upper(graph.metadata.event_metadata.base_labels.namespaces)
match:
$logType, $namespace
outcome:
$total = count(graph.metadata.product_entity_id)
$entityTypes = array_distinct(graph.metadata.entity_type)
order:
$logType, $total desc
limit:
100
Beispiel: Entitätssatz optimieren
Mit der Pivot-Funktion „UDM Search“ können Sie einen bestimmten Satz von Entitäten verfeinern. Durch diese Verfeinerung wird dann eine YARA-L-Abfrage wie die folgende generiert:
graph.metadata.source_type = "ENTITY_CONTEXT"
$logType = strings.to_upper( graph.metadata.event_metadata.base_labels.log_types )
$namespace = strings.to_upper( graph.metadata.event_metadata.base_labels.namespaces )
AND strings.to_upper( graph.metadata.event_metadata.base_labels.log_types ) = "WINDOWS_AD"
AND strings.to_upper( graph.metadata.event_metadata.base_labels.namespaces ) = "ACME"
Abgeleiteter Kontext
Google SecOps bietet die folgenden Arten von abgeleitetem Kontext:
first_seen
- undlast_seen
-Zeitstempel für jedeENTITY_TYPE
Prevalence
: Die Anzahl der Assets, die auf eine bestimmteENTITY_TYPE
zugegriffen haben.
First Seen Hour
- und Last Seen Hour
-Zeitstempel
Google SecOps führt statistische Analysen für eingehende Daten durch und reichert Datensätze zum Kontext von Entitäten mit first_seen
- und last_seen
-Zeitstempeln an:
- Im Feld
first_seen_hour
wird die Stunde erfasst, in der eine Entität zum ersten Mal in der Kundenumgebung gesehen wurde. - Im Feld
last_seen_hour
wird die Stunde der letzten Beobachtung dieser Einheit aufgezeichnet.
Nutzer mit einer ersten Sichtbarkeitsstunde in den letzten 7 Tagen:
graph.metadata.entity_type = "USER"
graph.entity.user.userid != ""
graph.entity.user.first_seen_time.hours >= timestamp.current_hours()-(86400 * 7)
Domains, die in den letzten 7 Tagen zum ersten Mal gesehen wurden:
graph.metadata.source_type = "DERIVED_CONTEXT"
graph.metadata.entity_type = "DOMAIN_NAME"
//optional, filter to only return FQDN
graph.entity.domain.name = /^([a-zA-Z0–9]([a-zA-Z0–9-]{0,61}[a-zA-Z0–9])?\.)+[a-zA-Z]{2,}$/
graph.entity.domain.first_seen_time.hours >= timestamp.current_hours()-(86400 * 7)
Datei (Hashes) in den letzten 7 Tagen beobachtet:
graph.metadata.source_type = "DERIVED_CONTEXT"
graph.metadata.entity_type = "FILE"
//graph.entity.file.md5 != ""
//graph.entity.file.sha1 != ""
graph.entity.file.sha256 != ""
graph.entity.file.first_seen_time.hours >= timestamp.current_hours() - (86400 * 7)
ENTITY_TYPE
steht für einen FILE
-Hash, z. B. entity.file.hash
.
Im hash
-Objekt kann der Typ einer der folgenden sein:
md5
sha1
sha256
Wenn Sie nach einem bestimmten Hash suchen möchten, können Sie eine UDM-Entitätssuche für den angegebenen Hash-Typ ausführen:
// This will search ENTITY, DERIVED, and GLOBAL Source Types
graph.metadata.entity_type = "FILE"
graph.entity.file.sha256 = "eb5db1feadda5351c3b8fc0770e9f4c173484df5dc4a785bd1bdce7806a9e498"
IP-Adressen
Abgeleitete ENTITY_TYPES
von IP_ADDRESS
können interne oder externe Einheiten darstellen.
Mit der folgenden UDM Entity Stats-Suche werden kürzlich beobachtete IP_ADDRESSES
ermittelt und mit Aggregatfunktionen (im Ergebnisbereich) nach CIDR-Block gezählt:
graph.metadata.source_type = "DERIVED_CONTEXT"
graph.metadata.entity_type = "IP_ADDRESS"
//note, for IP addresses the first seen is under artifact, not ip
graph.entity.artifact.first_seen_time.hours >= timestamp.current_hours()-(86400 * 7)
outcome:
$total = count(graph.metadata.product_entity_id)
$classA = sum(if(net.ip_in_range_cidr(graph.entity.ip, "10.0.0.0/8"),1,0))
$classB = sum(if(net.ip_in_range_cidr(graph.entity.ip, "172.16.0.0/12"),1,0))
$classC = sum(if(net.ip_in_range_cidr(graph.entity.ip, "192.168.0.0/16"),1,0))
$classD = sum(if(net.ip_in_range_cidr(graph.entity.ip, "224.0.0.0/4"),1,0))
// we shouldn't see results here…
$classE = sum(if(net.ip_in_range_cidr(graph.entity.ip, "240.0.0.0/4"),1,0))
$thisNetwork = sum(if(net.ip_in_range_cidr(graph.entity.ip, "0.0.0.0/8"),1,0))
$loopback = sum(if(net.ip_in_range_cidr(graph.entity.ip, "127.0.0.0/8"),1,0))
$linklocal = sum(if(net.ip_in_range_cidr(graph.entity.ip, "169.254.0.0/16"),1,0))
$benchmark = sum(if(net.ip_in_range_cidr(graph.entity.ip, "198.18.0.0/15"),1,0))
$cgnat = sum(if(net.ip_in_range_cidr(graph.entity.ip, "10.64.0.0/10"),1,0))
Wenn Sie einen ungewöhnlichen oder unerwarteten Bereich genauer untersuchen möchten, können Sie eine UDM-Entitätssuche ausführen:
graph.metadata.source_type = "DERIVED_CONTEXT"
graph.metadata.entity_type = "IP_ADDRESS"
net.ip_in_range_cidr(graph.entity.ip, "198.18.0.0/15")
Verbreitung
Die Häufigkeit hat immer den Typ DERIVED_CONTEXT
.
Mit der folgenden UDM Entity Search werden Domainnamen identifiziert, die selten beobachtet werden. Diese Domains sind im Abfragezeitraum (day_max = 1
) maximal einem eindeutigen Asset pro Tag und in den letzten 10 Tagen (rolling_max = 1
) maximal einem eindeutigen Asset zugeordnet.
Dieses Muster ist nützlich, um Domains mit eingeschränkter Interaktion in Ihrer Umgebung zu erkennen:
graph.metadata.source_type = "DERIVED_CONTEXT"
graph.metadata.entity_type = "DOMAIN_NAME"
//optional, filter to only return specific TLDs where the FQDN is more than X characters
//graph.entity.domain.name = /^.{40,}\.(?:sx|cc|st|ac|lc|wd|vg|tv|cm|gd)$/
graph.entity.domain.prevalence.rolling_max = 1
graph.entity.domain.prevalence.day_max = 1
Alternativ können Sie daraus eine aggregierte UDM Entity Stats-Suche machen und die Ergebnisse aggregieren:
graph.metadata.source_type = "DERIVED_CONTEXT"
graph.metadata.entity_type = "DOMAIN_NAME"
//optional, filter to only return FQDN
graph.entity.domain.name = /^.{40,}\.(?:sx|cc|st|ac|lc|wd|vg|tv|cm|gd)$/
$domain = graph.entity.domain.name
$length = strings.length(graph.entity.domain.name)
$tld = strings.extract_domain(graph.entity.domain.name)
graph.entity.domain.prevalence.day_max = 1
graph.entity.domain.prevalence.rolling_max = 1
match:
$domain, $tld, $length
limit:
10
Einfache UDM-Entitätsfeldsuchen
Hier sind weitere Beispiele für die Verwendung der Funktion „Entitätskontext in der Suche“ in Google SecOps, basierend auf verfügbaren Quellen:
graph.entity.hostname
graph.entity.ip = "8.8.8.8" and graph.metadata.entity_type = "ASSET"
principal.ip
principal.hostname="baz"
principal.ip="1.2.3.4"
network.dns.questions.name="youtube.com"
Pivotieren anhand von Entitätsfeldern
Mit Attributfeldern können Sie Daten pivotieren und zugehörige Daten untersuchen. Beispiele für Pivot-Felder:
network.email.to
network.email.cc
principal.process.file.fileMetadata.pe.importHash
principal.process.file.sha256
network.dns.questions.name
Dynamische Felder
In den Quellen wird auf dynamische strukturierte Felder mit Präfixen wie additional
verwiesen. Sie können in UDM-Ereignissen nach diesen Feldern suchen.
Hinweise zur Zugriffssteuerung
Für globale Kontextdaten gilt ein Limit von 50 Ereignissen. Außerdem werden Verweise auf Zugriffssteuerungen entfernt.
Die folgenden Quellen bieten Unterstützung für den globalen Kontext:
- Safe Browsing
- VirusTotal Relationships
- WHOIS
- Großbuchstaben
- Open Source Intel IOC (
OPEN_SOURCE_INTEL_IOC
) - Mandiant Active Breach IoC (
MANDIANT_ACTIVE_BREACH_IOC
) - Mandiant Fusion IoC (
MANDIANT_FUSION_IOC
)
Beschränkungen
- Volumenbeschränkungen: Für kumulative Ergebnisse gilt ein Limit von 1 Million für zeitbezogene und zeitlose Daten.
- Globale Kontextdaten: Für vertrauliche globale Kontextdaten wie UPPERCASE_VT_PROTECTED, MANDIANT_ACTIVE_BREACH_IOC, MANDIANT_FUSION_IOC und VIRUS_TOTAL_CONNECTIONS, die für Nutzer mit dem globalen Datenzugriffsbereich angezeigt werden, gilt ein Limit von 50 Zeilen.
- Datenkonsistenz: Die Daten zum letzten Besuch können bis zu 2 Stunden verzögert sein. Bei verknüpften Elementen wird möglicherweise nur ein Teil der in einem Ereignis aufgeführten Elemente angezeigt.
Nicht unterstützte Funktionen:
- Reverse-Lookups für Entitätsfelder, gruppierte Feldsuche, geringe Häufigkeit und Heatmap.
- Sie können keine Joins zwischen dem Kontext von Entitäten und Ereignisabfragen erstellen.
Benötigen Sie weitere Hilfe? Antworten von Community-Mitgliedern und Google SecOps-Experten erhalten