במאמר הזה מוסבר איך להגדיר ולשפר את כללי חומת האש (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-v422-stable WAF עם רמת רגישות נמוכה מ-4. לכן, יוצרים את הכלל ברמת הרגישות 3, שכוללת את כל החתימות עם רמת רגישות שקטנה או שווה ל-3:
המסוף
בוחרים באפשרות מצב מתקדם, ואז משתמשים בביטוי לדוגמה הבא בשדה התאמה:
evaluatePreconfiguredWaf('sqli-v422-stable', {'sensitivity': 3})
gcloud
gcloud compute security-policies rules create PRIORITY \
--security-policy POLICY_NAME \
--expression "evaluatePreconfiguredWaf('sqli-v422-stable', {'sensitivity': 3})" \
--action deny-403
מחליפים את מה שכתוב בשדות הבאים:
-
PRIORITY: העדיפות של מדיניות האבטחה -
POLICY_NAME: השם של מדיניות האבטחה שרוצים להגדיר
יצירת כלל להשבתה של חתימה אחת או יותר
בדוגמה הזו, אתם משתמשים כמעט בכל החתימות ברמת הרגישות 1 ו-2 בכלל xss-v422-stable WAF, אבל אתם רוצים להחריג את החתימה owasp-crs-v042200-id941370-xss, שבודקת משתנים גלובליים של JavaScript.
לכן, יוצרים את הכלל ברמת רגישות 2 ומשתמשים בארגומנט opt_out_rule_ids כדי לבטל את ההסכמה לחתימה owasp-crs-v042200-id941370-xss:
המסוף
בוחרים באפשרות מצב מתקדם, ואז משתמשים בביטוי לדוגמה הבא בשדה התאמה:
evaluatePreconfiguredWaf('xss-v422-stable', {'sensitivity': 2, 'opt_out_rule_ids': ['owasp-crs-v042200-id941370-xss']})
gcloud
gcloud compute security-policies rules create PRIORITY \
--security-policy POLICY_NAME \
--expression "evaluatePreconfiguredWaf('xss-v422-stable', {'sensitivity': 2, 'opt_out_rule_ids': ['owasp-crs-v042200-id941370-xss']})" \
--action deny-403
מחליפים את מה שכתוב בשדות הבאים:
-
PRIORITY: העדיפות של מדיניות האבטחה -
POLICY_NAME: השם של מדיניות האבטחה שרוצים להגדיר
כדי להחריג שני חתימות או יותר מכלל, צריך לספק רשימה של חתימות שמופרדת בפסיקים עם הארגומנט opt_out_rule_ids, באופן הבא:
המסוף
בוחרים באפשרות מצב מתקדם, ואז משתמשים בביטוי לדוגמה הבא בשדה התאמה:
evaluatePreconfiguredWaf('xss-v422-stable', {'sensitivity': 2, 'opt_out_rule_ids': ['owasp-crs-v042200-id941370-xss', 'owasp-crs-v042200-id941380-xss']})
gcloud
gcloud compute security-policies rules create PRIORITY \
--security-policy POLICY_NAME \
--expression "evaluatePreconfiguredWaf('xss-v422-stable', {'sensitivity': 2, 'opt_out_rule_ids': ['owasp-crs-v042200-id941370-xss', 'owasp-crs-v042200-id941380-xss']})" \
--action deny-403
מחליפים את מה שכתוב בשדות הבאים:
-
PRIORITY: העדיפות של מדיניות האבטחה -
POLICY_NAME: השם של מדיניות האבטחה שרוצים להגדיר
יצירת כלל להוספת חתימה אחת או יותר
בדוגמה הזו נעשה שימוש רק בחתימה owasp-crs-v042200-id941150-xss מכלל ה-WAF xss-v422-stable. החתימה בודקת מאפייני HTML אסורים, והיא ברמת רגישות 2.
לכן, יוצרים את הכלל ברמת הרגישות 0 ומשתמשים בארגומנט opt_in_rule_ids כדי להוסיף את החתימה owasp-crs-v042200-id941150-xss. שימו לב שאפשר להביע הסכמה לחתימות של כללים רק כשמגדירים את רמת הרגישות ל0:
המסוף
בוחרים באפשרות מצב מתקדם, ואז משתמשים בביטוי לדוגמה הבא בשדה התאמה:
evaluatePreconfiguredWaf('xss-v422-stable', {'sensitivity': 0, 'opt_in_rule_ids': ['owasp-crs-v042200-id941150-xss']})
gcloud
gcloud compute security-policies rules create PRIORITY \
--security-policy POLICY_NAME \
--expression "evaluatePreconfiguredWaf('xss-v422-stable', {'sensitivity': 0, 'opt_in_rule_ids': ['owasp-crs-v042200-id941150-xss']})" \
--action deny-403
מחליפים את מה שכתוב בשדות הבאים:
-
PRIORITY: העדיפות של מדיניות האבטחה -
POLICY_NAME: השם של מדיניות האבטחה שרוצים להגדיר
אם רוצים לכלול שני חתימות או יותר מכלל, צריך לספק רשימה של חתימות מופרדות בפסיקים עם הארגומנט opt_in_rule_ids, באופן הבא:
המסוף
בוחרים באפשרות מצב מתקדם, ואז משתמשים בביטוי לדוגמה הבא בשדה התאמה:
evaluatePreconfiguredWaf('xss-v422-stable', {'sensitivity': 0, 'opt_in_rule_ids': ['owasp-crs-v042200-id941150-xss', 'owasp-crs-v042200-id941320-xss']})
gcloud
gcloud compute security-policies rules create PRIORITY \
--security-policy POLICY_NAME \
--expression "evaluatePreconfiguredWaf('xss-v422-stable', {'sensitivity': 0, 'opt_in_rule_ids': ['owasp-crs-v042200-id941150-xss', 'owasp-crs-v042200-id941320-xss']})" \
--action deny-403
מחליפים את מה שכתוב בשדות הבאים:
-
PRIORITY: העדיפות של מדיניות האבטחה -
POLICY_NAME: השם של מדיניות האבטחה שרוצים להגדיר
המאמרים הבאים
- מידע נוסף על שיפור כללי WAF זמין במאמר שיפור כללי WAF שהוגדרו מראש ב-Cloud Armor