ניתוח סיכונים ל-UEBA

נתמך ב:

במאמר הזה מוסבר על קבוצות הכללים בקטגוריה Risk Analytics for UEBA, על הנתונים הנדרשים ועל ההגדרות שבהן אפשר להשתמש כדי לשנות את ההתראות שנוצרות על ידי כל קבוצת כללים. ערכות הכללים האלה עוזרות לזהות איומים על ידי הערכה של מקורות היומן הנתמכים.

תיאורים של קבוצות כללים

אלה קבוצות הכללים שזמינות בקטגוריה Risk Analytics for UEBA, והן מקובצות לפי סוג הדפוסים שזוהו:

אימות

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

ניתוח תנועה ברשת

  • Anomalous Inbound Bytes by Device: כמות משמעותית של נתונים שהועלו לאחרונה לישות של מכשיר יחיד, בהשוואה לשימוש היסטורי.
  • Anomalous Outbound Bytes by Device: significant amount of data recently downloaded from a single device entity, compared to historical usage.
  • חריגה בנפח הכולל של בייטים לפי מכשיר: ישות מכשיר העלתה והורידה לאחרונה כמות משמעותית של נתונים, בהשוואה לשימוש היסטורי.
  • Anomalous Inbound Bytes by User: ישות של משתמש יחיד הורידה לאחרונה כמות משמעותית של נתונים, בהשוואה לשימוש היסטורי.
  • חריגה בנתוני סך הבייטים לפי משתמש: ישות משתמש העלתה והורידה לאחרונה כמות משמעותית של נתונים, בהשוואה לשימוש היסטורי.
  • ניסיון לפריצה בכוח ואז התחברות מוצלחת של משתמש: ישות של משתמש יחיד מכתובת IP אחת ביצעה כמה ניסיונות אימות כושלים לאפליקציה מסוימת לפני שהצליחה להתחבר.

זיהויים שמבוססים על קבוצות של חברות להשוואה

  • התחברויות חריגות או מוגזמות של משתמש שנוצר לאחרונה: פעילות אימות חריגה או מוגזמת של משתמש שנוצר לאחרונה. הפעולה הזו משתמשת בזמן היצירה מנתוני ההקשר של AD.

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

פעולות חשודות

  • יצירת חשבונות מוגזמת לפי מכשיר: ישות מכשיר יצרה כמה חשבונות משתמשים חדשים.
  • מספר מוגזם של התראות לפי משתמש: דווח על מספר גדול של התראות אבטחה ממכשיר אנטי-וירוס או ממכשיר נקודת קצה (לדוגמה, החיבור נחסם, זוהתה תוכנה זדונית) לגבי ישות משתמש, והמספר היה גבוה בהרבה מהדפוסים ההיסטוריים. אלה אירועים שבהם השדה security_result.action UDM מוגדר לערך BLOCK.

זיהויים שמבוססים על מניעת אובדן נתונים

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

הנתונים הנדרשים לניתוח סיכונים עבור קטגוריית UEBA

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

אימות

כדי להשתמש באחד מסדרות הכללים האלה, צריך לאסוף נתוני יומן מ-Azure AD Directory Audit ‏ (AZURE_AD_AUDIT) או מ-Windows Event ‏ (WINEVTLOG).

ב-WINEVTLOG, צריך להגדיר את הגדרות איסוף הנתונים כך שיכללו את Windows Event IDs הבא ביומן האירועים Security Channel. האירועים האלה ממופים ישירות אל Event types (לדוגמה, USER_LOGIN או PROCESS_LAUNCH) שמשמשים את מנוע הזיהוי.

דרישות לגבי מזהה אירוע ב-Windows

סוג אירוע מזהה האירוע ב-Windows
USER_LOGIN 529, 4624, 4625, 4626, 4648, 4672, 4768, 4769, 4770, 4771, 4777, 4820, 4821, 4964
USER_CREATION 4720
NETWORK_CONNECTION 4096, 4097, 4321, 5156, 5632, 5633, 5157
GROUP_MODIFICATION 4728, 4729, 4732, 4733, 4735, 4737, 4745, 4746, 4747, 4750, 4751, 4752, 4755, 4756, 4757, 4760, 4761, 4762, 4764, 4784, 4785, 4786, 4787, 4788, 4791
PROCESS_LAUNCH 4688
PROCESS_OPEN 4663, 4670, 4691, 8002

ניתוח תנועה ברשת

כדי להשתמש באחד ממערכי הכללים האלה, צריך לאסוף נתוני יומן שמתעדים את פעילות הרשת. לדוגמה, ממכשירים כמו FortiGate ‏ (FORTINET_FIREWALL), Check Point ‏ (CHECKPOINT_FIREWALL), Zscaler ‏ (ZSCALER_WEBPROXY), CrowdStrike Falcon ‏ (CS_EDR) או Carbon Black ‏ (CB_EDR).

