שימוש בתחביר N OF עם משתני אירועים
במאמר הזה מוסבר איך להשתמש בתחביר N OF כדי לכתוב לוגיקה גמישה ומותנית בקטע condition של השאילתה.
התחביר N OF מאפשר לכם לשלב כמה תנאים, וכך לצמצם את המורכבות הכוללת של תחביר השאילתה:
- האפשרות הזו מאפשרת לציין שמספר מינימלי של ביטויים בוליאניים מתוך רשימה נתונה חייב להחזיר את הערך True.
- השימוש בביטויים רגולריים חוסך את הצורך לציין כל שילוב אפשרי, וכך מצמצם את הסיכוי לשגיאות ומאמץ.
תחביר של N OF
התחביר של הצהרת N OF הוא רשימה מופרדת בפסיקים של ביטויים בוליאניים, שמוצגים באופן הבא:
[expr1, expr2, … , exprN] כש[expr1, expr2, … , exprN]
בקטעים הבאים מוצגות כמה וריאציות של התחביר N OF.
אחד מהבאים
בדוגמה הבאה, הפונקציה בודקת אם לפחות ביטוי אחד ברשימה הוא True.
התוצאה זהה לחיבור כל הביטויים באמצעות or.
condition:
ANY OF [$e1, #e2 > 5, $outcome1 = "FAILED"]
ALL OF
אם כל הביטויים ברשימה הבאה נכונים, הדוגמה נכונה. זה כמו לחבר את כל הביטויים באמצעות and.
condition:
ALL OF [$e1, $e2, $outcome1 = "SUCCESS"]
N מתוך X
הפונקציה מחזירה את הערך True אם לפחות N ביטויים מהרשימה הם True.
condition:
2 of [$e1, $e2 > 0, $e3, arrays.contains($outcome_ips, "1.2.3.4")]
כלל לדוגמה: סימון גישה לקובץ רגיש
הכלל הבא מסמן משתמש אם הוא נכנס לחשבון בהצלחה ($e1). לאחר מכן, הכלל בודק אם הסשן עומד גם באחד משני הקריטריונים: גישה לקובץ רגיש ($e2) או שמספר הקבצים הרגישים הייחודיים שהייתה אליהם גישה גדול מ-3.
rule MultiEventNOf {
meta:
author = "google-secops"
description = "Detects user login followed by sensitive file access or multiple sensitive files."
events:
$e1.principal.user.userid = $user
$e1.metadata.event_type = "USER_LOGIN"
$e2.principal.user.userid = $user
$e2.metadata.event_type = "FILE_OPEN"
re.regex($e2.target.file.full_path, `^/cns/sensitive/`)
match:
$user over 1h
outcome:
$sensitive_file_count = count_distinct($e2.target.file.full_path)
condition:
$e1 and ANY OF [$e2, $sensitive_file_count > 3]
}
דוגמה לחיפוש: סימון גישה לקובץ רגיש
בדוגמה הבאה אפשר לראות איך אפשר לשנות את הפורמט של הכלל לדוגמה לשאילתת חיפוש.
$e1.principal.user.userid = $user
$e1.metadata.event_type = "USER_LOGIN"
$e2.principal.user.userid = $user
$e2.metadata.event_type = "FILE_OPEN"
re.regex($e2.target.file.full_path, `^/cns/sensitive/`)
match:
$user over 1h
outcome:
$sensitive_file_count = count_distinct($e2.target.file.full_path)
condition:
$e1 and ANY OF [$e2, $sensitive_file_count > 3]
מגבלות ידועות
קיום אירוע נדרש: ביטויים בתחביר N OF לא יכולים להיות בלתי מוגבלים. התנאי צריך להיות שהאירוע קיים כדי שהסעיף יהיה True (לדוגמה,
$e1או#e1 > 0).שילוב של סוגי משתנים: אי אפשר לשלב משתנים שאינם משתני UDM עם משתני אירוע UDM באותה רשימה של N OF.
הגבלת חלונות: אי אפשר להשתמש בחלונות עוקבים (tumbling window) עם תחביר N OF.
מה השלב הבא?
הבעיה עדיין לא נפתרה? קבלת תשובות מחברי הקהילה וממומחי Google SecOps.