במאמר הזה מוסבר איך להגדיר ולשפר את הכללים המוגדרים מראש של חומת האש לאפליקציות אינטרנט (WAF) ב-Google Cloud Armor, כדי להגן על האפליקציה מפני התקפות. אם אתם לא מכירים כללי WAF שהוגדרו מראש, כדאי לעיין בסקירה הכללית.
הגדרת כלל WAF שהוגדר מראש
בקטע הזה מופיעות תבניות של כללי WAF שהוגדרו מראש, שאפשר להעתיק אל Cloud de Confiance המסוף ולהתאים אישית לתרחיש השימוש שלכם. בכל דוגמה של פקודת 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