Panoramica del feed Applied Threat Intelligence Fusion
Il feed di Applied Threat Intelligence (ATI) Fusion è una raccolta di indicatori di compromissione (IOC), inclusi hash, IP, domini e URL, associati a attori delle minacce noti, ceppi di malware, campagne attive e report di intelligence completati. Il feed include anche indicatori di compromissione provenienti da feed open source che Mandiant Intelligence ha controllato e convalidato attentamente, il che massimizza il valore e garantisce un'elevata accuratezza.
Il processo di cura di Mandiant include le seguenti fasi:
Risposta agli incidenti in prima linea: durante l'analisi delle violazioni, gli analisti di Mandiant acquisiscono conoscenze dirette sugli strumenti e sulle tecniche degli autori degli attacchi.
Ricerca sulle minacce: team dedicati monitorano gli autori delle minacce, analizzano il malware e scoprono le infrastrutture di attacco emergenti.
Contestualizzazione: gli indicatori di compromissione vengono mappati su minacce e campagne specifiche, il che aiuta a comprendere e dare la priorità agli incidenti.
Il feed Breach Analytics si basa sul feed ATI Fusion includendo indicatori provenienti da indagini sulle violazioni di Mandiant nuove e attive. Fornisce insight in tempo reale sulle ultime tendenze degli attacchi. Per migliorare la corrispondenza degli indicatori, le regole YARA-L possono utilizzare informazioni contestuali del feed ATI Fusion, come gruppi di minacce associati, la presenza di un indicatore in ambienti compromessi o il punteggio di pericolosità automatizzato di Mandiant.
Scrivere regole YARA-L con il feed ATI Fusion
La scrittura di regole YARA-L che utilizzano l'ATI Fusion Feed in Google Security Operations segue una procedura simile a quella per la scrittura di regole YARA-L che utilizzano altre origini di entità di contesto. Per saperne di più, vedi Creare analisi sensibili al contesto.
Sezione Eventi e partite
Per scrivere una regola, filtra il grafico delle entità di contesto selezionato.
In questo caso, si tratta di Fusion Feed. Poi, filtra in base a un tipo
specifico di indicatore. Ad esempio, FILE
. Di seguito è riportato un esempio.
events:
$context_graph.graph.metadata.product_name = "MANDIANT_FUSION_IOC"
$context_graph.graph.metadata.vendor_name = "MANDIANT_FUSION_IOC"
$context_graph.graph.metadata.source_type = "GLOBAL_CONTEXT"
$context_graph.graph.metadata.entity_type = "FILE"
Puoi aggiungere qualsiasi altra condizione dell'evento o dell'entità di contesto nella sezione events
. Puoi unire un campo dall'entità di contesto e dal campo evento UDM. Nell'esempio seguente, la variabile segnaposto ioc
viene utilizzata per eseguire un join
transitivo tra l'entità di contesto e l'evento. Questa variabile segnaposto viene poi utilizzata
nella sezione match
per assicurarsi che ci sia una corrispondenza in un periodo di tempo specifico.
$ioc = $context_graph.graph.entity.file.md5
$ioc = $e1.principal.process.file.md5
match:
$ioc over 1h
Per saperne di più sui campi delle entità di contesto che possono essere utilizzati nelle regole YARA-L, consulta la sezione Campi delle entità di contesto del feed Fusion.
Sezione Risultato
Continuando con l'esempio precedente, la regola di corrispondenza dell'indicatore di base è configurata
in base agli hash dei file nelle entità di contesto nel campo graph.entity.file.md5
e nel campo UDM principal.process.file.md5
.
Poiché questa regola può corrispondere a un numero elevato di eventi, ti consigliamo di perfezionarla in modo che corrisponda a entità di contesto con informazioni specifiche. Ad esempio, potresti voler eseguire la corrispondenza in base al punteggio di confidenza assegnato all'indicatore da Mandiant, se è stato rilevato in un ambiente compromesso o alla famiglia di malware associata all'indicatore. Tutto questo può essere fatto nella sezione outcome
della regola.
outcome:
// Extract the Mandiant Automated Intel confidence score of maliciousness
$confidence_score = max(if($context_graph.graph.metadata.threat.verdict_info.source_provider = "Mandiant Automated Intel", $context_graph.graph.metadata.threat.verdict_info.confidence_score, 0))
// Extract the status of the indicator as seen in a breached environment
$breached = max(if($context_graph.graph.metadata.threat.verdict_info.pwn = true, 1, 0))
// Intermediary outcome variable to combine conditions of intelligence extracted in the previous outcome variables.
// Return 1 if conditions are met, otherwise return 0.
$matched_conditions = if($confidence_score >= 80 AND $breached = 1, 1, 0)
Nella sezione outcome
della regola YARA-L, il punteggio di confidenza viene
estratto utilizzando un if statement
racchiuso in una funzione max
. Questa tecnica è
obbligatoria per le regole multi-evento. La stessa tecnica viene utilizzata per estrarre la variabile
pwn
da verdict_info
, che indica se un
indicatore è stato rilevato in un ambiente compromesso identificato da Mandiant.
Queste due variabili di risultato vengono poi combinate in un'altra variabile matched_conditions
, che consente l'utilizzo della logica concatenata nella sezione condition
.
Sezione Condizione
La sezione condition
garantisce che e1
,
context_graph
e matched_conditions
esistano e/o
corrispondano alla condizione specificata.
condition:
// Ensure $e1, $context_graph and $matched_conditions conditions are met.
$e1 AND $context_graph AND $matched_conditions = 1
Regola YARA-L completa
A questo punto la regola è pronta per l'uso e dovrebbe avere il seguente aspetto:
rule fusion_feed_example_principal_process_file_md5 {
meta:
rule_name = "File Hash - Applied Threat Intelligence"
description = "Matches file hashes against the Applied Threat Intelligence Fusion Feed."
events:
// Filter graph
$context_graph.graph.metadata.product_name = "MANDIANT_FUSION_IOC"
$context_graph.graph.metadata.vendor_name = "MANDIANT_FUSION_IOC"
$context_graph.graph.metadata.entity_type = "FILE"
$context_graph.graph.metadata.source_type = "GLOBAL_CONTEXT"
// Do join
$ioc = $context_graph.graph.entity.file.md5
$ioc = $e1.principal.process.file.md5
match:
$ioc over 1h
outcome:
// Extract the Mandiant Automated Intel confidence score of maliciousness
$confidence_score = max(if($context_graph.graph.metadata.threat.verdict_info.source_provider = "Mandiant Automated Intel", $context_graph.graph.metadata.threat.verdict_info.confidence_score, 0))
// Extract the status of the indicator as seen in a breached environment
$breached = max(if($context_graph.graph.metadata.threat.verdict_info.pwn = true, 1, 0))
// Intermediary outcome variable to combine conditions of intelligence extracted in the previous outcome variables.
// Return 1 if conditions are met, otherwise return 0.
$matched_conditions = if($confidence_score >= 80 AND $breached = 1, 1, 0)
condition:
// Ensure $e1, $context_graph and $matched_conditions conditions are met.
$e1 AND $context_graph AND $matched_conditions = 1
}
Campi dell'entità di contesto del feed ATI Fusion
Puoi utilizzare molti campi del feed ATI Fusion nelle regole. Questi campi sono tutti definiti nell'elenco dei campi Unified Data Model. I seguenti campi sono pertinenti per la definizione della priorità degli indicatori:
Campo entità | Valori possibili |
---|---|
metadata.threat.associations.type |
MALWARE , THREAT_ACTOR |
metadata.threat.associations.name |
Nome dell'associazione di minacce |
metadata.threat.verdict_info.pwn |
TRUE , FALSE |
metadata.threat.verdict_info.pwn_first_tagged_time.seconds |
Timestamp (secondi) |
Alcuni campi hanno coppie chiave-valore che devono essere utilizzate in combinazione per accedere ai valori corretti. Ad esempio:
Campo entità 1 | Valori | Campo entità 2 | Valori |
---|---|---|---|
metadata.threat.verdict_info.source_provider |
Mandiant Global Intel | metadata.threat.verdict_info.global_hits_count |
Numero intero |
metadata.threat.verdict_info.source_provider |
Mandiant Global Intel | metadata.threat.verdict_info.global_customer_count |
Numero intero |
metadata.threat.verdict_info.source_provider |
Mandiant Analyst Intel | metadata.threat.verdict_info.confidence_score |
Numero intero |
metadata.threat.verdict_info.source_provider |
Mandiant Automated Intel | metadata.threat.verdict_info.confidence_score |
Numero intero |
Nella sezione outcome
di una regola YARA-L, puoi accedere a un valore designato
da una chiave specifica utilizzando il seguente comando:
$hit_count = max(if($context_graph.graph.metadata.threat.verdict_info.source_provider = "Mandiant Global Intel", $context_graph.graph.metadata.threat.verdict_info.global_hits_count, 0))
L'esame delle corrispondenze delle entità in Google Security Operations ti aiuta a ottenere una visione completa dei dati, rivelando campi aggiuntivi che possono essere utili per valutare la priorità e il contesto di un avviso di indicatore.
L'esempio seguente mostra un'entità di contesto del feed Fusion come punto di riferimento iniziale:
{
"metadata": {
"product_entity_id": "md5--147d19e6-cdae-57bb-b9a1-a8676265fa4c",
"collected_timestamp": {
"seconds": "1695165683",
"nanos": 48000000
},
"vendor_name": "MANDIANT_FUSION_IOC",
"product_name": "MANDIANT_FUSION_IOC",
"product_version": "1710194393",
"entity_type": "FILE",
"creation_timestamp": {
"seconds": "1710201600"
},
"interval": {
"start_time": {
"seconds": "1"
},
"end_time": {
"seconds": "253402300799"
}
},
"threat": [
{
"category_details": [
"A phishing email message or the relevant headers from a phishing email."
],
"severity_details": "HIGH",
"confidence_details": "75",
"risk_score": 75,
"first_discovered_time": {
"seconds": "1683294326"
},
"associations": [
{
"id": "threat-actor--3e5e6bdf-5b4e-5166-84fa-83045e637f23",
"type": "THREAT_ACTOR",
"name": "UNC2633"
},
{
"id": "threat-actor--3e5e6bdf-5b4e-5166-84fa-83045e637f23",
"country_code": [
"unknown"
],
"type": "THREAT_ACTOR",
"name": "UNC2633",
"description": "UNC2633 is a distribution threat cluster that delivers emails containing malicious attachments or links that lead to malware payloads, primarily QAKBOT, but also SNOWCONE.GZIPLOADER (which leads to ICEDID) and MATANBUCHUS. Historically, UNC2633 has distributed ZIP files containing malicious Excel files that download malware payloads. In early 2023, UNC2633 started distributing OneNote files (.one) that usually led to QAKBOT. It has also leveraged HTML smuggling to distribute ZIP files containing IMG files that contain LNK files and malware payloads.",
"alias": [
{
"name": "TA570 (Proofpoint)"
}
],
"first_reference_time": {
"seconds": "1459085092"
},
"last_reference_time": {
"seconds": "1687392000"
},
"industries_affected": [
"Aerospace & Defense",
"Agriculture",
"Automotive",
"Chemicals & Materials",
"Civil Society & Non-Profits",
"Construction & Engineering",
"Education",
"Energy & Utilities",
"Financial Services",
"Governments",
"Healthcare",
"Hospitality",
"Insurance",
"Legal & Professional Services",
"Manufacturing",
"Media & Entertainment",
"Oil & Gas",
"Pharmaceuticals",
"Retail",
"Technology",
"Telecommunications",
"Transportation"
]
}
],
"campaigns": [
"CAMP.23.007"
],
"last_updated_time": {
"seconds": "1695165683",
"nanos": 48000000
},
"verdict_info": [
{
"source_provider": "Mandiant Automated Intel",
"confidence_score": 75
},
{
"verdict_type": "ANALYST_VERDICT",
"confidence_score": 75
},
{
"source_count": 91,
"response_count": 1,
"verdict_type": "PROVIDER_ML_VERDICT",
"malicious_count": 1,
"ioc_stats": [
{
"ioc_stats_type": "MANDIANT_SOURCES",
"second_level_source": "Knowledge Graph",
"quality": "HIGH_CONFIDENCE",
"malicious_count": 1,
"response_count": 1,
"source_count": 8
},
{
"ioc_stats_type": "MANDIANT_SOURCES",
"second_level_source": "Malware Analysis",
"source_count": 4
},
{
"ioc_stats_type": "MANDIANT_SOURCES",
"second_level_source": "Spam Monitoring",
"source_count": 1
},
{
"ioc_stats_type": "THIRD_PARTY_SOURCES",
"second_level_source": "Crowdsourced Threat Analysis",
"source_count": 71
},
{
"ioc_stats_type": "THIRD_PARTY_SOURCES",
"first_level_source": "MISP",
"second_level_source": "Trusted Software List",
"source_count": 3
},
{
"ioc_stats_type": "THIRD_PARTY_SOURCES",
"first_level_source": "Threat Intelligence Feeds",
"second_level_source": "Digitalside It Hashes",
"source_count": 1
},
{
"ioc_stats_type": "THIRD_PARTY_SOURCES",
"first_level_source": "Threat Intelligence Feeds",
"second_level_source": "Tds Harvester",
"source_count": 1
},
{
"ioc_stats_type": "THIRD_PARTY_SOURCES",
"first_level_source": "Threat Intelligence Feeds",
"second_level_source": "Urlhaus",
"source_count": 1
}
]
},
{
"source_provider": "Mandiant Analyst Intel",
"confidence_score": 75,
"pwn": true,
"pwn_first_tagged_time": {
"seconds": "1683911695"
}
}
],
"last_discovered_time": {
"seconds": "1683909854"
}
}
],
"source_type": "GLOBAL_CONTEXT",
"source_labels": [
{
"key": "is_scanner",
"value": "false"
},
{
"key": "osint",
"value": "false"
},
{
"key": "misp_akamai",
"value": "false"
},
...
{
"key": "has_pwn",
"value": "2023-05-12T17:14:55.000+0000"
}
],
"event_metadata": {
"id": "\\000\\000\\000\\000\\034Z\\n\\2545\\237\\367\\353\\271\\357\\302\\215t\\330\\275\\237\\000\\000\\000\\000\\007\\000\\000\\000\\206\\000\\000\\000",
"base_labels": {
"log_types": [
"MANDIANT_FUSION_IOC"
],
"allow_scoped_access": true
}
}
},
"entity": {
"file": {
"sha256": "000bc5900dc7a32851e380f418cc178ff0910242ee0561ae37ff424e6d3ec64a",
"md5": "f0095b0a7480c826095d9ffc9d5d2d8f",
"sha1": "8101315b9fbbf6a72bddbfe64837d246f4c8b419"
},
"labels": [
{
"key": "is_scanner",
"value": "false"
},
{
"key": "osint",
"value": "false"
},
{
"key": "misp_akamai",
"value": "false"
},
...
]
}
}
Condizioni complesse
Per utilizzare più campi in un'entità di contesto, puoi combinare
più variabili di risultato per creare una logica condizionale più complessa. Le variabili di risultato intermedie possono essere utilizzate per combinare più campi. Queste variabili vengono poi combinate per formare una nuova variabile di risultato che può essere utilizzata nella sezione condition
.
Ad esempio:
// Value will be 1 if threat.associations.type = "MALWARE"
// Wrapper max function required for multi-event rules
$is_attributed_malware = max(if($entity_context.graph.metadata.threat.associations.type = "MALWARE", 1, 0))
// Value will be 1 if threat.associations.type = "THREAT_ACTOR"
$is_attributed_actor = max(if($entity_context.graph.metadata.threat.associations.type = "THREAT_ACTOR", 1,0))
// Value will be the sum of the $is_attributed_malware $is_attributed_malware and $is_attributed_actor
$is_attributed = if($is_attributed_malware = 1, 1, 0)
+
if($is_attributed_actor = 1, 1, 0)
// If the value of $is_attributed is greater than 1, this indicates the indicator has been attributed at least once with the type "MALWARE" or "THREAT_ACTOR"
In questo esempio, due variabili di risultato intermedie, is_attributed_malware
e is_attributed_actor
, vengono combinate in una variabile di risultato
is_attributed
.
I valori dei risultati intermedi restituiscono valori numerici, il che consente confronti numerici nella nuova variabile dei risultati.
Il valore in is_attributed
sarà 1 o superiore se
l'indicatore ha almeno un'associazione di minaccia di tipo MALWARE
o THREAT_ACTOR
.
Join flessibili nella regola YARA-L
Per ridurre il numero di regole necessarie, puoi utilizzare join flessibili tra gli indicatori di compromissione per collegare più campi UDM a un'entità di contesto.
L'esempio seguente mostra l'utilizzo di join flessibili per più campi UDM nella sezione event
:
events:
// Filter graph
$mandiant.graph.metadata.product_name = "MANDIANT_FUSION_IOC"
$mandiant.graph.metadata.vendor_name = "MANDIANT_FUSION_IOC"
$mandiant.graph.metadata.entity_type = "FILE"
$mandiant.graph.metadata.source_type = "GLOBAL_CONTEXT"
$mandiant.graph.entity.file.md5 = strings.coalesce($e.target.process.file.md5, $e.target.process.file.md5) OR
$mandiant.graph.entity.file.md5 = strings.coalesce($e.principal.process.file.md5, $e.principal.process.file.md5)
Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.