Visão geral do feed de fusão de inteligência aplicada sobre ameaças

O feed indicador do Mandiant Fusion é 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, tipos de malware, campanhas ativas e relatórios de inteligência finalizados. Para garantir o valor máximo, o feed também inclui IOCs que a Mandiant Intelligence verificou e validou a partir de feeds de código aberto, garantindo alta precisão. O processo de curadoria da Mandiant consiste nas etapas a seguir.

  • Resposta a incidentes na linha de frente: os analistas da Mandiant têm conhecimento em primeira mão das ferramentas e técnicas dos invasores enquanto investigam violações.

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

  • Contextualização: os IOCs são mapeados para ameaças e campanhas específicas, o que ajuda na compreensão e priorização de incidentes.

O feed de análise de violações se baseia no Fusion, adicionando indicadores associados a violações novas e emergentes que a Mandiant está investigando ativamente. Ele fornece insights em tempo real sobre as tendências de ataques mais recentes. As regras da YARA-L podem utilizar informações contextuais do feed Fusion da Inteligência aplicada sobre ameaças para aprimorar as regras simples de correspondência de indicadores. Isso inclui grupos de ameaças associados, a presença de um indicador em um ambiente comprometido ou a pontuação de confiança automatizada de maliciosidade da Mandiant.

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

O processo de gravação de regras da YARA-L usando um feed de fusão é semelhante à criação de regras da YARA-L com outras fontes de entidades de contexto. Para mais informações sobre como escrever esse tipo de regra YARA-L, consulte Criar análises com base no contexto.

Seção "Eventos e correspondência"

Para escrever uma regra, filtre o gráfico de entidade do contexto selecionado. Nesse caso, é o feed do Fusion. Depois, filtre um tipo de indicador específico. Por exemplo, FILE Veja um exemplo.

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"

Semelhante às regras YARA-L que não usam entidades de contexto, é possível adicionar quaisquer outras condições da entidade de evento ou de contexto na seção events. É possível mesclar um campo da entidade de contexto e do campo de evento de UDM. No exemplo a seguir, a variável de marcador ioc é usada para fazer uma junção transitiva entre a entidade de contexto e o evento. Essa variável de marcador é usada na seção match para garantir 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 campos de entidade de contexto que podem ser usados nas regras de 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 do indicador básico é configurada para locais de hashes de arquivo nas entidades de contexto nos campos graph.entity.file.md5 e principal.process.file.md5 do UDM. Essa regra de correspondência simples pode corresponder a um grande número de eventos. Por isso, é recomendável refinar a correspondência de regra nas entidades de contexto que tenham uma inteligência particular de interesse. Por exemplo, isso pode incluir a pontuação de confiança atribuída ao indicador pela Mandiant, se ele foi 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 unido a uma função max. Essa técnica é necessária para regras de vários 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, conforme identificado pela Mandiant.

Essas duas variáveis de resultado são combinadas em outra variável matched_conditions, o que permite o uso da 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

Concluir a regra YARA-L

Neste ponto, a regra está pronta para uso e deve ter a seguinte aparência:

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 do contexto do feed de fusão

Você pode usar muitos campos do feed de indicadores do Mandiant Fusion nas 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 Carimbo de data/hora (segundos)

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

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 Analista da Mandiant: Intel metadata.threat.verdict_info.confidence_score Inteiro
metadata.threat.verdict_info.source_provider Inteligência automatizada da Mandiant 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))

Ao examinar correspondências de entidade nas Operações de segurança do Google, você tem uma visão abrangente dos dados, revelando outros campos que podem ser valiosos na avaliação da prioridade e do contexto de um alerta de indicador.

Veja a seguir um exemplo de uma entidade de contexto de Feed de fusão 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 por vez em uma entidade de contexto, combine várias variáveis de resultado para criar uma lógica condicional mais complexa. Para combinar vários campos, crie variáveis de resultado intermediário. Em seguida, essas variáveis são combinadas para formar uma nova variável de resultado que pode ser usada na seção condition.

Veja um 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"

Nesse caso, duas variáveis de resultado intermediárias, is_attributed_malware e is_attributed_actor, são combinadas em uma variável de resultado is_attributed.

Neste exemplo, os valores de resultado intermediários retornam valores numéricos, o que permite comparações numéricas na nova variável de resultado. Neste exemplo, is_attributed será um valor de 1 ou mais se o indicador tiver pelo menos uma associação de ameaça do tipo MALWARE ou THREAT_ACTOR.

Mesclagens flexíveis em YARA-L

As junções flexíveis entre IOCs permitem que vários campos de UDM sejam mesclados com uma entidade de contexto. Isso reduz o número de regras necessárias se vários campos do UDM forem combinados com entidades de contexto.

Veja a seguir um exemplo de seção event que usa junções flexíveis para vários campos do 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)