שינוי של כללי WAF מוגדרים מראש ב-Cloud Armor

‫Cloud Armor מספק כללי WAF שהוגדרו מראש, שכל אחד מהם מורכב מכמה חתימות שמקורן ב-OWASP Core Rule Set (CRS). כל חתימה תואמת לכלל לזיהוי מתקפות בערכת הכללים. בקשות נכנסות נבדקות בהשוואה לכללי ה-WAF שהוגדרו מראש. בקשה תואמת לכלל WAF שהוגדר מראש אם היא תואמת לאחד מהחתימות שמשויכות לכלל WAF שהוגדר מראש. התאמה מתבצעת כשהביטוי evaluatePreconfiguredWaf() מחזיר את הערך true.

בחירת רמת רגישות

לכל חתימה יש רמת רגישות שתואמת לרמת הפרנויה של OWASP. אפשר לבחור רמת רגישות בין 0 לבין 4, אבל רמת הרגישות 0 פירושה שאף כלל לא מופעל כברירת מחדל.

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

evaluatePreconfiguredWaf(
  'sqli-v33-stable',
  {
    'sensitivity': 1
  }
)

ביטול ההצטרפות לחתימות של כללים

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

בדוגמה הבאה מוחרגים שני מזהי כללים של CRS מכלל ה-WAF שהוגדר מראש sqli-v33-stable (CRS 3.3):

evaluatePreconfiguredWaf(
  'sqli-v33-stable',
  {
    'sensitivity': 4,
    'opt_out_rule_ids': ['owasp-crs-v030301-id942350-sqli', 'owasp-crs-v030301-id942360-sqli']
  }
)

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

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

חתימות של כלל להבעת הסכמה

במקום לבטל את ההצטרפות לחתימות של כללים, אתם יכולים להצטרף לחתימות של כללים ברמות רגישות שמושבתות אחרת. מומלץ להשתמש בחתימות של כללים כשרוצים להשתמש בפחות חתימות ברמת רגישות מסוימת מאשר בכללים שרוצים להחריג. כדי להפעיל חתימות של כללי הסכמה, רמת הרגישות צריכה להיות 0. בדוגמה הבאה, כל החתימות של cve-canary מושבתות בכל רמות הרגישות, ואז מופעלות במפורש החתימות של owasp-crs-v030001-id044228-cve ו-owasp-crs-v030001-id144228-cve:

evaluatePreconfiguredWaf(
  'cve-canary',
  {
    'sensitivity': 0,
    'opt_in_rule_ids': ['owasp-crs-v030001-id044228-cve', 'owasp-crs-v030001-id144228-cve']
  }
)

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

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

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

  • EQUALS: האופרטור מתאים אם ערך השדה שווה לערך שצוין.
  • STARTS_WITH: האופרטור מתאים אם ערך השדה מתחיל בערך שצוין.
  • ENDS_WITH: האופרטור מתאים אם ערך השדה מסתיים בערך שצוין.
  • CONTAINS: האופרטור מתאים אם ערך השדה מכיל את הערך שצוין.
  • EQUALS_ANY: האופרטור מתאים אם ערך השדה הוא כל ערך.

מגבלת ההחרגות של כוונון

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

לדוגמה, אם יש לכם כלל WAF שהוגדר מראש (כמו evaluatePreconfiguredWaf('sqli-v33-stable')), ואתם רוצים להחריג שדות של בקשות ביעד ספציפי (כמו owasp-crs-v030301-id942100-sqli ב-sqli-v33-stable), אתם יכולים להגדיר עד 100 כותרות של בקשות, 100 קובצי Cookie של בקשות, 100 פרמטרים של שאילתות של בקשות ו-100 כתובות URI של בקשות שיוחרגו עבור היעד הזה.

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

כותרות של בקשות

רשימה של שמות כותרות בקשות שהערך שלהן לא נכלל בבדיקה במהלך הערכה של כלל WAF שהוגדר מראש.

ההחרגה רלוונטית רק לחתימות ביעד שבודקות במקור את הערך של כותרת הבקשה. ההגנה הזו כוללת חתימות שמשויכות לדגל הבקשה הבא ב-OWASP Core Rule Set:

  • REQUEST_HEADERS

רק הערך של כותרות הבקשה שצוינו מוחרג מהבדיקה. השם עדיין נבדק.

קובצי Cookie של בקשות

רשימה של שמות קובצי Cookie של בקשות שהערך שלהם לא נכלל בבדיקה במהלך הערכה של כלל WAF שהוגדר מראש.

ההחרגה רלוונטית רק לחתימות ביעד שיבדקו במקור את ערך קובץ ה-Cookie של הבקשה. ההגדרה הזו כוללת חתימות שמשויכות לדגל הבקשה הבא ב-OWASP Core Rule Set:

  • REQUEST_COOKIES

רק הערך של קובצי ה-Cookie שצוינו בבקשה לא נכלל בבדיקה. השם עדיין נבדק.

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

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

ההחרגה רלוונטית רק לחתימות ביעד שבודקות את פרמטרי הבקשה במקור. החתימות האלה משויכות לדגלי הבקשה הבאים ב-OWASP Core Rule Set:‏

  • ARGS
  • ARGS_GET
  • REQUEST_URI
  • REQUEST_URI_RAW
  • REQUEST_LINE

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

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

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

מזהי URI של בקשות

רשימה של מזהי URI משורת הבקשה, לא כולל נתוני מחרוזת השאילתה, שיוחרגו מהבדיקה במהלך הערכת כלל WAF שהוגדר מראש.

