ביטויים, אופרטורים ומבנים אחרים

נתמך ב:

במסמך הזה יש מידע שיעזור לכם ליצור כללים ושאילתות של YARA-L באמצעות ביטויים.

ביטויים בוליאניים

ביטויים בוליאניים הם ביטויים עם סוג בוליאני, שכולל ביטויי השוואה, ביטויי פונקציות וביטויים של רשימת הפניות או של טבלת נתונים. אפשר להשתמש בביטויים בוליאניים בקטע events או outcome בכלל או בשאילתה של YARA-L.

ביטויי השוואה

ביטויי השוואה הם ביטויים שמחילים אופרטור השוואה על שני ביטויים. ביטויים יכולים להיות שדות של אירועים, משתנים, ערכים מילוליים או ביטויי פונקציות.

דוגמה: ביטויי השוואה

$e.source.hostname = "host1234"
$e.source.port < 1024
1024 < $e.source.port
$e1.source.hostname != $e2.target.hostname
$e1.metadata.collected_timestamp.seconds > $e2.metadata.collected_timestamp.seconds
$port >= 25
$host = $e2.target.hostname
"google-test" = strings.concat($e.principal.hostname, "-test")
"email@google.org" = re.replace($e.network.email.from, "com", "org")

ביטויי פונקציות

חלק מביטויי הפונקציות מחזירים ערך בוליאני, שאפשר להשתמש בו כפרדיקט נפרד בקטע events, למשל:

re.regex()

net.ip_in_range_cidr()

דוגמה: ביטויי פונקציה

re.regex($e.principal.hostname, `.*\.google\.com`)
net.ip_in_range_cidr($e.principal.ip, "192.0.2.0/24")

רשימת הפניות או טבלת נתונים

אפשר להשתמש ברשימות הפניות או בטבלאות נתונים בקטעים events או outcome. מידע נוסף על התנהגות ועל תחביר של רשימות הפניה וטבלאות נתונים זמין במאמרים בנושא רשימות הפניה ושימוש בטבלאות נתונים.

דוגמה: תחביר לרשימות הפניות

בדוגמאות הבאות מוצג התחביר של סוגים שונים של רשימות הפניה בשאילתה:

// STRING reference list
$e.principal.hostname in %string_reference_list

// Regular expression reference list
$e.principal.hostname in regex %regex_reference_list

// CIDR reference list
$e.principal.ip in cidr %cidr_reference_list

דוגמה: תחביר לטבלאות נתונים

// STRING data table
$e.target.hostname in %data_table_name.column_name

// Regular expression data table
$e.target.hostname in regex %regex_table_name.column_name

// CIDR data table
$e.principal.ip in cidr %cidr_table_name.column_name

דוגמה: שימוש ב-not וב-nocase בתחביר של רשימות הפניות

// Exclude events whose hostnames match substrings in my_regex_list.
not $e.principal.hostname in regex %my_regex_list

// Event hostnames must match at least 1 string in my_string_list (case insensitive).
$e.principal.hostname in %my_string_list nocase

האופרטור nocase תואם לרשימות STRING ולרשימות REGEX.

מטעמי ביצועים, יש מגבלות על השימוש ברשימת ההפניות ובטבלת הנתונים:

  • מספר ההצהרות המקסימלי של in בשאילתה, עם או בלי אופרטורים מיוחדים: 10
  • מספר מקסימלי של הצהרות in עם האופרטור regex: 5
  • מספר מקסימלי של הצהרות in עם האופרטור cidr: 5

ביטויים לוגיים

אפשר להשתמש באופרטורים הלוגיים and ו-or בקטע events.

דוגמה: ביטויים לוגיים

$e.metadata.event_type = "NETWORK_DNS" or $e.metadata.event_type = "NETWORK_DHCP"
($e.metadata.event_type = "NETWORK_DNS" and $e.principal.ip = "192.0.2.12") or ($e.metadata.event_type = "NETWORK_DHCP" and $e.principal.mac = "AB:CD:01:10:EF:22")
not $e.metadata.event_type = "NETWORK_DNS"

