ניהול החרגות של כללים

נתמך ב:

במאמר הזה מוסבר איך לנהל באופן פרוגרמטי החרגות של כללים ב-Google Security Operations באמצעות ה-API. החרגות משמשות כמסננים שאתם מגדירים על סמך שדות של Unified Data Model (UDM) כדי למנוע מגילויים ספציפיים ליצור התראות. המסננים האלה מזהים פעילויות מוכרות או בטוחות, וכך מפחיתים את הרעש המיותר בלוח הבקרה.

יצירת החרגה באמצעות מסנני תוצאות

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

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

Method: ‏ POST

נקודת קצה (endpoint):

https://REGION-chronicle.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/instances/INSTANCE_ID

מחליפים את מה שכתוב בשדות הבאים:

‫REGION: האזור של Google Cloud למופע של Google SecOps.

‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud .

‫LOCATION: המיקום של המכונה של Google SecOps (בדרך כלל זהה לאזור).

‫INSTANCE_ID: המזהה של המכונה ב-Google SecOps.

דוגמה:

POST https://us-chronicle.googleapis.com/v1/projects/my-project/locations/us/instances/my-instance/findingsRefinements

גוף הבקשה:

  {
  "displayName": "Exclusion with outcome filters",
  "type": "DETECTION_EXCLUSION",
  "query": "principal.hostname = \"altostrat.com\"",
  "outcomeFilters": [
    {
      "outcome_variable": "ip",
      "outcome_value": "127.0.01",
      "outcome_filter_operator": "EQUAL"
    },
    {
      "outcome_variable": "hostnames",
      "outcome_value": "altostrat.com",
      "outcome_filter_operator": "CONTAINS"
    }
  ]
}

הדוגמה ממחישה איך להגדיר לוגיקת השתקה שבה כמה מסננים במערך outcomeFilters מקושרים באמצעות פסוקית AND משתמעת.

שדות חובה: displayName, type, query

שדות שנוצרים על ידי המערכת: אל תציינו את name,‏ createTime או updateTime. המערכת מנהלת את ההגדרות האלה, ואם הן נכללות בבקשה היא מתעלמת מהן או גורמת לשגיאות.

לוגיקת ההסתרה פועלת לפי קשר של AND. הבקשה יוצרת החרגה שמסתירה את כל הגילויים שיש בהם אירוע עם:

  • ‫"altostrat.com" כשם המארח הראשי

  • משתנה התוצאה ip עם ערך של 127.0.0.1

  • משתנה תוצאה hostnames עם לפחות אחד מהערכים המצטברים שלו שהוא altostrat.com.

כל המסננים שצוינו בהחרגה מקושרים באופן מרומז באמצעות פסקה AND.

תגובה מה-API: ה-API מחזיר את שם המשאב FindingsRefinement.

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

גישה להחרגה

אפשר להשתמש בנקודת הקצה GET כדי:

  • קבלת הפרטים של הגדרת החרגה יחידה לפי המזהה הייחודי שלה.

  • כשיש לכם refinement-id ספציפי ואתם צריכים לאמת את השאילתה המדויקת או את מסנני התוצאות שהוא מכיל.

שיטה: GET

נקודת קצה (endpoint):

https://REGION-chronicle.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/instances/INSTANCE_ID/findingsRefinements

מחליפים את מה שכתוב בשדות הבאים:

‫REGION: האזור של Google Cloud במכונה של Google SecOps.

‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud .

‫LOCATION: המיקום של מופע Google SecOps (לרוב זהה לאזור).

‫INSTANCE_ID: המזהה של המכונה ב-Google SecOps.

דוגמה:

GET https://us-chronicle.googleapis.com/v1/projects/0123456789/locations/us/instances/01234567-89ab-cdef-fedc-ba9876543210/findingsRefinements/fr_00001111-2222-3333-4444-555566667777

החלת החרגה על כלל או על קבוצת כללים

צריך להחיל את ההחרגה על כללים ספציפיים או על קבוצות כללים שנבחרו. כשמחילים את ההחרגה על כלל או על קבוצת כללים, נוצר משאב FindingsRefinementDeployment. אתם יכולים להשתמש במשאב הזה כדי לקבוע אילו כללים בהתאמה אישית, כללים מוכנים מראש או קבוצות כללים מוכנים מראש חלים על המשאב FindingsRefinement. אחר כך אפשר לציין את הפרמטר update_mask בבקשת ה-API כדי לציין אילו שדות ב-FindingsRefinementDeployment לעדכן.

