Visão geral do feed de fusão de inteligência aplicada sobre ameaças
O feed de indicadores 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, cepas de malware, campanhas ativas e relatórios de inteligência concluídos. Para garantir o valor máximo, o feed também inclui IOCs que a Mandiant Intelligence foi cuidadosamente verificada e validada a partir de feeds de código aberto, garantindo alta precisão. O processo de curadoria da Mandiant consiste nas seguintes etapas.
Resposta a incidentes de linha de frente: os analistas da Mandiant têm acesso direto às ferramentas e técnicas dos invasores ao investigar violações.
Pesquisa de ameaças: equipes dedicadas rastreiam agentes de ameaças, analisam malware e e descobrir a infraestrutura de ataque emergente.
Contextualização: IOCs são mapeados para ameaças e campanhas específicas que ajuda na compreensão e priorização de incidentes.
O feed de Análise de violações tem como base a Fusion, adicionando indicadores associados violações novas e emergentes que a Mandiant está investigando ativamente. Ele fornece insights em tempo real sobre as tendências de ataque mais recentes. As regras da YARA-L podem utilizar informações contextuais da equipe Feed de fusão para melhorar as regras de correspondência de indicadores simples. Ele inclui a associação grupos de ameaças, a presença de um indicador em um ambiente comprometido ou o impacto pontuação de confiança automatizada de maliciosidade.
Programar regras YARA-L com o feed Fusion
O processo de criação de regras YARA-L usando o Fusion Feed é semelhante à criação de regras YARA-L com outras origens de entidade de contexto. Para mais informações sobre como escrever esse tipo de regra YARA-L, consulte Criar análises baseadas no contexto.
Seção de eventos e correspondência
Para criar uma regra, filtre o gráfico de entidade de contexto selecionado.
Neste caso, é o feed Fusion. Depois, filtre por um indicador específico
não é válido. 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 do evento ou da entidade do contexto na seção events
.
é possível mesclar um campo da entidade de contexto e do campo de evento do UDM. Nos seguintes
exemplo, a variável de marcador ioc
é usada para fazer uma transição
mesclagem entre a entidade de contexto e o evento. Essa variável de marcador de posição é 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 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 Fusion.
Seção de resultados
Continuando com o exemplo anterior, a regra de correspondência de indicador básica é configurada
contra hashes de arquivos colocados nas entidades de contexto no campo graph.entity.file.md5
e no campo UDM principal.process.file.md5
.
Essa regra de correspondência simples pode corresponder a um grande número de eventos. Portanto, é
recomendado refinar a correspondência de regras em entidades de contexto que tenham uma
inteligência específica de interesse.
Por exemplo, isso pode incluir a pontuação de confiança atribuída ao indicador
pela Mandiant, seja em um ambiente invadido 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ído 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 encontrado em um ambiente com violação, conforme identificado pelo 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 de condição
A seção condition
garante que e1
,
context_graph
e matched_conditions
existem e/
correspondem à 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 do Fusion
Você pode usar muitos campos do feed de indicadores do Mandiant Fusion nas regras. Esses campos estã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 |
Número inteiro |
metadata.threat.verdict_info.source_provider |
Mandiant Global Intel | metadata.threat.verdict_info.global_customer_count |
Número inteiro |
metadata.threat.verdict_info.source_provider |
Mandiant Analyst Intel | metadata.threat.verdict_info.confidence_score |
Número inteiro |
metadata.threat.verdict_info.source_provider |
Inteligência automatizada da Mandiant | metadata.threat.verdict_info.confidence_score |
Número 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 as correspondências de entidades no Google Security Operations, você tem uma visão abrangente dos dados, revelando outros campos que podem ser úteis para avaliar a prioridade e o contexto de um alerta de indicador.
Confira a seguir um exemplo de entidade de contexto do Fusion Feed como 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, você pode combinar
múltiplas variáveis de resultado juntas para criar uma lógica condicional mais complexa.
Para combinar vários campos, crie variáveis de resultado intermediárias.
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, que
permite comparações numéricas na nova variável de resultado.
Neste exemplo, is_attributed
será um valor de 1 ou maior se
o indicador tiver pelo menos uma associação de ameaça do tipo MALWARE
ou THREAT_ACTOR
.
Combinações flexíveis na YARA-L
As mesclagens flexíveis entre IOCs permitem que vários campos de UDM sejam combinados uma entidade de contexto. Isso reduz o número de regras necessárias se vários campos do UDM forem agrupados com entidades de contexto.
Confira abaixo um exemplo de seção event
que usa junções flexíveis para
vários campos de 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)