Descripción general del feed de fusión de inteligencia de amenazas aplicada

Compatible con:

El feed de indicadores de Mandiant Fusion es una colección de indicadores de compromiso (IOC), incluidos hashes, IPs, dominios y URLs, que se asocian con perpetradores conocidos, cepas de malware, campañas activas e informes de inteligencia finalizados. Para garantizar el máximo valor, el feed también incluye IOC que Mandiant Intelligence verificó y validó cuidadosamente a partir de feeds de código abierto, lo que garantiza una alta precisión. El proceso de selección de Mandiant consta de los siguientes pasos.

  • Respuesta ante incidentes de primera línea: Los analistas de Mandiant obtienen conocimiento de primera mano de las herramientas y técnicas de los atacantes mientras investigan las vulneraciones.

  • Investigación de amenazas: Los equipos especializados rastrean a los agentes de amenazas, analizan el software malicioso y descubren la infraestructura de ataque emergente.

  • Contextualización: Los IOC se asignan a amenazas y campañas específicas, lo que ayuda a comprender y priorizar los incidentes.

El feed de Breach Analytics se basa en Fusion y agrega indicadores asociados con violaciones de seguridad nuevas y emergentes que Mandiant investiga de forma activa. Proporciona estadísticas en tiempo real sobre las tendencias de ataque más recientes. Las reglas de YARA-L pueden utilizar información contextual del Applied Threat Intelligence Fusion Feed para mejorar las reglas de coincidencia de indicadores simples. Incluye grupos de amenazas asociados, la presencia de un indicador en un entorno comprometido o la puntuación de confianza automatizada de maliciosidad de Mandiant.

Escribe reglas de YARA-L con el feed de Fusion

El proceso de escritura de reglas de YARA-L con el feed de Fusion es similar al de escritura de reglas de YARA-L con otras fuentes de entidades de contexto. Para obtener más información sobre cómo escribir este tipo de regla de YARA-L, consulta Crea análisis basados en el contexto.

Sección de eventos y partidos

Para escribir una regla, filtra el gráfico de entidades de contexto seleccionado. En este caso, es Fusion feed. Luego, filtra 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"

Al igual que con las reglas de YARA-L que no usan entidades de contexto, puedes agregar cualquier otra condición del evento o la entidad de contexto en la sección events. Puedes unir un campo de la entidad de contexto y un campo del evento de UDM. En el siguiente ejemplo, la variable de marcador de posición ioc se usa para realizar una unión transitiva entre la entidad de contexto y el evento. Luego, esta variable de marcador de posición se usa en la sección match para garantizar una coincidencia en un período determinado.

   $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 entidades de contexto que se pueden aprovechar en las reglas de YARA-L, consulta la sección Campos de entidades de contexto del feed de Fusion.

Sección de resultados

Continuando con el ejemplo anterior, la regla básica de coincidencia de indicadores se configura en función de los hashes de archivos ubicados en las entidades de contexto en el campo graph.entity.file.md5 y el campo principal.process.file.md5 del UDM. Esta regla de coincidencia simple puede coincidir con una gran cantidad de eventos. Por lo tanto, se recomienda refinar la coincidencia de la regla en entidades de contexto que tengan inteligencia particular de interés. Por ejemplo, esto puede incluir el índice de confianza que Mandiant asignó al indicador, si se detectó en un entorno vulnerado o 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 con un if statement incluido en una función max. Esta técnica es obligatoria para las reglas de varios eventos. La misma técnica se usa para extraer la variable pwn de verdict_info, que indica si se detectó un indicador en un entorno vulnerado, según lo identificó Mandiant.

Luego, estas dos variables de resultado se combinan en otra variable matched_conditions, lo que permite usar lógica encadenada en la sección condition.

Sección Condición

La sección condition garantiza que e1, context_graph y matched_conditions existan o coincidan con 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 verse de la siguiente manera:

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 la entidad de contexto del feed combinado

Puedes usar muchos campos del feed de indicadores de Mandiant 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 Valores posibles
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. A continuación, se muestra un ejemplo.

Campo de entidad 1 Valores Campo de entidad 2 Valores
metadata.threat.verdict_info.source_provider Mandiant Global Intel metadata.threat.verdict_info.global_hits_count Número entero
metadata.threat.verdict_info.source_provider Mandiant Global Intel metadata.threat.verdict_info.global_customer_count Número entero
metadata.threat.verdict_info.source_provider Inteligencia de los analistas de Mandiant metadata.threat.verdict_info.confidence_score Número entero
metadata.threat.verdict_info.source_provider Inteligencia automatizada de Mandiant metadata.threat.verdict_info.confidence_score Número entero

En la sección outcome de una regla de YARA-L, puedes acceder a un valor designado por una clave específica con 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))

El análisis de las coincidencias de entidades en Google Security Operations te permite obtener una vista integral de los datos, lo que revela campos adicionales que pueden ser valiosos para evaluar la prioridad y el contexto de una alerta de indicador.

A continuación, se muestra un ejemplo de 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 a la vez en una entidad de contexto, puedes combinar varias variables de resultado para crear una lógica condicional más compleja. Para combinar varios campos, puedes crear variables de resultado intermediarias. Luego, estas variables se combinan para formar una nueva variable de resultado que se puede usar en la sección condition.

A continuación, se muestra un 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 caso, dos variables de resultado intermediarias, is_attributed_malware y is_attributed_actor, se combinan en una variable de resultado is_attributed.

En este ejemplo, los valores de resultado intermedio devuelven valores numéricos, lo que permite comparaciones numéricas en la nueva variable de resultado. En este ejemplo, is_attributed será un valor de 1 o mayor si el indicador tiene al menos una asociación de amenazas de tipo MALWARE o THREAT_ACTOR.

Uniones flexibles en YARA-L

Las uniones flexibles entre los IOC permiten unir varios campos del UDM con una entidad de contexto. Esto reduce la cantidad de reglas necesarias si varios campos del UDM se unen con entidades de contexto.

A continuación, se muestra un ejemplo de una sección event que usa combinaciones flexibles para varios campos del 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)

¿Necesitas más ayuda? Obtén respuestas de miembros de la comunidad y profesionales de Google SecOps.