Crea analisi sensibili al contesto

Chronicle ti consente di visualizzare telemetria, contesto delle entità, relazioni e vulnerabilità come singolo rilevamento all'interno del tuo account Chronicle. Fornisce contestualizzazione delle entità per consentirti di comprendere sia i modelli di comportamento nella telemetria sia il contesto delle entità interessate da questi pattern.

Esempi:

  • Visualizzazione delle autorizzazioni per un account in cui si sta tentando di eseguire un accesso di forza bruta.
  • Importanza dei dati ospitati da un asset che è anche l'origine dell'attività di rete in uscita.

I clienti possono utilizzare questa contestualizzazione per filtrare il rilevamento, assegnare la priorità agli avvisi euristici, assegnare una priorità e analizzare i dati.

Gli analisti della sicurezza e gli ingegneri del rilevamento in genere lavorano per realizzare un rilevamento su un pattern base di telemetria degli eventi (una connessione di rete in uscita), creando numerosi rilevamenti per la classificazione da parte degli analisti. Gli analisti tentano di ottenere un quadro più chiaro di ciò che è accaduto per attivare l'avviso e dell'entità della minaccia.

L'analisi sensibile al contesto incorpora funzionalità di arricchimento avanzate nelle prime fasi del flusso di lavoro di creazione ed esecuzione del rilevamento, consentendoti di fornire le seguenti funzionalità aggiuntive:

  • Rendere disponibile il contesto pertinente per il punteggio di rischio contestuale basato sull'euristica dei rilevamenti al momento dell'esecuzione del rilevamento anziché nella fase di classificazione umana
  • Riduzione del tempo dedicato alla classificazione e all'unione manuale delle informazioni provenienti da sistemi di sicurezza IT disparati (console EDR, log firewall/proxy, contesto CMDB e IAM, risultati dell'analisi delle vulnerabilità)
  • Consentire ad analisti e tecnici del rilevamento di filtrare interi cluster di minacce che potrebbero essere previste o che rappresentano un pericolo minimo o nullo per l'azienda (test di malware in un ambiente sandbox, vulnerabilità e attività anomale in una rete di sviluppo senza dati o accesso sensibili e altro ancora)

Scrivere regole per l'analisi sensibile al contesto

Puoi utilizzare le regole di Detection Engine per cercare dati sul contesto delle entità nel tuo account Chronicle.

Per cercare dati sul contesto delle entità, completa i seguenti passaggi:

  1. Specifica un'origine utilizzando l'udm o l'entità.

    $eventname.[<source>].field1.field2 Per un contesto di entità, <source> è un "grafico". Per un evento UDM, <source> è "udm". Se omesso, il valore predefinito di <source> sarà udm.

  2. Specifica i dati dell'entità:

    $e1.graph.entity.hostname = "my-hostname"

    $e1.graph.entity.relations.relationship = "OWNS"

  3. Specifica i dati degli eventi UDM. Le seguenti dichiarazioni sono equivalenti.

    $e1.udm.principal.asset_id = "my_asset_id"

    $e1.principal.asset_id = "my_asset_id"

Puoi creare molti degli stessi tipi di regole per i contesti delle entità che faresti per gli eventi UDM, tra cui:

  • Più regole per eventi

  • Confrontare i contesti delle entità con quelli di altre entità

  • Confrontare i contesti delle entità con gli eventi UDM

  • Campi ripetuti in contesti di entità

  • Finestre scorrevoli

  • Calcolo del punteggio di rischio per i rilevamenti

A differenza di un evento UDM, il contesto di un'entità non ha un timestamp specifico. Ogni record di contesto dell'entità ha un intervallo di tempo, entity.metadata.interval, durante il quale è valido il contesto dell'entità. Questo intervallo di tempo potrebbe non essere un limite giornaliero e può essere qualsiasi durata.

Un evento UDM verrà correlato a un record di contesto dell'entità solo quando il timestamp dell'evento UDM rientra nell'intervallo di tempo del record di contesto dell'entità. Se questa condizione non è soddisfatta, l'UDM e l'entità non vengono valutati per i rilevamenti. Il motore di rilevamento applica in modo implicito questa condizione e non è necessario specificarla come condizione in una regola.

  • Quando confronti eventi UDM con un contesto di entità con windowing, il contesto di un'entità rappresenta un valore costante in una finestra specificata.
  • Se ci sono bucket di giorni adiacenti in cui il contesto dell'entità cambia il valore, Chronicle tenta di trovare una corrispondenza con tutti i valori di contesto dell'entità e restituisce tutte le corrispondenze trovate.

Regole di esempio

Ricerca di entità con contesto amministrativo

La seguente regola cerca le entità che sono associate anche a privilegi di amministratore. Cerca i momenti in cui qualcuno con privilegi di amministratore ha tentato di accedere o uscire dal sistema.

rule LoginLogout {
  meta:
  events:
    $log_in.metadata.event_type = "USER_LOGIN"
    $log_in.principal.user.user_display_name = $user

    $log_out.metadata.event_type = "USER_LOGOUT"
    $log_out.principal.user.user_display_name = $user

    $log_in.metadata.event_timestamp.seconds <=
     $log_out.metadata.event_timestamp.seconds

    $context.graph.entity.user.user_display_name = $user
    $context.graph.entity.resource.attribute.roles.type = "ADMINISTRATOR"

  match:
    $user over 2m

  condition:
    $log_in and $log_out and $context
}

Esempio di finestra scorrevole

Il seguente esempio di finestra scorrevole è valido.

