שינוי של כללי WAF שהוגדרו מראש

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

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

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

לכל חתימה יש רמת רגישות שתואמת לרמת הפרנויה של 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) כדי למנוע שגיאות בהגדרות.

למידע נוסף על ביטויים של כללי 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 של בקשות ו-100 גופי בקשות שיוחרגו מהיעד הזה.

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

החרגות גלובליות

כדי להחיל החרגה על כל קבוצות הכללים בכלל של מדיניות אבטחה, צריך לציין החרגה גלובלית על ידי הגדרת הדגל ‎--target-rule-set לערך "*". אפשר להשתמש בהחרגה גלובלית כדי להחריג כל סוג של שדה בקשה, כמו כותרות, קובצי Cookie, פרמטרים של שאילתות, מזהי URI או גופי בקשות. אל תציינו מזהי כללים להחרגה גלובלית.

Request headers

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

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

  • REQUEST_HEADERS

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

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

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

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

  • REQUEST_COOKIES

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

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

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

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

  • ARGS
  • ARGS_GET
  • REQUEST_URI
  • REQUEST_URI_RAW
  • REQUEST_LINE

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

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

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

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

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

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

  • REQUEST_URI
  • REQUEST_URI_RAW
  • REQUEST_LINE
  • REQUEST_FILENAME
  • REQUEST_BASENAME

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

גופי בקשות

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

ההחרגה הזו חלה רק על חתימות ביעד שבודקות את הערך של גוף הבקשה, כמו חתימות שמשויכות לדגל הבקשה REQUEST_BODY בקבוצת כללי הליבה (CRS) של OWASP.

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

ערכי שדות

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

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

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

בגוף הבקשה, מערכת התווים המותרת לערכי שדות כוללת את כל תווי ה-ASCII הניתנים להדפסה, חוץ מ-', \, ( ו-):

  • רווח ( ) ותווים מיוחדים: !, ‏ ", ‏ #, ‏ $, ‏ %, ‏ &, ‏ *, ‏ +,‏ ,, ‏ -, ‏ ., ‏ /, ‏ :, ‏ ;, ‏ <, ‏ =, ‏ >, ‏ ?, ‏ @, ‏ [, ‏ ], ‏ ^, ‏ _,‏ `, ‏ {, ‏ |, ‏ }, ‏ ~
  • אותיות מ-A עד Z (גם אותיות רישיות וגם אותיות קטנות)
  • תווי ספרות 0 עד 9

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

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

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

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

דוגמאות

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

gcloud compute security-policies rules add-preconfig-waf-exclusion PRIORITY \
    --security-policy POLICY_1 \
    --target-rule-set "*" \
    --request-body-to-exclude "op=CONTAINS,val=bad-body-value"

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

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

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

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

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

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

בדוגמה השלישית מעדכנים את הכלל במדיניות האבטחה POLICY_3 ב-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_3 \
    --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_3: השם של מדיניות האבטחה

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

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

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

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

בדוגמה החמישית, הכלל במדיניות האבטחה POLICY_5 ב-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_5 \
    --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_5: השם של מדיניות האבטחה

בדוגמה השישית, אנחנו מעדכנים את הכלל במדיניות האבטחה POLICY_6 ב-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_6 \
    --target-rule-set "sqli-v422-stable" \
    --target-rule-ids "owasp-crs-v042200-id942110-sqli,owasp-crs-v042200-id942120-sqli"

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

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

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

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

‫Cloud Armor תומך בסוגי הקידוד הבאים:

  • JSON
  • GraphQL

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

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