Feed de fusão da inteligência contra ameaças aplicada

Compatível com:

O feed de fusão da inteligência contra ameaças aplicada (ATI, na sigla em inglês) é uma coleção de indicadores de comprometimento (IoCs, na sigla em inglês), incluindo hashes, IPs, domínios e URLs, associados a agentes de ameaças conhecidos, cepas de malware, campanhas ativas e relatórios de inteligência finalizados. O feed também inclui IoCs de feeds de código aberto que a Mandiant Intelligence verificou e validou cuidadosamente, o que maximiza o valor e oferece alta precisão.

O processo de curadoria da Mandiant inclui as seguintes fases:

  • Resposta a incidentes na linha de frente: ao investigar violações, os analistas da Mandiant adquirem conhecimento em primeira mão sobre as ferramentas e técnicas dos invasores.

  • Pesquisa de ameaças: equipes dedicadas rastreiam autores de ameaças, analisam malware e descobrem infraestruturas de ataque emergentes.

  • Contextualização: os IoCs são mapeados para ameaças e campanhas específicas, o que ajuda a entender e priorizar incidentes.

O feed do Breach Analytics se baseia no feed do ATI Fusion, incluindo indicadores de investigações de violações novas e ativas da Mandiant. Ele fornece insights em tempo real sobre as tendências de ataque mais recentes. Para melhorar a correspondência de indicadores, as regras YARA-L podem usar informações contextuais do feed de fusão da ATI, como grupos de ameaças associados, a presença de um indicador em ambientes comprometidos ou a pontuação automatizada de maliciosidade da Mandiant.

Escrever regras YARA-L com o feed de fusão da ATI

A criação de regras YARA-L que usam o feed de fusão da ATI no Google Security Operations segue um processo semelhante à criação de regras YARA-L que usam outras fontes de entidade de contexto. Para mais informações, consulte Criar análises sensíveis ao contexto.

Seções de eventos e partidas

Para escrever uma regra, siga estas etapas: 1. Filtre o gráfico de entidades de contexto selecionado. Nesse caso, Fusion Feed. 1. Filtre um tipo de indicador específico. Por exemplo, FILE. Veja o exemplo a seguir:

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"

É possível adicionar outras condições do evento ou da entidade de contexto na seção events. É possível mesclar um campo da entidade de contexto e o campo de evento do UDM.

No exemplo a seguir, a variável de marcador de posição ioc é usada para fazer uma mesclagem transitiva entre a entidade de contexto e o evento. A variável ioc é usada na seção match para garantir que haja uma correspondência em um período específico.

   $ioc = $context_graph.graph.entity.file.md5
   $ioc = $e1.principal.process.file.md5

match:
   $ioc over 1h

Para mais informações sobre os campos de entidade de contexto que podem ser usados em regras YARA-L, consulte a seção Campos de entidade de contexto do feed do Fusion.

Seção de resultados

Continuando com o exemplo anterior, a regra básica de correspondência de indicadores é configurada com hashes de arquivo nas entidades de contexto no campo graph.entity.file.md5 e no campo UDM principal.process.file.md5.

Como essa regra pode corresponder a um grande número de eventos, recomendamos que você a refine para corresponder a entidades de contexto que tenham inteligência específica. Por exemplo, talvez você queira corresponder à pontuação de confiança que a Mandiant atribuiu ao indicador, seja ele visto em um ambiente violado ou na família de malware associada ao indicador. Isso pode ser feito na seção outcome da regra.

 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)

Na seção outcome da regra YARA-L, a pontuação de confiança é extraída usando um if statement encapsulado em uma função max. Essa técnica é obrigatória para regras com múltiplos eventos. A mesma técnica é usada para extrair a variável pwn de verdict_info, que indica se um indicador foi visto em um ambiente violado identificado pela Mandiant.

Essas duas variáveis de resultado são combinadas em outra variável matched_conditions, o que permite o uso de lógica encadeada na seção condition.

