שימוש בתחביר 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.