Site icon

סיכונים ואפשרויות תקיפה בקוברנטיס

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

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

מערכת הפעלה לקלאסטרים

קוברנטיס היא מערכת קוד פתוח לניהול ופריסה של יישומים על גבי קונטיינרים. בקוברנטיס ישנם אבני בניין שמספקים יחדיו מנגנונים לפריסה, ניהול ותחזוקה של היישומים וגודלם (סקייל, העלאת רכיבים חדשים ועוד). במקור קוברנטיס תוכנן לעבוד בצורה של לוסלי קאפלד (Loosely coupled) ועם האפשרות של הרחבות כדי לתמוך בעומסי עבודה (workloads) שונים, וכן עם האפשרות של הרחבות שניתנות לביצוע באמצעות דרכים שונות, בין היתר API.

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

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

תמיד אפשר להשוות את הפעולות בקוברנטיס לפעולות של מערכת הפעלה. כמו מערכת הפעלה רגילה, כך גם "קוברנטיס מאפשרת לכתוב תוכניות אשר רצות על הקלאסטר." תוכנית שרצה על קלאסטר תהיה בדרך כלל סוג של סרביס שמקבל בקשות ושולח תשובות, למשל, Web App. במקרה זה, קוברנטיס תפעיל את היישומים, תדאג לחלק את משאבי הקלאסטר, ותחליט מי ירוץ על איזה שרת ואיזה משאב מהשרת הוא יקבל. בנוסף, תדאג להשאיר אותם בחיים ולהפעיל אותם מחדש אם אחד מהם נופל.

קצת מושגים על הרכיבים הקיימים של קוברנטיס

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


התרשים נלקח מתוך האתר של Phoenixnap

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

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

סיכונים ואיומים

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

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

דיון נוסף בנושא A cloud full of attack points in LinkedIn.

סיכונים

לקוברנטיס ישנם תריסרי סיכונים ואיומים, החל מזהויות וגישה, דרך סיכונים ברמת Runtime ועד מיסקונפיגורציות, ואסור לשכוח את הרכיבים שעוטפים וכאלה שהם חלק מהאינטגרציה מול קוברנטיס. הדוח של The State of Kubernetes Security in 2022 נותן תמונה על מצב האבטחה והסיכונים.

הסיכונים והאיומים המובאים כאן הם רק חלק מינורי מתוך תריסרי סיכונים של קוברנטיס אשר קיימים בשטח.

סיקרסט

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

קונטיינר פגיע

מכיוון שקוברנטיס היא גם פלטפורמה של הפצה והרצה של קונטיינרים על גבי Worker Nodes, היא עדיין אינה בודקת את התוכן של הקונטיינרים והאם יש בהן פגיעויות או חשיפות. לכן, יש צורך לסרוק את image לפני הפריסה בכדי להבטיח שרק image מרישומים מהימנים ללא פגיעויות קריטיות (כגון ביצוע קוד מרחוק) יפעלו בקלאסטר. סריקת Container image צריכה להיות משולבת גם במערכות CI/CD לצורך אוטומציה ואיתור פגמים מוקדם ככל האפשר.

זמן ריצה

עומסי העבודה בקוברנטיס, כלומר, אותם קוטיינרים, רצים על גבי Worker Nodes ונשלטים על ידי מערכת ההפעלה המארחת בזמן הריצה. במידה וישנה מדיניות מתירנית/פאסיבית או image עם פגיעות ברמת הקונטיינר, הם יכולים לפתוח דלתות אחוריות לכל קלאסטר. לכן, נדרשת הגנה בזמן ריצה ברמת מערכת ההפעלה כדי לאכוף אבטחה בזמן ריצה, וההגנה החשובה ביותר מפני איומי זמן ריצה ופגיעויות היא ליישם את העקרון הפחות מורשה עם גישת KSPM. גישת KSPM היא גישה שממנפת כלי אוטומציה כדי לזהות, לתקן ולהתריע על בעיות אבטחה, תצורה ותאימות באמצעות גישה הוליסטית.

תצורה שגויה והגדרות ברירת מחדל

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

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

עם זאת, עלינו להיות זהירים לגבי סוגיות קריטיות הקשורות לתצורת קלאטסרים ומשאבים:

API

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

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

מטריצת איומים

אחת הדרכים לתקוף, להגן, לחקור ולתחקר קוברנטיס היא באמצעות מטריצת האיומים והסיכונים, ויש כאלה למכביר. אחת המטריצות המוכרות של קוברנטיס היא של מיקרוסופט. המטריצה מתבססת על MITRE והפריימוורק המוכר אשר מכסות את הטקטיקות, טכניקות ופרוצדורות (TTP) עם מיפוי נוף האבטחה של קוברנטיס.

מידע נוסף Threat matrix for Kubernetes

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

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

אז איך תוקפים קוברנטיס?

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

תרשים כללי שמתאר תקיפה בתוך POD. תחילה תוקף פונה לרכיב kubelet שמתוקף תפקידו הוא רץ על כל Node ונפרס על כל קלאסטר כך שהוא יכול ליצור קונטיינרים באמצעות קריאה אל API.כאן חשוב להדגיש כי ברירת המחדל של הזדהות היא אנונימית (–anonymous-auth). 

טיפ: חיפוש של kubelet במנועי חיפוש כמו Shodan או סיוע על גבי OSINT מניב תוצאות רבות של רכיבים חשופים ופגיעים לתקיפה.

המאמר הבא יתמקד באיך לתקוף Kubelet החל משלב הגילוי ועד אימות עם טוקן.  

קישורים נבחרים

Kubernetes Incident Response flow

Threat matrix for Kubernetes

Kubernetes Documentation

Exit mobile version