Flux de renseignements sur les menaces appliqués

Compatible avec :

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, qui sont 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 leurs investigations sur les brèches, 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 malveillants, 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 violations et de celles en cours. 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 pour écrire des règles YARA-L qui utilisent le flux ATI Fusion dans Google Security Operations est semblable à celle pour écrire des règles YARA-L qui utilisent d'autres sources d'entités de contexte. Pour en savoir plus, consultez Créer des analyses contextuelles.

Sections "Événements" et "Matchs"

Pour écrire une règle, procédez comme suit : 1. Filtrez le graphique de l'entité de contexte sélectionnée. Dans ce cas, Fusion Feed. 1. Filtrer un type d'indicateur spécifique Exemple :FILE Consultez l'exemple ci-dessous :

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 de l'entité de contexte et du champ d'événement 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. La variable ioc 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 correspondance en fonction du score de confiance attribué par Mandiant à 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 les règles 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)

Migrer les anciens flux Mandiant vers GTI

Google SecOps consolide les sources de données de renseignement sur les menaces. Pour fournir un ensemble plus large d'indicateurs de compromission et simplifier l'intégration, nous migrons des anciens flux Mandiant vers le flux unifié Google Threat Intelligence (GTI).

Ce guide s'adresse aux ingénieurs et analystes de détection qui souhaitent maintenir une couverture des menaces ininterrompue lors de la migration vers le flux GTI unifié. Il explique comment mettre à jour les règles YARA-L existantes pour qu'elles correspondent aux nouveaux IoC GTI tout en conservant l'ancienne fonctionnalité d'alerte. En mettant à jour la syntaxe de vos règles selon le calendrier et les workflows de migration fournis, vous assurez une transition fluide avant le gel des anciens flux.

Mettre à jour vos règles YARA-L

Nous vous recommandons de mettre à jour vos règles YARA-L avec le nouveau nom de produit GTI pour maintenir une couverture ininterrompue.


Ancien nom du flux Mandiant

Nouveau nom de produit GTI

Niveau de licence

MANDIANT_FUSION_IOC

GTI_IOC

Enterprise ou Enterprise+

OPEN_SOURCE_INTEL_IOC

GTI_IOC

Enterprise ou Enterprise+

MANDIANT_ACTIVE_BREACH_IOC

GTI_IOC

Enterprise+

Documentation de référence sur la migration YARA-L

Utilisez ces extraits pour mettre à jour manuellement vos règles si vous préférez ne pas utiliser la fonction Appliquer de Gemini.

Migration de base

Utilisez cette syntaxe YARA-L pour établir une correspondance avec les données historiques et les nouvelles données GTI.

Ancienne syntaxe YARA-L :

$mandiant.graph.metadata.product_name = "MANDIANT_FUSION_IOC"

Syntaxe YARA-L recommandée :

(
    $mandiant.graph.metadata.product_name = "MANDIANT_FUSION_IOC" OR 
    $mandiant.graph.metadata.product_name = "GTI_IOC"
)

Comprendre le workflow de migration

Le workflow suivant reflète la nouvelle interface de gestion des règles conçue pour vous guider tout au long de la migration.

  1. Identifiez les règles concernées. Ouvrez la page Gestion des règles/Liste. Une bannière générale bien visible s'affiche si des règles ont un impact sur votre locataire.
    • Indicateur : les règles faisant référence à d'anciens flux affichent une icône d'avertissement ou une info-bulle Update Required.
    • Action : cliquez sur Demander à Gemini de vous aider à mettre à jour ou sélectionnez une règle spécifique pour afficher les détails.
  2. Analysez les détails de la règle. Lorsque vous ouvrez une règle concernée, l'éditeur de règles met en évidence l'ancienne syntaxe (par exemple, $mandiant.graph.metadata.product_name = "MANDIANT_FUSION_IOC").

    Un bouton de migration dédié s'affiche dans l'en-tête de l'éditeur et déclenche le panneau latéral Gemini.

  3. En savoir plus sur la mise à jour assistée par Gemini Le panneau latéral Gemini charge automatiquement une fiche de contexte préremplie :

    • Gemini explique le mappage entre votre ancien flux et le nouveau flux GTI en fonction de vos droits d'accès.
    • Gemini fournit un bloc de code Suggested Fix (Correction suggérée). Consultez la logique YARA-L mise à jour, qui ajoute GTI_IOC tout en conservant l'ancienne référence pour la couverture historique.
  4. Cliquez sur Appliquer à l'éditeur pour remplacer l'ancienne logique par la nouvelle syntaxe suggérée.

  5. Vérifiez votre nouvelle syntaxe. Une fois la règle enregistrée avec la syntaxe GTI_IOC mise à jour, les informations suivantes s'affichent :

    • L'icône d'avertissement Mise à jour requise disparaît de l'éditeur et de la page principale Liste des règles.
    • L'état de la migration est mis à jour en temps réel à mesure que vous supprimez les règles signalées.

Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.