תחביר של קטע התאמה
ב-YARA-L 2.0, הקטע match מספק את המנגנון לקורלציה של כמה אירועים. הוא מגדיר את הלוגיקה לקיבוץ אירועים לזיהוי יחיד על ידי קישור מאפיינים משותפים, כמו משתמשים, כתובות IP או גיבובים של קבצים, בתוך גבול זמני ספציפי.
משתמשים בקטע match בתרחישי השימוש הבאים:
- לקשר שני אירועים שונים או יותר בתוך כלל.
- צבירת נתונים בחיפוש ובמרכזי הבקרה, כמו ספירת ניסיונות כניסה שנכשלו בפרק זמן מסוים.
הגדרת קריטריונים למתאם
משתמשים בו כדי להגדיר את הקריטריונים של המתאם הזה על ידי ציון הפרטים הבאים:
שדות (מפתחות) לקיבוץ: משתנים (כמו
$userאו$ip) שחייבים להיות להם ערכים זהים באירועים (מוגדרים בקטעevents) כדי להפעיל התאמה.הגבלת זמן: חלון משך הזמן שבו האירועים המקובצים צריכים להתרחש כדי שהכלל או הצבירה יתקיימו. בכללים, ההגדרה הזו מגדירה את חלון הזיהוי. בחיפוש ובמרכזי בקרה, ההגדרה הזו מגדירה את חלון הצבירה או המתאם.
השוואה בין הדרישות של התכונות
בטבלה הבאה מפורטים ההבדלים בין כללים לחיפוש ובין מרכזי בקרה.
| תכונה | דרישות הכללים | תמיכה בחיפוש ובמרכזי בקרה |
|---|---|---|
| סוגי משתנים | חובה להשתמש ב-placeholders שמוגדרים בקטע events. |
יש תמיכה גם בפלייסהולדרים וגם בשדות UDM ישירים. |
| חלון זמן | הגדרת גבול הזיהוי. | ההגדרה קובעת את צבירת הנתונים או את קבוצת המתאם. |
| תחביר | over <number><m/h/d> (לדוגמה, 10m, 2h, 1d) |
over <number><m/h/d> |
| מגבלות | מינימום: 1m / מקסימום: 48h |
מינימום: 1m / מקסימום: 48h |
סוגי חלונות נתמכים
ב-YARA-L 2.0 יש התנהגויות שונות של חלונות שקובעות איך הזמן מחולק ואיך האירועים מקובצים. אפשר לקבץ שדות של אירועים ומשתני placeholder בקטע match לפי גרנולריות זמן שצוינה באמצעות אחד מהחלונות הנתמכים הבאים.
פרטים על סוגי החלונות שנתמכים ב-YARA-L 2.0 זמינים במאמר הלוגיקה של חלונות ב-YARA-L 2.0.
הסבר על הגבול הזמני
בקטע match האירועים מחולקים לקבוצות על סמך מפתחות הקיבוץ. משך הזמן שצוין מגדיר את הגבול הזמני של כל קבוצה:
- הכללה: רק אירועים שמתרחשים בתוך חלון הזמן מועברים להערכה של
conditionעבור ההתאמה הספציפית הזו. - החרגה: המערכת מתעלמת מאירועים שמתרחשים מחוץ לחלון הזמנים של קבוצת ההתאמה הספציפית, כדי למנוע מאירועים לא קשורים להפעיל התאמה חיובית כוזבת.
ערכים אפסיים בקטע match
Google SecOps מסנן באופן מרומז ערכים אפסיים לכל ה-placeholders שמשמשים בקטע match ("" למחרוזת, 0 למספרים, false לערכים בוליאניים, הערך במיקום 0 לסוגים ממוספרים).
דוגמה: סינון של ערכים אפסיים
בדוגמה הבאה מוצגות שאילתות שמסננות את ערכי האפס.
rule ZeroValuePlaceholderExample {
events:
// Because $host is used in the match section, the query behaves
// as if the following predicate was added to the events section:
// $host != ""
$host = $e.principal.hostname
// Because $otherPlaceholder was not used in the match,
// there is no implicit filtering of zero values for $otherPlaceholder.
$otherPlaceholder = $e.principal.ip
match:
$host over 5m
condition:
$e
}עם זאת, אם משתמשים בפלייסהולדר בפונקציה, השאילתות לא מסננות באופן אוטומטי את ערכי האפס של הפלייסהולדרים שבהם נעשה שימוש בקטע match.
כדי להשבית את הסינון המרומז של ערכים אפסיים, אפשר להשתמש באפשרות allow_zero_values בקטע options. האפשרות allow_zero_values זמינה רק ב'כללים'.
דוגמה: אפשרות להזין ערכים אפסיים
בדוגמה הבאה מוצגות שאילתות שלא מסננות באופן מרומז את ערכי האפס של placeholders שמשמשים בקטע match:
rule AllowZeroValuesExample {
events:
// Because allow_zero_values is set to true, there is no implicit filtering
// of zero values for $host.
$host = $e.principal.hostname
// Because $otherPlaceholder was not used in the match,
// there is no implicit filtering of zero values for $otherPlaceholder.
$otherPlaceholder = $e.principal.ip
match:
$host over 5m
condition:
$e
options:
allow_zero_values = true
}המאמרים הבאים
כדי להמשיך את הלוגיקה של YARA-L או להתעמק בפונקציות מתקדמות של שאילתות, אפשר לעיין במקורות המידע הבאים:
תחביר ולוגיקה
מקורות ודוגמאות
- ביטויים, אופרטורים ומבנים שמשמשים ב-YARA-L 2.0
- פונקציות ב-YARA-L 2.0
- יצירת כללי זיהוי מורכבים
- דוגמאות: שאילתות YARA-L 2.0
הבעיה עדיין לא נפתרה? קבלת תשובות מחברי הקהילה וממומחי Google SecOps.