פרויקט האבטחה של יישומים פתוח ברחבי העולם הוא קהילת מקוונת המייצרת מאמרים, שיטות, תיעוד, כלים וטכנולוגיות בחינם בתחומים של אינטרנט של דברים, תוכנה מערכתיות ואבטחת יישומים מקוונים. ה-OWASP מספק משאבים חופשיים ופתוחים. הוא מובל על ידי עמותה ללא כוונת רווח בשם ה-OWASP Foundation. ה-OWASP Top 10 – 2021 הוא התוצאה הפרסומית של מחקר עדכני המבוסס על נתונים מקיפים שנאסף מיותר מ-40 מיזם שותף.
ה-OWASP מתעדכן באופן קבוע בדו"ח על תכונות ה-Top 10. הדו"ח מכוון לפגמים ביישומים מקוונים.
בפוסט זה, אני רוצה לתאר כיצד לתקן חלק מהם באמצעות שער ה-API של Apache APISIX.
ה-OWASP Top 10 2021
ב-2021, הדו"ח מזכיר:
- A01:2021-שבר בשליטה על הגישה
- A02:2021-כשלים קריפטוגרפיים
- A03:2021-הזרה
- A04:2021-בטיחות לא מאובטחת
- A05:2021-פגם בפעילות בטיחותית
- A06:2021-רכיבים פגומים ומאוחרים
- A07:2021-כשלים בזיהוי ואימות
- A08:2021-כשלים באימות ובשליטה על איכות התוכנה והנתונים
- A09:2021-כשלים בתיעוד ובניטור בטיחותי
- A10:2021-בקשת גישה מרכזית מצד השרת
לקבלת פרטים נוספים, נא לבדוק את הדוח המלא report.
תיקון פגיעות תלוי בטבעם המדויק. לדוגמה, תיקון Vulnerable and Outdated Components הוא תהליך מונחה, דורש משמעת בניהול גרסאות ובטלת גרסאות ישנות. עם זאת, יש כאלה שהם טכניים ודורשים רק התקנה נכונה בפרוטוקול הפוך או שער ה-API, למשל, Server Side Request Forgery.
אף אחד לא מכיר באבטחה
אבטחה היא נושא רגיש מכיוון שהחזקת אבטחה אינה מביאה ערך לעסק. מנהלים מונעים על ידי קריירה לא יהיו אכפתיים מאבטחה מכיוון שלא יוכלו להציג שהם הגדילו את רווח החברה ב-X% בערכה השנתית הבאה שלהם. אלא אם כן ההנהלה רואה באבטחה ברצינות, סביר להניח שאף אחד לא יאכלל. מסיבה זו, רוב הארגונים מיישמים אבטחה מבוססת תיבות ביקורת, כלומר, שליטה פלוסיבית. אם אתה מעוניין ליישם אבטחה באופן נכון, כתבתי כמה מחשבות בפוסט בלוג קודם: "Treat Security as a Risk."
בסך הכל, אבטחת אפליקציות לא תקבל הרבה תקציב, אם בכלל. לכן, עלינו להיות חכמים בנוגע אליו ולחפש רכיב קיים. למרבה המזל, OWASP מציעה התקנה מוכן מראש להתמודדות עם 10 הראשונים, שניתן לתקן דרך התקנה הנקרא Core Rule Set. למרבה הצער, זה מכוון ל-ModSecurity:
ModSecurity, בשם הקיצור Modsec, היא שער אינטרנט פתוח המיועד לאבטחת יישומים ווב (WAF). תוכנן במקור כמודול לשרת ה HTTP של Apache, התפתח לכך שהוא מספק מגוון של יכולות סנכרון בקשות ותגובות של HTTP וכן תכונות אבטחה נוספות ברחבי מספר פלטפורמות, כולל שרת ה- HTTP של Apache, Microsoft IIS ו- Nginx. זהו תוכנה חופשית המשוחררת תחת רישיון Apache 2.0.
למרות שזה בכלליות אפשרי להגדיר את Nginx דרך הגדרות Apache APISIX, ישנה דרך ישירה יותר.
תוכנת הכללים המרכזית של OWASP ו- Coraza
התיאור של תוכנת הכללים המרכזית הוא די רלוונטי לצרכינו:
תוכנת הכללים המרכזית של OWASP® ModSecurity (CRS) היא קבוצה של כללים זיהוי תקיפה גנריים לשימוש עם ModSecurity או שערי אבטחת יישומים ווב מתאימים. ה- CRS מטרתו להגן על יישומים ווב מפני מגוון רחב של תקיפות, כולל את העשר העיקרי של OWASP, עם מינימום של אזעקות שגויות. ה- CRS מספק הגנה מול קטגוריות רבות של תקיפות נפוצות, כולל:
- הזרקת SQL (SQLi)
- סקריפטים מרוחקים (XSS)
- כניסה לקובץ מקומי (LFI)
- כניסה לקובץ רחוק (RFI)
- הזרקת קוד PHP
- הזרקת קוד Java
- HTTPoxy
- Shellshock
- הזרקת קוד של פלטפורמת Unix/Windows
- תיקון סדר שיחה
- זיהוי סקריפטים/סורגים/בוטים
- דלוגים/דליפות שגיאות
OWASP מספק גם Coraza, שינון של ModSecurity זמין כספריית Go. Coraza Proxy Wasm מבוסס על Coraza ומיישם את ABI של proxy-wasm, שמגדיר אוסף של ממשקים Wasm למסכים. לבסוף, Apache APISIX מספק שילוב proxy-wasm.
להרכיב הכול יחד
בואו נסכם:
- OWASP מספק רשימה של 10 הנכונים ביותר של פגמים אבטחה אינטרנטיים.
- היא מיישמת אותם עבור ModSecurity דרך Core Ruleset.
- Coraza היא שינון של ModSecurity, זמין כיישום proxy-wasm.
אנו יכולים להגדיר את Apache APISIX עם נטיבים בטיחוניים ואבטחה כזה. בואו נעשה זאת.
קודם כל: Coraza אינה חלק מהתקן של Apache APISIX. עם זאת, קל להוסיף אותה כאן עם Docker:
FROM apache/apisix:3.8.0-debian
ENV VERSION 0.5.0 #1
ENV CORAZA_FILENAME coraza-proxy-wasm-${VERSION}.zip #1
ADD https://github.com/corazawaf/coraza-proxy-wasm/releases/download/$VERSION/$CORAZA_FILENAME . #2
USER root #3
RUN <<EOF
apt-get install zip -y #4
unzip $CORAZA_FILENAME -d /usr/local/apisix/proxywasm
rm $CORAZA_FILENAME
apt-get remove zip -y
chown -R apisix:apisix /usr/local/apisix/proxywasm
EOF
USER apisix #5
- הגדר משתנים לשמירה טובה יותר על תחזוקה
- קבל את השחרור של Coraza Wasm.
- בגרסאות APISIX האחרונות, המשתמש הוא
apisix
להתמקדות באבטחה. כשאנו צריכים להתקין חבילות, עלינו לעבור לroot
. - התקן
unzip
מאחר שהוא אינו מותקן, פרוס את הארייה ההורדה, הסר את הארייה, התקןunzip
, ושנה את בעלות התיקייה המופרשת. - חזור חזרה למשתמש
apisix
.
השלב הבא הוא הגדרת APISIX עצמו להשתמש בתוסף Coraza Wasm.
wasm:
plugins:
- name: coraza-filter #1
priority: 7999 #2
file: /usr/local/apisix/proxywasm/coraza-proxy-wasm.wasm #3
- שמה של הפילטר בקוד Wasm
- קבע את העדיפות הגבוהה ביותר כך שהוא ירוץ לפני כל תוסף אחר.
- נתיב לקובץ הנפרד (ראה את
Dockerfile
לעיל)
לבסוף, אנו יכולים להקצות את התוסף לנתיבים או לקבוע אותו ככלל גלובלי ליישום לכל נתיב. אני משתמש בהגדרה סטטית:
global_rules:
- id: 1
plugins:
coraza-filter: #1
conf:
directives_map: #2
default:
- SecDebugLogLevel 9 #3
- SecRuleEngine On #4
- Include @crs-setup-conf #5
- Include @owasp_crs/*.conf #6
default_directives: default #7
- הגדר את התוסף
coraza-filter
, עכשיו כשהוא זמין. - הגדר הגדרות. כאן, אנו מגדירים אחת בודדת,
default
, אך יכולנו להגדיר מספר ולהשתמש באחרים בנתיבים שונים. - הגדל את רמת היומן כדי לראות מה קורה ביומנים.
- הדליק את המנוע.
- השתמש בהתקנת Coraza.
- השתמש בכל הכללים. יכולנו לבחור ולבחור את אלה שאנו רוצים לשליטה מדויקת יותר.
- השתמש בהגדרה
default
שהוגדרה לעיל.
אנו ממשיכים להגדיר נתיבים לבדוק את ההתקנה שלנו. בואו נקרא לנתיב ל /get
:
curl localhost:9080?user=foobar
התגובה כצפוי:
{
"args": {
"user": "foobar"
},
"headers": {
"Accept": "*/*",
"Host": "localhost",
"User-Agent": "curl/8.4.0",
"X-Amzn-Trace-Id": "Root=1-65b9fa13-75900dc029e156ec764ae204",
"X-Forwarded-Host": "localhost"
},
"origin": "192.168.65.1, 176.153.7.175",
"url": "http://localhost/get?user=foobar"
}
עכשיו, בואו ננסה לשלוח JavaScript במחרוזת השאילתה. אין סיכוי שבקשה זו צפויה בשירות השרת, כך שהמבנה שלנו צריך להגן עלינו מפני זה.
curl 'localhost:9080?user=<script>alert(1)</script>'
התגובה היא קוד HTTP 403. אם נסתכל ביומן, נוכל לראות את הרמזים הבאים:
Coraza: Warning. XSS Attack Detected via libinjection [file "@owasp_crs/REQUEST-941-APPLICATION-ATTACK-XSS.conf"]
Coraza: Warning. NoScript XSS InjectionChecker: HTML Injection
Coraza: Warning. Javascript method detected
Coraza: Access denied (phase 1). Inbound Anomaly Score Exceeded in phase 1
Coraza עשתה את העבודה!
מסקנה
רוב הארגונים אינם מעודדים את האבטחה. לכן, עלינו להיות חכמים בנושא ולהשתמש ברכיבים קיימים ככל האפשר.
אנו יכולים להתקין את אפטיין אפיסיקס נגד העליון 10 של OWASP על ידי שימוש בקוראזה ובקולוסט הכללי.
ללכת רחוק יותר
קוד המקור המלא לפוסט זה ניתן למצוא בGitHub.
Source:
https://dzone.com/articles/hardening-apache-apisix-with-the-owasps-coraza-and