Eseguire una ricerca di dati di contesto dell'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 di eventi Unified Data Model (UDM) standard, 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à.
  • Aiutano l'analisi delle cause principali, la ricerca delle minacce e l'analisi 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à temporali ed entità senza tempo, visualizzate in schede separate.
  • Visualizza aggregazioni: le aggregazioni vengono visualizzate 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.

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. Riepiloghi delle recensioni: 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 importati 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 massimi o minimi), 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 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_hour acquisisce l'ora in cui un'entità è stata visualizzata per la prima volta nell'ambiente del cliente.
  • Il campo last_seen_hour 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 delle statistiche delle entità UDM identifica i IP_ADDRESSES osservati di recente e utilizza le funzioni di aggregazione (nella sezione dei risultati) per contarli in base al 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 a al massimo un asset distinto al giorno, durante l'intervallo di tempo della query (day_max = 1) e al massimo 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

Un limite di 50 eventi viene imposto ai dati di contesto globali e vengono rimossi i riferimenti ai controlli dell'accesso.

Le seguenti origini forniscono il supporto del contesto globale:

  • Navigazione sicura
  • VirusTotal Relationships
  • WHOIS
  • Maiuscole
  • Open Source Intel IOC (OPEN_SOURCE_INTEL_IOC)
  • Mandiant Active Breach IoC (MANDIANT_ACTIVE_BREACH_IOC)
  • Mandiant Fusion IoC (MANDIANT_FUSION_IOC)

Limitazioni

  • Limiti di volume: limite di 1 milione di risultati cumulativi per i dati temporizzati e senza tempo.
  • Dati di contesto globali: esiste un limite di 50 righe per i dati di contesto globali sensibili, come UPPERCASE_VT_PROTECTED, MANDIANT_ACTIVE_BREACH_IOC, MANDIANT_FUSION_IOC e VIRUS_TOTAL_CONNECTIONS, visualizzati per gli utenti con ambito di accesso ai dati globale.
  • Coerenza dei dati: i dati Ultima visualizzazione potrebbero subire ritardi fino a 2 ore. Le entità correlate potrebbero mostrare solo un sottoinsieme delle entità elencate in un evento.
  • Funzionalità non supportate:

    • Ricerca inversa nei campi delle entità, ricerche nei 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.