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

Compatible con:

El feed indicador de Mandiant Fusion es una colección de indicadores de compromiso (IOC), incluidos hashes, IP, dominios y URL, que están asociados con direcciones IP agentes de amenazas, cepas de malware, campañas activas e informes de inteligencia terminada. 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: 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 ayuda 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 ataques más recientes. Las reglas YARA-L pueden usar información contextual de Applied Threat Intelligence El feed de fusión para mejorar las reglas simples de coincidencia de indicadores. Incluye los socios grupos de amenazas, la presencia de un indicador en un entorno comprometido o la la puntuación de confianza automatizada de la maliciosidad.

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

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 entidades del 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 de YARA-L que no usan entidades de contexto, puedes agregar cualquier otra condiciones del evento o la entidad de contexto en la sección events. puedes unirte a un campo desde la entidad de contexto y el campo de evento de UDM. En la siguiente ejemplo, la variable de marcador de posición ioc se usa para realizar una operació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, puede incluir la puntuación de confianza asignada al indicador. por Mandiant, ya sea visto en un entorno vulnerado o en la familia de malware asociado 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 de YARA-L, la puntuación de confianza es se extraen mediante una if statement unida a 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.

Estas dos variables de resultado se combinan luego en otra Variable matched_conditions, que permite el uso de lógica en cadena en la sección condition.

Sección de 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

Completa la regla de YARA-L

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 del contexto del feed de fusión

Puedes usar muchos campos del feed de indicadores de Mandiant Fusion en las reglas. Estos campos todos 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 Inteligencia global de Mandiant metadata.threat.verdict_info.global_hits_count Número entero
metadata.threat.verdict_info.source_provider Inteligencia global de Mandiant metadata.threat.verdict_info.global_customer_count Número entero
metadata.threat.verdict_info.source_provider Analista de Mandiant: 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))

Examina las coincidencias de entidades en Google Security Operations los datos, lo que revela campos adicionales que pueden ser valiosos para evaluar la la prioridad y el contexto de una alerta de indicador.

El siguiente es un ejemplo de una entidad de contexto de feed de fusión 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 que se usa 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 una sección event de ejemplo que usa uniones flexibles para varios campos de 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)