Présentation du flux Applied Threat Intelligence Fusion
Le flux Fusion Applied Threat Intelligence (ATI) est une collection d'indicateurs de compromission (IoC, Indicators of Compromise), y compris des hachages, des adresses IP, des domaines et des URL, associés à des acteurs malveillants connus, des souches de logiciels malveillants, des campagnes actives et des rapports de renseignement terminés. Le flux inclut également des IoC provenant de flux Open Source que Mandiant Intelligence a soigneusement vérifiés et validés, ce qui maximise la valeur et offre une grande précision.
Le processus de curation de Mandiant comprend les phases suivantes :
Réponse aux incidents de première ligne : lors de l'étude des failles de sécurité, les analystes Mandiant acquièrent des connaissances de première main sur les outils et techniques des pirates informatiques.
Recherche sur les menaces : des équipes dédiées suivent les acteurs des menaces, analysent les logiciels malveillants et découvrent les infrastructures d'attaque émergentes.
Contextualisation : les IoC sont mappés à des menaces et des campagnes spécifiques, ce qui permet de comprendre et de hiérarchiser les incidents.
Le flux Breach Analytics s'appuie sur le flux ATI Fusion en incluant des indicateurs issus des nouvelles enquêtes Mandiant sur les atteintes à la sécurité. Il fournit des insights en temps réel sur les dernières tendances en matière d'attaques. Pour améliorer la correspondance des indicateurs, les règles YARA-L peuvent utiliser des informations contextuelles du flux ATI Fusion, telles que les groupes de menaces associés, la présence d'un indicateur dans des environnements compromis ou le score de malveillance automatisé de Mandiant.
Écrire des règles YARA-L avec le flux ATI Fusion
La procédure de création de règles YARA-L qui utilisent le flux ATI Fusion dans Google Security Operations est semblable à celle de création de règles YARA-L qui utilisent d'autres sources d'entités de contexte. Pour en savoir plus, consultez Créer des analyses contextuelles.
Section "Événements et matchs"
Pour écrire une règle, filtrez le graphique de l'entité de contexte sélectionnée.
Dans ce cas, il s'agit de Fusion Feed. Ensuite, filtrez sur un type d'indicateur spécifique. Par exemple, FILE
. Consultez l'exemple suivant.
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"
Vous pouvez ajouter d'autres conditions de l'événement ou de l'entité de contexte dans la section events
. Vous pouvez joindre un champ à partir du champ d'événement de l'entité de contexte et de l'UDM. Dans l'exemple suivant, la variable d'espace réservé ioc
est utilisée pour effectuer une jointure transitive entre l'entité de contexte et l'événement. Cette variable de substitution est ensuite utilisée dans la section match
pour s'assurer qu'il y a une correspondance dans un délai spécifique.
$ioc = $context_graph.graph.entity.file.md5
$ioc = $e1.principal.process.file.md5
match:
$ioc over 1h
Pour en savoir plus sur les champs d'entité de contexte pouvant être utilisés dans les règles YARA-L, consultez la section Champs d'entité de contexte du flux Fusion.
Section "Résultat"
En reprenant l'exemple précédent, la règle de correspondance des indicateurs de base est configurée par rapport aux hachages de fichiers dans les entités de contexte dans le champ graph.entity.file.md5
et le champ UDM principal.process.file.md5
.
Étant donné que cette règle peut correspondre à un grand nombre d'événements, nous vous recommandons de l'affiner pour qu'elle corresponde aux entités de contexte qui disposent d'informations spécifiques. Par exemple, vous pouvez effectuer une mise en correspondance en fonction du score de confiance que Mandiant a attribué à l'indicateur, de la présence de l'indicateur dans un environnement piraté ou de la famille de logiciels malveillants associée à l'indicateur. Vous pouvez effectuer toutes ces opérations dans la section outcome
de la règle.
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)
Dans la section outcome
de la règle YARA-L, le score de confiance est extrait à l'aide d'un if statement
encapsulé dans une fonction max
. Cette technique est requise pour les règles à événements multiples. La même technique est utilisée pour extraire la variable pwn
de verdict_info
, qui indique si un indicateur a été observé dans un environnement piraté identifié par Mandiant.
Ces deux variables de résultat sont ensuite combinées dans une autre variable matched_conditions
, ce qui permet d'utiliser une logique en chaîne dans la section condition
.
Section "Condition"
La section condition
garantit que e1
, context_graph
et matched_conditions
existent et/ou correspondent à la condition spécifiée.
condition:
// Ensure $e1, $context_graph and $matched_conditions conditions are met.
$e1 AND $context_graph AND $matched_conditions = 1
Règle YARA-L complète
À ce stade, la règle est prête à être utilisée et devrait se présenter comme suit :
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
}
Champs d'entité de contexte du flux ATI Fusion
Vous pouvez utiliser de nombreux champs du flux ATI Fusion dans les règles. Ces champs sont tous définis dans la liste des champs du modèle de données unifié. Les champs suivants sont pertinents pour la hiérarchisation des indicateurs :
Champ d'entité | Valeurs possibles |
---|---|
metadata.threat.associations.type |
MALWARE , THREAT_ACTOR |
metadata.threat.associations.name |
Nom de l'association de menace |
metadata.threat.verdict_info.pwn |
TRUE , FALSE |
metadata.threat.verdict_info.pwn_first_tagged_time.seconds |
Code temporel (en secondes) |
Certains champs comportent des paires clé-valeur qui doivent être utilisées ensemble pour accéder aux valeurs correctes. Exemple :
Champ d'entité 1 | Valeurs | Champ d'entité 2 | Valeurs |
---|---|---|---|
metadata.threat.verdict_info.source_provider |
Mandiant Global Intel | metadata.threat.verdict_info.global_hits_count |
Integer |
metadata.threat.verdict_info.source_provider |
Mandiant Global Intel | metadata.threat.verdict_info.global_customer_count |
Integer |
metadata.threat.verdict_info.source_provider |
Informations des analystes Mandiant | metadata.threat.verdict_info.confidence_score |
Integer |
metadata.threat.verdict_info.source_provider |
Mandiant Automated Intel | metadata.threat.verdict_info.confidence_score |
Integer |
Dans la section outcome
d'une règle YARA-L, vous pouvez accéder à une valeur désignée par une clé spécifique à l'aide de la commande suivante :
$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'examen des correspondances d'entités dans Google Security Operations vous permet d'obtenir une vue complète des données, en affichant des champs supplémentaires qui peuvent être utiles pour évaluer la priorité et le contexte d'une alerte d'indicateur.
L'exemple suivant montre une entité de contexte Fusion Feed comme point de référence initial :
{
"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"
},
...
]
}
}
Conditions complexes
Pour utiliser plusieurs champs dans une entité de contexte, vous pouvez combiner plusieurs variables de résultat afin de créer une logique conditionnelle plus complexe. Les variables de résultat intermédiaire peuvent être utilisées pour combiner plusieurs champs. Ces variables sont ensuite combinées pour former une nouvelle variable de résultat qui peut être utilisée dans la section condition
.
Exemple :
// 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"
Dans cet exemple, deux variables de résultat intermédiaire, is_attributed_malware
et is_attributed_actor
, sont combinées dans une variable de résultat is_attributed
.
Les valeurs de résultat intermédiaire renvoient des valeurs numériques, ce qui permet des comparaisons numériques dans la nouvelle variable de résultat.
La valeur de is_attributed
sera égale ou supérieure à 1 si l'indicateur comporte au moins une association de menace de type MALWARE
ou THREAT_ACTOR
.
Jointures flexibles dans une règle YARA-L
Pour réduire le nombre de règles requises, vous pouvez utiliser des jointures flexibles entre les IoC afin de connecter plusieurs champs UDM à une entité de contexte.
L'exemple suivant montre l'utilisation de jointures flexibles pour plusieurs champs UDM dans la section 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)
Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.