Panoramica del feed Mandiant Threat Intelligence Fusion
Il feed di indicatori di Mandiant Fusion è una raccolta di indicatori di compromissione (IOC), inclusi hash, IP, domini e URL, associati ad aggressori noti, ceppi di malware, campagne attive e report di intelligence completati. Per garantire il massimo valore, il feed include anche indicatori di compromissione che Mandiant Intelligence ha controllato e convalidato attentamente da feed open source, garantendo un'elevata accuratezza. La procedura di selezione di Mandiant prevede i seguenti passaggi.
Risposta agli incidenti in prima linea: gli analisti di Mandiant acquisiscono una conoscenza diretta degli strumenti e delle tecniche degli attaccanti durante le indagini sulle violazioni.
Ricerca sulle minacce: team dedicati monitorano gli utenti malintenzionati, analizzano i malware e scoprono le infrastrutture di attacco emergenti.
Contestualizzazione: gli indicatori di compromissione sono mappati a minacce e campagne specifiche, il che aiuta a comprendere e dare la priorità agli incidenti.
Il feed di analisi delle violazioni si basa su Fusion, aggiungendo indicatori associati a violazioni nuove ed emergenti che Mandiant sta esaminando attivamente. Fornisce informazioni in tempo reale sulle ultime tendenze di attacco. Le regole YARA-L possono utilizzare le informazioni contestuali del feed Fusion dell'intelligence sulle minacce applicate per migliorare le semplici regole di corrispondenza degli indicatori. Sono inclusi gruppi di minacce associati, presenza di un indicatore in un ambiente compromesso o il punteggio di attendibilità automatico della pericolosità di Mandiant.
Scrivere regole YARA-L con il feed Fusion
La procedura di scrittura delle regole YARA-L utilizzando il feed Fusion è simile alla scrittura delle regole YARA-L con altre origini delle entità di contesto. Per ulteriori informazioni su come scrivere questo tipo di regola YARA-L, consulta Creare analisi sensibili al contesto.
Sezione Eventi e partite
Per scrivere una regola, filtra il grafico delle entità di contesto selezionate.
In questo caso, si tratta di un feed Fusion. Quindi, filtra in base a un tipo di indicatore specifico. 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"
Come per le regole YARA-L che non utilizzano entità di contesto, puoi aggiungere altre condizioni dell'entità di evento o di contesto nella sezione events
. Puoi unire un campo dell'entità di contesto e il campo dell'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 garantire una corrispondenza in un determinato periodo di tempo.
$ioc = $context_graph.graph.entity.file.md5
$ioc = $e1.principal.process.file.md5
match:
$ioc over 1h
Per ulteriori informazioni 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 degli indicatori 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
.
Questa semplice regola di corrispondenza può corrispondere a un numero elevato di eventi. Pertanto, è consigliabile perfezionare la corrispondenza delle regole alle entità di contesto che dispongono di informazioni specifiche di interesse.
Ad esempio, può includere il punteggio di attendibilità assegnato all'indicatore
da Mandiant, se è stato rilevato in un ambiente compromesso o la 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 attendibilità viene estratto utilizzando un if statement
racchiuso in una funzione max
. Questa tecnica è obbligatoria per le regole a più eventi. La stessa tecnica viene utilizzata per estrarre la variabile pwn
da verdict_info
, che indica se un indicatore è stato rilevato in un ambiente compromesso come identificato da Mandiant.
Queste due variabili di esito vengono poi combinate in un'altra variabile matched_conditions
, che consente l'utilizzo della logica a catena 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 delle entità del contesto del feed Fusion
Puoi utilizzare molti campi del feed di indicatori di Mandiant Fusion nelle regole. Questi campi sono tutti definiti nell'elenco dei campi Unified Data Model. I seguenti campi sono pertinenti per dare la priorità agli 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. Di seguito è riportato un 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 consente di ottenere una visione completa dei dati, rivelando campi aggiuntivi che possono essere utili per valutare la priorità e il contesto di un avviso indicatore.
Di seguito è riportato un esempio di 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 contemporaneamente in un'entità di contesto, puoi combinare più variabili di esito per creare una logica condizionale più complessa.
Per combinare più campi, puoi creare variabili di risultato intermedie.
Queste variabili vengono poi combinate per formare una nuova variabile di esito che può essere utilizzata nella sezione condition
.
Di seguito è riportato un 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 caso, due variabili di risultato intermedie, is_attributed_malware
e is_attributed_actor
, vengono combinate in una variabile di risultato
is_attributed
.
In questo esempio, i valori intermedi dell'esito restituiscono valori numerici, il che consente i confronti numerici nella nuova variabile di esito.
In questo esempio, is_attributed
avrà un valore pari o superiore a 1 se
l'indicatore ha almeno un'associazione di minacce di tipo MALWARE
o THREAT_ACTOR
.
Join flessibili in YARA-L
Le unioni flessibili tra IOC consentono di unire più campi UDM a un'entità di contesto. In questo modo si riduce il numero di regole necessarie se più campi UDM vengono uniti alle entità di contesto.
Di seguito è riportato un esempio di sezione event
che utilizza join flessibili per più campi UDM.
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)