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

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

הגדרת כלל WAF שהוגדר מראש

בקטע הזה מופיעות תבניות של כללי WAF שהוגדרו מראש, שאפשר להעתיק אל Google Cloud המסוף ולהתאים אישית לתרחיש השימוש שלכם. בכל דוגמה של פקודת Google Cloud CLI, מגדירים מדיניות אבטחה עם שם POLICY_NAME ועדיפות PRIORITY.

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

המסוף

בוחרים באפשרות מצב מתקדם, ואז משתמשים בביטוי לדוגמה הבא בשדה התאמה:

evaluatePreconfiguredWaf('RULE_NAME', {'sensitivity': SENSITIVITY})

gcloud

gcloud compute security-policies rules create PRIORITY \
    --security-policy POLICY_NAME  \
    --expression "evaluatePreconfiguredWaf('RULE_NAME', {'sensitivity': SENSITIVITY})" \
    --action deny-403

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

  • PRIORITY: העדיפות של מדיניות האבטחה
  • POLICY_NAME: השם של מדיניות האבטחה שרוצים להגדיר
  • RULE_NAME: שם כלל ה-WAF שרוצים להגדיר
  • SENSITIVITY: רמת הרגישות של כלל ה-WAF

הדוגמה השנייה דומה לראשונה, אבל היא מבטלת את החתימות של הכללים SIGNATURE_1 ו-SIGNATURE_2. המשמעות היא ששני החתימות האלה לא מוערכות כשכלל ה-WAF מוערך:

המסוף

בוחרים באפשרות מצב מתקדם, ואז משתמשים בביטוי לדוגמה הבא בשדה התאמה:

evaluatePreconfiguredWaf('RULE_NAME', {'sensitivity': SENSITIVITY, 'opt_out_rule_ids': ['SIGNATURE_1', 'SIGNATURE_2']})

gcloud

gcloud compute security-policies rules create PRIORITY \
    --security-policy POLICY_NAME  \
    --expression "evaluatePreconfiguredWaf('RULE_NAME', {'sensitivity': SENSITIVITY, 'opt_out_rule_ids': ['SIGNATURE_1', 'SIGNATURE_2']})" \
    --action deny-403

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

  • PRIORITY: העדיפות של מדיניות האבטחה
  • POLICY_NAME: השם של מדיניות האבטחה שרוצים להגדיר
  • RULE_NAME: שם כלל ה-WAF שרוצים להגדיר
  • SENSITIVITY: רמת הרגישות של כלל ה-WAF
  • SIGNATURE_1: השם של חתימת ה-WAF שרוצים להשבית
  • SIGNATURE_2: השם של חתימת ה-WAF שרוצים להשבית.

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

המסוף

בוחרים באפשרות מצב מתקדם, ואז משתמשים בביטוי לדוגמה הבא בשדה התאמה:

evaluatePreconfiguredWaf('RULE_NAME', {'sensitivity': 0, 'opt_in_rule_ids': ['SIGNATURE_1', 'SIGNATURE_2']})

gcloud

gcloud compute security-policies rules create PRIORITY \
    --security-policy POLICY_NAME  \
    --expression "evaluatePreconfiguredWaf('RULE_NAME', {'sensitivity': 0, 'opt_in_rule_ids': ['SIGNATURE_1', 'SIGNATURE_2']})" \
    --action deny-403

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

  • PRIORITY: העדיפות של מדיניות האבטחה
  • POLICY_NAME: השם של מדיניות האבטחה שרוצים להגדיר
  • RULE_NAME: שם כלל ה-WAF שרוצים להגדיר
  • SIGNATURE_1: השם של חתימת ה-WAF שרוצים להשבית
  • SIGNATURE_2: השם של חתימת ה-WAF שרוצים להשבית

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

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

כללי WAF שהוגדרו מראש ב-Cloud Armor יכולים לבדוק רק עד 64 kB הראשונים (8 kB,‏ 16 kB,‏ 32 kB,‏ 48 kB או 64 kB) של גוף הבקשה. אתם יכולים להגדיר מדיניות אבטחה באופן ידני כדי להשתמש באחד ממגבלות הבדיקה האלה עבור כללי WAF שהוגדרו מראש.