rule Detection {
  meta:
  events:
    $e1.graph.entity.hostname = $host
    $e2.udm.principal.hostname = $host

  match:
    // Using e2 (a UDM event) as a pivot.
    $host over 3h after $e2

  condition:
    $e1 and $e2
}

Esempio di finestra scorrevole non valido

Il seguente esempio di finestra scorrevole non è valido. Il contesto dell'entità non può essere utilizzato come pivot per una finestra scorrevole.

rule Detection {
  meta:
  events:
    $e1.graph.entity.hostname = $host
    $e2.udm.principal.hostname = $host

  match:
    // Attempting to use $e1 (an entity context) as a pivot. Invalid.
    $host over 3h after $e1

  condition:
    $e1 and $e2
}

Esempio di accesso utilizzando la sezione dei risultati

L'esempio seguente utilizza la sezione outcome per calcolare un punteggio di rischio per il rilevamento.

rule Detection {
  meta:
  events:
    $auth.metadata.event_type = "USER_LOGIN"
    $auth.metadata.vendor_name = "Acme"
    $auth.metadata.product_name = "Acme SSO"
    $auth.target.user.userid = $user
    $auth.target.user.termination_date.seconds > 0

    $auth.metadata.event_timestamp.seconds >
       $context.graph.entity.user.termination_date.seconds

    $context.graph.metadata.vendor_name = "Microsoft"
    $context.graph.metadata.product_name = "Azure Active Directory"
    $context.graph.metadata.entity_type = "USER"
    $context.graph.entity.user.userid = $user
    $context.graph.entity.user.termination_date.seconds > 0

  match:
    $user over 15m

  outcome:
    $risk_score = max(
        if ( $auth.metadata.event_type = "USER_LOGIN", 50) +
        if (
            $context.graph.entity.user.title = "Remote" nocase or
            $context.graph.entity.user.title = "Temp" nocase or
            $context.graph.entity.user.title = "Vendor" nocase, 40) +
        if ( $context.graph.entity.user.title = "Legal" nocase, 10)
    )

  condition:
    $auth and $context
}

Esempio di avvio di un processo sospetto

L'esempio seguente valuta i dati di processo degli eventi UDM rispetto ai dati di contesto IOC archiviati come contesto di entità.

rule ProcessLaunch {
  meta:
  events:
    $ioc.graph.metadata.vendor_name = "ACME"
    $ioc.graph.metadata.product_name = "IOCs"
    $ioc.graph.metadata.entity_type = "FILE"
    $ioc.graph.entity.file.sha256 = $hash

    $process.metadata.event_type = "PROCESS_LAUNCH"
    $process.principal.hostname = $hostname
    (
        not $process.target.process.file.sha256 = "" and
        $process.target.process.file.sha256 = $hash
    )

  match:
    $hash over 15m

  condition:
    $ioc and $process
}

Qualificatori aggiuntivi per il contesto dell'entità

Per creare una variabile evento che utilizza un contesto dell'entità, devi fornire un <source> dopo il nome dell'evento. Il valore <source> deve essere graph.

Il seguente pattern si riferisce al contesto di un'entità:

  • $e.graph.entity.hostname

Tieni presente che esistono due metodi equivalenti per fare riferimento a un evento UDM:

  • $u.udm.principal.asset_id
  • $u.principal.asset_id

Puoi combinare tutti questi qualificatori nel testo della regola. Puoi utilizzare anche qualificatori diversi per lo stesso evento.

Sezione Risultato

Il motore di rilevamento supporta una sezione outcome che consente di ricavare maggiori informazioni da una regola. La logica definita nella sezione outcome viene valutata in base a ogni rilevamento. Se una regola genera N rilevamenti, ciascuno dei rilevamenti N potrebbe generare un insieme di risultati diverso.

Puoi trovare una regola di esempio che utilizza la sezione outcome qui.

Per informazioni dettagliate sull'utilizzo e sulla sintassi di una sezione outcome, consulta questa sezione.

Sezione dei risultati e deduplicazione del rilevamento / raggruppamento del rilevamento

Per le regole con una sezione di corrispondenza, ricorda che i rilevamenti sono "raggruppati per" le variabili di corrispondenza. Ciò causa la deduplicazione dei rilevamenti, in modo che venga restituita una riga per ogni insieme univoco di variabili di corrispondenza e finestra temporale.

Le variabili risultato vengono ignorate durante la deduplicazione. Di conseguenza, se esistono due rilevamenti diversi con gli stessi valori per le variabili di corrispondenza e la finestra temporale, ma con valori diversi per le variabili di risultato, questi verranno deduplicati e vedrai un solo rilevamento. Ad esempio, questo può accadere quando è stato creato un rilevamento a causa di dati arrivati in ritardo. Ecco un esempio che illustra questo caso.

rule ExampleOutcomeRule {
  ...
  match:
    $hostname over <some window>
  outcome:
    $risk_score = <some logic here>
  ...
}

Da questa regola si verificano le seguenti corrispondenze:

Rilevamento 1: nome host: test-nome host finestra temporale: [t1, t2] punteggio_rischio: 10

Rilevamento 2: nome host: test-nome host finestra temporale: [t1, t2] punteggio_rischio: 73

Poiché le variabili di corrispondenza e la finestra temporale sono le stesse per il rilevamento 1 e il rilevamento 2, queste vengono deduplicate e vedrai un solo rilevamento, anche se la variabile di risultato, Risk_score, è diversa.

Passaggi successivi

Per informazioni su come Chronicle importa i dati contestuali e arricchisce le entità, consulta In che modo Chronicle arricchisce i dati su eventi ed entità.