פיד משולב של Applied Threat Intelligence

נתמך ב:

פיד Applied Threat Intelligence (ATI) Fusion הוא אוסף של סימנים מחשידים (IoC), כולל גיבובים, כתובות IP, דומיינים וכתובות URL, שמשויכים לגורמי איום ידועים, לסוגים של תוכנות זדוניות, לקמפיינים פעילים ולדוחות מודיעין שהושלמו. הפיד כולל גם אינדיקטורים לפריצה (IoC) מפידים בקוד פתוח ש-Mandiant Intelligence בדקה ואימתה בקפידה, כדי למקסם את הערך ולספק רמת דיוק גבוהה.

תהליך הניהול של Mandiant כולל את השלבים הבאים:

  • תגובה לאירועים בחזית: במהלך חקירת פריצות, מנתחי Mandiant צוברים ידע ממקור ראשון על הכלים והטכניקות של התוקפים.

  • מחקר איומים: צוותים ייעודיים עוקבים אחרי גורמי איום, מנתחים תוכנות זדוניות וחושפים תשתית מתקפות חדשה.

  • הקשר: אינדיקטורים לפריצה ממופים לאיומים ולקמפיינים ספציפיים, וכך עוזרים להבין את האירועים ולתעדף אותם.

פיד Breach Analytics מבוסס על ATI Fusion Feed וכולל אינדיקטורים מחקירות חדשות ופעילות של Mandiant בנושא פרצות. הוא מספק תובנות בזמן אמת לגבי המגמות האחרונות בתחום ההתקפות. כדי לשפר את ההתאמה של האינדיקטורים, כללי YARA-L יכולים להשתמש במידע לפי הקשר מפיד ATI Fusion, כמו קבוצות איומים משויכות, נוכחות של אינדיקטור בסביבות שנפרצו או ציון זדוניות אוטומטי של Mandiant.

כתיבת כללי YARA-L באמצעות פיד ATI Fusion

כתיבת כללי YARA-L שמשתמשים בפיד ATI Fusion ב-Google Security Operations דומה לכתיבת כללי YARA-L שמשתמשים במקורות אחרים של ישויות הקשר. מידע נוסף זמין במאמר יצירת ניתוח מבוסס-הקשר.

אירועים וקטעי משחק

כדי לכתוב כלל, מבצעים את השלבים הבאים: 1. סינון תרשים הישויות של ההקשר שנבחר. במקרה כזה, Fusion Feed. 1. סינון סוג ספציפי של אינדיקטור. לדוגמה, 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"

אפשר להוסיף תנאים אחרים של האירוע או של ישות ההקשר בקטע events. אתם יכולים לצרף שדה מישות ההקשר ומשדה האירוע ב-UDM.

בדוגמה הבאה, משתנה ה-placeholder‏ ioc משמש לביצוע צירוף טרנזיטיבי בין ישות ההקשר לבין האירוע. לאחר מכן, המשתנה ioc משמש בקטע match כדי לוודא שיש התאמה במסגרת זמן ספציפית.

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

match:
   $ioc over 1h

מידע נוסף על שדות של ישויות הקשר שאפשר להשתמש בהם בכללי YARA-L זמין בקטע שדות של ישויות הקשר ב-Fusion Feed.

הקטע "תוצאה"

נמשיך עם הדוגמה הקודמת: כלל ההתאמה הבסיסי של האינדיקטור מוגדר מול גיבובי קבצים בישויות ההקשר בשדה 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)

בקטע outcome של כלל YARA-L, ציון המהימנות מחולץ באמצעות if statement שעטוף בפונקציה max. השיטה הזו נדרשת לכללים של כמה אירועים. אותה שיטה משמשת לחילוץ המשתנה pwn מ-verdict_info, שמציין אם אינדיקטור נצפה בסביבה שנפרצה שזוהתה על ידי 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
}

שדות של ישויות הקשר בפיד של ATI Fusion

אפשר להשתמש בכללים בהרבה שדות מהפיד של ATI 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 מספר שלם

בקטע outcome של כלל YARA-L, אתם יכולים לגשת לערך שמוגדר על ידי מפתח ספציפי באמצעות הפקודה הבאה:

$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 עוזרת לכם לקבל תמונה מקיפה של הנתונים, וחושפת שדות נוספים שיכולים להיות שימושיים להערכת העדיפות וההקשר של התראת אינדיקטור.

בדוגמה הבאה מוצגת ישות הקשר של פיד Fusion כנקודת התייחסות ראשונית:

{
  "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_malware ו-is_attributed_actor, משולבים במשתנה תוצאה is_attributed.

ערכי התוצאות של הביניים מחזירים ערכים מספריים, שמאפשרים השוואות מספריות במשתנה התוצאה החדש.

הערך ב-is_attributed יהיה 1 או יותר אם לאינדיקטור יש לפחות שיוך אחד לאיום מסוג MALWARE או THREAT_ACTOR.

צירופים גמישים בכלל YARA-L

כדי לצמצם את מספר הכללים הנדרשים, אתם יכולים להשתמש בחיבורים גמישים בין IoC כדי לחבר כמה שדות 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)

העברת פידים קודמים של Mandiant ל-GTI

אנחנו מאחדים את מקורות הנתונים של מודיעין איומי הסייבר ב-Google SecOps. כדי לספק קבוצה רחבה יותר של סימנים מחשידים (IoC) ולפשט את השילוב, אנחנו עוברים מהפידים הקודמים של Mandiant לפיד המאוחד של Google Threat Intelligence ‏ (GTI).

