Información general sobre el feed de fusión de inteligencia de amenazas aplicada
El feed de fusión de Applied Threat Intelligence (ATI) es una colección de indicadores de compromiso (IOCs), como hashes, IPs, dominios y URLs, que están asociados a agentes de amenazas conocidos, cepas de malware, campañas activas e informes de inteligencia completados. El feed también incluye indicadores de compromiso de fuentes de código abierto que Mandiant Intelligence ha comprobado y validado cuidadosamente, lo que maximiza el valor y proporciona una alta precisión.
El proceso de selección de Mandiant incluye las siguientes fases:
Respuesta a incidentes de primera línea: mientras investigan las brechas, los analistas de Mandiant obtienen información de primera mano sobre las herramientas y técnicas de los atacantes.
Investigación de amenazas: equipos especializados monitorizan a los agentes de amenazas, analizan el malware y descubren la infraestructura de ataque emergente.
Contextualización: los IoCs se asignan a amenazas y campañas específicas, lo que ayuda a comprender y priorizar los incidentes.
El feed de análisis de brechas se basa en el feed de fusión de ATI e incluye indicadores de investigaciones de brechas de seguridad nuevas y activas de Mandiant. Proporciona estadísticas en tiempo real sobre las últimas tendencias de ataques. Para mejorar la coincidencia de indicadores, las reglas de YARA-L pueden usar información contextual del feed de fusión de ATI, como los grupos de amenazas asociados, la presencia de un indicador en entornos vulnerados o la puntuación de actividad maliciosa automatizada de Mandiant.
Escribir reglas de YARA-L con el feed de ATI Fusion
Para escribir reglas YARA-L que usen el feed de ATI Fusion en Google Security Operations, se sigue un proceso similar al de escribir reglas YARA-L que usen otras fuentes de entidades de contexto. Para obtener más información, consulta el artículo Crear analíticas contextuales.
Sección de eventos y partidos
Para escribir una regla, filtra el gráfico de la entidad de contexto seleccionada.
En este caso, es Fusion Feed. A continuación, filtre por un tipo de indicador específico. Por ejemplo, FILE
. A continuación, se muestra un ejemplo.
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"
Puedes añadir cualquier otra condición del evento o de la entidad de contexto en la sección events
. Puedes combinar un campo de la entidad de contexto y un campo de evento de UDM. En el siguiente ejemplo, se usa la variable de marcador de posición ioc
para hacer una unión transitiva entre la entidad de contexto y el evento. Esta variable de marcador de posición se usa en la sección match
para asegurarse de que haya una coincidencia en un periodo específico.
$ioc = $context_graph.graph.entity.file.md5
$ioc = $e1.principal.process.file.md5
match:
$ioc over 1h
Para obtener más información sobre los campos de entidad de contexto que se pueden usar en las reglas de YARA-L, consulta la sección Campos de entidad de contexto de Fusion Feed.
Sección de resultados
Siguiendo con el ejemplo anterior, la regla de coincidencia de indicadores básicos se configura con los hashes de los archivos de las entidades de contexto en el campo graph.entity.file.md5
y en el campo principal.process.file.md5
de UDM.
Como esta regla puede coincidir con un gran número de eventos, te recomendamos que la acotes para que coincida con entidades de contexto que tengan información específica. Por ejemplo, puede que quieras buscar coincidencias en la puntuación de confianza que Mandiant ha asignado al indicador, si se ha visto en un entorno vulnerado o en la familia de malware asociada al indicador. Todo esto se puede hacer en la sección outcome
de la regla.
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)
En la sección outcome
de la regla de YARA-L, la puntuación de confianza se extrae mediante un if statement
envuelto en una función max
. Esta técnica es obligatoria para las reglas de varios eventos. Se usa la misma técnica para extraer la variable pwn
de verdict_info
, que indica si se ha detectado un indicador en un entorno vulnerado identificado por Mandiant.
Estas dos variables de resultado se combinan en otra variable matched_conditions
, lo que permite usar la lógica encadenada en la sección condition
.
Sección de condiciones
La sección condition
se asegura de que e1
, context_graph
y matched_conditions
existan o cumplan la condición especificada.
condition:
// Ensure $e1, $context_graph and $matched_conditions conditions are met.
$e1 AND $context_graph AND $matched_conditions = 1
Regla de YARA-L completa
En este punto, la regla está lista para usarse y debería tener un aspecto similar al siguiente:
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 entidad de contexto de ATI Fusion Feed
Puede usar muchos campos del feed de ATI Fusion en las reglas. Todos estos campos se definen en la lista de campos del modelo de datos unificado. Los siguientes campos son relevantes para priorizar los indicadores:
Campo de entidad | Posibles valores |
---|---|
metadata.threat.associations.type |
MALWARE , THREAT_ACTOR |
metadata.threat.associations.name |
Nombre de la asociación de amenazas |
metadata.threat.verdict_info.pwn |
TRUE , FALSE |
metadata.threat.verdict_info.pwn_first_tagged_time.seconds |
Marca de tiempo (segundos) |
Algunos campos tienen pares clave-valor que deben usarse en combinación para acceder a los valores correctos. Por ejemplo:
Campo de entidad 1 | Valores | Campo de entidad 2 | Valores |
---|---|---|---|
metadata.threat.verdict_info.source_provider |
Inteligencia global de Mandiant | metadata.threat.verdict_info.global_hits_count |
Entero |
metadata.threat.verdict_info.source_provider |
Inteligencia global de Mandiant | metadata.threat.verdict_info.global_customer_count |
Entero |
metadata.threat.verdict_info.source_provider |
Información de analistas de Mandiant | metadata.threat.verdict_info.confidence_score |
Entero |
metadata.threat.verdict_info.source_provider |
Inteligencia automatizada de Mandiant | metadata.threat.verdict_info.confidence_score |
Entero |
En la sección outcome
de una regla de YARA-L, puedes acceder a un valor designado por una clave específica mediante el siguiente 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 las coincidencias de entidades en Google Security Operations te ayuda a obtener una visión completa de los datos, lo que te permite descubrir campos adicionales que pueden ser valiosos para evaluar la prioridad y el contexto de una alerta de indicador.
En el siguiente ejemplo se muestra una entidad de contexto de Fusion Feed como punto de referencia 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"
},
...
]
}
}
Condiciones complejas
Para usar varios campos en una entidad de contexto, puedes combinar varias variables de resultado para crear una lógica condicional más compleja. Las variables de resultados intermedias se pueden usar para combinar varios campos. Estas variables se combinan para formar una nueva variable de resultado que se puede usar en la sección condition
.
Por ejemplo:
// 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"
En este ejemplo, dos variables de resultado intermedias, is_attributed_malware
y is_attributed_actor
, se combinan en una variable de resultado is_attributed
.
Los valores de los resultados intermedios devuelven valores numéricos, lo que permite hacer comparaciones numéricas en la nueva variable de resultado.
El valor de is_attributed
será 1 o superior si el indicador tiene al menos una asociación de amenaza de tipo MALWARE
o THREAT_ACTOR
.
Uniones flexibles en reglas de YARA-L
Para reducir el número de reglas necesarias, puedes usar combinaciones flexibles entre IoCs para conectar varios campos de UDM a una entidad de contexto.
En el siguiente ejemplo se muestra el uso de combinaciones flexibles para varios campos de UDM en la sección 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)
¿Necesitas más ayuda? Recibe respuestas de los miembros de la comunidad y de los profesionales de Google SecOps.