Seção "Condição"

A seção condition garante que e1, context_graph e matched_conditions existam e/ou correspondam à condição especificada.

 condition:
   // Ensure $e1, $context_graph and $matched_conditions conditions are met.
   $e1 AND $context_graph AND $matched_conditions = 1

Regra YARA-L completa

Neste ponto, a regra está pronta para uso e deve ser semelhante a esta:

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
}

Campos de entidade de contexto do feed do ATI Fusion

É possível usar muitos campos do feed do ATI Fusion em regras. Todos esses campos são definidos na lista de campos do modelo de dados unificado. Os campos a seguir são relevantes para priorizar indicadores:

Campo de entidade Valores possíveis
metadata.threat.associations.type MALWARE, THREAT_ACTOR
metadata.threat.associations.name Nome da associação de ameaças
metadata.threat.verdict_info.pwn TRUE, FALSE
metadata.threat.verdict_info.pwn_first_tagged_time.seconds Marcação de tempo (segundos)

Alguns campos têm pares de chave-valor que precisam ser usados em combinação para acessar os valores corretos. Exemplo:

Campo de entidade 1 Valores Campo de entidade 2 Valores
metadata.threat.verdict_info.source_provider Mandiant Global Intel metadata.threat.verdict_info.global_hits_count Inteiro
metadata.threat.verdict_info.source_provider Mandiant Global Intel metadata.threat.verdict_info.global_customer_count Inteiro
metadata.threat.verdict_info.source_provider Mandiant Analyst Intel metadata.threat.verdict_info.confidence_score Inteiro
metadata.threat.verdict_info.source_provider Mandiant Automated Intel metadata.threat.verdict_info.confidence_score Inteiro

Na seção outcome de uma regra YARA-L, é possível acessar um valor designado por uma chave específica usando o seguinte 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))

Examinar as correspondências de entidade no Google Security Operations ajuda você a ter uma visão abrangente dos dados, revelando campos adicionais que podem ser valiosos para avaliar a prioridade e o contexto de um alerta de indicador.

O exemplo a seguir mostra uma entidade de contexto do Fusion Feed como um ponto de referência inicial:

{
  "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"
      },
...
    ]
  }
}

Condições complexas

Para usar vários campos em uma entidade de contexto, combine várias variáveis de resultado para criar uma lógica condicional mais complexa. As variáveis de resultado intermediário podem ser usadas para combinar vários campos. Essas variáveis são combinadas para formar uma nova variável de resultado que pode ser usada na seção condition.

Exemplo:

// 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"

Neste exemplo, duas variáveis de resultado intermediário, is_attributed_malware e is_attributed_actor, são combinadas em uma variável de resultado is_attributed.

Os valores de resultado intermediário retornam valores numéricos, o que permite comparações numéricas na nova variável de resultado.

O valor em is_attributed será 1 ou maior se o indicador tiver pelo menos uma associação de ameaça do tipo MALWARE ou THREAT_ACTOR.

Mesclagens flexíveis na regra YARA-L

Para reduzir o número de regras necessárias, use mesclagens flexíveis entre IoCs para conectar vários campos do UDM a uma entidade de contexto.

O exemplo a seguir mostra o uso de mesclagens flexíveis para vários campos de UDM na seção 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)

Migrar feeds legados da Mandiant para o GTI

O Google SecOps está consolidando as fontes de dados de inteligência contra ameaças. Para fornecer um conjunto mais amplo de indicadores de comprometimento (IoCs) e simplificar a integração, estamos migrando dos feeds legados da Mandiant para o feed unificado do Google Threat Intelligence (GTI).

Este guia é destinado a engenheiros e analistas de detecção que querem manter a cobertura de ameaças ininterrupta ao migrar para o feed unificado da GTI. Ele explica como atualizar as regras YARA-L atuais para que correspondam aos novos IoCs do GTI e, ao mesmo tempo, preservar a funcionalidade de alerta legada. Ao atualizar a sintaxe da regra usando a linha do tempo e os fluxos de trabalho de migração fornecidos, você garante uma transição tranquila antes que os feeds legados sejam congelados.

