חיפוש הקשר של ישויות

נתמך ב:

התכונה "הקשר של ישות בחיפוש" משפרת את חקירות האבטחה ואת התגובה לאירועים, בכך שהיא מאפשרת למשתמשים לחפש ולראות אירועי הקשר שקשורים לישויות בחשבון Google Security Operations שלהם. בניגוד לחיפושים שמוגבלים לסכמת האירועים הרגילה של מודל הנתונים המאוחד (UDM), התכונה הזו נותנת מענה לצורך בחיפוש מעבר לנתוני האירועים של UDM, כולל הקשר של ישויות UDM, ומספקת תובנות מעמיקות יותר לגבי אירועי אבטחה.

יתרונות מרכזיים

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

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

  • חיפוש באמצעות שמות שדות של ישות 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). כדי לבדוק את הבעיה, פועלים לפי השלבים הבאים:

  1. זיהוי המשתמש שהחשבון שלו נפרץ: בהתראה מסומן המשתמש email@company.com כחשבון חשוד.

  2. איסוף מידע על ההקשר של הישות: קבלת נתונים על ההקשר של המשתמש כדי להבין את ההיקף וההשפעה.

  3. מריצים שאילתות: משתמשים בהקשר של ישות בחיפוש כדי להריץ את השאילתות הבאות:

    • 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" כדי לבדוק את שם המוצר ומטא-נתונים אחרים.
  4. ניתוח הכרטיסייה "סקירה כללית": בכרטיסייה סקירה כללית מוצג סיכום הישויות של המשתמש, כולל:

    • בודקים את חותמות הזמן של First Seen Hour ו-Last Seen Hour.
  • בודקים את שמות המארחים, כתובות ה-IP וכתובות ה-MAC (אם יש).
  • לבדוק את דגם החומרה, את פלטפורמת מערכת ההפעלה ואת גרסת הפלטפורמה.
  1. בדיקת הכרטיסייה "אירועים": אפשר לראות אירועים שקשורים למשתמש הזה, כולל ניסיונות התחברות וחריגות.

  2. בדיקת נתונים מצטברים: זיהוי דפוסים וחריגות בנתוני ההקשר של ישויות, שמחולקים להקשר של ישות, הקשר נגזר והקשר גלובלי.

כדי לחפש נתונים של הקשר ישות, משתמשים בשמות של שדות ישות ב-UDM בשאילתות החיפוש:

  • graph.entity.hostname
  • graph.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 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, הסוג יכול להיות אחד מהבאים:

  • md5
  • sha1
  • sha256

כדי לחפש גיבוב ספציפי, אפשר להריץ חיפוש ישויות ב-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.hostname
  • graph.entity.ip = "8.8.8.8" and graph.metadata.entity_type = "ASSET"
  • principal.ip
  • principal.hostname="baz"
  • principal.ip="1.2.3.4"
  • network.dns.questions.name="youtube.com"

שינוי ציר משדות של ישויות

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

  • network.email.to
  • network.email.cc
  • principal.process.file.fileMetadata.pe.importHash
  • principal.process.file.sha256
  • network.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.