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

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

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

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

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

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

ביטול הסכמה לחתימות של כללי תאימות

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

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

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

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

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

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

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

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

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

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

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

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

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

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

לדוגמה, אם יש לכם כלל WAF שהוגדר מראש (כמו evaluatePreconfiguredWaf('sqli-v422-stable')), ואתם רוצים להחריג שדות של בקשות ביעד ספציפי (כמו owasp-crs-v042200-id942100-sqli ב-sqli-v422-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-v422-stable שהוגדר מראש ב-WAF, כדי להחריג את כל קובצי ה-Cookie של הבקשות מהבדיקה:

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

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

  • PRIORITY: העדיפות של הכלל
  • POLICY_1: השם של מדיניות האבטחה

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

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

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

  • PRIORITY: העדיפות של הכלל
  • POLICY_2: השם של מדיניות האבטחה

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

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

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

  • PRIORITY: העדיפות של הכלל
  • POLICY_3: השם של מדיניות האבטחה

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

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

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

  • PRIORITY: העדיפות של הכלל
  • POLICY_4: השם של מדיניות האבטחה

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

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

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

  • PRIORITY: העדיפות של הכלל
  • POLICY_5: השם של מדיניות האבטחה

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

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

  • JSON
  • GraphQL

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

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