מידע על סריקת מצב האבטחה ב-Kubernetes

במסמך הזה מוסבר איך להשתמש בסריקת מצב האבטחה של Kubernetes כדי למצוא סיכוני אבטחה ב-GKE ולצמצם אותם. המסמך הזה מיועד למי שכבר מכיר את הנושאים הבאים:

התכונה 'בדיקת מצב האבטחה של Kubernetes' היא חלק ממרכז הבקרה של מצב האבטחה. היא עוזרת לכם לזהות ולטפל באופן יזום בפגיעויות אבטחה באשכולות Google Kubernetes Engine ‏ (GKE). סריקת מצב האבטחה של Kubernetes כוללת את התכונות הבאות:

המסמך הזה מיועד למומחי אבטחה שמנטרים אשכולות כדי לזהות בעיות אבטחה. מידע נוסף על תפקידים נפוצים ומשימות לדוגמה שאנחנו מתייחסים אליהם בGoogle Cloud תוכן, זמין במאמר תפקידים נפוצים של משתמשים ומשימות ב-GKE.

במאמר ביקורת אוטומטית של עומסי עבודה לזיהוי בעיות בהגדרות מוסבר איך להפעיל את הסריקה של מצב האבטחה ב-Kubernetes ואיך להשתמש בה.

תמחור

השירות מוצע ב-GKE ללא תשלום נוסף.

הערכים שנוספים ל-Cloud Logging כפופים לתמחור של Cloud Logging.

מידע על ביקורת של הגדרות עומסי עבודה

לעומסי העבודה שפורסים ב-GKE צריכה להיות הגדרה מאובטחת שמגבילה את שטח הפנים להתקפה. יכול להיות שיהיה קשה לבדוק עומסי עבודה באשכולות שונים כדי לזהות בעיות בהגדרות באופן ידני בהיקף גדול. אתם יכולים להשתמש בלוח הבקרה של מצב האבטחה כדי לבצע ביקורת אוטומטית על ההגדרות של כל עומסי העבודה הפעילים בכמה אשכולות, ולקבל תוצאות מדורגות שניתן לפעול לפיהן והמלצות מוטות לשיפור מצב האבטחה.

במסגרת ביקורת על הגדרות של עומסי עבודה, כל עומס עבודה שנפרס נבדק מול קבוצת משנה של כללי מדיניות בתקני אבטחת ה-Pod. ביקורת על הגדרות של עומסי עבודה מתבצעת בתשתית של Google ולא נעשה שימוש במשאבי מחשוב בצמתים שלכם.

היתרונות של ביקורת על הגדרות עומסי עבודה

  • אוטומציה של זיהוי בעיות ידועות בהגדרות בכל עומסי העבודה.
  • קבלת המלצות פרקטיות לשיפור רמת האבטחה.
  • אפשר להשתמש במסוף Google Cloud כדי לקבל תצוגה ברמה גבוהה של בעיות בהגדרות.
  • כדאי להשתמש ב-Logging כדי לקבל נתיב של בעיות שניתן לבדיקה, וכך לשפר את הדיווח והניראות.

איך מתבצעת ביקורת על הגדרות עומס העבודה

לכל עומס עבודה (workload) שמתאים לכך, GKE סורק באופן רציף את המפרט של עומס העבודה ומשווה את השדות והערכים לאמצעי הבקרה שמוגדרים במדיניות האבטחה הבסיסית. לדוגמה, פוד עם spec.containers.securityContext.privileged=true לא עומד בתקן הבסיסי לאבטחת פודים, ופוד עם השדה spec.securityContext.runAsNonRoot שמוגדר ל-false לא עומד בתקן המוגבל. רשימת מדיניות האבטחה שנבדקת ב-GKE מופיעה במאמר מה נבדק בביקורת על הגדרת עומס העבודה?.

אחרי הסריקה והגילוי של בעיות, GKE מדרג את חומרת הבעיות שהתגלו בהגדרות על סמך אמצעי האבטחה המובנים. ‫GKE מקצה דירוג חומרה שיכול לעזור לכם להבין באיזו מהירות כדאי להגיב לבעיה. במסוףGoogle Cloud מוצגות התוצאות ופעולות מומלצות שאפשר לבצע כדי לפתור את הבעיות. בנוסף, GKE מוסיף רשומות ל-Cloud Logging לצורך מעקב וביקורת.

