אבטחת אפליקציות בקונטיינרים: אוטומציה, אוטומציה ועוד אוטומציה
מאת:
אמיר ג'רבי, 26.4.17, 08:00
כיצד זיהוי וניהול פרצות במהלך פיתוח, אכיפת מדיניות אבטחה, מניעת איומים וחסימת התנהגויות חשודות יכולים לנוע במהירות של אספקה רציפה?
החל מהפיתוח של קוד ב
קונטיינרים ועד ההרצה שלהם, אחד המאפיינים הבולטים ביותר של שימוש בקונטיינרים הוא מהירות. תהליך הפיתוח אינו רק מהיר, אלא מחולק למרכיבים זעירים רבים, שמתעדכנים בקביעות. בזמן ריצה, עדכונים תכופים ולעתים עומסי עבודה נקודתיים וזמניים, הופכים לאתגר את האבטחה של סביבה כזו.
בעבר, מהירות הייתה תמיד האויבת של אבטחה, אבל בסביבות פיתוח מבוססות קונטיינרים אין ברירה אלא לטפל בבעיה מן השורש, והדרך לכך: אוטומציה, אוטומציה, ועוד אוטומציה.
בסביבות
DevOps, אוטומציה היא חלק מהשגרה, אבל שיטות וכלי אבטחה מסורתיים לא תוכננו עבור מערכי
CI/CD (אינטגרציה רציפה ופריסה רציפה), ובדרך כלל אינם מסוגלים לתת מענה לצרכים מרכזיים באבטחת קונטיינרים. במילים פשוטות, לא ניתן לעמוד בקצב של עדכוני
image (קונטיינרים טרם הרצתם), לספק התראות אמינות ולזהות התנהגות חריגה, אם נמשיך להסתמך על מערכת
Start-Stop ידנית.
מה צריך להיות אוטומטי? לפחות גילוי פרצות אבטחה במהלך פיתוח, היישום של מדיניות אבטחה, וחסימה של התנהגויות חשודות בייצור.
זיהוי וניהול אוטומטי של פרצות במהלך פיתוח
במהלך פיתוח, סריקת
images לצורך גילוי פרצות צריכה להיות אוטומטית כחלק מתהליך ה-
CI/CD. יש לאשר או לחסום שימוש ב-
images עפ"י מדיניות ברורה ומוגדרת.
במקביל, בדיקות אבטחה
אוטומטיות חייבות לפעול בלי שירגישו אותן, ולספק תוצאות שימושיות. הפתרון בו בוחרים חייב להשתלב במלואו בתהליך הפיתוח, ולהיות מהיר מספיק כדי לעמוד בזרם הנכנס של
images מעודכנים. הוא גם צריך להיות רציף, כדי לאפשר בדיקה מתמדת ווידוא של תמונת מצב האבטחה הכוללת.
כאשר מתגלה נקודת תורפה, שעלולה לגרום לפרצת אבטחה, הדבר יכשיל את הבנייה וימנע מה-
image לעבור לשלב הבא (מפיתוח ל-
QA, ומ-
QA לייצור), אבל מה יקרה אז? ברור, שחשוב באותה מידה להכניס גם אפשרויות של תיקון הבעיה במסגרת התהליך, ולא להשאיר את הבניה לא גמורה. הכרחי לשלוח מידע חזרה למפתחים, או באמצעות פתיחת תקלה למפתח (לדוגמא, ב-
Jira), או שליחת הודעות דרך ערוץ שיתופי כגון
Slack. בדרך זו, גם לולאת המשוב הופכת לאוטומטית, ולא מותירה דבר לתזמון ידני.
יצירה ועדכונים אוטומטיים של מדיניות אבטחה
מה לגבי קביעת מדיניות אבטחה עבור קונטיינרים? האתגר טמון בכך, שקונטיינרים עלולים להציג התנהגויות שונות (שימוש במשאבים, קישוריות רשת, גישה לקבצים) בהתאם לתכולת האפליקציות שלהם וההקשר היישומי בו הם פועלים. לדוגמא, קונטיינר מסד נתונים עלול להזדקק ליכולות שונות עבור אפליקציה פנימית נקודתית לעומת אפליקציה חיצונית קבועה.
ברור, שבחירה בגישה שבלונית של מדיניות אחידה עבור כל הקונטיינרים - לא תעבוד. כך גם קביעת מדיניות סטטית בזמן השקת האפליקציה, מכיוון שאז עדכונים לא נלקחים בחשבון, ועדכונים עלולים להיות תכופים.
אי אפשר גם לסמוך על כך, שמפתחים יגדירו ידנית פרמטרים של אבטחה בזמן הפיתוח. למפתחים אין הכישורים או הזמן לעשות זאת, בוודאי כאשר
images מתעדכנים על בסיס יומי. הסתמכות מלאה על
declarative metadata בקונטיינרים מספקת מידע מוגבל, ובדרך כלל מאד לא מדויק, על מה שהקונטיינר אמור לעשות.
התשובה טמונה בבניית פרופיל אוטומטי של התנהגות קונטיינר, שימוש בעקרונות הצהרתיים כנקודת התחלה, אך גם בחינת התנהגות בפועל של קונטיינר כדי לקבוע מהי התנהגות לגיטימית. באמצעות שימוש בטכניקות כגון לימוד מכונה (Machine Learning), ניתן לקבוע את טווח הפעילות הנורמלית של קונטיינר ברמת דיוק גבוהה, ומשם כבר קל לזהות חריגים. בהיותו אוטומטי, ניתן לעדכן פרופיל זה בכל פעם שהקונטיינר מתעדכן או שמשתנים הפרמטרים של זמן הריצה שלו.
חסימה אוטומטית של פעולות חשודות
יישומים, שרצים על קונטיינרים, מהווים שטח תקיפה גדול משמעותית בהשוואה ליישומים מונוליטיים מסורתיים. שטח התקיפה גדול יותר עקב הכמות הגדולה יחסית של קוד חיצוני, המספר הגדול של ישויות שיש לעקוב אחריהן, והמהירות בה קונטיינרים יכולים להופיע ולהיעלם.
עולם האבטחה בכללותו עובר מזיהוי
למניעה אוטומטית, גם מפני שריבוי ההתראות הופך את היכולת להגיב במהירות הנדרשת לבלתי אפשרית. כך, שהתקפות עלולות להסתיים עוד בטרם בן אנוש מסוגל להגיב.
עם קונטיינרים צורך זה נהיה אף יותר קריטי. הידיעה כי קונטיינר מסוים הריץ תקיפה של העלאת הרשאות
(privilege escalation), והשיג בהצלחה הרשאות
root בשרת המארח, היא שימושית רק כחוכמה לאחר מעשה. אנו חייבים למנוע מכך לקרות מלכתחילה, מכיוון שלאחר מעשה זה עלול להיות מאוחר מדי.
האתגר, כמובן, הוא כיצד למנוע זיהויי שגוי של התקפות
false positives)), כי התראות שגויות הן מטרידות, אבל פעולות מנע מיותרות עלולות ממש להזיק ולסגור יישומים ללא צורך. עם זאת, בעזרת למידה אוטומטית של פרופיל התנהגות קונטיינר, כפי שציינתי קודם, ניתן להפחית מקרים של זיהוי שגוי באופן דרמטי עד לנקודה, שבה אפשר להשתמש במניעה אוטומטית המספקת הגנה בזמן אמת ליישומי זמן ריצה של קונטיינרים באופן בטוח.
אותם מאפיינים, שהופכים קונטיינרים לסביבה יוצאת מן הכלל עבור יישומים בהיקפים גדולים עם יעילות גבוהה של ניצול משאבים, הם גם אלה הגורמים לכך, שבלתי אפשרי לאבטח אותם בשימוש בפתרונות אבטחה מסורתיים וידניים.
מי שעומד להשתמש בקונטיינרים צריך להפוך אוטומציית אבטחה לחלק בלתי נפרד מהתוכנית שלו.
מאת:
אמיר ג'רבי, אפריל 2017.
CTO ב-
Aqua Security