פיד משולב של מודיעין איומי סייבר

נתמך ב:

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

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

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

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

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

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

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

כתיבת כללי YARA-L שמשתמשים ב-ATI Fusion Feed ב-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.

קטע התוצאה

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

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

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

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


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

New GTI product name

רמת הרישוי

MANDIANT_FUSION_IOC

GTI_IOC

‫Enterprise או Enterprise+

OPEN_SOURCE_INTEL_IOC

GTI_IOC

‫Enterprise או Enterprise+

MANDIANT_ACTIVE_BREACH_IOC

GTI_IOC

Enterprise+

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

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

העברה בסיסית

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

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

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

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

(
    $mandiant.graph.metadata.product_name = "MANDIANT_FUSION_IOC" OR 
    $mandiant.graph.metadata.product_name = "GTI_IOC"
)

הסבר על תהליך העבודה של ההעברה

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

  1. זיהוי הכללים המושפעים. פותחים את הדף Rules Management/Lister (ניהול כללים/רשימה). אם יש כללים שמושפעים בדייר, מופיע באנר גלובלי בולט.
    • אינדיקטור: בכללים שמפנים לפידים מדור קודם מוצג סמל אזהרה או Update Requiredהסבר קצר.
    • פעולה: לוחצים על בקשת עזרה מ-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 מופיעים הפרטים הבאים:

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

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