Applied Threat Intelligence 퓨전 피드 개요

Mandiant Fusion 지표 피드는 해시, IP, 도메인, URL 등 알려진 위협 행위자, 멀웨어 변형, 활성 캠페인, 완료된 인텔리전스 보고와 관련된 침해 지표(IOC) 모음입니다. 최댓값을 보장하기 위해 이 피드에는 Mandiant Intelligence가 오픈소스 피드로부터 신중하게 확인 및 검증한 IOC를 포함하여 높은 정확성을 보장합니다. Mandiant의 선별 프로세스는 다음과 같은 단계로 구성됩니다.

  • 일선 이슈 대응: Mandiant 분석가는 보안 침해를 조사하는 동시에 공격자 도구와 기법에 대한 직접적인 지식을 얻습니다.

  • 위협 조사: 전담팀이 위협 행위자를 추적하고 멀웨어를 분석하며 새로운 공격 인프라를 발견합니다.

  • 컨텍스트화: IOC는 이슈를 이해하고 우선순위를 지정하는 데 도움이 되는 특정 위협 및 캠페인에 매핑됩니다.

Breach Analytics 피드는 Fusion을 기반으로 빌드되어 Mandiant가 적극적으로 조사 중인 최근 발생하는 새로운 침해와 관련된 지표를 추가합니다. 최신 공격 추세에 대한 실시간 통계를 제공합니다. YARA-L 규칙은 Applied Threat Intelligence Fusion 피드의 컨텍스트 정보를 활용하여 간단한 표시기 일치 규칙을 강화할 수 있습니다. 여기에는 관련된 위협 그룹, 손상된 환경에 표시기가 있는지 또는 Mandiant의 자동화된 악성 신뢰도 점수가 포함됩니다.

퓨전 피드로 YARA-L 규칙 작성

퓨전 피드를 사용하여 YARA-L 규칙을 작성하는 프로세스는 다른 컨텍스트 항목 소스로 YARA-L 규칙을 작성하는 것과 유사합니다. 이 유형의 YARA-L 규칙을 작성하는 방법에 대한 자세한 내용은 컨텍스트 인식 분석 만들기를 참조하세요.

이벤트 및 일치 섹션

규칙을 작성하려면 선택한 컨텍스트 항목 그래프를 필터링합니다. 이 경우에는 퓨전 피드입니다. 그런 다음 특정 지표 유형을 필터링합니다. 예를 들면 FILE입니다. 다음은 그 예시입니다.

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"

컨텍스트 항목을 사용하지 않는 YARA-L 규칙과 마찬가지로 events 섹션에서 이벤트 또는 컨텍스트 항목의 다른 조건을 추가할 수 있습니다. 컨텍스트 항목의 필드와 UDM 이벤트 필드를 조인할 수 있습니다. 다음 예시에서 자리표시자 변수 ioc는 컨텍스트 항목과 이벤트 간에 전환 조인을 수행하는 데 사용됩니다. 그런 다음 이 자리표시자 변수는 match 섹션에서 사용되어 특정 기간 내에서 일치를 보장합니다.

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

match:
   $ioc over 1h

YARA-L 규칙에서 활용할 수 있는 컨텍스트 항목 필드에 대한 자세한 내용은 퓨전 피드 컨텍스트 항목 필드 섹션을 참조하세요.

결과 섹션

이전 예시에 계속 이어서 기본 지표 일치 규칙은 graph.entity.file.md5 필드와 principal.process.file.md5 UDM 필드의 컨텍스트 항목에 있는 파일 해시 위치에 대해 설정됩니다. 이 단순 일치 규칙은 다수의 이벤트와 일치할 수 있습니다. 따라서 관심 있는 특정 인텔리전스가 있는 컨텍스트 항목에서 규칙 일치를 세분화하는 것이 좋습니다. 예를 들어 여기에는 Mandiant가 지표에 할당한 신뢰도 점수, 침해된 환경에서 발견되었는지 여부 또는 지표와 관련된 멀웨어 계열이 포함될 수 있습니다. 이 모든 것은 규칙의 outcome 섹션에서 모두 수행할 수 있습니다.

 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)

