Panoramica del feed fusion di Applied Threat Intelligence

Il feed di indicatori di Mandiant Fusion è una raccolta di indicatori di compromissione (IOC), tra cui hash, IP, domini e URL, associati ad autori di minacce noti, ceppi di malware, campagne attive e report di intelligence completati. Per garantire il massimo valore, il feed include anche indicatori IOC che Mandiant Intelligence ha attentamente controllato e convalidato da feed open source, garantendo un'elevata precisione. Il processo di curazione di Mandiant prevede i seguenti passaggi.

  • Risposta agli incidenti in prima linea: gli analisti di Mandiant acquisiscono conoscenze di prima mano degli strumenti e delle tecniche degli aggressori mentre indagano sulle violazioni.

  • Ricerca sulle minacce: team dedicati monitorano gli autori delle minacce, analizzano i malware e scoprono le infrastrutture di attacco emergenti.

  • Contestualizzazione: gli IOC sono mappati a minacce e campagne specifiche, il che consente di comprendere e dare priorità agli incidenti.

Il feed Breach Analytics si basa su Fusion, aggiungendo indicatori associati a violazioni nuove ed emergenti che Mandiant sta attivamente indagando. Fornisce insight in tempo reale sulle ultime tendenze di attacco. Le regole YARA-L possono utilizzare le informazioni contestuali dell'Applied Threat Intelligence Fusion Feed per migliorare le regole di corrispondenza degli indicatori semplici. Comprende i gruppi di aggressori associati, la presenza di un indicatore in un ambiente compromesso o il punteggio di sicurezza automatizzata di Mandiant per gli attacchi.

Scrivere regole YARA-L con il feed Fusion

Il processo di scrittura di regole YARA-L utilizzando Fusion Feed è simile alla scrittura di regole YARA-L con altre origini di entità di contesto. Per ulteriori informazioni su come scrivere questo tipo di regola YARA-L, consulta Creare analisi sensibili al contesto.

Sezione Eventi e corrispondenze

Per scrivere una regola, filtra il grafico dell'entità di contesto selezionata. In questo caso, si tratta di feed Fusion. Quindi, filtra in base a un tipo di indicatore specifico. Ad esempio, FILE. Di seguito è riportato un esempio.

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"

Analogamente alle regole YARA-L che non utilizzano entità di contesto, puoi aggiungere altre condizioni dell'evento o dell'entità di contesto nella sezione events. Puoi unire un campo dall'entità di contesto e dal campo Evento UDM. Nell'esempio seguente, la variabile segnaposto ioc viene utilizzata per eseguire un join transitivo tra l'entità di contesto e l'evento. Questa variabile segnaposto viene quindi utilizzata nella sezione match per garantire una corrispondenza in un determinato periodo di tempo.

   $ioc = $context_graph.graph.entity.file.md5
   $ioc = $e1.principal.process.file.md5

match:
   $ioc over 1h

Per ulteriori informazioni sui campi delle entità di contesto che possono essere utilizzati nelle regole YARA-L, consulta la sezione Campi entità di contesto del feed Fusion.

Sezione Risultato

Continuando con l'esempio precedente, la regola di corrispondenza degli indicatori di base viene impostata in base agli hash dei file nelle entità di contesto nel campo graph.entity.file.md5 e nel campo UDM principal.process.file.md5. Questa semplice regola di corrispondenza può corrispondere a un numero elevato di eventi. Pertanto, ti consigliamo di perfezionare la corrispondenza della regola nelle entità di contesto che hanno un'intelligence particolare e interessante. Ad esempio, ciò può includere il punteggio di confidenza assegnato all'indicatore da Mandiant, se è stato rilevato in un ambiente violato o la famiglia di malware associata all'indicatore. Puoi farlo nella sezione outcome della regola.

 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)

