Descripción general del feed de fusión de Applied Threat Intelligence

Se admite en los siguientes países:

El feed de indicadores de Mandiant Fusion es una colección de indicadores de compromiso (IOC), incluidos hashes, IP, dominios y URLs, que están asociados con actores de amenazas conocidos, cepas de software malicioso, campañas activas y informes de inteligencia terminados. Para garantizar el máximo valor, el feed también incluye IOC que Mandiant Intelligence revisó 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 sobre las herramientas y técnicas de los atacantes mientras investigan las violaciones de la seguridad.

  • Investigación de amenazas: Los equipos dedicados hacen un seguimiento de 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 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 usar información contextual del feed de fusión de la inteligencia de amenazas aplicada para mejorar las reglas de coincidencia de indicadores simples. Incluye los grupos de amenazas asociados, la presencia de un indicador en un entorno comprometido o la puntuación de confianza automatizada de maliciosidad de Mandiant.

Cómo escribir reglas de YARA-L con el feed de Fusion

El proceso de escribir reglas YARA-L con el feed de Fusion es similar al de escribir reglas 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 Cómo crear estadísticas adaptadas al contexto.

Sección de eventos y coincidencias

Para escribir una regla, filtra el gráfico de entidad de contexto seleccionado. En este caso, es el feed de Fusion. 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 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 el campo de evento de la AUA. En el siguiente ejemplo, se usa la variable de marcador de posición ioc 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 entidad de contexto que se pueden aprovechar en las reglas de YARA-L, consulta la sección Campos de entidad de contexto del feed de Fusion.

Sección de resultados

Siguiendo con el ejemplo anterior, la regla de coincidencia de indicadores básicos se configura en función de los valores hash de archivos que se colocan en las entidades de contexto en el campo graph.entity.file.md5 y el campo UDM principal.process.file.md5. Esta regla de coincidencia simple puede coincidir con una gran cantidad de eventos. Por lo tanto, se recomienda definir mejor la coincidencia de reglas en las entidades de contexto que tengan una inteligencia particular que sea de interés. Por ejemplo, esto puede incluir el índice de confianza que Mandiant asignó al indicador, si se vio en un entorno con una violación de la seguridad o la familia de software malicioso asociada con el 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 YARA-L, la puntuación de confianza se extrae con un if statement unido 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 vio un indicador en un entorno vulnerado, como lo identificó Mandiant.

Luego, estas dos variables de resultado se combinan en otra variable matched_conditions, lo que permite el uso de 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 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 entidad de contexto del feed de Fusion

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 se deben usar 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 Entero
metadata.threat.verdict_info.source_provider Mandiant Global Intel metadata.threat.verdict_info.global_customer_count Entero
metadata.threat.verdict_info.source_provider Mandiant Analyst Intel metadata.threat.verdict_info.confidence_score Entero
metadata.threat.verdict_info.source_provider Mandiant Automated Intel metadata.threat.verdict_info.confidence_score Entero

En la sección outcome de una regla 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))

Examinar las coincidencias de entidades en Google Security Operations te permite obtener una vista integral de los datos y revelar campos adicionales que pueden ser valiosos para evaluar la prioridad y el contexto de una alerta de indicador.

El siguiente es un ejemplo de una entidad de contexto del feed de Fusion 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 variadas variables de resultado para crear una lógica condicional más compleja. Para combinar varios campos, puedes crear variables de resultado intermedias. 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 intermedias, is_attributed_malware y is_attributed_actor, se combinan en una variable de resultado is_attributed.

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

Combinaciones flexibles en YARA-L

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

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