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) כדי למנוע שגיאות בהגדרות.
אפשר גם להשבית מזהי חתימות באמצעות הביטוי מדור קודם evaluatePreconfiguredExpr. מידע נוסף על ביטויים של כללי 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:
ARGSARGS_GETREQUEST_URIREQUEST_URI_RAWREQUEST_LINE
רק הערך של פרמטרים ספציפיים של שאילתה מוחרג מבדיקה, והוא יכול להיות במחרוזת השאילתה או בגוף הבקשה. השם עדיין נבדק.
מכיוון שפרמטרים של שאילתה הם חלק מה-URI ומשורת הבקשה, השדות האלה מורכבים מחדש לצורך בדיקה אחרי החרגה של הפרמטרים של השאילתה שצוינו. עם זאת, בחתימות שבודקות את כל גוף הבקשה (כמו חתימות שמשויכות לדגל הבקשה REQUEST_BODY), ההחרגה של פרמטרים של שאילתות לא חלה.
לדוגמה, אם אתם מוציאים מהכלל פרמטר שאילתה בשם args, יכול להיות שעדיין תראו התאמה בחתימה שבודקת את כל גוף הבקשה, אם בבקשה יש פרמטר args בגוף הבקשה והערך של args תואם.
מזהי URI של בקשות
רשימה של מזהי URI משורת הבקשה, לא כולל נתוני מחרוזת השאילתה, שיוחרגו מבדיקה במהלך הערכה של כלל WAF שהוגדר מראש.
ההחרגה רלוונטית רק לחתימות ביעד שבודקות את ה-URI של הבקשה במקור. החתימות האלה כוללות חתימות שמשויכות לדגלי הבקשה הבאים ב-OWASP Core Rule Set:
REQUEST_URIREQUEST_URI_RAWREQUEST_LINEREQUEST_FILENAMEREQUEST_BASENAME
כשמוציאים מהכלל אחד מהשדות שצוינו למעלה, השדה מוצא מהכלל לחלוטין מהבדיקה, ולא מתבצעת הרכבה מחדש.
ערכי שדות
אם משתמשים באופרטור שדה שאינו EQUALS_ANY, צריך לציין ערך שדה.
בכותרות של בקשות, בקובצי Cookie של בקשות ובפרמטרים של שאילתות של בקשות, מערכת התווים המותרת לערכי שדות כוללת את התווים הבאים:
-
!,#,$,%,&,*,+,-,.,^,_,`,|,~ - תווים אלפביתיים
AעדZ(אותיות קטנות וגדולות) - תווים של ספרות
0עד9
כשמחילים החרגות על השדות האלה של הבקשה, ערכי השדות שמוגדרים מושווים כמו שהם לערכים (לא תלויי-רישיות, אחרי טרנספורמציה) מהבקשה. אם רוצים להחריג תו ספציפי שלא נכלל בקבוצת התווים המותרים, לא צריך לבצע קידוד נוסף.
עבור כתובות URI של בקשות, ערך השדה צריך להיות בפורמט URI, באופן הבא:
- מותר להשתמש בסכימה, אבל היא מוגבלת ל-http או ל-https בלבד.
- מותר להשתמש במארח, והוא יכול להיות כתובת IP.
- מותר לפרסם יציאה.
- מותר להשתמש בנתיב.
- אין אפשרות להריץ שאילתה.
- אסור להשתמש בפרגמנט.
כשמחילים החרגות על מזהי URI של בקשות, ערכי השדות שמוגדרים מושווים למזהי ה-URI (לא תלויים באותיות רישיות, אחרי טרנספורמציה) משורת הבקשה, לא כולל מחרוזת השאילתה. ה-URI משורת הבקשה יכול להיות יחסי או מוחלט. כדאי לקחת את זה בחשבון כשמגדירים החרגות של מזהי URI של בקשות.
דוגמאות
בדוגמה הראשונה, הכלל במדיניות האבטחה POLICY_1 ב-PRIORITY מתעדכן כדי להוסיף הגדרת החרגה לכל החתימות במסגרת כלל ה-WAF שהוגדר מראש sqli-v422-stable, וכך להחריג את כל קובצי ה-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
מידע נוסף מופיע במאמר בנושא ניתוח תוכן של גוף הבקשה.
המאמרים הבאים
- מידע נוסף על הגדרת מדיניות אבטחה
- מידע נוסף על חתימות של כללים שזמינות לכללי WAF שהוגדרו מראש
- מידע נוסף על כללי WAF שהוגדרו מראש זמין בהפניה לשפה של כללים בהתאמה אישית.