Data Hop Firewall: יישום Zero Trust ו-DLP ב-Rust ו-Envoy
מאת שי מרדכי | 8 במרץ 2026
הפרויקט הזה (wasm-dlp-firewall) נולד מתוך צורך פרקטי עבור מוצר SaaS שפיתחתי. כשהעליתי את תשתית ה-EC2 ב-AWS, שמתי לב מהר מאוד שבוטים מכל רחבי העולם מתחילים לסרוק את השרתים ולחפש חולשות. זה הוביל אותי לתכנן מחדש את רמת האבטחה של התשתית, ולהטמיע מודל Zero Trust מחמיר.
1. הקשחת התשתית (Infrastructure Hardening)
הצעד הראשון היה למנוע גישה ישירה לשרת. סגרתי לחלוטין את כל הפורטים הנכנסים ל-EC2. במקומם, הקמתי Cloudflare Tunnel – כך שהתעבורה נכנסת אך ורק דרך תווך מאובטח. את הגישה האישית שלי למערכת אבטחתי באמצעות תיבת Proton Mail עסקית שמוגנת באימות חומרתי מבוסס מפתח USB (Security Key). ברמת ה-Runtime, שירותי האפליקציה בודדו בתוך Containers שרצו יחד ב-Pod של Podman.
2. הגנה בשכבת האפליקציה
אחרי שקראתי על וקטורי תקיפה מודרניים כמו React2Shell, ולאור המחקרים הקודמים שלי על V8 ועל חולשת Log4j (מ-2022), הבנתי שההקשחה הרשתית אינה מספיקה. האיום המרכזי בארכיטקטורת Microservices הוא API Over-fetching (CWE-201/CWE-209) – מצב שבו ה-Backend מחזיר אובייקטים מלאים מהמסד נתונים, וסומך על ה-Frontend (למשל React) שיסנן מידע רגיש. מצב זה עלול להוביל לזליגת PII, טוקנים פנימיים, או Stack Traces.
חשבתי בתחילה על פילטור ברמת הקרנל עם eBPF — אבל הבנתי שהוא Read-Only לPayloads ולא מאפשר שינוי תוכן בפועל. הגעתי לפתרון דרך Cloudflare Tunnel שכבר הכרתי: WASM filter ב-Rust על גבי Envoy, שיושב ב-User Space אבל שולט על תוכן ה-HTTP Response לפני שהוא יוצא.
החלטתי להעביר את האחריות על ניקוי המידע משכבת האפליקציה אל שכבת התשתית.
3. הארכיטקטורה של Wasm DLP Firewall
בניתי רכיב סינון חכם עבור Envoy Proxy. בחרתי לכתוב אותו ב-Rust ולקמפל אותו ל-WebAssembly (wasm32-wasi). הבחירה ב-Rust הבטיחה יעילות מקסימלית, בעוד ה-Wasm סיפק את הבידוד בcontainer נפרד משאר המערכת.
יכולות מרכזיות:
- Recursive JSON Redaction: סריקה עמוקה של תוכן ה-Response ומיסוך מפתחות רגישים (כמו Passwords או Secrets) על בסיס חוקים לוגיים.
- Logical Data TTL: תמיכה בהאדרים מותאמים אישית (כגון
X-Data-TTL) כדי להפעיל סניטיזציה. - Fail-Closed Security: אם לא ניתן לפענח או לבדוק את ה-Payload בבטחה, הבקשה פשוט נשמטת (Dropped).
ה-Data Hop Firewall מזהה אוטומטית שגיאות 5xx לפני שהן עוזבות את הרשת הפנימית, מאתר מחרוזות מערכת (כמו "Stack Trace" או "System.Web"), ומחליף את ה-Payload הרגיש בתגובת JSON נקייה וסטנדרטית:
{
"status": "error",
"message": "Internal Security Proxy Intervention",
"code": 500
}
כך, גם אם המפתח שכח להגדיר customErrors="On" באפליקציה, מנגנון ה-Zero-Trust מבטיח שמידע על תצורת השרת לעולם לא ידלוף לאינטרנט.
[🔗 צפו בקוד המלא (Rust / Envoy Wasm) ב-GitHub]
5.7.26 תובנות ל-Malware Analysis
- קבצי WASM הם עולם ה-Native של הדפדפנים, בדומה לקבצי SO באנדרואיד.
- הם עדיין כפופים ל-Sandbox של הדפדפן, לעומת Native באנדרואיד.
- נוזקות יחביאו שם קוד כבד שדורש חישובים מהירים, כי הוא כבר מקומפל ורץ ישירות על המעבד.