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 נפרד משאר המערכת.

יכולות מרכזיות:

ה-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