מה נבדק בביקורת על הגדרות עומסי העבודה?

סוג הטיפול שדות ערכים מותרים חוּמרה

מרחבי שמות של מארחים

אם יש פודים שמשתפים מרחבי שמות של מארחים, התהליכים בפוד יכולים לתקשר עם התהליכים במארח ולאסוף מידע על המארח, מה שעלול להוביל לבריחה מהקונטיינר.

  • spec.hostNetwork
  • spec.hostIPC
  • spec.hostPID
  • לא מוגדר או nil
  • false
גבוהה

מאגרי תגים עם הרשאות מיוחדות

קונטיינרים עם הרשאות מאפשרים גישה כמעט בלתי מוגבלת למארח. הם חולקים מרחבי שמות עם המארח, ואין להם קבוצת בקרה, seccomp,‏ AppArmor והגבלות יכולת.

  • spec.containers[*].securityContext.privileged
  • spec.initContainers[*].securityContext.privileged
  • spec.ephemeralContainers[*].securityContext.privileged
  • לא מוגדר או nil
  • false
גבוהה

גישה ליציאות של המארח

חשיפת יציאת מארח לקונטיינר מאפשרת לקונטיינר ליירט תעבורת נתונים לשירות מארח באמצעות היציאה הזו, או לעקוף כללי בקרת גישה לרשת, כמו הכללים ב-NetworkPolicy.

  • spec.containers[*].ports[*].hostPort
  • spec.initContainers[*].ports[*].hostPort
  • spec.ephemeralContainers[*].ports[*].hostPort
  • לא מוגדר או nil
  • 0
גבוהה

יכולות שאינן ברירת מחדל

לקונטיינר מוקצות יכולות שיכולות לאפשר פירצה בקונטיינר.

  • spec.containers[*].securityContext.capabilities.add
  • spec.initContainers[*].securityContext.capabilities.add
  • spec.ephemeralContainers[*].securityContext.capabilities.add
  • לא מוגדר או nil
  • AUDIT_WRITE
  • CHOWN
  • DAC_OVERRIDE
  • FOWNER
  • FSETID
  • KILL
  • MKNOD
  • NET_BIND_SERVICE
  • SETFCAP
  • SETGID
  • SETPCAP
  • SETUID
  • SYS_CHROOT
בינוני

טעינת נפחים של נתיבי מארח

hostPath volumes מאפשרים לטעון קבצים או ספריות מהמארח. הנפחים האלה יוצרים סיכוני אבטחה שעלולים להוביל לבריחה מהקונטיינר.

spec.volumes[*].hostPath לא מוגדר או nil בינוני

מסכה /proc שאינה ברירת מחדל

סוג ההרכבה שמוגדר כברירת מחדל /proc מסתיר נתיבים מסוימים ב-/proc כדי למנוע חשיפה של נתיבים שעלולה להוביל לדליפת מידע או ליציאה מהקונטיינר. שימוש בסוג שאינו ברירת המחדל מגביר את הסיכונים האלה.

  • spec.containers[*].securityContext.procMount
  • spec.initContainers[*].securityContext.procMount
  • spec.ephemeralContainers[*].securityContext.procMount
  • לא מוגדר או nil
  • ברירת מחדל
בינוני

Unsafe sysctls mask

אפשר להגדיר Pod כך שיאפשר שינוי של פרמטרים לא בטוחים של ליבת המערכת באמצעות מערכת הקבצים הווירטואלית /proc/sys. פרמטרים לא בטוחים לא תומכים במרחבי שמות, לא מבודדים כראוי את ההשפעה שלהם בין ה-Pods, עלולים לפגוע בבריאות של הצומת או לאפשר ל-Pod לקבל משאבים מעבר למגבלות שלו.

spec.securityContext.sysctls[*].name
  • לא מוגדר או nil
  • kernel.shm_rmid_forced
  • net.ipv4.ip_local_port_range
  • net.ipv4.ip_unprivileged_port_start
  • net.ipv4.tcp_syncookies
  • net.ipv4.ping_group_range
בינוני

הפעלה כמשתמש לא-בסיסי