Nella sezione outcome della regola YARA-L, il punteggio di confidenza viene estratto utilizzando un if statement aggregato in una funzione max. Questa tecnica è obbligatoria per le regole multievento. La stessa tecnica viene utilizzata per estrarre la variabile pwn da verdict_info, che indica se un indicatore è stato rilevato in un ambiente violato come identificato da Mandiant.

Queste due variabili di risultato vengono quindi combinate in un'altra variabile matched_conditions, il che consente di utilizzare la logica concatenata nella sezione condition.

Sezione Condizioni

La sezione condition garantisce che e1, context_graph e matched_conditions esistano e/o corrispondano alla condizione specificata.

 condition:
   // Ensure $e1, $context_graph and $matched_conditions conditions are met.
   $e1 AND $context_graph AND $matched_conditions = 1

Completa la regola YARA-L

A questo punto la regola è pronta per essere utilizzata e dovrebbe avere il seguente aspetto:

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
}

Campi entità contesto feed Fusion

Nelle regole è possibile utilizzare molti campi del feed di indicatori di Mandiant Fusion. Questi campi sono tutti definiti nell'elenco dei campi del modello dei dati unificato. I seguenti campi sono pertinenti per l'assegnazione di priorità agli indicatori:

Campo entità Valori possibili
metadata.threat.associations.type MALWARE, THREAT_ACTOR
metadata.threat.associations.name Nome dell'associazione della minaccia
metadata.threat.verdict_info.pwn TRUE, FALSE
metadata.threat.verdict_info.pwn_first_tagged_time.seconds Timestamp (secondi)

Alcuni campi presentano coppie chiave-valore che devono essere utilizzate in combinazione per accedere ai valori corretti. Di seguito è riportato un esempio.

Campo entità 1 Valori Campo entità 2 Valori
metadata.threat.verdict_info.source_provider Intelligence globale Mandiant metadata.threat.verdict_info.global_hits_count Integer
metadata.threat.verdict_info.source_provider Intelligence globale Mandiant metadata.threat.verdict_info.global_customer_count Integer
metadata.threat.verdict_info.source_provider Intelligence analista Mandiant metadata.threat.verdict_info.confidence_score Integer
metadata.threat.verdict_info.source_provider Intelligence automatizzata Mandiant metadata.threat.verdict_info.confidence_score Integer

Nella sezione outcome di una regola YARA-L, puoi accedere a un valore designato da una chiave specifica utilizzando il seguente 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))

L'esame delle corrispondenze delle entità in Google Security Operations consente di ottenere una visione completa dei dati, rivelando campi aggiuntivi che possono essere utili per valutare la priorità e il contesto di un avviso indicatore.

Di seguito è riportato un esempio di entità contesto Fusion Feed come punto di riferimento iniziale.

{
  "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"
      },
...
    ]
  }
}

Condizioni complesse

Per utilizzare più campi contemporaneamente in un'entità di contesto, puoi combinare più variabili di risultato per creare una logica condizionale più complessa. Per combinare più campi, puoi creare variabili di risultato intermedie. Queste variabili vengono quindi combinate per formare una nuova variabile di risultato che può essere utilizzata nella sezione condition.

Di seguito è riportato un esempio.

// 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"

In questo caso, due variabili di risultato intermedie, is_attributed_malware e is_attributed_actor, vengono combinate in una variabile di risultato is_attributed.

In questo esempio, i valori dei risultati intermedi restituiscono valori numerici, che consentono confronti numerici nella nuova variabile di risultato. In questo esempio, is_attributed sarà un valore pari a 1 o superiore se l'indicatore ha almeno un'associazione di minaccia di tipo MALWARE o THREAT_ACTOR.

Join flessibili in YARA-L

I join flessibili tra gli IOC consentono di unire più campi UDM a un'entità di contesto. Questo riduce il numero di regole necessarie se più campi UDM vengono uniti a entità di contesto.

Di seguito è riportato un esempio di sezione event in cui vengono utilizzati i join flessibili per più campi 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)