ביצוע חיפושים לפי הקשר של הישות

נתמך ב:

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

תרשים הקשר של ישויות ב-Search Console

ב-Search Console, הגרף של הקשר בין ישויות (ECG) כולל כמה כרטיסיות שיעזרו לכם לנתח נתוני הקשר של ישויות:

  • הכרטיסייה 'תוצאות': מוצגים בה Timed Data ו-Timeless Data.

    • נתונים עם חותמת זמן: מציג ישויות שהיה להן ערך עבור metadata.interval.end_time במהלך ההטמעה.
    • נתונים שלא משתנים עם הזמן: מוצגים ישויות שלא היה להן ערך עבור metadata.interval.end_time.

    ב-Search Console מוצגות עד 10,000 רשומות של נתונים עם חותמת זמן או ללא חותמת זמן.

  • כרטיסיית ההתראות: מוצגות בה התראות שמשויכות לישויות שנמצאו בחיפוש.

  • הכרטיסייה 'סקירה כללית': מוצג בה מידע על הישות בשאילתת החיפוש.

  • תרשים של פעילות לאורך זמן:

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

    • סך הכול ישויות שהשתנו: בגרף הקשר של הישויות (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

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

מכיוון שחיפוש ישויות ב-UDM משתמש בממשק החיפוש הרגיל של UDM, אפשר להשתמש בתכונות כמו החלונית Aggregations (כדי לראות את הערכים הכי גבוהים או הכי נמוכים), טבלת התוצאות והתוצאות המורחבות של UDM Stats.

דוגמה: הצגת נתונים נפרדים ENTITY_TYPE

כדי להרחיב את החיפוש של ישויות ב-UDM, אפשר לכלול את מקור היומן, מרחב השמות ומערך התוצאות כדי להציג ENTITY_TYPEs נפרדים שנצפו, באופן הבא:

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.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 ולצבור את התוצאות:

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 ‫- חיפוש
- כללים
כל המשתמשים
אותיות רישיות ‫- חיפוש
- כללים
כל המשתמשים
Open Source Intel IOC (OPEN_SOURCE_INTEL_IOC) ‫- חיפוש
- כללים
כל המשתמשים
Mandiant Fusion IoC (MANDIANT_FUSION_IOC) ‫- חיפוש
- כללים
- איומים מתפתחים
כל המשתמשים

מגבלות

  • מגבלות על נפח: מגבלה של מיליון תוצאות מצטברות לנתונים מתוזמנים ולנתונים לא מתוזמנים.
  • נתוני הקשר הגלובליים: יש מגבלה של 50 שורות לנתוני הקשר הגלובליים הרגישים, כמו UPPERCASE_VT_PROTECTED,‏ MANDIANT_FUSION_IOC ו-VIRUS_TOTAL_CONNECTIONS.
  • עקביות הנתונים: יכול להיות שיהיה עיכוב של עד שעתיים בנתונים של 'נראה לאחרונה'. ישות קשורה יכולה להציג רק קבוצת משנה של הישויות שמופיעות באירוע.
  • תכונות שלא נתמכות:

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

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