Panoramica delle regole di rilevamento
Linguaggio delle regole YARA-L
YARA-L è un linguaggio di regole di rilevamento sviluppato da Google. Lo scopo di YARA-L è passare dal rilevamento come semplici query di dati a indagini effettive basate sugli eventi. YARA-L deriva dal linguaggio YARA di uso comune nell'analisi dei malware. La L sta per log. YARA-L ti consente di sfruttare tutte le informazioni provenienti da più fonti all'interno dei rilevamenti e di correlare questi eventi in avvisi utilizzabili. Per saperne di più, consulta la Panoramica del linguaggio YARA-L 2.0.
Regole di rilevamento di esempio di Google Security Operations
Per accelerare l'adozione del motore di rilevamento di Google SecOps, è disponibile un repository GitHub con regole di esempio. Questo repository contiene diverse categorie di regole di rilevamento, tra cui le seguenti:
- Google Cloud CloudAudit
- Google Workspace
- Avvisi informativi
- Malware
- MITRE ATT&CK
- Regole principali del SOC
- Eventi sospetti
Ogni categoria adotta un approccio specifico al modo in cui visualizza le origini dati e specifica quali eventi e istruzioni di corrispondenza utilizzare.
Regole di esempio e ottimizzazione
La seguente regola crea una variabile evento $e1 utilizzata per monitorare il tipo di evento. La variabile evento può essere qualsiasi valore che abbia significato per i dati da valutare. Il campo UDM valutato in questo evento è metadata.eventype, quindi ha senso chiamarlo semplicemente e1. Le righe successive cercano occorrenze specifiche di corrispondenze di espressioni regolari all'interno di e1. La condizione che crea un rilevamento in Google SecOps è ogni volta che si verifica l'evento $e1. Ai fini dell'ottimizzazione, viene fornita una condizione not per escludere determinati percorsi non dannosi per l'argomento della riga di comando. A questa regola potrebbero essere aggiunte altre condizioni not se identifichi falsi positivi frequenti provenienti da altri percorsi di file noti.
rule suspicious_unusual_location_svchost_execution
{
meta:
author = "Google Cloud Security"
description = "Windows 'svchost' executed from an unusual location"
yara_version = "YL2.0"
rule_version = "1.0"
events:
$e1.metadata.event_type = "PROCESS_LAUNCH"
re.regex($e1.principal.process.command_line, `\bsvchost(\.exe)?\b`) nocase
not re.regex($e1.principal.process.command_line, `\\Windows\\System32\\`) nocase
condition:
$e1
}
Specificare più di una variabile evento
YARA-L ti consente di avere più di una variabile evento in una regola. Nell'esempio seguente, la regola ha gli eventi $e1 e $e2. La condizione indica la condizione logica che attiva il rilevamento.
rule ExcludeZeroValues {
meta:
author = "noone@google.com"
events:
$e1.metadata.event_type = "NETWORK_DNS"
$e1.principal.hostname = $hostname
// $e1.principal.user.userid may be empty string.
$e1.principal.user.userid != "Guest"
$e2.metadata.event_type = "NETWORK_HTTP"
$e2.principal.hostname = $hostname
// $e2.target.asset_id cannot be empty string as explicitly specified.
$e2.target.asset_id != ""
match:
// $hostname cannot be empty string.
$hostname over 1h
condition:
$e1 and $e2
}
Sezione dei risultati delle regole
Utilizza la sezione dei risultati per impostare le variabili di attesa all'interno del rilevamento delle regole per fornire un arricchimento per il consumo downstream. Ad esempio, puoi aggiungere informazioni sul punteggio di gravità che si basano sui dati degli eventi analizzati. Il seguente rilevamento esamina due eventi per attribuire il valore $hostname. Se i valori $hostnames corrispondono per un periodo di 5 minuti, viene applicato un punteggio di gravità. Quando utilizzi periodi di tempo, il motore di rilevamento di Google SecOps esamina solo i blocchi di tempo discreti che specifichi.
rule OutcomeRuleMultiEvent {
meta:
author = "noone@google.com"
events:
$u.udm.principal.hostname = $hostname
$asset_context.graph.entity.hostname = $hostname
$severity = $asset_context.graph.entity.asset.vulnerabilities.severity
match:
$hostname over 5m
outcome:
$risk_score =
max(
100
+ if($hostname = "my-hostname", 100, 50)
+ if($severity = "HIGH", 10)
+ if($severity = "MEDIUM", 5)
+ if($severity = "LOW", 1)
)
$asset_id_list =
array(
if($u.principal.asset_id = "",
"Empty asset id",
$u.principal.asset_id
)
)
$asset_id_distinct_list = array_distinct($u.principal.asset_id)
$asset_id_count = count($u.principal.asset_id)
$asset_id_distinct_count = count_distinct($u.principal.asset_id)
condition:
$u and $asset_context and $risk_score > 50 and not arrays.contains($asset_id_list, "id_1234")
}
Conclusione
YARA-L è un linguaggio di rilevamento flessibile che ti consente di esaminare gli eventi di sicurezza e non semplicemente di restituire una query di dati. La variabile evento viene utilizzata per monitorare i valori dei campi utilizzati nella sezione delle condizioni della regola. Puoi utilizzare un singolo evento, più eventi nel tempo, correlare le origini per un singolo valore (ad esempio $hostname da origini dati diverse) e persino utilizzare strumenti come le espressioni regolari per fornire corrispondenze. È essenziale ottimizzare le regole per il tuo ambiente e puoi farlo specificando le esclusioni all'interno della logica. Puoi anche utilizzare gli elenchi di riferimento per raggruppare gli elementi e poi fare riferimento a questo elenco nella regola. Tieni presente che Google SecOps non richiede che venga generato un avviso per ogni rilevamento. Puoi tenere traccia dei rilevamenti per più scopi e generare avvisi solo per quelli che ritieni più critici nel tuo ambiente.
Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.