הפקודה הבאה מגדירה את מגבלת הבדיקה של כל כללי ה-WAF שהוגדרו מראש במדיניות POLICY_NAME ל-8 kB באמצעות הדגל --request-body-inspection-size. מידע נוסף על מגבלות הבדיקה של כללי ה-WAF שהוגדרו מראש זמין במאמר בנושא מגבלות על בדיקת גוף הבקשה.

gcloud compute security-policies update POLICY_NAME \
    --request-body-inspection-size=8kB

מחליפים את POLICY_NAME בשם של מדיניות האבטחה שרוצים להגדיר.

באופן דומה, אפשר להשתמש בדגל --request-body-inspection-size כדי להגדיר את מגבלת הבדיקה של כל כללי ה-WAF שהוגדרו מראש ואפשר להשתמש בהם במדיניות POLICY_NAME. המגבלה יכולה להיות 16 kB,‏ 32 kB,‏ 48 kB או 64 kB.

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

כשכלל WAF שהוגדר מראש מוערך במדיניות אבטחה של Cloud Armor, המערכת בודקת עד 64 kB הראשונים (8 kB,‏ 16 kB,‏ 32 kB,‏ 48 kB או 64 kB) של גוף הבקשה כדי לראות אם יש התאמות לחתימות מול כללי ה-WAF.

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

gcloud compute security-policies rules create 10 \
    --security-policy my-policy \
    --expression "int(request.headers['content-length']) > 8192" \
    --action deny-403 \
    --description "Block requests greater than 8 kB"

באופן דומה, אפשר ליצור כלל שיחסום תנועה שחורגת ממגבלות הבדיקה שהוגדרו של 16 kB,‏ 32 kB,‏ 48 kB או 64 kB בגודל גוף הבקשה. לדוגמה, הפקודה הבאה מראה איך ליצור את הכלל הזה למגבלת הבדיקה של 64 kB ‏ (65,536 בייט).

gcloud compute security-policies rules create 10 \
    --security-policy my-policy \
    --expression "int(request.headers['content-length']) > 65536" \
    --action deny-403 \
    --description "Block requests greater than 64 kB"

דוגמאות

בדוגמאות שבקטע הזה מודגשים היבטים חשובים של יצירה והתאמה של כללי WAF שהוגדרו מראש, כולל רמת הרגישות וחריגים של חתימות. בכל פקודות הדוגמה של ה-CLI של gcloud, יוצרים מדיניות אבטחה עם השם POLICY_NAME בעדיפות PRIORITY.

יצירת כלל ברמת רגישות נתונה

בדוגמה הזו, אתם משתמשים בכל החתימות בכלל sqli-v33-stable של WAF עם רמת רגישות נמוכה מ-4. לכן, יוצרים את הכלל ברמת רגישות 3, שכוללת את כל החתימות עם רמת רגישות שקטנה או שווה ל-3:

המסוף

בוחרים באפשרות מצב מתקדם, ואז משתמשים בביטוי לדוגמה הבא בשדה התאמה:

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

gcloud

gcloud compute security-policies rules create PRIORITY \
    --security-policy POLICY_NAME  \
    --expression "evaluatePreconfiguredWaf('sqli-v33-stable', {'sensitivity': 3})" \
    --action deny-403

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

  • PRIORITY: העדיפות של מדיניות האבטחה
  • POLICY_NAME: השם של מדיניות האבטחה שרוצים להגדיר

יצירת כלל להסרת חתימה אחת או יותר

בדוגמה הזו, אתם משתמשים כמעט בכל החתימות ברמת הרגישות 1 ו-2 בכלל xss-v33-stable WAF, אבל אתם רוצים להחריג את החתימה owasp-crs-v030301-id941370-xss, שבודקת משתנים גלובליים של JavaScript. לכן, יוצרים את הכלל ברמת רגישות 2 ומשתמשים בארגומנט opt_out_rule_ids כדי לבטל את החתימה owasp-crs-v030301-id941370-xss:

המסוף

בוחרים באפשרות מצב מתקדם, ואז משתמשים בביטוי לדוגמה הבא בשדה התאמה:

evaluatePreconfiguredWaf('xss-v33-stable', {'sensitivity': 2, 'opt_out_rule_ids': ['owasp-crs-v030301-id941370-xss']})

gcloud

gcloud compute security-policies rules create PRIORITY \
    --security-policy POLICY_NAME  \
    --expression "evaluatePreconfiguredWaf('xss-v33-stable', {'sensitivity': 2, 'opt_out_rule_ids': ['owasp-crs-v030301-id941370-xss']})" \
    --action deny-403

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

  • PRIORITY: העדיפות של מדיניות האבטחה
  • POLICY_NAME: השם של מדיניות האבטחה שרוצים להגדיר

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

המסוף

בוחרים באפשרות מצב מתקדם, ואז משתמשים בביטוי לדוגמה הבא בשדה התאמה:

evaluatePreconfiguredWaf('xss-v33-stable', {'sensitivity': 2, 'opt_out_rule_ids': ['owasp-crs-v030301-id941370-xss', 'owasp-crs-v030301-id941380-xss']})

gcloud

gcloud compute security-policies rules create PRIORITY \
    --security-policy POLICY_NAME  \
    --expression "evaluatePreconfiguredWaf('xss-v33-stable', {'sensitivity': 2, 'opt_out_rule_ids': ['owasp-crs-v030301-id941370-xss', 'owasp-crs-v030301-id941380-xss']})" \
    --action deny-403

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

  • PRIORITY: העדיפות של מדיניות האבטחה
  • POLICY_NAME: השם של מדיניות האבטחה שרוצים להגדיר

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

בדוגמה הזו נעשה שימוש רק בחתימה owasp-crs-v030001-id941150-xss מכלל ה-WAF‏ xss-v33-stable. החתימה בודקת מאפייני HTML אסורים, והיא ברמת רגישות 2. לכן, יוצרים את הכלל ברמת הרגישות 0 ומשתמשים בארגומנט opt_in_rule_ids כדי להוסיף את החתימה owasp-crs-v030001-id941150-xss. שימו לב שאפשר להביע הסכמה לחתימות של כללים רק כשמגדירים את רמת הרגישות ל0:

המסוף

בוחרים באפשרות מצב מתקדם, ואז משתמשים בביטוי לדוגמה הבא בשדה התאמה:

evaluatePreconfiguredWaf('xss-v33-stable', {'sensitivity': 0, 'opt_in_rule_ids': ['owasp-crs-v030301-id941150-xss']})

gcloud

gcloud compute security-policies rules create PRIORITY \
    --security-policy POLICY_NAME  \
    --expression "evaluatePreconfiguredWaf('xss-v33-stable', {'sensitivity': 0, 'opt_in_rule_ids': ['owasp-crs-v030301-id941150-xss']})" \
    --action deny-403

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

  • PRIORITY: העדיפות של מדיניות האבטחה
  • POLICY_NAME: השם של מדיניות האבטחה שרוצים להגדיר

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

המסוף

בוחרים באפשרות מצב מתקדם, ואז משתמשים בביטוי לדוגמה הבא בשדה התאמה:

evaluatePreconfiguredWaf('xss-v33-stable', {'sensitivity': 0, 'opt_in_rule_ids': ['owasp-crs-v030301-id941150-xss', 'owasp-crs-v030301-id941320-xss']})

gcloud

gcloud compute security-policies rules create PRIORITY \
    --security-policy POLICY_NAME  \
    --expression "evaluatePreconfiguredWaf('xss-v33-stable', {'sensitivity': 0, 'opt_in_rule_ids': ['owasp-crs-v030301-id941150-xss', 'owasp-crs-v030301-id941320-xss']})" \
    --action deny-403

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

  • PRIORITY: העדיפות של מדיניות האבטחה
  • POLICY_NAME: השם של מדיניות האבטחה שרוצים להגדיר

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