Vista geral do feed de fusão de informações sobre ameaças aplicadas
O feed de fusão da Applied Threat Intelligence (ATI) é uma coleção de indicadores de comprometimento (IoCs), incluindo hashes, IPs, domínios e URLs, que estão associados a autores de ameaças conhecidos, tipos de software malicioso, campanhas ativas e relatórios de inteligência concluídos. 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 uma elevada precisão.
O processo de organização da Mandiant inclui as seguintes fases:
Resposta a incidentes na linha de frente: durante a investigação de violações, os analistas da Mandiant adquirem conhecimentos em primeira mão sobre as ferramentas e as técnicas dos atacantes.
Investigação de ameaças: equipas dedicadas monitorizam intervenientes de ameaças, analisam software malicioso e descobrem infraestruturas de ataque emergentes.
Contextualização: os IoCs são mapeados para ameaças e campanhas específicas, o que ajuda a compreender e a dar prioridade aos incidentes.
O feed Breach Analytics baseia-se no feed ATI Fusion, incluindo indicadores de investigações de violações da Mandiant novas e ativas. Oferece estatísticas em tempo real sobre as tendências de ataques mais recentes. Para melhorar a correspondência de indicadores, as regras YARA-L podem usar informações contextuais do feed ATI Fusion, como grupos de ameaças associados, a presença de um indicador em ambientes comprometidos ou a pontuação de malícia automatizada da Mandiant.
Escreva regras YARA-L com o feed de fusão da ATI
A escrita de regras YARA-L que usam o feed de fusão da ATI no Google Security Operations segue um processo semelhante à escrita de regras YARA-L que usam outras origens de entidades de contexto. Para mais informações, consulte o artigo Crie estatísticas de contexto.
Secção de eventos e jogos
Para escrever uma regra, filtre o gráfico de entidades de contexto selecionado.
Neste caso, é o Fusion Feed. Em seguida, filtre por um tipo de indicador específico. Por exemplo, FILE
. Segue-se 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"
Pode adicionar quaisquer outras condições do evento ou da entidade de contexto na secção events
. Pode juntar um campo da entidade de contexto e um campo de evento do UDM. No exemplo seguinte, a variável de marcador de posição ioc
é usada para fazer uma junção transitiva entre a entidade de contexto e o evento. Esta variável de marcador de posição é usada
na secção match
para garantir que existe uma correspondência num 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 entidades de contexto que podem ser usados em regras YARA-L, consulte a secção Campos de entidades de contexto do feed de fusão.
Secção de resultados
Continuando com o exemplo anterior, a regra de correspondência de indicadores básica é configurada em função dos hashes de ficheiros nas entidades de contexto no campo graph.entity.file.md5
e no campo principal.process.file.md5
UDM.
Uma vez que esta regra pode corresponder a um grande número de eventos, recomendamos que a refine para corresponder a entidades de contexto que tenham inteligência específica. Por exemplo, pode querer fazer a correspondência com a pontuação de confiança que a Mandiant atribuiu ao indicador, se foi visto num ambiente com violação de segurança ou a família de software malicioso associada ao indicador. Tudo isto pode ser feito na secçã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 secção outcome
da regra YARA-L, a pontuação de confiança é
extraída através de um if statement
envolvido numa função max
. Esta técnica é
necessária para regras com vários eventos. A mesma técnica é usada para extrair a variável pwn
de verdict_info
, que indica se foi detetado um indicador num ambiente com violação identificado pela Mandiant.
Estas duas variáveis de resultado são, em seguida, combinadas noutra variável matched_conditions
, o que permite a utilização de lógica encadeada na secção condition
.
Secção de condições
A secção condition
garante que e1
, context_graph
e matched_conditions
existem e/ou correspondem à 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 momento, a regra está pronta a ser usada e deve ter o seguinte aspeto:
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 entidades de contexto do feed ATI Fusion
Pode usar muitos campos do feed ATI Fusion em regras. Estes campos estão todos definidos na lista de campos do modelo de dados unificado. Os seguintes campos são relevantes para dar prioridade aos 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 |
Indicação de tempo (segundos) |
Alguns campos têm pares de chave-valor que têm de ser usados em combinação para aceder aos valores corretos. Por 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 |
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 |
Mandiant Automated Intel | metadata.threat.verdict_info.confidence_score |
Número inteiro |
Na secção outcome
de uma regra YARA-L, pode aceder a um valor designado por uma chave específica através do 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))
O exame das correspondências de entidades no Google Security Operations ajuda a obter uma vista abrangente dos dados, revelando campos adicionais que podem ser valiosos na avaliação da prioridade e do contexto de um alerta de indicador.
O exemplo seguinte mostra uma entidade de contexto do feed de união 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 numa entidade de contexto, pode combinar várias variáveis de resultado para criar uma lógica condicional mais complexa. As variáveis de resultados intermediários podem ser usadas para combinar vários campos. Estas variáveis são, em seguida, combinadas para formar uma nova variável de resultado que pode ser usada na secção condition
.
Por 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 resultados intermédios, is_attributed_malware
e is_attributed_actor
, são combinadas numa variável de resultados
is_attributed
.
Os valores dos resultados intermédios devolvem valores numéricos, o que permite comparações numéricas na nova variável de resultado.
O valor em is_attributed
é 1 ou superior se o indicador tiver, pelo menos, uma associação de ameaça do tipo MALWARE
ou THREAT_ACTOR
.
Junções flexíveis na regra YARA-L
Para reduzir o número de regras necessárias, pode usar junções flexíveis entre IOCs para associar vários campos do UDM a uma entidade de contexto.
O exemplo seguinte mostra a utilização de junções flexíveis para vários campos de UDM na secçã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)
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais da Google SecOps.