תחביר של קטע התאמה
ב-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 זמינה רק ב'כללים'.
דוגמה: לאפשר ערכי אפס
הדוגמה הבאה ממחישה שאילתות שלא מסננות באופן משתמע את ערכי האפס של פלייסהולדרים שמשמשים בקטע 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.