Atualizar as regras do YARA-L

Recomendamos que você atualize suas regras YARA-L para o novo nome do produto GTI para manter a cobertura ininterrupta.


Nome do feed legado da Mandiant

Novo nome do produto GTI

Nível de licenciamento

MANDIANT_FUSION_IOC

GTI_IOC

Enterprise ou Enterprise Plus

OPEN_SOURCE_INTEL_IOC

GTI_IOC

Enterprise ou Enterprise Plus

MANDIANT_ACTIVE_BREACH_IOC

GTI_IOC

Enterprise Plus

Referência de migração do YARA-L

Use esses snippets para atualizar manualmente suas regras se você preferir não usar a função Aplicar do Gemini.

Migração básica

Use essa sintaxe YARA-L para fazer a correspondência com dados históricos e novos dados de GTI.

Sintaxe antiga do YARA-L:

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

Sintaxe YARA-L recomendada:

(
    $mandiant.graph.metadata.product_name = "GTI_IOC"
    $mandiant.graph.metadata.threat_intel.stable = true
)

Entender o fluxo de trabalho de migração

O fluxo de trabalho a seguir reflete a experiência atualizada de gerenciamento de regras, projetada para orientar você durante a migração.

  1. Identifique as regras afetadas. Abra a página Gerenciamento/Lista de regras. Um banner global em destaque vai aparecer se o locatário tiver regras afetadas.
    • Indicador:as regras que fazem referência a feeds legados mostram um ícone de aviso ou uma dica de Update Required.
    • Ação:clique em Peça ao Gemini para ajudar a atualizar ou selecione uma regra específica para ver os detalhes.
  2. Analise os detalhes da regra. Quando você abre uma regra afetada, o editor de regras destaca a sintaxe legada (por exemplo, $mandiant.graph.metadata.product_name = "MANDIANT_FUSION_IOC").

    Um botão de migração dedicado aparece no cabeçalho do editor, que aciona o painel lateral do Gemini.

  3. Leia a atualização assistida pelo Gemini. O painel lateral do Gemini carrega automaticamente um card de contexto pré-preenchido:

    • O Gemini explica o mapeamento entre o feed antigo e o novo feed do GTI com base no seu direito.
    • O Gemini fornece um bloco de código de correção sugerida. Revise a lógica YARA-L atualizada, que adiciona GTI_IOC e mantém a referência legada para cobertura histórica.
  4. Clique em Aplicar ao Editor para trocar a lógica antiga pela nova sintaxe sugerida.

  5. Verifique a nova sintaxe. Depois que a regra for salva com a sintaxe GTI_IOC atualizada, os seguintes detalhes vão aparecer:

    • O ícone de aviso Atualização necessária desaparece do editor e da página principal do Rules Lister.
    • O status da migração é atualizado em tempo real conforme você limpa as regras sinalizadas.

Entender a filtragem de ingestão de feeds GTI_IOC

Para garantir alta fidelidade e minimizar o ruído, o Google SecOps filtra os IoCs no feed GTI_IOC. O Google SecOps inclui um IoC do feed somente se ele atender a pelo menos um dos seguintes critérios:

  • Tem uma pontuação de confiança do GTI de 80 ou mais.

  • Ele tem um veredito de malicioso da GTI.

  • Ele tem uma associação de ameaça conhecida (por exemplo, está vinculado a uma campanha de ameaça específica).

Os IoCs não revisados que atendem a esses critérios ainda são ingeridos no Google SecOps e estão disponíveis para uso nas regras YARA-L, mas são marcados com metadata.threat.stable = false. Depois que esses IoCs forem totalmente analisados ou validados, a tag stable será atualizada para true.

Para mais informações, consulte Pontuação do indicador do Google Threat Intelligence.

Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.