אפשר לאפשר באופן מפורש למאגר לפעול כמשתמש Root אם ההנחיה runAsUser או USER במפרט התמונה מציינת את משתמש Root. היעדר אמצעי בקרה למניעת סיכונים כשמריצים כמשתמש Root מגביר את הסיכון לפירצה בקונטיינר.

  • spec.securityContext.runAsNonRoot
  • spec.containers[*].securityContext.runAsNonRoot
  • spec.initContainers[*].securityContext.runAsNonRoot
  • spec.ephemeralContainers[*].securityContext.runAsNonRoot
true בינוני

הסלמת הרשאות

אפשר להגדיר קונטיינר באופן מפורש כך שיאפשר הסלמת הרשאות (privilege escalation) בזמן ההפעלה. ההרשאה הזו מאפשרת לתהליך שנוצר בתוך הקונטיינר על ידי הפעלת קובץ הפעלה של set-user-id, ‏ set-group-id או יכולת קובץ, לקבל את ההרשאות שצוינו בקובץ ההפעלה. היעדר אמצעי בקרה למניעת סיכונים מגביר את הסיכון לפירצה בקונטיינר.

  • spec.containers[*].securityContext.allowPrivilegeEscalation
  • spec.initContainers[*].securityContext.allowPrivilegeEscalation
  • spec.ephemeralContainers[*].securityContext.allowPrivilegeEscalation
false בינוני

פרופיל AppArmor לא מוגבל

אפשר להגדיר קונטיינר באופן מפורש כך שלא יוגבל על ידי AppArmor. כך מוודאים שלא מוחל על הקונטיינר פרופיל AppArmor, ולכן הוא לא מוגבל על ידי הפרופילים האלה. השבתה של אמצעי בקרה למניעת סיכוני אבטחה מגבירה את הסיכון לבריחה מהקונטיינר.

metadata.annotations["container.apparmor.security.beta.kubernetes.io/*"] false נמוכה

בנוסף, מערכת GKE בודקת אם יש RoleBindings או ClusterRoleBindings של RBAC שמפנים לאחד מהמשתמשים או הקבוצות הבאים:

  • system:anonymous
  • system:authenticated
  • system:unauthenticated

אם קיימים קישורי RBAC שמפנים למשתמשים או לקבוצות האלה, יופיע במרכז הבקרה של מצב האבטחה ממצא בשם Effectively Anonymous Users Granted GKE Cluster Access (משתמשים אנונימיים קיבלו גישה לאשכול GKE) ברמת חומרה בינונית. המשתמשים והקבוצות האלה הם למעשה אנונימיים, ואסור להשתמש בהם ב-RoleBindings או ב-ClusterRoleBindings. מידע נוסף זמין במאמר איך להימנע משימוש בתפקידים ובקבוצות שמוגדרים כברירת מחדל.

מידע על הצגת עדכוני אבטחה דחופים

כשאנחנו מגלים נקודת חולשה ב-GKE, אנחנו מתקנים אותה ומפרסמים עדכון אבטחה דחוף לגביה. מידע על זיהוי, תיקון ולוחות זמנים מופיע במאמר תיקון פרצות אבטחה ב-GKE.

בלוח הבקרה של מצב האבטחה מוצגים עדכוני אבטחה שמשפיעים על האשכולות, על עומסי העבודה ועל מאגרי הצמתים במצב רגיל. התכונה הזו היא חלק מהיכולת Kubernetes security posture של לוח הבקרה security posture, והיא מופעלת באופן אוטומטי כשיוצרים אשכול Autopilot או Standard. כדי להפעיל סריקה של מצב האבטחה ב-Kubernetes, פועלים לפי ההוראות במאמר ביקורת אוטומטית של עומסי עבודה לאיתור בעיות בהגדרות.

במסוף Google Cloud מוצגים פרטים כמו אשכולות מושפעים, גרסאות וגרסאות מומלצות של תיקונים לשדרוגים, כדי לצמצם את נקודת החולשה. אתם רואים רק הודעות על בעיות שיש פתרון לבעיה שלהן באזור או באזור הזמינות של האשכול שלכם ב- Google Cloud .

כדי לראות עדכונים דחופים לגבי אשכולות שנרשמתם לסריקת מצב האבטחה שלהם ב-Kubernetes, עוברים אל מרכז הבקרה של מצב האבטחה:

מעבר אל 'רמת האבטחה'

כל העדכונים הדחופים שזמינים ומשפיעים על הסביבה שלכם מופיעים בקטע עדכוני אבטחה דחופים.

המאמרים הבאים