זיהויים שמבוססים על קבוצות של חברות להשוואה

כדי להשתמש באחד מסדרות הכללים האלה, צריך לאסוף נתוני יומן מ-Azure AD Directory Audit ‏ (AZURE_AD_AUDIT) או מ-Windows Event ‏ (WINEVTLOG).

פעולות חשודות

כללים בקבוצה הזו משתמשים בסוג נתונים שונה.

הגדרת כלל של יצירת חשבונות מוגזמת לפי מכשיר

כדי להשתמש בקבוצת הכללים הזו, צריך לאסוף נתוני יומן מ-Azure AD Directory Audit‏ (AZURE_AD_AUDIT) או מ-Windows Event‏ (WINEVTLOG).

התראות מוגזמות לפי כלל שהוגדר למשתמש

כדי להשתמש בקבוצת הכללים הזו, צריך לאסוף נתוני יומן שמתעדים פעילויות בנקודות קצה או נתוני ביקורת, כמו אלה שתועדו על ידי CrowdStrike Falcon‏ (CS_EDR), Carbon Black‏ (CB_EDR) או Azure AD Directory Audit‏ (AZURE_AD_AUDIT).

זיהויים שמבוססים על מניעת אובדן נתונים

כדי להשתמש באחד ממערכי הכללים האלה, צריך לאסוף נתוני יומן שמתעדים פעילויות של תהליכים וקבצים, כמו אלה שתועדו על ידי CrowdStrike Falcon‏ (CS_EDR), Carbon Black‏ (CB_EDR) או SentinelOne EDR‏ (SENTINEL_EDR).

יחסי תלות בין שדות

בקטע הזה מפורטים המדדים ושדות המאפיינים שבהם נעשה שימוש בכללי UEBA של Google SecOps.

יחסי תלות בין מדדים

בטבלה הבאה מפורטים המדדים ושאילתות החיפוש התואמות ב-UDM שמגדירות את האירועים שמשפיעים על כל מדד.

מדד שאילתת חיפוש ב-UDM לאירועים שמשפיעים על המדד
AUTH_ATTEMPTS_FAIL metadata.event_type = "USER_LOGIN"
AND security_result.action != "UNKNOWN_ACTION"
AND security_result.action != "ALLOW"
AUTH_ATTEMPTS_SUCCESS metadata.event_type = "USER_LOGIN"
AND (security_result.action = "UNKNOWN_ACTION" OR security_result.action = "ALLOW")
AUTH_ATTEMPTS_TOTAL metadata.event_type = "USER_LOGIN"
AND security_result.action >= "UNKNOWN_ACTION"
DNS_BYTES_OUTBOUND network.sent_bytes > 0
AND (network.ip_protocol = "UDP" AND target.port = 53)
OR (network.ip_protocol = "TCP" AND (target.port = 53 OR target.port=3000))
DNS_QUERIES_FAIL network.dns.id > 0
AND network.dns.response_code != 0
DNS_QUERIES_SUCCESS network.dns.id > 0
AND network.dns.response_code = 0
DNS_QUERIES_TOTAL network.dns.id > 0
FILE_EXECUTIONS_FAIL metadata.event_type = "PROCESS_LAUNCH"
AND security_result.action != "ALLOW"
FILE_EXECUTIONS_SUCCESS metadata.event_type = "PROCESS_LAUNCH"
AND security_result.action = "ALLOW"
FILE_EXECUTIONS_TOTAL metadata.event_type = "PROCESS_LAUNCH"
HTTP_QUERIES_FAIL network.http.method != ""
AND (network.http.response_code >= 400 OR network.http.response_code = 0)
HTTP_QUERIES_SUCCESS network.http.method != ""
AND network.http.response_code < 400
HTTP_QUERIES_TOTAL network.http.method != ""
NETWORK_BYTES_INBOUND network.received_bytes > 0
AND network.received_bytes < 1000000000000000
NETWORK_BYTES_OUTBOUND network.sent_bytes > 0
AND network.sent_bytes < 1000000000000000
NETWORK_BYTES_TOTAL (network.received_bytes > 0 AND network.received_bytes < 1000000000000000)
OR (network.sent_bytes > 0 AND network.sent_bytes < 1000000000000000)
NETWORK_FLOWS_INBOUND network.received_bytes > 0
AND network.received_bytes < 1000000000000000
NETWORK_FLOWS_OUTBOUND network.sent_bytes > 0
AND network.sent_bytes < 1000000000000000
NETWORK_FLOWS_TOTAL (network.received_bytes > 0 AND network.received_bytes < 1000000000000000)
OR (network.sent_bytes > 0 AND network.sent_bytes < 1000000000000000)
RESOURCE_READ_FAIL (metadata.event_type = "FILE_OPEN" OR metadata.event_type = "RESOURCE_READ")
AND security_result.action != "UNKNOWN_ACTION"
AND security_result.action != "ALLOW"
RESOURCE_READ_SUCCESS (metadata.event_type = "FILE_OPEN" OR metadata.event_type = "RESOURCE_READ")
AND (security_result.action = "UNKNOWN_ACTION" OR security_result.action = "ALLOW")
RESOURCE_READ_TOTAL (metadata.event_type = "FILE_OPEN" OR metadata.event_type = "RESOURCE_READ")
RESOURCE_WRITTEN_FAIL (metadata.event_type = "FILE_CREATION" OR metadata.event_type = "RESOURCE_CREATION")
AND security_result.action != "UNKNOWN_ACTION"
AND security_result.action != "ALLOW"
RESOURCE_WRITTEN_SUCCESS (metadata.event_type = "FILE_CREATION" OR metadata.event_type = "RESOURCE_CREATION")
AND (security_result.action = "UNKNOWN_ACTION" OR security_result.action = "ALLOW")
RESOURCE_WRITTEN_TOTAL (metadata.event_type = "FILE_CREATION" OR metadata.event_type = "RESOURCE_CREATION")

