Eseguire ricerche contestuali delle entità

Supportato in:

La funzionalità Contesto entità nella ricerca migliora le indagini sulla sicurezza e la risposta agli incidenti consentendo agli utenti di cercare e visualizzare gli eventi di contesto correlati alle entità all'interno del proprio account Google Security Operations. A differenza delle ricerche limitate allo schema standard degli eventi Unified Data Model (UDM), questa funzionalità soddisfa l'esigenza di eseguire ricerche oltre i dati degli eventi UDM, incluso il contesto delle entità UDM, e fornisce informazioni più approfondite sugli incidenti di sicurezza.

Vantaggi principali

  • Gli analisti della sicurezza e i rilevatori di minacce possono eseguire query su informazioni contestuali sulle entità.
  • Aiutare l'analisi delle cause principali, la ricerca delle minacce e la scienza digitale forense.
  • Gli utenti possono eseguire ricerche statistiche sul contesto delle entità per comprendere i pattern di telemetria e le entità interessate tramite l'analisi della telemetria.

Puoi utilizzare il contesto delle entità per ottenere approfondimenti dai risultati di ricerca nei seguenti modi:

  • Esegui ricerche utilizzando i nomi dei campi delle entità UDM: crea le query di ricerca utilizzando i nomi dei campi delle entità UDM. Ad esempio, per trovare tutti gli eventi di contesto associati a un nome host specifico, crea una ricerca utilizzando graph.entity.hostname.
  • Accedere alla scheda Panoramica: la scheda Panoramica fornisce un riepilogo generale delle entità trovate nella ricerca, sfruttando le informazioni della query inserita da un utente per visualizzare le informazioni. La pagina Panoramica mostra informazioni per i tipi di entità, ad esempio DOMAIN_NAME, IP_ADDRESS, ASSET, USER, FILE, GROUP e RESOURCE.
  • Utilizza la scheda Entità: la scheda Entità elenca tutti gli eventi di contesto dell'entità ricevuti, inclusi i sottocomponenti come Tendenza nel tempo, Filtro snapshot, Aggregazioni ed Eventi. Le entità sono suddivise in entità temporanee e permanenti, visualizzate in schede separate.
  • Visualizza aggregati: gli aggregati vengono visualizzati per i campi, in modo simile alla ricerca di eventi UDM. Le aggregazioni sono ulteriormente classificate in tipi di contesto: contesto entità, contesto derivato e contesto globale.

Entity Context Graph Search Console

La funzionalità Diagramma di contesto delle entità (ECG) di Search Console fornisce diverse schede per aiutarti ad analizzare i dati di contesto delle entità:

  • Scheda Risultati: mostra Timed Data e Timeless Data.

    • Dati temporizzati: mostra le entità che avevano un valore per metadata.interval.end_time durante l'importazione.
    • Dati senza tempo: mostra le entità che non avevano un valore per metadata.interval.end_time.

    Search Console mostra un massimo di 10.000 voci di dati temporizzati o senza data.

  • Scheda Avvisi: mostra eventuali avvisi associati alle entità trovate nella ricerca.

  • Scheda Panoramica: mostra informazioni sull'entità nella query di ricerca.

  • Grafico Attività nel tempo:

    • Mostra il numero di Entità e il Contesto entità validi in ogni bucket temporale. Puoi utilizzare il cursore per aumentare o diminuire lo zoom dell'intervallo di tempo.

    • Entità modificate totali: l'Entity Context Graph (ECG) archivia i dati in bucket temporali all'interno del periodo di validità. Copia inoltre questi dati nel bucket temporale successivo, a condizione che l'entità rimanga valida (in base a end_time). Questo grafico viene aggiornato ogni volta che una proprietà dell'entità cambia tra due bucket temporali.

Caso d'uso: esaminare un account utente compromesso

