Descripción general del feed de fusión de la información sobre amenazas aplicada

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 adquieren conocimiento de primera mano las herramientas y técnicas de los atacantes mientras investigan vulneraciones.

  • Investigación de amenazas: equipos dedicados rastrean a los perpetradores, analizan el malware y descubrir la infraestructura de ataques emergentes.

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

El feed de Breach Analytics se basa en la fusión y agrega indicadores asociados con vulneraciones nuevas y emergentes que Mandiant investiga activamente. 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 de YARA-L con el feed de fusión es similar al de escribir 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 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 fusión. Luego, filtra según un indicador específico el tipo de letra. 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 del contexto del feed de fusión.

Sección de resultados

Siguiendo con el ejemplo anterior, se configura la regla básica de coincidencia del indicador. según lugares de hash de archivo en las entidades de contexto en graph.entity.file.md5 y el campo de UDM principal.process.file.md5. Esta regla de coincidencia simple puede coincidir con una gran cantidad de eventos. Por lo tanto, es se recomienda definir mejor la coincidencia de la regla en entidades de contexto que tienen un inteligencia 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. Puedes hacerlo en outcome sección 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 se requieren para las reglas de varios eventos. Se usa la misma técnica para extraer La variable pwn de verdict_info, que indica si un elemento el indicador en un entorno vulnerado identificado por 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, existen context_graph y matched_conditions, y 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 deben combinarse para acceder 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 Mandiant Analyst Intel 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 con 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 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 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, hay 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 intermediarios muestran valores numéricos, 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 amenaza del 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 requeridas si se utilizan varias UDM campos 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 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)