כברירת מחדל, סדר העדיפות מהגבוה לנמוך הוא not, and, or. לדוגמה, הביטוי a or b and c מוערך כ-a or (b and c) אם האופרטורים or ו-and מוגדרים באופן מפורש בביטוי.

בקטע events, פרדיקטים מצורפים באמצעות האופרטור and אם לא הוגדר אופרטור באופן מפורש. סדר ההערכה עשוי להיות שונה אם האופרטור and משתמע מהביטוי. לדוגמה, נניח ש-or מוגדר באופן מפורש ואופרטור and מרומז.

$e1.field = "bat"
or $e1.field = "baz"
$e2.field = "bar"

המשמעות של הערכים היא:

($e1.field = "bat" or $e1.field = "baz")
and ($e2.field = "bar")

מכיוון ש-or מוגדר באופן מפורש, הפרדיקטים שמסביב מקובצים ומוערכים קודם. הפרדיקט האחרון, $e2.field = "bar". המשתמש מצטרף באופן מרומז באמצעות and. כתוצאה מכך, סדר ההערכה משתנה.

חיפושים בטבלת נתונים בביטויים לוגיים

כשמשתמשים בחיפושים בטבלת נתונים (התחביר in %list) בקטע events, חלים אילוצי התחביר הבאים:

  • בלעדיות של סוגים: אי אפשר לשלב השוואות של שדות רגילים (לדוגמה, $field = "value") עם חיפושים בטבלאות נתונים באותו בלוק לוגי.

  • הגבלת אופרטורים: אפשר לשלב בין חיפושים בטבלאות נתונים רק באמצעות האופרטור OR. האופרטור AND לא נתמך בביטויים האלה.

  • בלעדיות של משתני אירוע עם OR: כשמשתמשים באופרטור OR כדי לשלב חיפושים בטבלת נתונים, כל החיפושים בביטוי OR צריכים להתייחס לשדות מאותו משתנה אירוע. לדוגמה, ($e.user in %table1 OR $e.group in %table2) הוא ערך תקין. עם זאת, ביטויים כמו ($e.user in %table OR $g.user in %table) לא נתמכים. הסיבה לכך היא שלחיפושים במשתני אירועים שונים (לדוגמה, $e ו-$g) בתנאי OR אין עוגן שוויון משותף, ולכן הקומפיילר נכשל בזמן הריצה עם RULE ERROR: error processing rule.

דוגמה: תוצאות לא תקינות גורמות לשגיאת תחביר

// Invalid: Mixing a field comparison with a data table lookup
($field = "value" OR $field in %list)

// Invalid: Using AND with data table lookups
($field_A in %list_A AND $field_B in %list_B)

דוגמה: דוגמה תקינה

// Valid: Multiple data table lookups joined by OR
($field in %list_A OR $field in %list_B)

דוגמה: ביטוי OR לא תקין בין משתנים

// Invalid: OR condition across different event variables
($e.user in %table OR $g.user in %table)

אם הלוגיקה שלכם דורשת גם בדיקה של שדה רגיל וגם חיפוש בטבלת נתונים, אתם צריכים להגדיר אותם כפרדיקטים נפרדים ועצמאיים בקטע events.

סוגים מנויים

אפשר להשתמש באופרטורים עם סוגים ממנויים. אפשר להחיל אותו על כללים כדי לפשט את הביצועים ולבצע אופטימיזציה שלהם (שימוש באופרטור במקום ברשימות הפניות).

בדוגמה הבאה, הערכים USER_UNCATEGORIZED ו-USER_RESOURCE_DELETION תואמים ל-15000 ול-15014, ולכן הכלל יחפש את כל האירועים שמופיעים ברשימה:

$e.metadata.event_type >= "USER_CATEGORIZED" and $e.metadata.event_type <= "USER_RESOURCE_DELETION"

Nocase Modifier

כדי להתעלם משימוש באותיות רישיות בביטוי השוואה בין ערכי מחרוזות או בביטוי רגולרי, מוסיפים nocase לסוף הביטוי, כמו בדוגמאות הבאות.

דוגמה: משנה nocase