Considera il seguente scenario: un analista della sicurezza deve esaminare un account utente potenzialmente compromesso (email@azienda.com). Segui questi passaggi per esaminare il problema:

  1. Identifica l'utente compromesso: un avviso segnala che l'utente con indirizzo email email@company.com è stato identificato come account sospetto.

  2. Raccogli informazioni sul contesto dell'entità: ottieni dati contestuali sull'utente per comprendere l'ambito e l'impatto.

  3. Esegui query: utilizza Contesto dell'entità nella ricerca per eseguire le seguenti query:

    • graph.entity.user.email_addresses = "email@company.com" per recuperare informazioni sull'utente.
    • graph.entity.user.email_addresses = "email@company.com" AND graph.metadata.product_name = "Google Cloud Compute Context" per controllare il nome del prodotto e altri metadati.
  4. Analizza la scheda Panoramica: la scheda Panoramica mostra il riepilogo delle entità per l'utente, tra cui:

    • Controlla i timestamp di First Seen Hour e Last Seen Hour.
  • Controlla i nomi host, gli indirizzi IP e gli indirizzi MAC (se disponibili).
  • Ispeziona il modello hardware, la piattaforma del sistema operativo e la versione della piattaforma.
  1. Esamina la scheda Eventi: visualizza gli eventi associati a questo utente, inclusi tentativi di accesso e anomalie.

  2. Rivedi gli aggregati: identifica pattern e anomalie nei dati di contesto delle entità, distribuiti in contesto dell'entità, contesto derivato e contesto globale.

Per cercare i dati del contesto dell'entità, utilizza i nomi dei campi dell'entità UDM nelle query di ricerca:

  • graph.entity.hostname
  • graph.entity.ip = "8.8.8.8" and graph.metadata.entity_type = "ASSET"

I risultati di ricerca mostrano le informazioni chiave sulle entità, tra cui:

  • Metadati entità
  • Metriche (First Seen Hour, Last Seen Hour)
  • Relazioni (Entity, Direction, Entity_label, Entity_type, Relationship)
  • A seconda del tipo di entità, campi specifici, ad esempio Principal_ip per gli asset, Mail_id per gli utenti, File_name per gli hash/file e Domain_name e IP_address per i domini.

Esempi di contesto dell'entità nella ricerca

Questa sezione fornisce esempi pratici per utilizzare la funzionalità Contesto entità UDM per analizzare le statistiche delle entità.

Per visualizzare le origini e i tipi di contesto disponibili, esegui la seguente ricerca di statistiche delle entità UDM nella ricerca UDM:

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

Il selettore dell'ora mostra i dati attivi all'interno del grafico delle entità, non quando sono stati inseriti i dati contestuali.

Poiché la ricerca di entità UDM utilizza l'interfaccia di ricerca UDM standard, puoi utilizzare funzionalità come il riquadro Aggregazioni (per visualizzare i valori più alti o più bassi), la tabella dei risultati e i risultati espansi delle statistiche UDM.

Esempio: Visualizza ENTITY_TYPE univoci

Per espandere la ricerca di entità UDM, puoi includere l'origine log, lo spazio dei nomi e un array di risultati per mostrare i diversi ENTITY_TYPE osservati, come segue:

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

Esempio: perfezionare il set di entità

Puoi perfezionare un insieme specifico di entità utilizzando la funzionalità Pivot di ricerca UDM. Questo perfezionamento genera quindi una query YARA-L simile alla seguente:

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"

Contesto derivato

Google SecOps fornisce i seguenti tipi di contesto derivato:

  • Timestamp di first_seen e last_seen per ogni ENTITY_TYPE
  • Prevalence: Il numero di asset che hanno eseguito l'accesso a un determinato ENTITY_TYPE

First Seen Hour e Last Seen Hour di timestamp

Google SecOps esegue l'analisi statistica dei dati in entrata e arricchisce i record di contesto delle entità con i timestamp first_seen e last_seen:

  • Il campo first_seen_time acquisisce l'ora in cui un'entità è stata visualizzata per la prima volta nell'ambiente del cliente.
  • Il campo last_seen_time registra l'ora dell'osservazione più recente di questa entità.

Utenti con un'ora di prima visualizzazione negli ultimi 7 giorni:

graph.metadata.entity_type = "USER"
graph.entity.user.userid != ""
graph.entity.user.first_seen_time.hours >= timestamp.current_hours()-(86400 * 7)

Domini visualizzati per la prima volta negli ultimi 7 giorni:

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)

