חיפוש הקשר של ישויות
התכונה "הקשר של ישות בחיפוש" משפרת את חקירות האבטחה ואת התגובה לאירועים, בכך שהיא מאפשרת למשתמשים לחפש ולראות אירועי הקשר שקשורים לישויות בחשבון Google Security Operations שלהם. בניגוד לחיפושים שמוגבלים לסכמת האירועים הרגילה של מודל הנתונים המאוחד (UDM), התכונה הזו נותנת מענה לצורך בחיפוש מעבר לנתוני האירועים של UDM, כולל הקשר של ישויות UDM, ומספקת תובנות מעמיקות יותר לגבי אירועי אבטחה.
יתרונות מרכזיים
- מנתחי אבטחה ומומחים לאיתור איומים יכולים לשלוח שאילתות לגבי מידע לפי הקשר על ישויות.
- עזרה בניתוח שורש הבעיה, איתור איומים וזיהוי פלילי.
- המשתמשים יכולים להריץ חיפושים סטטיסטיים בהקשר של ישות כדי להבין דפוסים של טלמטריה וישויות מושפעות באמצעות ניתוח טלמטריה.
שימוש בהקשר של ישות בחיפוש Google
אתם יכולים להשתמש בהקשר של הישות כדי לקבל תובנות מתוצאות החיפוש בדרכים הבאות:
- חיפוש באמצעות שמות שדות של ישות UDM: אתם יכולים ליצור שאילתות חיפוש באמצעות שמות שדות של ישות UDM. לדוגמה, כדי למצוא את כל אירועי ההקשר שמשויכים לשם מארח ספציפי, יוצרים חיפוש באמצעות
graph.entity.hostname. - גישה לכרטיסייה 'סקירה כללית': הכרטיסייה סקירה כללית מספקת סיכום כללי של ישויות שנמצאו בחיפוש, על סמך מידע משאילתת החיפוש שהמשתמש מזין כדי להציג מידע. בדף סקירה כללית מוצג מידע על סוגי ישויות, כמו
DOMAIN_NAME,IP_ADDRESS,ASSET,USER,FILE,GROUPו-RESOURCE. - שימוש בכרטיסייה Entity: בכרטיסייה Entity מפורטים כל אירועי ההקשר של הישות שהתקבלו, כולל רכיבי משנה כמו Trend Over Time, Snapshot Filter, Aggregations ו-Events. הישויות מסווגות לישויות מוגבלות בזמן ולא מוגבלות בזמן, ומוצגות בכרטיסיות נפרדות.
- הצגת נתונים נצברים: הנתונים הנצברים מוצגים בשדות, בדומה לחיפוש אירועים ב-UDM. הצבירות מסווגות עוד יותר לסוגי הקשר: הקשר של ישות, הקשר נגזר והקשר גלובלי.
ממשק תוצאות החיפוש של תרשים ההקשר של הישות
ממשק תוצאות החיפוש של גרף הקשר של ישויות (ECG) כולל כמה כרטיסיות שעוזרות לכם לנתח נתוני הקשר של ישויות:
הכרטיסייה Results: מוצגים בה
Timed Dataו-Timeless Data.- נתונים מתוזמנים: הצגת ישויות שהיה להן ערך של
metadata.interval.end_timeבמהלך ההטמעה. - נתונים ללא הגבלת זמן: הצגת ישויות שלא היה להן ערך ב-
metadata.interval.end_time.
בממשק מוצגות ישויות עם תזמון או ישויות ללא תזמון, עד למספר המקסימלי של תוצאות שהוגדר.
- נתונים מתוזמנים: הצגת ישויות שהיה להן ערך של
הכרטיסייה "התראות": מוצגות בה התראות שקשורות לישויות שנמצאו בחיפוש.
הכרטיסייה "סקירה כללית": מציגה מידע על הישות בשאילתת החיפוש.
התרשים "פעילות לאורך זמן":
מוצג מספר הישויות וההקשר של הישות שתקפים בכל משבצת זמן. אפשר להשתמש בפס ההזזה כדי להגדיל או להקטין את טווח התאריכים.
סה"כ ישויות שהשתנו: תרשים ההקשר של הישויות (ECG) מאחסן נתונים בקטגוריות זמן בתוך תקופת התוקף שלהם. בנוסף, המערכת מעתיקה את הנתונים האלה קדימה למשבצת הזמן הבאה, בתנאי שהישות נשארת תקפה (על סמך
end_time). הגרף הזה מתעדכן בכל פעם שמאפיין של ישות משתנה בין שתי משבצות זמן.
תרחיש לדוגמה: חקירת חשבון משתמש שנפרץ
למשל, שימו לב לתרחיש הבא: מנתח אבטחה צריך לחקור חשבון משתמש שעלול להיות חשוף (email@company.com). כדי לבדוק את הבעיה, פועלים לפי השלבים הבאים:
זיהוי המשתמש שהחשבון שלו נפרץ: בהתראה מסומן המשתמש email@company.com כחשבון חשוד.
איסוף מידע על ההקשר של הישות: קבלת נתונים על ההקשר של המשתמש כדי להבין את ההיקף וההשפעה.
מריצים שאילתות: משתמשים בהקשר של ישות בחיפוש כדי להריץ את השאילתות הבאות:
graph.entity.user.email_addresses = "email@company.com"כדי לאחזר מידע על המשתמש.graph.entity.user.email_addresses = "email@company.com" AND graph.metadata.product_name = "Google Cloud Compute Context"כדי לבדוק את שם המוצר ומטא-נתונים אחרים.
ניתוח הכרטיסייה "סקירה כללית": בכרטיסייה סקירה כללית מוצג סיכום הישויות של המשתמש, כולל:
- בודקים את חותמות הזמן של
First Seen Hourו-Last Seen Hour.
- בודקים את חותמות הזמן של
- בודקים את שמות המארחים, כתובות ה-IP וכתובות ה-MAC (אם יש).
- לבדוק את דגם החומרה, את פלטפורמת מערכת ההפעלה ואת גרסת הפלטפורמה.
בדיקת הכרטיסייה "אירועים": אפשר לראות אירועים שקשורים למשתמש הזה, כולל ניסיונות התחברות וחריגות.
בדיקת נתונים מצטברים: זיהוי דפוסים וחריגות בנתוני ההקשר של ישויות, שמחולקים להקשר של ישות, הקשר נגזר והקשר גלובלי.
דוגמאות לחיפושים
כדי לחפש נתונים של הקשר ישות, משתמשים בשמות של שדות ישות ב-UDM בשאילתות החיפוש:
graph.entity.hostnamegraph.entity.ip = "8.8.8.8" and graph.metadata.entity_type = "ASSET"
בתוצאות החיפוש מוצג מידע חשוב על הישויות, כולל:
- מטא-נתונים של הישות
- מדדים (
First Seen Hour,Last Seen Hour) - יחסים (
Entity,Direction,Entity_label,Entity_type,Relationship) - בהתאם לסוג הישות, שדות ספציפיים, כמו
Principal_ipלנכסים,Mail_idלמשתמשים,File_nameלגיבובים או לקבצים, ו-Domain_nameו-IP_addressלדומיינים.
דוגמאות להקשר של ישות בחיפוש
בקטע הזה מפורטות דוגמאות מעשיות לשימוש בתכונה 'הקשר של ישות' במודל UDM כדי לנתח נתונים סטטיסטיים של ישויות.
חיפוש נתונים סטטיסטיים של ישויות UDM
כדי לראות את סוגי המקורות וההקשר שזמינים, מריצים את החיפוש הבא של נתוני ישויות ב-UDM ב-UDM Search:
graph.metadata.source_type = $sourceType
graph.metadata.entity_type = $entityType
match:
$sourceType, $entityType
outcome:
$total = count(graph.metadata.product_entity_id)
order:
$sourceType, $total desc
limit:
100
בורר הזמן מציג נתונים פעילים ב-Entity Graph, ולא את הזמן שבו נתוני ההקשר נטמעו.
מכיוון שהחיפוש של ישויות UDM משתמש בממשק החיפוש הרגיל של UDM, אתם יכולים להשתמש בתכונות כמו החלונית Aggregations (כדי להציג את הערכים העליונים או התחתונים), טבלת התוצאות והתוצאות המורחבות של הנתונים הסטטיסטיים של UDM.
לדוגמה: הצגת ENTITY_TYPE נפרדים
כדי להרחיב את החיפוש של ישויות UDM, אתם יכולים לכלול את מקור היומן, מרחב השמות ומערך תוצאות כדי להציג את הערכים הייחודיים של ENTITY_TYPE שנצפו, באופן הבא:
graph.metadata.source_type = "ENTITY_CONTEXT"
$logType = strings.to_upper(graph.metadata.event_metadata.base_labels.log_types)
$namespace = strings.to_upper(graph.metadata.event_metadata.base_labels.namespaces)
match:
$logType, $namespace
outcome:
$total = count(graph.metadata.product_entity_id)
$entityTypes = array_distinct(graph.metadata.entity_type)
order:
$logType, $total desc
limit:
100
דוגמה: צמצום קבוצת הישויות
אפשר לחדד קבוצה ספציפית של ישויות באמצעות התכונה 'שינוי ציר החיפוש' ב-UDM. השיפור הזה יוצר שאילתת YARA-L כמו זו:
graph.metadata.source_type = "ENTITY_CONTEXT"
$logType = strings.to_upper( graph.metadata.event_metadata.base_labels.log_types )
$namespace = strings.to_upper( graph.metadata.event_metadata.base_labels.namespaces )
AND strings.to_upper( graph.metadata.event_metadata.base_labels.log_types ) = "WINDOWS_AD"
AND strings.to_upper( graph.metadata.event_metadata.base_labels.namespaces ) = "ACME"
הקשר נגזר
Google SecOps מספק את סוגי ההקשר הנגזרים הבאים:
- חותמות הזמן של
first_seenושלlast_seenלכלENTITY_TYPE -
Prevalence: מספר הנכסים שניגשו ל-ENTITY_TYPEמסוים
חותמות הזמן First Seen Hour ו-Last Seen Hour
מערכת Google SecOps מבצעת ניתוח סטטיסטי של הנתונים הנכנסים ומעשירה את רשומות ההקשר של הישויות באמצעות חותמות הזמן first_seen ו-last_seen:
- השדה
first_seen_timeמתעד את השעה שבה ישות זוהתה לראשונה בסביבת הלקוח. - בשדה
last_seen_timeמתועדת השעה של התצפית האחרונה בישות הזו.
משתמשים ששעת הביקור הראשון שלהם הייתה ב-7 הימים האחרונים:
graph.metadata.source_type = "DERIVED_CONTEXT"
graph.metadata.entity_type = "USER"
graph.entity.user.userid != ""
graph.entity.user.first_seen_time.hours >= timestamp.current_hours()-(86400 * 7)
דומיינים שנצפו לראשונה ב-7 הימים האחרונים:
graph.metadata.source_type = "DERIVED_CONTEXT"
graph.metadata.entity_type = "DOMAIN_NAME"
//optional, filter to only return FQDN
graph.entity.domain.name = /^([a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,}$/
graph.entity.domain.first_seen_time.hours >= timestamp.current_hours()-(86400 * 7)
קובץ (גיבובים) שנצפה ב-7 הימים האחרונים:
graph.metadata.source_type = "DERIVED_CONTEXT"
graph.metadata.entity_type = "FILE"
//graph.entity.file.md5 != ""
//graph.entity.file.sha1 != ""
graph.entity.file.sha256 != ""
graph.entity.file.first_seen_time.hours >= timestamp.current_hours() - (86400 * 7)
ENTITY_TYPE מייצג גיבוב FILE, לדוגמה, entity.file.hash.
באובייקט hash, הסוג יכול להיות אחד מהבאים:
md5sha1sha256
כדי לחפש גיבוב ספציפי, אפשר להריץ חיפוש ישויות ב-UDM לפי סוג הגיבוב שצוין:
// This will search ENTITY, DERIVED, and GLOBAL Source Types
graph.metadata.entity_type = "FILE"
graph.entity.file.sha256 = "eb5db1feadda5351c3b8fc0770e9f4c173484df5dc4a785bd1bdce7806a9e498"
כתובות IP
הערך הנגזר ENTITY_TYPES של IP_ADDRESS יכול לייצג ישויות פנימיות או חיצוניות.
החיפוש הבא ב-UDM Entity Stats מזהה IP_ADDRESSES שנצפו לאחרונה ומשתמש בפונקציות צבירה (בקטע התוצאות) כדי לספור אותם לפי בלוק CIDR:
graph.metadata.source_type = "DERIVED_CONTEXT"
graph.metadata.entity_type = "IP_ADDRESS"
//note, for IP addresses the first seen is under artifact, not ip
graph.entity.artifact.first_seen_time.hours >= timestamp.current_hours()-(86400 * 7)
outcome:
$total = count(graph.metadata.product_entity_id)
$classA = sum(if(net.ip_in_range_cidr(graph.entity.ip, "10.0.0.0/8"),1,0))
$classB = sum(if(net.ip_in_range_cidr(graph.entity.ip, "172.16.0.0/12"),1,0))
$classC = sum(if(net.ip_in_range_cidr(graph.entity.ip, "192.168.0.0/16"),1,0))
$classD = sum(if(net.ip_in_range_cidr(graph.entity.ip, "224.0.0.0/4"),1,0))
// we shouldn't see results here…
$classE = sum(if(net.ip_in_range_cidr(graph.entity.ip, "240.0.0.0/4"),1,0))
$thisNetwork = sum(if(net.ip_in_range_cidr(graph.entity.ip, "0.0.0.0/8"),1,0))
$loopback = sum(if(net.ip_in_range_cidr(graph.entity.ip, "127.0.0.0/8"),1,0))
$linklocal = sum(if(net.ip_in_range_cidr(graph.entity.ip, "169.254.0.0/16"),1,0))
$benchmark = sum(if(net.ip_in_range_cidr(graph.entity.ip, "198.18.0.0/15"),1,0))
$cgnat = sum(if(net.ip_in_range_cidr(graph.entity.ip, "10.64.0.0/10"),1,0))
כדי לחקור לעומק טווח חריג או לא צפוי, אפשר להריץ חיפוש של ישות UDM:
graph.metadata.source_type = "DERIVED_CONTEXT"
graph.metadata.entity_type = "IP_ADDRESS"
net.ip_in_range_cidr(graph.entity.ip, "198.18.0.0/15")
שכיחות
הערך של המאפיין 'שכיחות' הוא תמיד מסוג DERIVED_CONTEXT.
החיפוש הבא של ישויות UDM מזהה שמות דומיין שנצפים לעיתים רחוקות. הדומיינים האלה משויכים באופן ספציפי לנכס אחד לכל היותר ביום, במהלך חלון הזמן של השאילתה (day_max = 1), ולנכס אחד לכל היותר במהלך 10 הימים הקודמים (rolling_max = 1).
התבנית הזו שימושית לזיהוי דומיינים עם אינטראקציה מוגבלת בסביבה שלכם:
graph.metadata.source_type = "DERIVED_CONTEXT"
graph.metadata.entity_type = "DOMAIN_NAME"
//optional, filter to only return specific TLDs where the FQDN is more than X characters
//graph.entity.domain.name = /^.{40,}\.(?:sx|cc|st|ac|lc|wd|vg|tv|cm|gd)$/
graph.entity.domain.prevalence.rolling_max = 1
graph.entity.domain.prevalence.day_max = 1
לחלופין, אפשר להפוך את החיפוש הזה לחיפוש מצטבר של UDM Entity Stats ולצבור את התוצאות:
graph.metadata.source_type = "DERIVED_CONTEXT"
graph.metadata.entity_type = "DOMAIN_NAME"
//optional, filter to only return FQDN
graph.entity.domain.name = /^.{40,}\.(?:sx|cc|st|ac|lc|wd|vg|tv|cm|gd)$/
$domain = graph.entity.domain.name
$length = strings.length(graph.entity.domain.name)
$tld = strings.extract_domain(graph.entity.domain.name)
graph.entity.domain.prevalence.day_max = 1
graph.entity.domain.prevalence.rolling_max = 1
match:
$domain, $tld, $length
limit:
10
חיפושים בשדות של ישויות בסיסיות ב-UDM
הנה דוגמאות נוספות לשימוש בתכונה 'הקשר של ישות בחיפוש' ב-Google SecOps, על סמך מקורות מידע זמינים:
graph.entity.hostnamegraph.entity.ip = "8.8.8.8" and graph.metadata.entity_type = "ASSET"principal.ipprincipal.hostname="baz"principal.ip="1.2.3.4"network.dns.questions.name="youtube.com"
שינוי ציר משדות של ישויות
אפשר להשתמש בשדות של ישויות כדי לשנות את הציר ולחקור נתונים קשורים. דוגמאות לשדות ציר:
network.email.tonetwork.email.ccprincipal.process.file.fileMetadata.pe.importHashprincipal.process.file.sha256network.dns.questions.name
הסבר על שדות דינמיים
המקורות מפנים לשדות דינמיים מובְנים עם קידומות, כמו additional. אתם יכולים לחפש את השדות האלה באירועי UDM.
שיקולים בנושא בקרת גישה
המערכת מגבילה את נתוני ההקשר הגלובליים ל-50 אירועים. גם משתמשים עם הרשאה גלובלית וגם משתמשים עם הרשאה מוגבלת יכולים לראות את הנתונים.
המקורות הבאים מספקים נתוני הקשר גלובליים:
| נתוני הקשר גלובליים | איפה המשתמשים יכולים לראות את הנתונים האלה או לבצע איתם פעולות | מי יכול לראות את זה |
|---|---|---|
| גלישה בטוחה | - חיפוש - כללים |
כל המשתמשים |
| VirusTotal Relationships | - חיפוש - כללים |
כל המשתמשים |
| WHOIS | - חיפוש - כללים |
כל המשתמשים |
| אותיות רישיות | - חיפוש - כללים |
כל המשתמשים |
מקור פתוח Intel IOC (OPEN_SOURCE_INTEL_IOC) |
- חיפוש - כללים |
כל המשתמשים |
Mandiant Fusion IoC (MANDIANT_FUSION_IOC) |
- חיפוש - כללים - איומים מתפתחים |
כל המשתמשים |
מגבלות
- מגבלות נפח: מגבלה של מיליון תוצאות מצטברות לנתונים עם חותמת זמן ולנתונים בלי חותמת זמן.
- נתוני הקשר גלובליים: יש מגבלה של 50 שורות לנתוני הקשר גלובליים רגישים, כמו
UPPERCASE_VT_PROTECTED,MANDIANT_FUSION_IOCו-VIRUS_TOTAL_CONNECTIONS. - עקביות הנתונים: יכול להיות עיכוב של עד שעתיים בנתוני "נראה לאחרונה". יכול להיות שיוצגו רק חלק מהישויות שקשורות לאירוע.
תכונות שלא נתמכות:
- חיפושים הפוכים בשדות של ישויות, חיפושים של שדות מקובצים, שכיחות נמוכה ומפת חום.
- אי אפשר להצטרף בין הקשר של הישות לבין שאילתות של אירועים.
הבעיה עדיין לא נפתרה? קבלת תשובות מחברי הקהילה וממומחי Google SecOps.