Regole di rilevamento predefinite
Linguaggio delle regole YARA-L
YARA-L è un linguaggio per le regole di rilevamento sviluppato da Google. Lo scopo di YARA-L è quello di passare dalle rilevazioni come semplici query di dati a indagini effettive basate sugli eventi. YARA-L deriva dal linguaggio YARA comunemente utilizzato 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 azionabili. Per ulteriori informazioni, consulta la panoramica del linguaggio YARA-L 2.0.
Regole di rilevamento di esempio di Google Security Operations
Per contribuire ad accelerare l'adozione del motore di rilevamento Google SecOps, esiste un repository GitHub con regole di esempio. Questo repository contiene diverse categorie di regole di rilevamento, tra cui:
- Google Cloud CloudAudit
- Google Workspace
- Avvisi informativi
- Malware
- MITRE ATT&CK
- Regole principali del SOC
- Eventi sospetti
Ogni categoria adotta un approccio specifico per la visualizzazione delle origini dati e specifica quali eventi e istruzioni di corrispondenza utilizzare.
Esempi di regole e ottimizzazione
La seguente regola crea una variabile evento $e1
che viene utilizzata per monitorare il tipo di evento. La variabile evento può essere qualsiasi valore significativo per i dati
in fase di valutazione. 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 si verifica ogni volta che si verifica l'evento $e1
. A scopo di ottimizzazione, viene fornita una condizione not
per escludere determinati
percorsi non dannosi per l'argomento della riga di comando. A questa regola possono essere aggiunte ulteriori 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 Risultato delle regole
Utilizza la sezione Risultato per impostare le variabili di attesa all'interno del rilevamento delle regole per
fornire l'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
il valore $hostnames
corrisponde a 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 solo di restituire una query sui 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 di origini dati diverse) e persino utilizzare strumenti come le espressioni regolari per fornire corrispondenze. È essenziale ottimizzare le regole per il tuo ambiente e questo può essere fatto 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. Non dimenticare che Google SecOps non ha bisogno di ricevere avvisi per ogni rilevamento. Puoi monitorare i rilevamenti per più scopi e ricevere 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.