המדריך הזה מיועד למהנדסים ולאנליסטים בתחום הזיהוי שרוצים לשמור על כיסוי רציף של איומים בזמן המעבר לפיד המאוחד של GTI. הוא מסביר איך לעדכן את כללי YARA-L הקיימים כך שיתאימו ל-GTI IoC החדשים, תוך שמירה על פונקציונליות ההתראות הקודמת. כדי להבטיח מעבר חלק לפני שהפידים הקודמים יוקפאו, אתם צריכים לעדכן את תחביר הכללים לפי לוח הזמנים ותהליכי ההעברה שצוינו.

עדכון כללי YARA-L

כדי לשמור על כיסוי רציף, מומלץ לעדכן את כללי YARA-L לשם המוצר החדש של GTI.


שם הפיד הקודם של Mandiant

שם המוצר החדש של GTI

רמת הרישוי

MANDIANT_FUSION_IOC

GTI_IOC

Enterprise או Enterprise Plus

OPEN_SOURCE_INTEL_IOC

GTI_IOC

Enterprise או Enterprise Plus

MANDIANT_ACTIVE_BREACH_IOC

GTI_IOC

Enterprise+‎

מידע שיעזור לכם במעבר ל-YARA-L

אם אתם לא רוצים להשתמש בפונקציה Apply של Gemini, אתם יכולים להשתמש בקטעי הקוד האלה כדי לעדכן את הכללים באופן ידני.

העברה בסיסית

משתמשים בתחביר YARA-L הזה כדי להתאים גם לנתונים היסטוריים וגם לנתוני GTI חדשים.

תחביר YARA-L ישן:

$mandiant.graph.metadata.product_name = "MANDIANT_FUSION_IOC"

תחביר YARA-L מומלץ:

(
    $mandiant.graph.metadata.product_name = "GTI_IOC"
    $mandiant.graph.metadata.threat_intel.stable = true
)

הסבר על תהליך ההעברה

תהליך העבודה הבא משקף את חוויית הניהול המעודכנת של הכללים, שנועדה להדריך אתכם בתהליך ההעברה.

  1. זיהוי הכללים המושפעים פותחים את הדף ניהול כללים/רשימת כללים. אם יש בדייר שלכם כללים שמושפעים מהשינוי, יופיע באנר גלובלי בולט.
    • אינדיקטור: בכללים שמפנים לפידים מדור קודם מוצג סמל אזהרה או הסבר קצר Update Required.
    • פעולה: לוחצים על Ask Gemini לעזור לעדכן או בוחרים כלל ספציפי כדי לראות פרטים.
  2. ניתוח פרטי הכלל. כשפותחים כלל שמושפע מהשינוי, עורך הכללים מדגיש את התחביר הקודם (לדוגמה, $mandiant.graph.metadata.product_name = "MANDIANT_FUSION_IOC").

    כפתור ייעודי להעברה מופיע בכותרת של כלי העריכה, ופותח את חלונית הצ'אט של Gemini.

  3. לקרוא את העדכון שנוצר בעזרת Gemini. בחלונית הצ'אט של Gemini נטענת באופן אוטומטי כרטיסיית הקשר עם מידע שמולא מראש:

    • ‫Gemini מסביר את המיפוי בין הפיד הישן לפיד החדש של GTI על סמך ההרשאה שלכם.
    • ‫Gemini מספק קטע קוד של תיקון מוצע. בודקים את הלוגיקה המעודכנת של YARA-L, שמוסיפה את GTI_IOC תוך שמירה על ההפניה הקודמת לכיסוי היסטורי.
  4. לוחצים על החלה בכלי העריכה כדי להחליף את הלוגיקה הישנה בתחביר החדש שהוצע.

  5. מאמתים את התחביר החדש. אחרי ששומרים את הכלל עם התחביר המעודכן של GTI_IOC, הפרטים הבאים מופיעים:

    • סמל האזהרה נדרש עדכון נעלם מהעורך ומהדף הראשי של רשימת הכללים.
    • סטטוס ההעברה מתעדכן בזמן אמת כשאתם מוחקים את הכללים שסומנו.

הסבר על סינון הטמעת פידים של GTI_IOC

כדי להבטיח נאמנות גבוהה ולצמצם את הרעש, Google SecOps מסננת את ה-IoC בפיד GTI_IOC. מערכת Google SecOps כוללת אינדיקטור לפריצה מהפיד רק אם הוא עומד לפחות באחד מהקריטריונים הבאים:

  • יש לו ציון סמך של 80 ומעלה ב-GTI.

  • הוא קיבל פסיקה של GTI כזדוני.

  • הוא משויך לאיום ידוע (לדוגמה, הוא מקושר לקמפיין איומים ספציפי).

מזהי IoC שלא נבדקו ועומדים בקריטריונים האלה עדיין נקלטים ב-Google SecOps וזמינים לשימוש בכללי YARA-L, אבל הם מסומנים ב-metadata.threat.stable = false. אחרי שה-IoC האלה נבדקו או אומתו באופן מלא, התג stable מתעדכן ל-true.

מידע נוסף זמין במאמר ציון האינדיקטור של Google Threat Intelligence.

הבעיה עדיין לא נפתרה? קבלת תשובות מחברי הקהילה וממומחי Google SecOps.