YARA-L 규칙의 outcome 섹션에서 신뢰도 점수는 max 함수로 래핑된 if statement을 사용하여 추출됩니다. 이 기법은 멀티 이벤트 규칙에 필요합니다. 동일한 기법을 사용하여 verdict_info에서 pwn 변수를 추출하며, 이는 Mandiant에서 식별한 대로 침해된 환경에서 지표가 확인되었는지 여부를 나타냅니다.

그런 다음 이 두 결과 변수가 다른 matched_conditions 변수로 결합되어 condition 섹션에서 연결된 논리를 사용할 수 있습니다.

조건 섹션

condition 섹션은 e1, context_graph, matched_conditions가 존재하고 지정된 조건과 일치하는지 확인합니다.

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

YARA-L 규칙 완료

이제 규칙을 사용할 수 있으며 다음과 같이 표시됩니다.

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
}

퓨전 피드 컨텍스트 항목 필드

규칙에서 Mandiant Fusion 지표 피드의 여러 필드를 사용할 수 있습니다. 이러한 필드는 모두 통합 데이터 모델 필드 목록에 정의되어 있습니다. 다음 필드는 지표 우선순위 지정과 관련이 있습니다.

항목 필드 가능한 값
metadata.threat.associations.type MALWARE, THREAT_ACTOR
metadata.threat.associations.name 위협 연결 이름
metadata.threat.verdict_info.pwn TRUE, FALSE
metadata.threat.verdict_info.pwn_first_tagged_time.seconds 타임스탬프(초)

일부 필드에는 올바른 값에 액세스하기 위해 함께 사용해야 하는 키-값 쌍이 있습니다. 다음은 예시입니다.

항목 필드 1 항목 필드 2
metadata.threat.verdict_info.source_provider Mandiant Global Intel metadata.threat.verdict_info.global_hits_count 정수
metadata.threat.verdict_info.source_provider Mandiant Global Intel metadata.threat.verdict_info.global_customer_count 정수
metadata.threat.verdict_info.source_provider Mandiant Analyst Intel metadata.threat.verdict_info.confidence_score 정수
metadata.threat.verdict_info.source_provider Mandiant Automated Intel metadata.threat.verdict_info.confidence_score 정수

YARA-L 규칙의 outcome 섹션에서 다음 명령어를 사용하여 특정 키로 지정된 값에 액세스할 수 있습니다. =

$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))

Google Security Operations에서 항목 일치를 검사하면 데이터를 포괄적으로 보고 표시기 알림의 우선순위와 컨텍스트를 평가하는 데 유용할 수 있는 추가 필드를 파악할 수 있습니다.

다음은 초기 참조점인 퓨전 피드 컨텍스트 항목의 예시입니다.

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

복잡한 조건

컨텍스트 항목에서 한 번에 여러 필드를 사용하려면 여러 결과 변수를 결합하여 더 복잡한 조건부 로직을 만들 수 있습니다. 여러 필드를 결합하려면 중개 결과 변수를 만들면 됩니다. 그런 후 이러한 변수가 결합되어 condition 섹션에서 사용할 수 있는 새 결과 변수를 형성합니다.

다음은 그 예시입니다.

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

이 경우 두 개의 중간 결과 변수 is_attributed_malwareis_attributed_actor가 결과 변수 is_attributed로 결합됩니다.

이 예시에서 중간 결과 값은 숫자 값을 반환하여 새 결과 변수에서 숫자 비교를 허용합니다. 이 예시에서 is_attributed는 지표에 MALWARE 또는 THREAT_ACTOR 유형의 위협 연결이 하나 이상 있는 경우 1 이상의 값이 됩니다.

YARA-L의 유연한 조인

IOC 간의 유연한 조인을 사용하면 여러 UDM 필드를 컨텍스트 항목에 대해 조인할 수 있습니다. 이렇게 하면 여러 UDM 필드가 컨텍스트 항목과 조인되는 경우 필요한 규칙 수가 줄어듭니다.

다음은 여러 UDM 필드에 유연한 조인을 사용하는 event 섹션 예시입니다.

  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)