Method: ‏ PATCH

נקודת קצה (endpoint):

https://REGION-chronicle.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/instances/INSTANCE_ID/findingsRefinements/REFINEMENT_ID

מחליפים את מה שכתוב בשדות הבאים:

‫REGION: האזור של Google Cloud למופע של Google SecOps.

‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud .

‫LOCATION: המיקום של מופע Google SecOps (לרוב זהה לאזור).

‫INSTANCE_ID: המזהה של המכונה ב-Google SecOps.

‫REFINEMENT_ID: המזהה הייחודי של שיפור הממצאים.

דוגמה:

 PATCH https://us-chronicle.googleapis.com/v1/projects/0123456789/locations/us/instances/01234567-89ab-cdef-fedc-ba9876543210/findingsRefinements/fr_00001111-2222-3333-4444-555566667777?update_mask=enabled,detectionExclusionApplication

גוף הבקשה:


  {
  "name": "projects/0123456789/locations/us/instances/01234567-89ab-cdef-fedc-ba9876543210/findingsRefinements/fr_00001111-2222-3333-4444-555566667777"
  "enabled": true,
  "detectionExclusionApplication": {
    "curatedRuleSets": [
      ...list curated rule set resource names
    ],
    "curatedRules": [
      ...list curated rule resource names
    ],
    "rules": [
      ...list rule resource names
    ],
  }
}

כשמחילים את ההחרגה על כלל או על קבוצת כללים, המערכת יוצרת משאב FindingsRefinementDeployment. המשאב הזה קובע אילו כללים מותאמים אישית, כללים שנבחרו בקפידה וקבוצות כללים שנבחרו בקפידה חלים על המשאב FindingsRefinement. אפשר גם לכלול את הפרמטר update_mask בבקשת ה-API כדי לציין אילו שדות ב-FindingsRefinementDeployment צריך לעדכן.

ניגשים לפריסה של ההחרגה

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

שיטה: GET

נקודת קצה (endpoint):

https://REGION-chronicle.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/instances/INSTANCE_ID/findingsRefinements/REFINEMENT_ID

מחליפים את מה שכתוב בשדות הבאים:

‫REGION: האזור של Google Cloud למופע של Google SecOps.

‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud .

‫LOCATION: המיקום של מופע Google SecOps (לרוב זהה לאזור).

‫INSTANCE_ID: המזהה של המכונה ב-Google SecOps.

‫REFINEMENT_ID: המזהה הייחודי של שיפור הממצאים.

דוגמה:

   GET https://us-chronicle.googleapis.com/v1/projects/0123456789/locations/us/instances/01234567-89ab-cdef-fedc-ba9876543210/findingsRefinements/fr_00001111-2222-3333-4444-555566667777/deployment

הצגת כל ההחרגות

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

שיטה: GET

נקודת קצה (endpoint):

https://REGION-chronicle.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/instances/INSTANCE_ID/findingsRefinements

מחליפים את מה שכתוב בשדות הבאים:

‫REGION: האזור של Google Cloud למופע של Google SecOps.

‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud .

‫LOCATION: המיקום של המכונה של Google SecOps (בדרך כלל זהה לאזור).

‫INSTANCE_ID: המזהה של המכונה ב-Google SecOps.

דוגמה:

GET https://us-chronicle.googleapis.com/v1/projects/0123456789/locations/us/instances/01234567-89ab-cdef-fedc-ba9876543210/findingsRefinements

פרמטרים אופציונליים של שאילתה: pageSize, pageToken

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

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

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

שיטה: GET

נקודת קצה (endpoint):

https://REGION-chronicle.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/instances/INSTANCE_ID/findingsRefinements

מחליפים את מה שכתוב בשדות הבאים:

‫REGION: האזור Google Cloud של מופע Google SecOps.

‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud .

‫LOCATION: המיקום של מופע Google SecOps (לרוב זהה לאזור).

‫INSTANCE_ID: המזהה של המכונה ב-Google SecOps.

דוגמה:

  GET https://us-chronicle.googleapis.com/v1/projects/0123456789/locations/us/instances/01234567-89ab-cdef-fedc-ba9876543210:listAllFindingsRefinementDeployments

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

  • משתמשים בפרמטרים pageSize ו-pageToken כדי להציג תוצאות נוספות שדומות לנקודות קצה אחרות של רשימות ב-API.

  • משתמשים בפרמטר filter כדי לסנן את הכללים או את קבוצות הכללים שהוחלו עליהם החרגות.

