Übersicht über den Applied Threat Intelligence Fusion Feed
Der ATI-Fusion-Feed (Applied Threat Intelligence) ist eine Sammlung von Kompromittierungsindikatoren (Indicators of Compromise, IoCs), darunter Hashes, IPs, Domains und URLs, die mit bekannten Bedrohungsakteuren, Malware-Varianten, aktiven Kampagnen und abgeschlossenen Intelligence-Berichten verknüpft sind. Der Feed enthält auch IoCs aus Open-Source-Feeds, die von Mandiant Intelligence sorgfältig geprüft und validiert wurden. So wird der Wert maximiert und eine hohe Genauigkeit erreicht.
Der Kuratierungsprozess von Mandiant umfasst die folgenden Phasen:
Incident Response an vorderster Front: Bei der Untersuchung von Sicherheitslücken sammeln Mandiant-Analysten aus erster Hand Wissen über die Tools und Techniken von Angreifern.
Bedrohungsrecherche: Spezialisierte Teams verfolgen Bedrohungsakteure, analysieren Malware und decken neue Angriffsstrukturen auf.
Kontextualisierung: IoCs werden bestimmten Bedrohungen und Kampagnen zugeordnet, was hilft, Vorfälle zu verstehen und zu priorisieren.
Der Breach Analytics-Feed basiert auf dem ATI Fusion Feed und enthält Indikatoren aus neuen und aktiven Mandiant-Untersuchungen zu Sicherheitsverletzungen. Sie erhalten Echtzeitinformationen zu den neuesten Angriffstrends. Um den Abgleich von Indikatoren zu verbessern, können in YARA-L-Regeln Kontextinformationen aus dem ATI Fusion Feed verwendet werden, z. B. zugehörige Bedrohungsgruppen, das Vorhandensein eines Indikators in kompromittierten Umgebungen oder der automatisierte Maliciousness-Score von Mandiant.
YARA-L-Regeln mit dem ATI Fusion Feed schreiben
Das Schreiben von YARA-L-Regeln, die den ATI Fusion Feed in Google Security Operations verwenden, ähnelt dem Schreiben von YARA-L-Regeln, die andere Kontextentitätsquellen verwenden. Weitere Informationen finden Sie unter Kontextbezogene Analysen erstellen.
Bereich „Ereignisse und Spiele“
Um eine Regel zu schreiben, filtern Sie das ausgewählte Kontextentitätsdiagramm.
In diesem Fall ist es der Fusionsfeed. Filtern Sie dann nach einem bestimmten Indikatortyp. Beispiel: FILE
. Folgendes ist ein Beispiel.
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"
Im Abschnitt events
können Sie weitere Bedingungen für das Ereignis oder die Kontextentität hinzufügen. Sie können ein Feld aus der Kontextentität und dem UDM-Ereignisfeld zusammenführen. Im folgenden Beispiel wird die Platzhaltervariable ioc
verwendet, um einen transitiven Join zwischen der Kontextentität und dem Ereignis auszuführen. Diese Platzhaltervariable wird dann im Abschnitt match
verwendet, um sicherzustellen, dass es in einem bestimmten Zeitraum eine Übereinstimmung gibt.
$ioc = $context_graph.graph.entity.file.md5
$ioc = $e1.principal.process.file.md5
match:
$ioc over 1h
Weitere Informationen zu Kontextentitätsfeldern, die in YARA-L-Regeln verwendet werden können, finden Sie im Abschnitt Kontextentitätsfelder für Fusion Feed.
Abschnitt „Ergebnis“
Im vorherigen Beispiel wird die grundlegende Regel für den Indikatorabgleich für Dateihashes in den Kontextentitäten im Feld graph.entity.file.md5
und im UDM-Feld principal.process.file.md5
eingerichtet.
Da diese Regel mit einer großen Anzahl von Ereignissen übereinstimmen kann, empfiehlt es sich, sie so zu verfeinern, dass sie nur mit Kontextentitäten übereinstimmt, die bestimmte Informationen enthalten. Sie können beispielsweise den Confidence-Score von Mandiant für den Indikator, die Umgebung, in der er gefunden wurde, oder die mit dem Indikator verknüpfte Malware-Familie abgleichen. Das kann alles im Abschnitt outcome
der Regel erfolgen.
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)
Im outcome
-Abschnitt der YARA-L-Regel wird der Vertrauenswert mit einem if statement
extrahiert, der in einer max
-Funktion enthalten ist. Diese Technik ist für Mehrfachereignisregeln erforderlich. Dieselbe Methode wird verwendet, um die Variable pwn
aus verdict_info
zu extrahieren. Sie gibt an, ob ein Indikator in einer von Mandiant identifizierten Umgebung mit Sicherheitsverletzung beobachtet wurde.
Diese beiden Ergebnisvariablen werden dann in einer weiteren matched_conditions
-Variablen kombiniert, was die Verwendung von verketteter Logik im condition
-Abschnitt ermöglicht.
Abschnitt „Bedingung“
Im Abschnitt condition
wird geprüft, ob e1
, context_graph
und matched_conditions
vorhanden sind und/oder der angegebenen Bedingung entsprechen.
condition:
// Ensure $e1, $context_graph and $matched_conditions conditions are met.
$e1 AND $context_graph AND $matched_conditions = 1
Vollständige YARA-L-Regel
Die Regel ist jetzt einsatzbereit und sollte so aussehen:
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
}
ATI Fusion Feed-Kontextentitätsfelder
Sie können viele Felder aus dem ATI Fusion Feed in Regeln verwenden. Diese Felder sind alle in der Liste der Felder für einheitliche Datenmodelle definiert. Die folgenden Felder sind für die Priorisierung von Indikatoren relevant:
Entitätsfeld | Mögliche Werte |
---|---|
metadata.threat.associations.type |
MALWARE , THREAT_ACTOR |
metadata.threat.associations.name |
Name der Bedrohungszuordnung |
metadata.threat.verdict_info.pwn |
TRUE , FALSE |
metadata.threat.verdict_info.pwn_first_tagged_time.seconds |
Zeitstempel (Sekunden) |
Einige Felder haben Schlüssel/Wert-Paare, die in Kombination verwendet werden müssen, um auf die richtigen Werte zuzugreifen. Beispiel:
Entitätsfeld 1 | Werte | Entitätsfeld 2 | Werte |
---|---|---|---|
metadata.threat.verdict_info.source_provider |
Mandiant Global Intel | metadata.threat.verdict_info.global_hits_count |
Ganzzahl |
metadata.threat.verdict_info.source_provider |
Mandiant Global Intel | metadata.threat.verdict_info.global_customer_count |
Ganzzahl |
metadata.threat.verdict_info.source_provider |
Analysteninformationen von Mandiant | metadata.threat.verdict_info.confidence_score |
Ganzzahl |
metadata.threat.verdict_info.source_provider |
Automatisierte Intel-Funktionen von Mandiant | metadata.threat.verdict_info.confidence_score |
Ganzzahl |
Im outcome
-Abschnitt einer YARA-L-Regel können Sie mit dem folgenden Befehl auf einen Wert zugreifen, der durch einen bestimmten Schlüssel angegeben wird:
$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))
Wenn Sie Entitätsübereinstimmungen in Google Security Operations untersuchen, erhalten Sie einen umfassenden Überblick über die Daten. Außerdem werden zusätzliche Felder angezeigt, die bei der Bewertung der Priorität und des Kontexts einer Indikatorwarnung hilfreich sein können.
Das folgende Beispiel zeigt eine Kontextentität für einen Fusion Feed als ersten Referenzpunkt:
{
"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"
},
...
]
}
}
Komplexe Bedingungen
Wenn Sie mehrere Felder in einer Kontextentität verwenden möchten, können Sie mehrere Ergebnisvariablen kombinieren, um eine komplexere bedingte Logik zu erstellen. Mithilfe von Zwischenvariablen können mehrere Felder kombiniert werden. Diese Variablen werden dann kombiniert, um eine neue Ergebnisvariable zu bilden, die im Abschnitt condition
verwendet werden kann.
Beispiel:
// 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 diesem Beispiel werden zwei Zwischenergebnisvariablen, is_attributed_malware
und is_attributed_actor
, in einer Ergebnisvariablen is_attributed
kombiniert.
Die Zwischenergebniswerte geben numerische Werte zurück, was numerische Vergleiche in der neuen Ergebnisvariablen ermöglicht.
Der Wert in is_attributed
ist 1 oder höher, wenn dem Indikator mindestens eine Bedrohungszuordnung vom Typ MALWARE
oder THREAT_ACTOR
zugewiesen ist.
Flexible Joins in YARA-L-Regeln
Um die Anzahl der erforderlichen Regeln zu reduzieren, können Sie flexible Joins zwischen IoCs verwenden, um mehrere UDM-Felder mit einer Kontextentität zu verbinden.
Im folgenden Beispiel sehen Sie die Verwendung flexibler Joins für mehrere UDM-Felder im Abschnitt 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)
Benötigen Sie weitere Hilfe? Antworten von Community-Mitgliedern und Google SecOps-Experten erhalten