שימוש בהצהרות if מקוננות ללוגיקה מורכבת יותר
אפשר להשתמש בהצהרות if גם בקטע outcome וגם בקטע events. אפשר גם להשתמש בהצהרות if בתוך סעיפי then else של הצהרת if אחרת. היכולת הזו מאפשרת לכם להוסיף לשאילתה לוגיקה מורכבת יותר.
התחביר הזה נתמך ב'כללים', ב'חיפוש' וב'לוחות בקרה'.
תחביר
if(BOOL_CLAUSE, THEN_CLAUSE, ELSE_CLAUSE)
דוגמאות לשימוש ב-if בתוך רכיב אחר
דוגמה לחיפוש: קטע התוצאה
בדוגמה הזו, ציון התוצאה מוקצה על סמך principal.hostname.
$nested_if.principal.hostname != ""
outcome:
$score = max(
if($nested_if.principal.hostname = /win-adfs/,
5,
if($nested_if.principal.hostname = /server/,
3,
if($nested_if.principal.hostname = /win-atomic/,
1,
0))))
דוגמה לחיפוש: קטע האירועים
בדוגמה הזו, כתובת ה-IP של הפלייסהולדר מוקצית ל-target.ip או ל-principal.ip כל עוד הם לא ריקים. אם ערכי ה-IP חסרים, המערכת מקצה את הערך no_valid_ip.
events:
$e.metadata.event_type = "NETWORK_CONNECTION"
$ip = if($e.target.ip != "",
$e.target.ip,
if($e.principal.ip != "",
$e.principal.ip,
"no_valid_ip"))
match:
$ip
דוגמה לכלל: if מוטמע בתוך הקטע outcome
rule nested_if_outcome_example {
meta:
events:
$e.metadata.event_type = "NETWORK_CONNECTION"
$e.principal.ip = $ip
match:
$ip over 5m
outcome:
$score = max(
if($e.principal.hostname = /win-adfs/,
5,
if($e.principal.hostname = /server/,
3,
if($e.principal.hostname = /win-atomic/,
1,
0))))
condition:
$e
}
דוגמה לכלל: if מוטמע בתוך הקטע events
rule nested_if_events_example {
meta:
events:
$e.metadata.event_type = "NETWORK_CONNECTION"
$ip = if($e.target.ip != "",
$e.target.ip,
if($e.principal.ip != "",
$e.principal.ip,
"no_valid_ip"))
match:
$ip over 5m
condition:
$e
}
מגבלה ידועה
ההצהרה if() היא פונקציה ב-YARA-L 2.0 וכפופה למגבלת העומק של הפונקציה, שהיא 20.
הבעיה עדיין לא נפתרה? קבלת תשובות מחברי הקהילה וממומחי Google SecOps.