Regole di rilevamento composito
Il rilevamento composito in Google SecOps prevede il collegamento di più regole YARA-L. Questo documento spiega come creare una regola composita. Per maggiori informazioni, consulta Panoramica dei rilevamenti compositi.
Comprendere la struttura della regola
Le regole di rilevamento composite sono sempre regole a più eventi e seguono la stessa struttura e sintassi di una regola a evento singolo.
Una regola composita è costituita dai seguenti componenti essenziali:
Sezione
events: definisce gli input, ovvero i rilevamenti o gli eventi specifici che la regola analizza.Sezione
match: specifica come devono essere collegati gli input in un intervallo di tempo definito.Sezione
condition: contiene la logica finale che determina se gli eventi uniti soddisfano i criteri per attivare un avviso.
Definisci gli input nella sezione events
Il primo passaggio per creare una regola di rilevamento composita consiste nel definire gli input della regola nella sezione events. Gli input per le regole composite provengono dalle raccolte, che archiviano i rilevamenti generati da altre query.
Google SecOps fornisce i seguenti due metodi per accedere ai dati
dalle raccolte.
Contenuti di rilevamento dei riferimenti con variabili o metaetichette
Per accedere ai dati di un rilevamento senza fare riferimento agli eventi UDM originali,
puoi utilizzare le variabili outcome, le variabili match o le etichette meta. Consigliamo questo approccio perché offre una maggiore flessibilità e una migliore compatibilità tra i diversi tipi di regole.
Ad esempio, più regole possono memorizzare una stringa (come un URL, un nome file o
una chiave del registro) in una variabile outcome comune se stai cercando quella stringa
in contesti diversi. Per accedere a questa stringa da una regola composita, inizia
con detection e individua le informazioni pertinenti utilizzando gli elementi della
risorsa Raccolta.
Esempio: supponiamo che una regola di rilevamento produca le seguenti informazioni:
Variabile di risultato:
dest_domain = "cymbal.com"Campo UDM:
target.hostname = "cymbal.com"
Nella regola composita, puoi accedere a questi dati utilizzando i seguenti percorsi:
detection.detection.outcomes["dest_domain"]per accedere alla variabiledest_domainrisultato.detection.collection_elements.references.event.target.hostnameper accedere al campo UDMtarget.hostname.detection.time_window.start_time.secondsper accedere al timestamp di inizio del rilevamento.
L'API Collection e l'API SecurityResult forniscono l'accesso a entrambe:
- Valori dei metadati e dei risultati del rilevamento (
detection.detection) - Eventi UDM sottostanti delle regole a cui viene fatto riferimento (
collection_elements)
Contenuti di rilevamento dei riferimenti con ID o nome della regola
Puoi fare riferimento a una regola in base al nome o all'ID. Consigliamo questo approccio
quando la logica di rilevamento dipende da regole specifiche e vuoi ridurre i dati analizzati solo ai risultati di queste regole. Il riferimento a regole pertinenti
per nome o ID migliora il rendimento ed evita i timeout riducendo i dati
analizzati. Ad esempio, puoi eseguire query direttamente sui campi come target.url o
principal.ip da un rilevamento precedente noto.
Fai riferimento a una regola in base all'ID regola (consigliato): utilizza il campo
detection.detection.rule_idper fare riferimento a una regola in base all'ID. Puoi trovare l'ID regola nell'URL della regola in Google SecOps. Le regole generate dagli utenti hanno ID nel formatoru_UUID, mentre i rilevamenti curati hanno ID nel formatour_UUID. Ad esempio:detection.detection.rule_id = "ru_e0d3f371-6832-4d20-b0ad-1f4e234acb2b"Fai riferimento a una regola in base al nome:utilizza il campo
detection.detection.rule_nameper fare riferimento a una regola in base al nome. Puoi specificare il nome esatto della regola o utilizzare un'espressione regolare per trovarla. Ad esempio:detection.detection.rule_name = "My Rule Name"detection.detection.rule_name = "/PartOfName/"
Input di unione nella sezione match
Per collegare rilevamenti, eventi o entità correlati in una regola composita, definisci
la sezione match utilizzando le variabili definite nella sezione events. Queste
variabili possono includere etichette delle regole, variabili di risultato, variabili di corrispondenza, campi di rilevamento o elementi di raccolta.
Per informazioni sulla sintassi, vedi Sintassi della sezione di corrispondenza.
Definisci la sezione condition
Definisci la sezione condition per valutare i risultati della sezione match.
Se la condizione è true, viene generato un avviso. Per informazioni sulla
sintassi, consulta la sezione Sintassi della sezione Condizione.
Applicare tecniche avanzate alle regole composite
Questa sezione spiega come applicare tecniche avanzate durante la creazione di regole composite.
Combinare eventi e rilevamenti
Le regole composite possono combinare più origini dati, inclusi eventi UDM, dati del grafico delle entità e campi di rilevamento. Si applicano le seguenti linee guida:
Utilizza variabili distinte per origine: assegna variabili evento uniche a ogni origine dati (ad esempio,
$eper gli eventi,$dper i rilevamenti), in cui l'origine dati include eventi, entità e rilevamenti.Unisci le origini in base al contesto condiviso: collega le origini dati utilizzando valori comuni, come ID utente, indirizzi IP o nomi di dominio nelle condizioni della regola.
Definisci una finestra di corrispondenza: includi sempre una clausola
matchcon una finestra temporale non superiore a 48 ore.
Esempio: combinazione di eventi e rilevamenti
rule CheckCuratedDetection_with_EDR_and_EG {
meta:
author = "noone@cymbal.com"
events:
$d.detection.detection.rule_name = /SCC: Custom Modules: Configurable Bad Domain/
$d.detection.collection_elements.references.event.network.dns.questions.name = $domain
$d.detection.collection_elements.references.event.principal.asset.hostname = $hostname
$e.metadata.log_type = "LIMACHARLIE_EDR"
$e.metadata.product_event_type = "NETWORK_CONNECTIONS"
$domain = re.capture($e.principal.process.command_line, "\\s([a-zA-Z0-9.-]+\\.[a-zA-Z0-9.-]+)$")
$hostname = re.capture($e.principal.hostname, "([^.]*)")
$prevalence.graph.metadata.entity_type = "DOMAIN_NAME"
$prevalence.graph.metadata.source_type = "DERIVED_CONTEXT"
$prevalence.graph.entity.hostname = $domain
$prevalence.graph.entity.domain.prevalence.day_count = 10
$prevalence.graph.entity.domain.prevalence.rolling_max <= 5
$prevalence.graph.entity.domain.prevalence.rolling_max > 0
match:
$hostname over 1h
outcome:
$risk_score = 80
$CL_target = array($domain)
condition:
$e and $d and $prevalence
}
Creare rilevamenti compositi sequenziali
I rilevamenti compositi sequenziali identificano pattern di eventi correlati in cui la sequenza di rilevamenti è importante, ad esempio un rilevamento di tentativo di accesso con attacco di tipo brute force, seguito da un accesso riuscito. Questi pattern possono combinare più rilevamenti di base, eventi UDM non elaborati o entrambi.
Per creare un rilevamento composito sequenziale, devi applicare l'ordine all'interno della regola. Per applicare la sequenza prevista, utilizza uno dei seguenti metodi:
Finestre scorrevoli:definisci la sequenza di rilevamenti utilizzando le finestre scorrevoli nelle condizioni
match.Confronti dei timestamp:confronta i timestamp dei rilevamenti all'interno della logica della regola per verificare che si verifichino nell'ordine selezionato.
Esempio: rilevamenti compositi sequenziali
events:
$d1.detection.detection.rule_name = "fileEvent_rule"
$userid = $d1.detection.detection.outcomes["user"]
$hostname = $d1.detection.detection.outcomes["hostname"]
$d2.detection.detection.rule_name = "processExecution_rule"
$userid = $d2.detection.detection.outcomes["user"]
$hostname = $d2.detection.detection.outcomes["hostname"]
$d3.detection.detection.rule_name = "networkEvent_rule"
$userid = $d3.detection.detection.outcomes["user"]
$hostname = $d3.detection.detection.outcomes["hostname"]
$d3.detection.collection_elements.references.event.metadata.event_timestamp.seconds > $d2.detection.collection_elements.references.event.metadata.event_timestamp.seconds
match:
$userid over 24h after $d1
Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.