יחסי תלות בין מאפיינים

בטבלה הבאה מפורטים המאפיינים ואפשרויות השדות המתאימות ב-UDM שזמינות לסינון או לקיבוץ.

מאפיין אפשרויות שדה
מכשיר ראשי principal.asset.asset_id
principal.asset.hostname
principal.asset.ip
principal.asset.mac
principal.asset.product_object_id
מכשיר היעד target.asset.asset_id
target.asset.hostname
target.asset.ip
target.asset.mac
target.asset.product_object_id
משתמש ראשי principal.user.email_addresses
principal.user.employee_id
principal.user.product_object_id
principal.user.userid
principal.user.windows_sid
משתמש היעד target.user.email_addresses
target.user.employee_id
target.user.product_object_id
target.user.userid
target.user.windows_sid
שירות היעד target.application
כתובת IP של היעד target.ip
נתיב הקובץ של התהליך העיקרי principal.process.file.full_path
גיבוב (hash) של קובץ התהליך העיקרי principal.process.file.sha256
גיבוב הקובץ הראשי principal.file.sha256
המדינה העיקרית principal.ip_geo_artifact.location.country_or_region
קטגוריית אבטחה security_result.category
שם הארגון ברשת העיקרית principal.ip_geo_artifact.network.organization_name
שם הארגון ברשת היעד target.ip_geo_artifact.network.organization_name
גיבוב של אישור לקוח network.tls.client.certificate.sha256
סוג שאילתת DNS network.dns.questions.type
דומיין DNS network.dns_domain
סוכן משתמש HTTP network.http.user_agent
סוג האירוע metadata.event_type
מערכת הפעלה principal.platform

שינוי ההגדרות של ההתראות שמוחזרות על ידי קבוצות הכללים בקטגוריה הזו

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

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

דוגמה לכלל של ניתוח סיכונים לקטגוריית UEBA

בדוגמה הבאה מוצג איך ליצור כלל ליצירת זיהויים בכל שם מארח של ישות שציון הסיכון שלה גבוה מ-100:

rule EntityRiskScore {
  meta:
  events:
    $e1.principal.hostname != ""
    $e1.principal.hostname = $hostname

    $e2.graph.entity.hostname = $hostname
    $e2.graph.risk_score.risk_window_size.seconds = 86400 // 24 hours
    $e2.graph.risk_score.risk_score >= 100

    // Run deduplication across the risk score.
    $rscore = $e2.graph.risk_score.risk_score

  match:
    // Dedup on hostname and risk score across a 4 hour window.
    $hostname, $rscore over 4h

  outcome:
    // Force these risk score based rules to have a risk score of zero to
    // prevent self feedback loops.
    $risk_score = 0

  condition:
    $e1 and $e2
}

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

חלונות הסיכון האפשריים היחידים לכללים של ניקוד סיכון של ישות הם 24 שעות או 7 ימים (86,400 או 604,800 שניות בהתאמה). אם לא כוללים את גודל חלון הסיכון בכלל, הכלל יחזיר תוצאות לא מדויקות.

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

rule EntityContextAndRiskScore {
  meta:
  events:
    $log_in.metadata.event_type = "USER_LOGIN"
    $log_in.principal.hostname = $host

    $context.graph.entity.hostname = $host
    $context.graph.metadata.entity_type = "ASSET"

    $risk_score.graph.entity.hostname = $host
    $risk_score.graph.risk_score.risk_window_size.seconds = 604800

  match:
    $host over 2m

  outcome:
    $entity_risk_score = max($risk_score.graph.risk_score.normalized_risk_score)

  condition:
    $log_in and $context and $risk_score and $entity_risk_score > 100
}

המאמרים הבאים

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