File (hash) osservati negli ultimi 7 giorni:

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 rappresenta un hash FILE, ad esempio entity.file.hash. All'interno dell'oggetto hash, il tipo può essere uno dei seguenti:

  • md5
  • sha1
  • sha256

Per cercare un hash specifico, puoi eseguire una ricerca di entità UDM per il tipo di hash specificato:

// This will search ENTITY, DERIVED, and GLOBAL Source Types
graph.metadata.entity_type = "FILE"
graph.entity.file.sha256 = "eb5db1feadda5351c3b8fc0770e9f4c173484df5dc4a785bd1bdce7806a9e498"

Indirizzi IP

ENTITY_TYPES derivato di IP_ADDRESS può rappresentare entità interne o esterne.

La seguente ricerca di statistiche delle entità UDM identifica i IP_ADDRESSES osservati di recente e utilizza le funzioni di aggregazione (nella sezione dei risultati) per contarli per blocco CIDR:

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))

Per esaminare ulteriormente un intervallo insolito o imprevisto, puoi eseguire una ricerca di entità UDM:

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")

Prevalenza

La prevalenza è sempre di tipo DERIVED_CONTEXT.

La seguente ricerca di entità UDM identifica i nomi di dominio osservati raramente. Questi domini sono associati in modo specifico al massimo a un asset distinto al giorno, durante la finestra temporale della query (day_max = 1) e al massimo a un asset distinto nei 10 giorni precedenti (rolling_max = 1).

Questo pattern è utile per rilevare domini con interazioni limitate nel tuo ambiente:

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

In alternativa, puoi trasformare questa ricerca in una ricerca aggregata di statistiche delle entità UDM e aggregare i risultati:

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

Ricerche di base nei campi delle entità UDM

Di seguito sono riportati altri esempi di utilizzo della funzionalità Contesto dell'entità nella ricerca in Google SecOps, in base alle fonti disponibili:

  • 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"

Pivot dai campi entità

Utilizza i campi delle entità per creare tabelle pivot ed esplorare i dati correlati. Esempi di campi pivot includono:

  • network.email.to
  • network.email.cc
  • principal.process.file.fileMetadata.pe.importHash
  • principal.process.file.sha256
  • network.dns.questions.name

Informazioni sui campi dinamici

Le origini fanno riferimento a campi strutturati dinamici con prefissi, ad esempio additional. Puoi cercare questi campi all'interno degli eventi UDM.

Considerazioni sul controllo dell'accesso

Il sistema impone un limite di 50 eventi per i dati di contesto globali. Sia gli utenti globali sia quelli con ambito possono visualizzare i dati.

Le seguenti fonti forniscono dati contestuali globali:

Dati di contesto globali Dove un utente può visualizzare o interagire con questi dati Chi può vederlo
Navigazione sicura - Cerca
- Regole
Tutti gli utenti
VirusTotal Relationships - Cerca
- Regole
Tutti gli utenti
WHOIS - Cerca
- Regole
Tutti gli utenti
Maiuscolo - Cerca
- Regole
Tutti gli utenti
Open Source Intel IOC (OPEN_SOURCE_INTEL_IOC) - Cerca
- Regole
Tutti gli utenti
Mandiant Fusion IoC (MANDIANT_FUSION_IOC) - Cerca
- Regole
- Minacce emergenti
Tutti gli utenti

Limitazioni

  • Limiti di volume: limite di 1 milione di risultati cumulativi per i dati temporizzati e non temporizzati.
  • Dati di contesto globali: esiste un limite di 50 righe per i dati di contesto globali sensibili, come UPPERCASE_VT_PROTECTED, MANDIANT_FUSION_IOC e VIRUS_TOTAL_CONNECTIONS.
  • Coerenza dei dati: i dati dell'ultima visualizzazione possono registrare un ritardo fino a 2 ore. Le entità correlate possono mostrare solo un sottoinsieme delle entità elencate in un evento.
  • Funzionalità non supportate:

    • Ricerche inverse sui campi delle entità, ricerche di campi raggruppati, bassa prevalenza e mappa termica.
    • Non puoi utilizzare Join tra il contesto dell'entità e le query sugli eventi.

Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.