Applied Threat Intelligence Fusion Feed
פיד Applied Threat Intelligence (ATI) Fusion הוא אוסף של סימנים מחשידים (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 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 קיימים כך שיתאימו ל-IoC החדשים של GTI, תוך שמירה על פונקציונליות ההתראות הקודמת. כדי להבטיח מעבר חלק לפני שהפידים הקודמים יוקפאו, צריך לעדכן את תחביר הכללים באמצעות ציר הזמן ותהליכי העבודה להעברה שמופיעים כאן.
עדכון כללי 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 ל-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
)
הסבר על תהליך העבודה של ההעברה
תהליך העבודה הבא משקף את חוויית השימוש המעודכנת בניהול כללים, שנועדה להנחות אתכם בתהליך ההעברה.
- זיהוי הכללים המושפעים פותחים את הדף Rules Management/Lister (ניהול כללים/רשימה).
אם יש כללים שמושפעים בדייר, יופיע באנר גלובלי בולט.
- אינדיקטור: בכללים שמפנים לפידים מדור קודם מוצג סמל אזהרה או
Update Requiredהסבר קצר. - פעולה: לוחצים על בקשת עזרה מ-Gemini בעדכון או בוחרים כלל ספציפי כדי לראות את הפרטים.
- אינדיקטור: בכללים שמפנים לפידים מדור קודם מוצג סמל אזהרה או
ניתוח פרטי הכלל. כשפותחים כלל מושפע, עורך הכללים מדגיש את התחביר מדור קודם (לדוגמה,
$mandiant.graph.metadata.product_name = "MANDIANT_FUSION_IOC").בכותרת של הכלי לעריכה מופיע לחצן ייעודי להעברה, שלחיצה עליו מפעילה את חלונית הצד של Gemini.
מידע נוסף על העדכון בעזרת Gemini בחלונית הצדדית של Gemini נטען אוטומטית כרטיס הקשר עם נתונים שכבר הוזנו:
- Gemini מסביר את המיפוי בין הפיד הישן לבין פיד ה-GTI החדש על סמך ההרשאה שלכם.
- Gemini מספק בלוק קוד של הצעה לתיקון. בודקים את הלוגיקה המעודכנת של YARA-L, שמוסיפה
GTI_IOCתוך שמירה על ההפניה מדור קודם לכיסוי היסטורי.
לוחצים על החלה בכלי העריכה כדי להחליף את הלוגיקה הישנה בתחביר החדש שהוצע.
בודקים את התחביר החדש. אחרי ששומרים את הכלל עם התחביר המעודכן של
GTI_IOCמופיעים הפרטים הבאים:- סמל האזהרה נדרש עדכון נעלם מהעורך ומהדף הראשי Rules Lister.
- סטטוס ההעברה מתעדכן בזמן אמת כשמסירים את הכללים שסומנו.
הבעיה עדיין לא נפתרה? קבלת תשובות מחברי הקהילה וממומחי Google SecOps.