ההחרגה רלוונטית רק לחתימות ביעד שבודקות את ה-URI של הבקשה במקור. זה כולל חתימות שמשויכות לדגלי הבקשה הבאים ב-OWASP Core Rule Set:

  • REQUEST_URI
  • REQUEST_URI_RAW
  • REQUEST_LINE
  • REQUEST_FILENAME
  • REQUEST_BASENAME

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

ערכי שדות

אם משתמשים באופרטור שדה שאינו EQUALS_ANY, צריך לציין ערך שדה.

בכותרות של בקשות, בקובצי Cookie של בקשות ובפרמטרים של שאילתות של בקשות, מערכת התווים המותרת לערכי שדות כוללת את התווים הבאים:

  • !, #, $, %, &, *, +, -, ., ^, _, `, |, ~
  • תווים אלפאנומריים A עד Z (אותיות קטנות וגדולות)
  • תווים של ספרות 0 עד 9

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

עבור מזהי URI של בקשות, ערך השדה צריך להיות בפורמט URI באופן הבא:

  • מותר להשתמש בסכימה, אבל היא מוגבלת ל-http או ל-https בלבד.
  • מותר להשתמש במארח, והוא יכול להיות כתובת IP.
  • מותר לפרסם נמל.
  • מותר להוסיף נתיב.
  • אסור להשתמש בשאילתה.
  • אסור להשתמש בפרגמנט.

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

דוגמאות

בדוגמה הראשונה, הכלל במדיניות האבטחה POLICY_1 בכתובת PRIORITY מתעדכן כדי להוסיף הגדרת החרגה לכל החתימות בקטע sqli-v33-stable של כלל ה-WAF שהוגדר מראש, כדי להחריג את כל קובצי ה-Cookie של הבקשות מהבדיקה:

gcloud compute security-policies rules add-preconfig-waf-exclusion PRIORITY \
    --security-policy POLICY_1 \
    --target-rule-set "sqli-v33-stable" \
    --request-cookie-to-exclude "op=EQUALS_ANY"

בדוגמה השנייה, הכלל במדיניות האבטחה POLICY_2 at PRIORITY מעודכן כדי להוסיף הגדרת החרגה לחתימות owasp-crs-v030301-id941140-xss ו-owasp-crs-v030301-id941270-xss במסגרת xss-v33-stable הכלל המוגדר מראש של WAF, כדי להחריג מבדיקה את כותרות הבקשות שמתחילות ב-abc או מסתיימות ב-xyz:

gcloud compute security-policies rules add-preconfig-waf-exclusion PRIORITY \
    --security-policy POLICY_2 \
    --target-rule-set "xss-v33-stable" \
    --target-rule-ids "owasp-crs-v030301-id941140-xss,owasp-crs-v030301-id941270-xss" \
    --request-header-to-exclude "op=STARTS_WITH,val=abc" \
    --request-header-to-exclude "op=ENDS_WITH,val=xyz"

בדוגמה השלישית, הכלל במדיניות האבטחה POLICY_3 ב-PRIORITY מתעדכן כדי להוסיף הגדרת החרגה לכל החתימות במסגרת כלל ה-WAF שהוגדר מראש sqli-v33-stable. הפעולה הזו מוציאה מבדיקה פרמטרים של שאילתות לבקשות (שמנותחים ממחרוזת השאילתה של ה-URI או ממטען הייעודי (payload) של גוף הבקשה) ששווים ל-bad-param:

gcloud compute security-policies rules add-preconfig-waf-exclusion PRIORITY \
    --security-policy POLICY_3 \
    --target-rule-set "sqli-v33-stable" \
    --request-query-param-to-exclude "op=EQUALS,val=bad-param"

בדוגמה הרביעית, הכלל במדיניות האבטחה POLICY_4 ב-PRIORITY מתעדכן כדי להוסיף הגדרת החרגה לחתימה owasp-crs-v030301-id930100-lfi במסגרת כלל ה-WAF שהוגדר מראש lfi-v33-stable. הפעולה הזו מוציאה מכלל הבדיקה את מזהי ה-URI של הבקשות שמכילים את /bad-path:

gcloud compute security-policies rules add-preconfig-waf-exclusion PRIORITY \
    --security-policy POLICY_4 \
    --target-rule-set "lfi-v33-stable" \
    --target-rule-ids "owasp-crs-v030301-id930100-lfi" \
    --request-uri-to-exclude "op=CONTAINS,val=/bad-path"

בדוגמה החמישית, אנחנו מעדכנים את הכלל במדיניות האבטחה POLICY_5 ב-PRIORITY כדי להסיר את כל ההחרגות של שדות הבקשה למזהי הכללים owasp-crs-v030301-id942110-sqli ו-owasp-crs-v030301-id942120-sqli ב-sqli-v33-stable.

gcloud compute security-policies rules remove-preconfig-waf-exclusion PRIORITY \
    --security-policy POLICY_5 \
    --target-rule-set "sqli-v33-stable" \
    --target-rule-ids "owasp-crs-v030301-id942110-sqli,owasp-crs-v030301-id942120-sqli"

החלת ניתוח על ערכי כותרות מותאמות אישית Content-Type

כש-Cloud Armor מעריך את גוף הבקשה מול כללי WAF שהוגדרו מראש, הכותרת Content-Type מציינת את פורמט הנתונים בגוף הבקשה. כברירת מחדל, Cloud Armor מתייחס לתוכן של גוף הבקשה כמחרוזת אחת, שכולה עומדת בדרישות לבדיקה ולהתאמה לכללי ה-WAF שהוגדרו מראש. עם זאת, אם הבקשות הנכנסות שלכם מקודדות בצורה שונה, תוכלו להגדיר ניתוח מדויק יותר. ‫Cloud Armor תומך בסוגי הקידוד הבאים:

  • JSON
  • GraphQL

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

המאמרים הבאים