ליצור קורלציה בין נתונים באמצעות שאילתות איחוד חיצוניות (outer join)

נתמך ב:

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

בניגוד לצירופים רגילים (פנימיים), שדורשים רשומות תואמות בשני מקורות הנתונים, צירוף חיצוני מאחזר את כל הרשומות מצד אחד של הצירוף, גם אם אין רשומות תואמות בצד השני. שדות לא תואמים מהצד השני בדרך כלל ממולאים בערך null. כך לא תאבדו נתונים שאין להם התאמה.

איך פועלים איחודים חיצוניים

הקונספט של איחודים חיצוניים ב-YARA-L 2.0 זהה לאיחודים חיצוניים ב-SQL סטנדרטי:

  • הצירוף החיצוני השמאלי שומר את כל הרשומות מהצד השמאלי של הצירוף.

  • הצירוף החיצוני הימני שומר את כל הרשומות מהצד הימני של הצירוף.

תחביר של Outer join (‏left join ו-right join) נתמך בכל השאילתות – גם עם תנאי match וגם בלעדיו. ההתנהגות הבסיסית של outer join זהה בחיפוש, במרכזי הבקרה ובכללי הזיהוי, אבל התחביר שונה בהתאם להקשר:

  • חיפוש ומרכזי בקרה: משתמשים במילות המפתח המפורשות left join או right join בקטע events.

  • כללי זיהוי: מגדירים את קשר הצירוף באמצעות סימן שוויון (=) בקטע events ומציינים תנאי לא מוגבל בקטע condition (לדוגמה, #data_table >= 0 לצירוף חיצוני שמאלי או #data_table = 0 להחרגה של צירוף אנטי).

הסבר על איחוד חיצוני שמאלי (left outer join)

בצירוף חיצוני שמאלי (או צירוף שמאלי) נשמרות כל הרשומות ממקור הנתונים בצד השמאלי (השמור) של הצירוף, גם אם משתמשים במילת המפתח left join בחיפוש וגם אם משתמשים בתנאי לא מוגבל (#data_table >= 0) בכלל זיהוי.

  • אם לרשומה מהצד השמאלי אין התאמה בטבלת הנתונים או האירועים הימנית, השדות מהצד הימני מוחזרים כ-null.

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

דוגמה ל-left join בין אירועים

בדוגמה הבאה מוצג צירוף חיצוני שמאלי כדי לקשר בין אירועי התחברות של משתמשים לבין אירועי חיבור לרשת שמתרחשים באותו מארח. הצירוף השמאלי מבטיח שכל האירועים של USER_LOGIN יישמרו בקבוצת התוצאות. אם נמצא אירוע NETWORK_CONNECTION ($e2) תואם, הנתונים שלו מצורפים. אם לא נמצאה התאמה, השדות של $e2 הם null.


$e1.metadata.event_type = "USER_LOGIN"
$e2.metadata.event_type = "NETWORK_CONNECTION"
left join $e1.principal.hostname = $e2.principal.hostname

הגדרת האירוע השמאלי

השאילתה הבאה מגדירה את הצד השמאלי של הצירוף ($e1), שהוא קבוצת האירועים שנשמרת בתוצאה הסופית:

$e1.metadata.event_type = "USER_LOGIN"

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

סוג אירוע שם המארח הראשי כתובת IP
USER_LOGIN workstation-01 192.168.1.101
USER_LOGIN laptop-hr-02 192.168.1.102
USER_LOGIN server-db-03 10.0.0.50
USER_LOGIN kiosk-4 192.168.1.104

הגדרת האירוע הנכון

השאילתה הבאה מגדירה את הצד הימני של הצירוף ($e2), שהוא קבוצת האירועים שמותאמת לאירועים בצד השמאלי:

$e2.metadata.event_type = "NETWORK_CONNECTION"

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

סוג אירוע שם המארח הראשי כתובת IP
NETWORK_CONNECTION workstation-01 192.168.1.101
NETWORK_CONNECTION laptop-hr-02 192.168.1.101
NETWORK_CONNECTION kiosk-4 203.0.113.3

הצטרפות לאירועים

עם קטע התאמה

הדוגמה הבאה ממחישה שאילתת התאמה באמצעות צירוף חיצוני שמאלי בשדה principal.hostname:


  $e1.metadata.event_type = "USER_LOGIN"

  $e2.metadata.event_type = "NETWORK_CONNECTION"

  left join $e1.principal.hostname = $e2.principal.hostname

  $host = $e1.principal.hostname

  match:
    $host over 5m

  • הצירוף החיצוני השמאלי מבטיח שכל אירוע USER_LOGIN ($e1) ייכלל בקבוצת התוצאות הסופית.

  • הפלייסהולדר $host מקבל את הערך מ-$e1.principal.hostname. הצירוף החיצוני השמאלי מבטיח את הנוכחות של האירוע $e1, ומוודא שהמשתנה ‎$host תמיד מאוכלס לצורך צבירה.

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

תוצאת צירוף

הנתונים שמתקבלים מציגים את השילוב של שני האירועים. כל הרשומות מהטבלה השמאלית ($e1) נשמרות, והשדות מהטבלה הימנית ($e2) מוגדרים כ-null כשלא נמצא שם מארח תואם (לדוגמה, בשביל server-db-03).

סוג האירוע ($e1) שם המארח הראשי ($host) כתובת IP‏ ($e1) סוג האירוע ($e2) כתובת IP‏ ($e2) סטטוס התאמה
USER_LOGIN workstation-01 192.168.1.101 NETWORK_CONNECTION 192.168.1.101 נמצאה התאמה
USER_LOGIN laptop-hr-02 192.168.1.102 NETWORK_CONNECTION 192.168.1.101 נמצאה התאמה
USER_LOGIN server-db-03 10.0.0.50 null null אין התאמה
USER_LOGIN kiosk-4 192.168.1.104 NETWORK_CONNECTION 203.0.113.3 נמצאה התאמה

דוגמאות לשאילתות של איחוד שמאלי (left join)

בקטע הזה מוצגות דוגמאות לשאילתות של LEFT JOIN.

הצטרפות עם תנאי התאמה

  • ישות אירוע

    
    $e1.metadata.event_type = "NETWORK_CONNECTION"
    $g1.graph.metadata.entity_type = "ASSET"
    left join $e1.principal.asset.hostname = $g1.graph.entity.asset.hostname
    $host = $e1.principal.asset.hostname
    
    match:
      $host over 5m
    
    
  • Event-datatable

    
    $host = $e1.principal.hostname
    left join $e1.principal.hostname = %all_dt_column_types.hostname
    
    match:
      $host by 5m
    

צירופים בלי תנאי התאמה

  • אירוע-אירוע

    
    $e1.metadata.event_type = "USER_LOGIN"
    $e1.principal.ip = "114.241.96.87"
    $e2.metadata.event_type = "NETWORK_CONNECTION"
    left join $e1.principal.hostname = $e2.principal.hostname
    
    
  • ישות אירוע

    
    $e1.metadata.event_type = "NETWORK_CONNECTION"
    $g1.graph.metadata.entity_type = "ASSET"
    left join $e1.principal.asset.hostname = $g1.graph.entity.asset.hostname
    $host = $e1.principal.asset.hostname
    
    
  • Event-datatable

    
    $host = $e1.principal.hostname
    left join $e1.principal.hostname = %all_dt_column_types.hostname
    
    

איחודים שמאליים (left join) בכללי זיהוי

בכללי זיהוי, לא משתמשים במילת המפתח left join בקטע events. במקום זאת, מקשרים אירוע UDM לטבלת נתונים או לאירוע משני בקטע events באמצעות שוויון (=), ושולטים בהתנהגות של הצירוף בקטע condition:

סוג האיחוד (join) הקטע events הקטע condition התנהגות באירועים ללא התאמה
איחוד פנימי (inner join) $key = %data_table.key $e and #data_table > 0 אירועים ללא התאמה נמחקים מזרם הזיהוי.
איחוד חיצוני שמאלי (העשרה) $key = %data_table.key $e and #data_table >= 0 כל האירועים ב-$e נשמרים, ושדות בטבלת הנתונים שלא תואמים הם null.
Anti-join (החרגה) $key = %data_table.key $e and #data_table = 0 התראה מופעלת רק כשמפתח האירוע לא קיים בטבלת הנתונים.

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

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

הגדרת טבלת הנתונים

טבלת הנתונים corporate_asset_directory מכילה את השורות הבאות, כאשר hostname היא עמודת המפתח:

hostname (מפתח) country_code country_name asset_tier owner_dept risk_score
ES01-W10 ES Spain TIER_3_WORKSTATION Finance 20
CH02-SRV CH Switzerland TIER_1_CRITICAL Engineering 80
US03-LAP US United States TIER_2_PRODUCTION Executive 50

השוואה בין תנאי inner join לבין תנאי left outer join

  • ‫Inner join (#corporate_asset_directory > 0): אם מספר טבלאות הנתונים גדול מ-0, מתבצעת פעולת inner join. אם אירוע מגיע ממארח לא מנוהל שלא מופיע ב-corporate_asset_directory (לדוגמה, unmanaged-byod-09), האירוע מסונן ולא נוצר זיהוי:

    rule inner_join_drops_unmatched_events {
      meta:
        author = "Google SecOps"
        description = "Inner join example: drops events whose hostname is not in the data table."
    
      events:
        $e.principal.hostname != ""
        $hostname = $e.principal.hostname
    
        // Direct inner join against data table
        $hostname = %corporate_asset_directory.hostname
    
      match:
        $hostname over 1h
    
      outcome:
        $country = array_distinct(%corporate_asset_directory.country_code)
        $asset_tier = array_distinct(%corporate_asset_directory.asset_tier)
        $risk_score = max(%corporate_asset_directory.risk_score)
    
      condition:
        $e and #corporate_asset_directory > 0
    }
    
  • איחוד חיצוני שמאלי (#corporate_asset_directory >= 0): שימוש בתנאי הלא מוגבל #corporate_asset_directory >= 0 מבצע איחוד חיצוני שמאלי. כל האירועים ב-$e נשמרים גם אם שם המארח לא תואם לשורה ב-corporate_asset_directory.

    אם אירוע לא תואם לשורה בטבלת הנתונים, ההפניות אל %corporate_asset_directory.column מקבלות את הערך null. בקטע outcome, משתמשים ב-strings.coalesce לעמודות של מחרוזות ובביטויים מותנים של if לעמודות מספריות כדי להקצות ערכי ברירת מחדל חלופיים:

    rule left_outer_join_enrichment {
      meta:
        author = "Google SecOps"
        description = "Left outer join using #dt >= 0: preserves all events and populates enrichment fields."
    
      events:
        $e.principal.hostname != ""
        $hostname = $e.principal.hostname
    
        // Outer join equality binding
        $hostname = %corporate_asset_directory.hostname
    
      match:
        $hostname over 1h
    
      outcome:
        $country = array_distinct(strings.coalesce(%corporate_asset_directory.country_code, "UNKNOWN"))
        $asset_tier = array_distinct(strings.coalesce(%corporate_asset_directory.asset_tier, "UNMANAGED"))
        $risk_score = max(if(%corporate_asset_directory.risk_score > 0, %corporate_asset_directory.risk_score, 0))
    
      condition:
        $e and #corporate_asset_directory >= 0
    }
    

תוצאת ההצטרפות לכלל

בטבלה הבאה מוצגת השוואה בין ערכי התוצאות של מארחים תואמים ולא תואמים כשמשתמשים ב-#corporate_asset_directory >= 0:

שם המארח הראשי ($hostname) סטטוס ההתאמה של טבלת הנתונים $country $asset_tier $risk_score
CH02-SRV נמצאה התאמה ["CH"] ["TIER_1_CRITICAL"] 80
ES01-W10 נמצאה התאמה ["ES"] ["TIER_3_WORKSTATION"] 20
unmanaged-byod-09 אין התאמה (null הוחלפו בברירות מחדל) ["UNKNOWN"] ["UNMANAGED"] 0

דוגמאות לכללים של איחוד שמאלי בלעדי (החרגה)

אפשר להשתמש ב-left outer join עם תנאי של ספירה אפס (#data_table = 0) כדי לבצע left anti-join. התבנית הזו מונעת זיהויים כשאירוע תואם לטבלת נתוני החרגה, ומפעילה התראה רק כשאין התאמה.

  • החרגה של עמודה אחת (#authorized_scanners_exclusion = 0): הכלל הבא מאחד את $e.principal.hostname עם טבלת נתונים של authorized_scanners_exclusion, ומופעל רק כשהמארח לא נמצא בטבלה:

    rule anti_join_scanner_exclusion {
      meta:
        author = "Google SecOps"
        description = "Anti-join exclusion using #dt = 0: triggers only if the host is not in the authorized scanners table."
    
      events:
        $e.principal.hostname != ""
        $hostname = $e.principal.hostname
    
        // Bind join key to data table
        $hostname = %authorized_scanners_exclusion.hostname
    
      match:
        $hostname over 1h
    
      outcome:
        $total_sent_bytes = sum($e.network.sent_bytes)
    
      condition:
        $e and #authorized_scanners_exclusion = 0
    }
    

    לחלופין, אפשר לספור את השורות בטבלת הנתונים התואמים בקטע outcome ($scanner_match_count = count(%authorized_scanners_exclusion.hostname)) ולהעריך את $e and $scanner_match_count = 0 בקטע condition:

    rule anti_join_outcome_count {
      meta:
        author = "Google SecOps"
        description = "Anti-join via outcome variable count check: triggers when scanner match count is zero."
    
      events:
        $e.principal.hostname != ""
        $hostname = $e.principal.hostname
    
        $hostname = %authorized_scanners_exclusion.hostname
    
      match:
        $hostname over 1h
    
      outcome:
        $total_sent_bytes = sum($e.network.sent_bytes)
        $scanner_match_count = count(%authorized_scanners_exclusion.hostname)
    
      condition:
        $e and $scanner_match_count = 0
    }
    
  • החרגה של קבוצת שורות עם כמה עמודות (#multi_column_admin_exceptions = 0): כדי להחריג אירועים רק כששילוב ספציפי של כמה שדות תואם לאותה שורה בטבלת נתוני החריגות, צריך לקשר כל שדה אירוע לעמודה התואמת שלו בקטע events ולציין את הערך #data_table = 0 בקטע condition:

    rule multi_column_tuple_exclusion {
      meta:
        author = "Google SecOps"
        description = "Multi-column row-tuple anti-join: excludes activity matching composite (origin_ip, target_ip, username, action) rows."
    
      events:
        // Bind event fields to match variables
        $e.principal.ip = $src_ip
        $e.target.ip = $dst_ip
        $e.principal.user.userid = $user
        $e.metadata.product_event_type = $action
    
        // Multi-column equality against the same data table row
        $src_ip = %multi_column_admin_exceptions.origin_ip
        $dst_ip = %multi_column_admin_exceptions.target_ip
        $user = %multi_column_admin_exceptions.username
        $action = %multi_column_admin_exceptions.action
    
      match:
        $src_ip, $dst_ip, $user, $action over 5m
    
      outcome:
        $event_count = count($e.metadata.id)
    
      condition:
        $e and #multi_column_admin_exceptions = 0
    }
    

איחוד חיצוני ימני (right outer join)

right outer join (או right join) שומר את כל הרשומות ממקור הנתונים בצד ימין של מילת המפתח right join.

  • אם לרשומה מהאירוע הימני אין התאמה באירוע השמאלי, השדות מהאירוע השמאלי מוחזרים כ-null.

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

דוגמה לצירוף ימני של אירוע לאירוע

בדוגמה הבאה מוצג right outer join שנועד לקשר בין אירועי התחברות של משתמשים לבין אירועי חיבור לרשת שמתרחשים באותו מארח. הפונקציה right join מבטיחה שכל האירועים של NETWORK_CONNECTION יישמרו בקבוצת התוצאות. אם נמצא אירוע USER_LOGIN תואם, הנתונים שלו מצורפים. אם לא נמצאה התאמה, השדות של $e1 הם null.


$e1.metadata.event_type = "USER_LOGIN"

$e2.metadata.event_type = "NETWORK_CONNECTION"

right join $e1.principal.hostname = $e2.principal.hostname

הגדרת אירוע עזיבה

השאילתה הבאה מגדירה את הצד השמאלי של הצירוף ($e1), שהוא קבוצת האירועים האופציונלית בתוצאה הסופית:


$e1.metadata.event_type = "USER_LOGIN"

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

סוג אירוע שם המארח הראשי כתובת IP
USER_LOGIN workstation-01 192.168.1.101
USER_LOGIN laptop-hr-02 192.168.1.102
USER_LOGIN server-db-03 10.0.0.50

הגדרת האירוע הנכון

השאילתה הבאה מגדירה את הצד הימני של הצירוף ($e2), שהוא קבוצת האירועים שנשמרת בתוצאה הסופית.


$e2.metadata.event_type = "NETWORK_CONNECTION"

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

סוג אירוע שם המארח הראשי כתובת IP
NETWORK_CONNECTION workstation-01 192.168.1.101
NETWORK_CONNECTION laptop-hr-02 192.168.1.101
NETWORK_CONNECTION vm-unauth-05 203.0.113.3

הצטרפות לאירועים

בדוגמה הבאה מוצגת שאילתת התאמה עם צירוף חיצוני ימני בשדה principal.hostname:


$e1.metadata.event_type = "USER_LOGIN"

$e2.metadata.event_type = "NETWORK_CONNECTION"

right join $e1.principal.hostname = $e2.principal.hostname

$host = $e1.principal.hostname

match:
  $host over 5m

  • ה-right outer join מבטיח שכל אירוע NETWORK_CONNECTION ($e2) ייכלל בקבוצת התוצאות הסופית.

  • הערך של ה-placeholder‏ $host מוקצה מ-$e2.principal.hostname. הצירוף החיצוני הימני מבטיח את הנוכחות של אירוע $e2, ומוודא שהמשתנה $host תמיד מאוכלס לצורך צבירה.

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

תוצאת צירוף

קבוצת הנתונים שנוצרת מציגה את השילוב של שני האירועים. כל הרשומות מהטבלה הימנית ($e2) נשמרות, והשדות מהטבלה השמאלית ($e1) מוגדרים כ-null כשלא נמצא שם מארח תואם (לדוגמה, vm-unauth-05).

סוג האירוע ($e1) שם המארח הראשי ($e1) כתובת IP‏ ($e1) סוג האירוע ($e2) שם המארח הראשי ($host) כתובת IP‏ ($e2) סטטוס התאמה
USER_LOGIN workstation-01 192.168.1.101 NETWORK_CONNECTION workstation-01 192.168.1.101 נמצאה התאמה
USER_LOGIN laptop-hr-02 192.168.1.102 NETWORK_CONNECTION laptop-hr-02 192.168.1.101 נמצאה התאמה
null null null NETWORK_CONNECTION vm-unauth-05 203.0.113.4 אין התאמה

שאילתות לדוגמה של RIGHT JOIN

בקטע הזה יש דוגמאות לשאילתות של RIGHT JOIN.

הצטרפות עם תנאי התאמה

  • אירוע-אירוע

    
    $e1.metadata.event_type = "USER_LOGIN"
    
    $e2.metadata.event_type = "NETWORK_CONNECTION"
    
    right join $e1.principal.hostname = $e2.principal.hostname
    
    $host = $e2.principal.hostname
    
    match:
      $host over 5m
    
    
  • אירוע-ישות

    
    $e1.metadata.event_type = "NETWORK_CONNECTION"
    
    $g1.graph.metadata.entity_type = "ASSET"
    
    right join $g1.graph.entity.asset.hostname = $e1.principal.asset.hostname
    
    $host = $e1.principal.asset.hostname
    
    match:
      $host over 5m
    
    
  • Datatable-event

    
    $host = $e1.principal.hostname
    
    right join %all_dt_column_types.hostname = $e1.principal.hostname
    
    match:
      $host by 5m
    
    

צירופים בלי תנאי התאמה

  • אירוע-אירוע

    
    $e1.metadata.event_type = "USER_LOGIN"
    
    $e1.principal.ip = "114.241.96.87"
    
    $e2.metadata.event_type = "NETWORK_CONNECTION"
    
    right join $e1.principal.hostname = $e2.principal.hostname
    
    
  • אירוע-ישות

    
    $e1.metadata.event_type = "NETWORK_CONNECTION"
    
    $g1.graph.metadata.entity_type = "ASSET"
    
    right join $g1.graph.entity.asset.hostname = $e1.principal.asset.hostname
    
    $host = $e1.principal.asset.hostname
    
    
  • Datatable-event

    
    $host = $e1.principal.hostname
    
    right join %all_dt_column_types.hostname = $e1.principal.hostname
    
    

מגבלות

כשיוצרים איחודים חיצוניים, חשוב להביא בחשבון את המגבלות הבאות:

  • אין תמיכה בצירוף חיצוני מלא (צירוף שמאלי וצירוף ימני ביחד).

  • טווח התאריכים של השאילתה לשילובים ללא התאמה מוגבל ל-14 ימים לכל היותר.

  • אי אפשר לחבר ישירות בין שני מקורות לפי הקשר (לדוגמה, ישות ישירות לטבלת נתונים).

  • האירוע הראשי של Unified Data Model ‏ (UDM) חייב להיות הצד השמור של ה-outer join. השאילתה לא תקינה אם האירוע הראשי נמצא בצד שניתן להגדיר כ-null.

    • האיחוד של אירוע וישות חייב להיות איחוד שמאלי. כך האירוע ($e1) נשמר בצורה נכונה.

    • צירוף של ישות ואירוע חייב להיות צירוף ימני. כך האירוע ($e1) נשמר בצורה נכונה.

    הדוגמה הבאה לא תקינה כי אירוע ה-UDM‏ ($e1) נמצא בצד שמאל, אבל ה-right join שומר על הצד הימני ($g1), וזה מפר את הכלל שצריך לשמור על אירוע ה-UDM:

    
    // Invalid query
    $e1.metadata.event_type = "NETWORK_CONNECTION"
    $g1.graph.metadata.entity_type = "ASSET"
    right join $e1.principal.asset.hostname = $g1.graph.entity.asset.hostname
    
    
  • מילות המפתח המפורשות left join ו-right join בקטע events לא נתמכות בכללי זיהוי, אלא רק בחיפושים ב-YARA-L ובלוחות בקרה. כדי לבצע איחוד חיצוני שמאלי או איחוד אנטי בכלל זיהוי, משתמשים בתנאי לא מוגבל כמו #data_table >= 0 או #data_table = 0 בקטע condition. למידע נוסף, קראו את המאמר Left joins בכללי זיהוי.

שיטות מומלצות

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

לדוגמה, שאילתה רחבה כמו:


$e1.metadata.event_type = "USER_LOGIN"
$e2.metadata.event_type = "NETWORK_CONNECTION"
right join $e1.principal.hostname = $e2.principal.hostname

כדי לבצע אופטימיזציה, אפשר להוסיף קריטריונים ספציפיים:


$e1.metadata.event_type = "USER_LOGIN"
$e1.principal.ip = "121.121.121.121"
$e1.principal.user.userid = "alex"
$e2.metadata.event_type = "NETWORK_CONNECTION"
$e2.src.hostname = "altostrat.com"
$e1.principal.hostname = $e2.principal.hostname

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