בדיקת החרגה באמצעות ה-API

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

שיטה: POST

נקודת קצה (endpoint):

https://REGION-chronicle.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/instances/INSTANCE_ID:testFindingsRefinement

מחליפים את מה שכתוב בשדות הבאים:

‫REGION: האזור של Google Cloud למופע של Google SecOps.

‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud .

‫LOCATION: המיקום של מופע Google SecOps (לרוב זהה לאזור).

‫INSTANCE_ID: המזהה של המכונה ב-Google SecOps.

דוגמה:

POST https://us-chronicle.googleapis.com/v1/projects/0123456789/locations/us/instances/01234567-89ab-cdef-fedc-ba9876543210:testFindingsRefinement

גוף הבקשה:

 {
  "type": "DETECTION_EXCLUSION",
  "query": "principal.hostname = \"altostrat.com\"",
  "outcomeFilters": [
    {
      "outcome_variable": "ip",
      "outcome_value": "127.0.01",
      "outcome_filter_operator": "EQUAL",
    },
    {
      "outcome_variable": "hostnames",
      "outcome_value": "altostrat.com",
      "outcome_filter_operator": "CONTAINS",
    },
  ]
  "interval": {
    "start_time": {
      "seconds": 1756684800, // Sep. 1 2025 00:00 UTC
    },
    "end_time": {
      "seconds": 1759276800, // Oct. 1 2025 00:00 UTC
    },
  },
  "detectionExclusionApplication": {
    "curatedRuleSets": [
      ...curated rule set resource names
    ],
    "curatedRules": [
      ...curated rule resource names
    ],
    "rules": [
      ...rule resource names
    ],
  }
}

נקודת הקצה הזו בודקת את ההחרגה על זיהויים שנוצרו בכללים ובקבוצות הכללים שצוינו בבקשה. המדד הזה עוזר לקבוע את מידת היעילות של ההחרגה בדיכוי של זיהויים שלא אמורים להתרחש. המערכת משתמשת בזיהויים מ-30 הימים האחרונים כטווח תאריכים לבדיקת ההחרגות.

מגבלות

  • בכל ההחרגות (עם או בלי מסנני תוצאות) צריך לציין שדה query. כדי ליצור החרגה עם outcomeFilters בלבד, צריך לציין ביטוי רגולרי של match-all.

    
      ...other fields in FindingsRefinement
    
      query: "principal.hostname = /.*/"
    
      outcomeFilters: [ your outcome filters ]
    
    

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

  • החרגות לא תומכות בהגדרה של אורך חיים (TTL). עם זאת, אפשר ליצור TTL חד-פעמי על ידי חישוב זמן התפוגה הספציפי והוספת תנאי של חותמת זמן בהגדרת ההחרגה. לדוגמה, כדי להגדיר שהחרגה תפוג בסוף השנה, מציינים את השאילתה באופן הבא:

    
      ...other fields in FindingsRefinement
    
      query: "metadata.event_timestamp.seconds < 1767225600" // Jan 1 2026 00:00 UTC
    
      outcomeFilters: [your outcome filters]
    
    

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

    הערה: יכול להיות שההחרגה לא תוצג כמו שצריך בחלון עריכת החרגות בממשק המשתמש, כי הוא תומך רק בשדות של string.

  • כללים מורכבים: אל תפעילו החרגה של כלל ישירות על כלל מורכב. צריך להחיל את ההחרגה על הכללים הבסיסיים שעליהם מבוסס הכלל המשולב. הסיבה לכך היא שהחרגות של כללים מוערכות ביחס לשדות UDM (כמו principal.user.userid), אבל כללים מורכבים מופעלים על סמך זיהויים אחרים ולא על סמך שדות UDM. אם מחילים החרגה של כלל ישירות על כלל מורכב, ההחרגה לא תתאים והאירוע לא יוחרג.

    כדי למצוא את הכלל הבסיסי, אתם יכולים לבדוק את הגדרת הכלל המשולב במסוף Google SecOps (בקטע Content Hub > גלאים מוכנים מראש) ולעיין בקטע events: של הלוגיקה של YARA-L כדי לזהות את שמות הכללים הבסיסיים.

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