$e.principal.hostname != "http-server" nocase
$e1.principal.hostname = $e2.target.hostname nocase
$e.principal.hostname = /dns-server-[0-9]+/ nocase
re.regex($e.target.hostname, `client-[0-9]+`) nocase

אי אפשר להשתמש ב-modifier‏ nocase כשסוג השדה הוא ערך ממוספר. הדוגמאות הבאות לא תקינות ויגרמו לשגיאות קומפילציה:

$e.metadata.event_type = "NETWORK_DNS" nocase
$e.network.ip_protocol = "TCP" nocase

תגובות

אפשר להשתמש בהערות בשאילתות כדי לספק מידע נוסף. כדי לציין הערה, משתמשים בתו קו נטוי:

  • כדי להוסיף הערה בשורה אחת, משתמשים בשני תווים של קו נטוי (// comment).
  • כדי להוסיף הערה בכמה שורות, משתמשים בתו לוכסן אחד ובתו כוכבית (/* comment */).

ערכים מילוליים

‫YARA-L תומכת במספרים שלמים לא שליליים ובמספרים ממשיים, במחרוזות, בערכים בוליאניים ובליטרלים של ביטויים רגולריים. מילוליים הם ערכים קבועים שמשמשים בתנאי שאילתה. ב-YARA-L נעשה שימוש גם במבנים אחרים שדומים למחרוזות מילוליות, כמו ביטויים רגולריים (מוקפים בלוכסנים) להתאמת תבניות, וערכים בוליאניים (true/false) ללוגיקה.

ייצוגים מילוליים של מחרוזות

מחרוזות ליטרליות הן רצפים של תווים שמוקפים במירכאות כפולות (") או במירכאות הפוכות (`). הפרשנות של המחרוזת משתנה בהתאם לסוג המירכאות שבו משתמשים:

  • מירכאות כפולות ("hello\tworld"): משמשות למחרוזות רגילות. צריך לכלול תווי בריחה (escape), כאשר \t מפורש כטאב.
  • גרשיים הפוכים (`hello\tworld`): משתמשים בהם כשרוצים שכל התווים יפורשו באופן מילולי, כך שהתו ‎\t לא יפורש כטאב.

ביטויים רגולריים מילוליים

לביטויים רגולריים מילוליים יש שתי אפשרויות:

  • אם רוצים להשתמש ישירות בביטויים רגולריים בלי הפונקציה re.regex(), צריך להשתמש ב-/regex/ בשביל ליטרלים של ביטויים רגולריים.

  • אם רוצים להשתמש במחרוזות מילוליות כביטויים רגולריים מילוליים, צריך להשתמש בפונקציה re.regex(). שימו לב: במחרוזות מילוליות עם מירכאות כפולות, צריך לסמן בתו בריחה (escape) את התווים של הקו הנטוי ההפוך באמצעות תווים של קו נטוי הפוך, וזה יכול להיראות מוזר.

הדוגמאות הבאות מציגות ביטויים רגולריים מקבילים:

re.regex($e.network.email.from, `.*altostrat\.com`)

re.regex($e.network.email.from, ".*altostrat\\.com")

$e.network.email.from = /.*altostrat\.com/

‫Google ממליצה להשתמש בתווי גרש הפוך למחרוזות בביטויים רגולריים כדי להקל על הקריאה.

אופרטורים

אופרטור תיאור
= שווה/הצהרה
‎!= לא שווה
> קטן מ-
=> פחות או שווה ל-
> גדול מ:
=< גדול או שווה ל-

הסבר על השימוש במשתנים ב-YARA-L

ב-YARA-L, כל המשתנים משתמשים בתחביר $<variable name>. בקטע הזה מתוארים סוגי המשתנים שבהם אפשר להשתמש ב-YARA-L.

משתנים של אירועים

משתני אירועים מייצגים קבוצות של אירועים או אירועים של ישויות. מציינים תנאים למשתני אירוע בקטע events באמצעות שם, מקור אירוע ושדות אירוע.

  • מקורות האירועים הם udm (לאירועים שעברו נורמליזציה) ו-graph (לאירועים של ישויות). אם לא מציינים מקור, udm מוגדר כמקור ברירת המחדל.

  • שדות של אירועים מיוצגים כשרשרת של .<שם השדה> (לדוגמה, $e.field1.field2), והשרשרות של השדות תמיד מתחילות מהמקור ברמה העליונה (UDM או Entity).

התאמת משתנים

משתני התאמה משמשים בקטע match כדי לקבץ אירועים על סמך ערכים משותפים בתוך חלון זמן מוגדר.

הם הופכים לשדות קיבוץ בשאילתה, כי שורה אחת מוחזרת לכל קבוצה ייחודית של משתני התאמה (ולכל חלון זמן). כשהשאילתה מוצאת התאמה, מוחזרים ערכי המשתנים של ההתאמה.

בקטע events מציינים מה כל משתנה התאמה מייצג.

משתני פלייסהולדר

אתם משתמשים במשתני placeholder כדי לתעד ולאחסן ערכים ספציפיים משדות של אירועי UDM, כדי שאפשר יהיה להפנות אליהם ולהשתמש בהם בשאילתה. אפשר להשתמש בהם כדי לקשר בין אירועים מפוזרים, במיוחד בשאילתות עם כמה אירועים. אם מקצים ערך משותף (לדוגמה, userid או hostname) לפלייסהולדר, אפשר להשתמש בפלייסהולדר הזה בקטע match כדי לקבץ אירועים שמשתפים את הערך הזה בחלון זמן מוגדר.

אתם מגדירים משתני פלייסהולדר בקטע events על ידי הקצאת הערך של שדה UDM לשם משתנה עם הקידומת $ (לדוגמה, $targetUser = $e.target.user.userid).

אפשר גם להגדיר משתני placeholder בקטעים הבאים:

  • בקטע condition מציינים את match התנאים.
  • בקטע outcome אפשר לבצע חישובים, להגדיר מדדים או לחלץ נקודות נתונים ספציפיות מהאירועים התואמים.
  • match כדי לקבץ אירועים לפי ערכים משותפים.

הקצאת פונקציה לפלייסהולדר

ב-YARA-L, הקצאת פונקציה ל-placeholder היא תהליך של שינוי נתוני אירועים ב-UDM ואחסון התוצאה לשימוש בכלל הכלל. הפעולה הזו מאפשרת לכם לבצע חישובים או שינויים בנתונים בקטע events ולהפנות לתוצאות האלה בקטעים match,‏ condition ו-outcome.

הרכיבים העיקריים הם:

  • פונקציות: פעולות מובנות שמבצעות חישובים או טרנספורמציות של נתונים (כמו מניפולציה של מחרוזות או מתמטיקה) בשדות אירועים ספציפיים.
  • משתני placeholder: משתנים שמוגדרים על ידי המשתמש, עם הקידומת $ (לדוגמה, $user, ‏ $ip), שפועלים כמאגרים. הם מאחסנים ערכים שחולצו ישירות מאירועים או שנוצרו על ידי פלט של פונקציות.
  • הקצאה: הלוגיקה שמקשרת את הפלט של פונקציה למשתנה placeholder, וכך הופכת את הנתונים שעברו טרנספורמציה לנגישים לשאר הלוגיקה של הזיהוי.

מגבלות

יש שתי מגבלות כשמשתמשים בהקצאה של פונקציה למחזיק מיקום:

  1. אתם צריכים להקצות כל פלייסהולדר לביטוי שמכיל שדה אירוע.

    דוגמאות תקינות

    $ph1 = $e.principal.hostname
    $ph2 = $e.src.hostname
    
    // Both $ph1 and $ph2 have been assigned to an expression containing an event field.
    $ph1 = strings.concat($ph2, ".com")
    
    $ph1 = $e.network.email.from
    $ph2 = strings.concat($e.principal.hostname, "@gmail.com")
    
    // Both $ph1 and $ph2 have been assigned to an expression containing an event field.
    $ph1 = strings.to_lower($ph2)
    

    דוגמה לא תקינה

    $ph1 = strings.concat($e.principal.hostname, "foo")
    $ph2 = strings.concat($ph1, "bar") // $ph2 has NOT been assigned to an expression containing an event field.
    
  2. הקריאה לפונקציה צריכה להיות תלויה באירוע אחד בלבד. עם זאת, אפשר להשתמש ביותר משדה אחד מאותו אירוע בארגומנטים של בקשה להפעלת פונקציה.

    דוגמה תקינה

    $ph = strings.concat($event.principal.hostname, "string2")

    $ph = strings.concat($event.principal.hostname, $event.src.hostname)

    דוגמה לא תקינה

    $ph = strings.concat("string1", "string2")

    $ph = strings.concat($event.principal.hostname, $anotherEvent.src.hostname)

שימוש במילות מפתח להגדרת שאילתות

ב-YARA-L, מילות מפתח הן מילים שמורות שמגדירות את המבנה והלוגיקה של שאילתת זיהוי. הם משמשים לציון חלקים שונים של שאילתה, לביצוע פעולות לוגיות ומתמטיות ולהגדרת תנאים להתאמת אירועים. אי אפשר להשתמש במילות המפתח האלה כמזהים של שאילתות, מחרוזות או משתנים.

מילות המפתח לא תלויות באותיות רישיות (לדוגמה, and ו-AND שוות ערך).

קטגוריות עיקריות של מילות מפתח ב-YARA-L 2.0

הרשימה הזו לא ממצה, אבל היא כוללת את מילות המפתח העיקריות שמשמשות ב-YARA-L 2.0 ליצירת שאילתות איתור חזקות.

  • הגדרת השאילתה:
    • ‫rule: מתחיל את ההגדרה של שאילתת YARA-L חדשה.
    • private: מגדיר שאילתה כפרטית, ומונע חשיפה ישירה או הפעלה שלה מבחוץ.
    • ‫global: מציין שהשאילתה היא גלובלית, כלומר שהיא צריכה לחול על כלל הנתונים.
  • קטעים של שאילתות:
    • ‫meta: מציג את קטע המטא-נתונים עם מידע תיאורי על השאילתה.
    • ‫strings: מציין את הקטע שבו מוגדרים דפוסי המחרוזות.
    • ‫condition: מציין את הקטע שמכיל את הלוגיקה הבוליאנית להפעלת השאילתה.
    • ‫events: מגדיר את הקטע שבו מציינים את משתני האירועים ואת התנאים שלהם.
    • ‫match: תג שמגדיר את הקטע של צבירת ערכים בחלון זמן.
    • ‫outcome: מגדיר את הקטע להוספת הקשר וניקוד לשאילתות שהופעלו.
  • מגדירי מחרוזות:
    • ‫ascii: מציין שמחרוזת צריכה להיות תואמת לטקסט ASCII.
    • ‫wide: מציין שצריך להתאים מחרוזת כתווים רחבים (UTF-16).
    • ‫nocase: מבצע התאמה של מחרוזת לא תלוית-רישיות.
    • ‫fullword: המחרוזת צריכה להיות זהה למילה שלמה.
    • ‫xor: מחיל טרנספורמציית XOR על המחרוזת לפני ההתאמה.
    • ‫base64, ‏ base64wide: מתבצע קידוד Base64 לפני ההתאמה.
  • אופרטורים לוגיים:
    • ‫and, ‏or, ‏not: אופרטורים לוגיים בוליאניים סטנדרטיים לשילוב תנאים.
    • ‫all of, any of: משמש להערכת כמה ביטויים בתוך תנאי.
  • אופרטורים להשוואה וליחסים:
    • ‫at: מציין היסט מדויק להתאמת מחרוזות.
    • ‫contains: בדיקה אם מחרוזת מכילה מחרוזת משנה.
    • ‫startswith, ‏endswith: בדיקה אם מחרוזת מתחילה או מסתיימת עם מחרוזת משנה.
    • ‫icontains, ‏istartswith, ‏iendswith, ‏iequals: גרסאות לא תלויות-רישיות.
    • ‫matches: משמש להתאמה של ביטוי רגולרי.
  • סוגי נתונים ומגדירי גודל:
    • ‫int8, ‏ uint8, ‏ int16, ‏ uint16, ‏ int32, ‏ uint32: סוגי מספרים שלמים בגדלים שצוינו.
    • ‫int8be, uint8be, int16be, uint16be, int32be, uint32be: גרסאות Big-endian של סוגי מספרים שלמים.
    • ‫filesize: מייצג את גודל הקובץ שמנותח.
    • ‫entrypoint: מתייחס לנקודת הכניסה של קובץ הפעלה.

תמיכה במיפוי של YARA-L

שפת YARA-L תומכת במפות עבור סוגי הנתונים Struct ו-Label, שמשמשים בחלק מהשדות של UDM.

כדי לחפש צמד מסוים של מפתח-ערך בשני סוגי הנתונים Struct ו-Label, משתמשים בתחביר הרגיל של המפה:

  • תחביר של שדה Struct: $e.udm.additional.fields["pod_name"] = "kube-scheduler"
  • תחביר של שדה התווית: $e.metadata.ingestion_labels["MetadataKeyDeletion"] = "startup-script"

דוגמה: שימוש תקין ולא תקין במפות

בדוגמאות הבאות מוצג שימוש תקין ולא תקין במפות.

שימוש תקין במפות

שימוש בשדה Struct בקטע events:

events:
  $e.udm.additional.fields["pod_name"] = "kube-scheduler"
  

שימוש בשדה Label (תווית) בקטע outcome (תוצאה):

outcome:
  $value = array_distinct($e.metadata.ingestion_labels["MetadataKeyDeletion"])
 

הקצאת ערך מיפוי ל-Placeholder:

$placeholder = $u1.metadata.ingestion_labels["MetadataKeyDeletion"]

שימוש בשדה של מפה בתנאי של צירוף:

// using a Struct field in a join condition between two udm events $u1 and $u2
$u1.metadata.event_type = $u2.udm.additional.fields["pod_name"]

שימוש במפות שלא נתמך

שילוב של מילות מפתח מסוג any או all עם מפה

all $e.udm.additional.fields["pod_name"] = "kube-scheduler"

סוגים אחרים של ערכים

תחביר המיפוי יכול להחזיר רק ערך מחרוזת. במקרה של סוגי נתונים מסוג [Struct](https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#struct), תחביר המפה יכול לגשת רק למפתחות שהערכים שלהם הם מחרוזות. אי אפשר לגשת למפתחות שהערכים שלהם הם סוגים פרימיטיביים אחרים, כמו מספרים שלמים.

טיפול בערכים כפולים במפות

הגישה למיפוי נועדה לאחזר ערך יחיד שמשויך למפתח ספציפי. זוהי התנהגות רגילה וצפויה. עם זאת, במקרים נדירים, ההקשר של map access עשוי להצביע בטעות על כמה ערכים. במקרה הקצה הנדיר שבו הגישה למפה מתייחסת לכמה ערכים, הפונקציה map access תחזיר באופן דטרמיניסטי את הערך הראשון. זה יכול לקרות אם לתווית יש מפתח כפול או אם לתווית יש שדה חוזר של ישות אב.

לתווית יש מפתח כפול

מבנה התווית מייצג מיפוי, אבל לא מבטיח שהמפתחות יהיו ייחודיים. לפי המוסכמה, למפה צריכים להיות מפתחות ייחודיים, ולכן Google SecOps לא ממליץ לאכלס תווית עם מפתחות כפולים.

דוגמה: תווית עם מפתח כפול

השאילתה $e.metadata.ingestion_labels["dupe-key"] תחזיר את הערך האפשרי הראשון, val1, אם היא תופעל על נתוני הדוגמה הבאים:

    // Disrecommended usage of label with a duplicate key:
    event {
      metadata{
        ingestion_labels{
          key: "dupe-key"
          value: "val1" // This is the first possible value for "dupe-key"
        }
        ingestion_labels{
          key: "dupe-key"
          value: "val2"
        }
      }
    }
  

לתווית יש שדה חוזר ברמת האב

שדה חוזר יכול להכיל תווית כשדה צאצא. יכול להיות ששני ערכים שונים בשדה חוזר ברמה העליונה יכילו תוויות עם אותו מפתח.

דוגמה: תווית עם שדה חוזר של צאצא

השאילתה $e.security_result.rule_labels["key"] תחזיר את הערך האפשרי הראשון, val3, אם היא תופעל על דוגמת הנתונים הבאה:

    event {
      // security_result is a repeated field.
      security_result {
        threat_name: "threat1"
        rule_labels {
          key: "key"
          value: "val3" // This is the first possible value for "key"
        }
      }
      security_result {
        threat_name: "threat2"
        rule_labels {
          key: "key"
          value: "val4"
        }
      }
    }
  

גישה למשתני תוצאות במפות

בקטע הזה מוסבר איך לגשת למשתני התוצאה במפות כסוגי הנתונים המקוריים שלהם (לדוגמה, מספרים שלמים, ערכים בוליאניים או רשימות של הסוגים האלה) ולא רק כמחרוזות. אתם יכולים להשתמש בפונקציונליות הזו כדי להגמיש ולדייק את הלוגיקה של השאילתות.

נתוני התוצאות זמינים בשדות הבאים:

  • ערכי התוצאות שומרים על הסוגים המקוריים שלהם בשדה variables.
  • בשדה outcomes מאוחסנות string גרסאות לצורך תאימות לדורות קודמים.

אפשר לגשת לערכי התוצאות האלה באמצעות המיפוי variables כדי לאחזר את הסוג הספציפי או לגשת לרכיבים ברצף באמצעות אינדקס של מערך. אתם יכולים לגשת לפריט ספציפי ברצף לפי האינדקס שלו או לבחור את כל הרצף כדי להעריך כל ערך בנפרד.

תחביר:

$d.detection.detection.variables[OUTCOME_NAME].TYPE_SUFFIX

תחביר לרצפים:

$d.detection.detection.variables[OUTCOME_NAME].SEQUENCE_TYPE_SUFFIX.TYPE_VALS_SUFFIX

דוגמאות: גישה למשתני תוצאה במפות

גישה לתוצאה של מחרוזת:

    $my_string_outcome = $d.detection.detection.variables["outcome_ip"].string_val
   

בדוגמה הזו מאחזרים את ערך המחרוזת ישירות (לדוגמה, "1.1.1.1" אם outcome_ip הייתה מחרוזת יחידה).

גישה לתוצאה של מספר שלם

    $my_int_outcome = $d.detection.detection.variables["outcome_port"].int64_value
    

בדוגמה הזו מאחזרים את הערך של המספר השלם (לדוגמה, 30).

גישה לרשימת מספרים שלמים באמצעות Int64Sequence

   $my_int_list = $d.detection.detection.variables["outcome_ports"].int64_seq.int64_vals
   

בדוגמה הזו, המערכת מאחזרת את הרשימה המלאה של המספרים השלמים ומבטלת את הקינון שלהם כמו בשדות חוזרים (לדוגמה, [2, 3, 4]).

גישה לרכיב ספציפי מרשימה של מספרים שלמים

    $first_int = $d.detection.detection.variables["outcome_ports"].int64_seq.int64_vals[0]
    

בדוגמה הזו, הפונקציה מחזירה את המספר השלם הראשון מהרשימה (לדוגמה, 2).

גישה לרשימת מחרוזות (StringSequence)

    $my_string_list = $d.detection.detection.variables["outcome_ips"].string_seq.string_vals
    

בדוגמה הזו מאחזרים את הרשימה המלאה של המחרוזות ומבטלים את הקינון שלהן כמו בשדות חוזרים (לדוגמה, ["1.1.1.1", "2.2.2.2"]).

גישה לרכיב ספציפי מרשימת מחרוזות

    $first_ip = $d.detection.detection.variables["outcome_ips"].string_seq.string_vals[0]
    

בדוגמה הזו, המערכת מאחזרת את כתובת ה-IP הראשונה מהרשימה (לדוגמה, "1.1.1.1").

סיומות זמינות לסוג variables

FindingVariable מופיעה רשימה מלאה של הסיומות הנתמכות.

הבעיה עדיין לא נפתרה? קבלת תשובות מחברי הקהילה וממומחי Google SecOps.