שימוש בכלי סריקת חולשות Kubescape

הקדמה

Kubescape הוא כלי מקור פתוח של Kubernetes שפותח על ידי Armosec המשמש לניתוח סיכונים, תמיכה באבטחה, תצוגת RBAC וסריקת חורי אבטחה בתמונות. בנוסף, Kubescape מסוגל לסרוק את קובצי ה- Kubernetes manifests כדי לזהות בעיות תצורה פוטנציאליות שמחשפות את האימותים שלך לסיכון של תקיפה. הוא יכול גם לסרוק תרשימי Helm, לזהות הפרות RBAC (בקרת גישה על בסיס תפקיד) , לבצע חישובי ציון סיכון ולהציג מגמות סיכון לאורך הזמן.

תכונות עיקריות של Kubescape:

  • זיהוי שגיאות תצורה ב- Kubernetes וספק עזרה בתיקון דרך פורטל הענן של Armosec.
  • ניתוח סיכונים ומגמות לאורך הזמן דרך פורטל הענן של Armosec.
  • כולל מספר מתכונות לאישור אבטחה, כגון ArmoBest, NSA, MITRE ושיטות ייצור עדיפות.
  • תמיכה בניהול יוצאות, המאפשרת למנהלי Kubernetes לסמן רמות סיכון נתקבלות.
  • שילוב עם כלים שונים כמו Jenkins, זרימות Github, Prometheus, וכו'.
  • סריקת תמונות – סרוק תמונות לחורי אבטחה וראה בקלות, סדר וסנן (איזה חור באבטחה לתקן ראשון).
  • מקל על פריצות RBAC על ידי ספק גרף חזותי פשוט המציג את התצורה של RBAC בקבוצה שלך.

Kubescape יכול להתקיים בדרכים שונות:

  • באמצעות ממשק שורת הפקודה (CLI). זהו הדרך המועדפת להרץ בתוך סקריפטים ובאוטומציות שונות, כולל צינורות CI/CD. תוצאות יכולות להיות העלויות לפורטל הענן של Armosec לניתוח.
  • כcronjob בתוך ערכת ה-Kubernetes שלך. במצב זה, Kubescape תמיד מקשיב לשינויים בערכת ה-Kubernetes שלך ומעלה תוצאות סריקה לפורטל הענן של Armosec. תכונה זו עובדת רק אם אתה מפעיל רכיבי ערמו בערכת ה-DOKS שלך.
  • באמצעות ממשק האינטרנט של פורטל הענן של Armosec. אתה יכול להפעיל סריקת הגדרות, סריקת תמונה, להציג ולבדוק חוקי RBAC, להתאים אישית מסגרות, וכו '. תכונה זו עובדת רק אם אתה מפעיל רכיבי ערמו בערכת ה-DOKS שלך.
  • בתוך סביבת הפיתוח שלך ב-Visual Studio Code IDE. בדרך זו אתה יכול לזהות בעיות מאוד מהר בשלבי התפתחות מוקדמים.

Kubescape משתמש בפריימוורקים שונים כדי לזהות תצורות שגויות כגון:

?האם Kubescape חינמי

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

ראה תוכניות מחירות למידע נוסף.

?האם Kubescape הוא קוד פתוח

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

במדריך זה תשתמש ב-Kubescape כדי לבצע ניתוח סיכון לצרכן היישומים שלך בקוברנטס (תמונות מכלולי קונטיינרים, יצור ימלים YAML של קוברנטס). לאחר מכן, תלמד כיצד לפעול באופן הולם כדי לתקן את המצב. לבסוף, תלמד כיצד לאינטגרציה Kubescape בצינור CI/CD כדי לסרוק לפגיעות בשלבים המוקדמים של הפיתוח.

תוכן עניינים

דרישות מוקדמות

כדי להשלים את כל השלבים ממדריך זה, תצטרך:

  1. A working DOKS cluster running Kubernetes version >=1.21 that you have access to. For additional instructions on configuring a DigitalOcean Kubernetes cluster, see: How to Set Up a DigitalOcean Managed Kubernetes Cluster (DOKS).
  2. A DigitalOcean Docker Registry. A free plan is enough to complete this tutorial. Also, make sure it is integrated with your DOKS cluster as explained here.
  3. Kubectl CLI עבור אינטראקציה עם Kubernetes. עקוב אחר ההוראות הללו כדי להתחבר לאשכול שלך עם kubectl ו- doctl.
  4. Helm, כדי להתקין את Kubescape באשכול Kubernetes.
  5. Kubescape CLI כדי לאינטראקט עם סורק הפגיעויות של Kubescape.
  6. A free Armosec Cloud Portal account used to periodically publish scan results for your Kubernetes cluster to a nice dashboard. Also, the Armosec portal web interface helps you with investigations and risk analysis.
  7. A Slack workspace you own, and a dedicated Slack app to get notified of vulnerability scan issues reported by Kubescape.

שלב 1 – היכרות עם Kubescape CLI

ניתן לסרוק ידנית לקריאות איות דרך ממשק השורת פקודה kubescape. ממשק השורת פקודה של Kubescape מיועד לשימוש בסקריפטים ובאוטומציות שונות. משל הפרקטי הוא בצינור CI/CD שמיושם באמצעות כלים שונים כמו Tekton, Jenkins, זרימות GitHub, וכו'

Kubescape מיועד לסרוק את כל קרוביות ה-Kubernetes מתחת למטה (עבודות, תוכניות, וכו'). אם רצוי, ניתן להגביל את הסריקות לכמהמה מרחב שמוסכם. תכונות נוספות כוללות סריקה של מארח (צומתי עובדים), סריקה של מאגרי נתונים מקומיים או מרוחקים (לדוג', GitHub), זיהוי שגיאות הגדרה שגויות בקובץ YAML של Kubernetes או בתרשימי ה-Helm. ניתן לבחור מסגרות שונות דרך הפקודה framework, כמו ArmoBest, NSA, MITRE, וכו'

כאשר נקרא ממשק השורת פקודה של Kubescape, הוא יוריד (או יעדכן) את מסד הנתונים לקריאות הידועות למחשב המקומי שלך. לאחר מכן, הוא יתחיל בתהליך הסריקה וידווח על בעיות בפורמט ספציפי. כברירת מחדל, הוא ידפיס טבלה סיכוםית באמצעות פלט סטנדרטי או הקונסולה. Kubescape יכול ליצור דוחות בפורמטים אחרים כמו JSON, HTML, SARIF, וכו'

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

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

כמה דוגמאות לנסות עם ממשק השורת פקודה של Kubescape:

  • סרוק את כל אשף ה-Kubernetes וצור דוח סיכום במסוף (פלט סטנדרטי):

    kubescape scan
    
  • השתמש רק בכתובת לכלי סריקה:

    kubescape scan --include-namespaces microservices
    
  • אל תכלול כתובות מסווגות מסוימות בסריקה:

    kubescape scan --exclude-namespaces kube-system,kube-public
    
  • סרוק את הכתובת המסוימת ושלח תוצאות לפורטל הענן של Armosec:

    kubescape scan --include-namespaces default --submit
    
  • בצע סריקת אשכול באמצעות פריימוורק מסוים (לדוגמה NSA):

    kubescape scan framework nsa --exclude-namespaces kube-system,kube-public
    

Kubescape מסוגל לסרוק את מארחי הקשת של ה- Kubernetes cluster שלך (או צמתי העבודה) לפגיעות במערכת ההפעלה כמו כן. כדי להפעיל את התכונה הזו, עליך להעביר את הדגל --enable-host-scan ל-CLI של kubescape. כאשר הדגל הזה מופעל, kubescape פותח sensors בקשת שלך. ה- sensors נוצרים באמצעות Kubernetes DaemonSets שמפרסים Pods על כל צומת בקשתך כדי לסרוק אחר פגיעות ידועות. לאחר שהתהליך של הסריקה הושלם, ה- sensors מוסרים מהקשת שלך (כולל המשאבים הקשורים ב-Kubernetes).

CLI של Kubescape מספק דפי עזר עבור כל האפשרויות הזמינות. הפקודה הבאה יכולה לשמש להדפסת דף העזר הראשי:

kubescape --help

הפלט דומה למה שנתקל בו:

Output
Kubescape is a tool for testing Kubernetes security posture. Docs: https://hub.armo.cloud/docs Usage: kubescape [command] Available Commands: completion Generate autocompletion script config Handle cached configurations delete Delete configurations in Kubescape SaaS version download Download controls-inputs,exceptions,control,framework,artifacts help Help about any command list List frameworks/controls will list the supported frameworks and controls scan Scan the current running cluster or yaml files submit Submit an object to the Kubescape SaaS version version Get current version ...

לכל פקודת (או פקודת משנה) CLI של kubescape יש דף עזר מתאים גם שניתן לגשת אליו באמצעות kubescape [command] --help.

אנא בקר ב- דף התיעוד הרשמי של CLI של kubescape לקבלת דוגמאות נוספות.

שלב 2 – היכרות עם פורטל הענן של Armosec

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

ניתן ליצור חשבון ללא עלות המוגבל ל־10 צומת עבודה ול־חודש אחד של שמירת נתונים שצריך ברוב המקרים (לדוגמה, לצורכי בדיקה או פיתוח). ניתן לקרוא עוד על איך ליצור את חשבון הענן של kubescape ב־עמוד התיעוד הרשמי.

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

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

התמונה למטה ממחישה את התכונות הללו:

הבנת ערך ציון הסיכון של Kubescape

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

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

טיפול מוסך בבעיות אבטחה שדווחו

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

התמונה למטה ממחישה את התהליך טוב יותר:

עבור כל בעיה אבטחה שדווחה, מוצג סמל כלי מפתח, שבאפשרותך ללחוץ עליו ולקבל סיוע בטיפול בבעיה:

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

באפשרותך ללחוץ על כל בקרה כגון C-0018, C-0030, C-0086, וכו', ולחקור את הבעיות המודגשות. תוצגו הצעות על אופן תיקון כל בעיה אבטחה. הנותר הוא לעקוב אחר הרמזים ולתקן את כל בעיה האבטחה.

הפעלת סריקות אשכול מממשק האינטרנט

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

להפעלת סריקת תצורה יש לנווט לדף סריקת הגדרות וללחוץ על כפתור הסריקה. התמונה למטה מציגה איך להשיג את המטרה הזו:

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

שלב 3 – הגדרת סריקות אוטומטיות של Kubescape עבור DOKS

Kubescape ניתן להגדרה כך שיסרוק באופן אוטומטי את כל האשכול שלך של Kubernetes במרווח זמן מסוים, או בכל פעם שתמונת אפליקציה חדשה מוטמעת. עליך להתקין רכיבי אשכול Armo באשכול שלך של Kubernetes באמצעות Helm כדי להשיג את פונקציונליות זו. חשבון פורטל ענן Armosec נחוץ גם כדי להעלות ולבדוק את התוצאות.

התקנת טבלת Armo Helm מתקינה עבודות קרון שמפעילות סריקת שוליים גם עבור כל האשכול של Kubernetes ותמונות התוכנית. מרווח הזמן של כל עבודת קרון ניתן להגדרה בקובץ ערכי Helm.

הספק רכיבי אשכול Armo אל DOKS

שלבים להפעלת kubescape באשכול שלך של Kubernetes באמצעות Helm:

  1. הוספת המאגר של Helm ורשימת תרשימים הזמינים:
helm repo add armo https://armosec.github.io/armo-helm/
helm repo update armo
helm search repo armo

הפלט דומה למשהו כמו זה:

Output
NAME CHART VERSION APP VERSION DESCRIPTION armo/armo-cluster-components 1.7.15 v1.7.15 ARMO Vulnerability Scanning

הערה: התרשים הרלוונטי הוא armo/armo-cluster-components, שיתקין רכיבי Armo באשכול שלך של Kubernetes. עיין בדף המאגר armo-helm לקבלת פרטים נוספים אודות תרשים זה.

  1. השג את זיהוי המשתמש של חשבונך ב-Armo באמצעות CLI של kubescape (נדרש בשלב הבא):
kubescape config view

הפלט דומה ל:

{
"accountID": "c952b81f-77d5-4afb-80cc-59b59ec2sdfr"
}

הערה: אם לא השתמשת ב-CLI של kubescape לשליחת תוצאות סריקה לפורטל הענן של Armosec מקודם, הפקודה לעיל לא תעבוד. במקרה זה, עליך להתחבר לפורטל ולקבל את זיהוי החשבון משם כפי שמוסבר כאן.

  1. התקן את רכיבי הקרוב של Armo Kubescape באמצעות Helm – ייווצר גם מרחב שם מיוחד של armo-system (ודא שאתה מחליף את המילים המוקפצות <> בהתאם):
ARMO_KUBESCAPE_CHART_VERSION="1.7.15"
helm install armo armo/armo-cluster-components \
--version "$ARMO_KUBESCAPE_CHART_VERSION" \
--namespace armo-system \
--create-namespace \
--set clusterName="$(kubectl config current-context)" \
--set accountGuid=<YOUR_ARMO_ACCOUNT_ID>

–create-namespace \

הערה: גרסה מסוימת לתבנית ה-Helm של armo-cluster-components משמשת. במקרה זה, נבחרה גרסה 1.7.15, שתואמת לגרסת השחרור 1.7.15 של רכיבי הענן של Armo (ראה את הפלט מ-שלב 1.). זהו מומלץ, בדרך כלל, לנעול על גרסה ספציפית. זה עוזר לקבל תוצאות צפויות, ומאפשר שליטה בגרסאות דרך Git.

kubectl get deployments -n armo-system

כעת בדוק האם כל התקנות רכיבי הענן של Armo עולות ופועלות:

Output
NAME READY UP-TO-DATE AVAILABLE AGE armo-collector 1/1 1 1 5d6h armo-kubescape 1/1 1 1 5d6h armo-notification-service 1/1 1 1 5d6h armo-vuln-scan 1/1 1 1 5d6h armo-web-socket 1/1 1 1 5d6h

הפלט דומה ל:

כל רכיבי הענן של Armo צריכים להיות פועלים ופועלים.

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

תוצאות תצוגה חזותית של RBAC:

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

התאמת ערכי Helm עבור תרשים רכיבי הקרב של Armo

ניתן לשנות את ההתנהגות של תרשים רכיבי הקרב של Armo על ידי עריכת קובץ ערכי Helm המסופק במדריך זה.

  • ניתן לשנות את ההגדרות הבאות:
  • מרווחי הסריקה דרך ערכי armoScanScheduler ו־armoKubescapeScanScheduler.

התראת סריקת תמונה חדשה דרך ערך triggerNewImageScan.

הרשימה המלאה של הערכים שניתן להתאים לצרכים שלך זמינה בקובץ ערכי תרשים ה- Helm הרשמי.

ARMO_KUBESCAPE_CHART_VERSION="1.7.15"
helm upgrade armo armo/armo-cluster-components \
  --version "$ARMO_KUBESCAPE_CHART_VERSION" \
  --namespace armo-system \
  --set clusterName="$(kubectl config current-context)" \
  --set accountGuid=<YOUR_ARMO_ACCOUNT_ID> \
  -f <YOUR_CUSTOM_HELM_VALUES_FILE_HERE>

כדי ליישם שינויים, עליך לשדרג את גרסת תרשים ה- Helm הנוכחית באמצעות (וודא שאתה מחליף את המילים מבין הסוגריים <> להתאמה):

שלב 4 – שימוש ב- Kubescape לסריקה אחר חולשות בתצורת Kubernetes בצינור CI/CD

איך אפשר להרוויח מהטמעת כלי סריקה לשימוש תואם תקן בצינור CI/CD שלך ולמנוע מצבים לא נעימים בסביבת ייצור?

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

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

מימוש זרימת עבודה CI/CD של פעולות GitHub

בשלב זה, תלמד כיצד ליצור ולבדוק צינור CI/CD לדוגמה עם סריקת שורשיות מובנית דרך זרימות עבודה של GitHub. כדי ללמוד את היסודות של שימוש בפעולות של GitHub עם Kubernetes של DigitalOcean, יש להפנות להדרכה זו.

הצינור המסופק בקטע הבא מבנה ומפעיל את היישום game-2048-example ממאגר המידע של DigitalOcean עם דוגמה עבור יישומי Kubernetes.

  1. מבחינה כללית, הזרימה CI/CD לדוגמה המסופקת במאגר Kubernetes-sample-apps מורכבת משלבים הבאים:
  2. שלב בניית יישום ובדיקה – בונה את אמצעי היישום הראשיים ומריץ בדיקות אוטומטיות.
  3. שלב סריקת Kubescape – סורק את הפריטים הקיימים במתיני YAML של Kubernetes הקשורים ליישום עבור שורשיות מוכרות. הוא פועל כשער, ומצב הצינור הסופי (עבור/נכשל) תלוי בשלב זה. במקרה של כישלון, נשלחת הודעת Slack כמו כן.
  4. שלב בניית והעלאת תמונת היישום – בונה ומסמן את תמונת היישום באמצעות SHA של הקומיט האחרון ב-Git. לאחר מכן, התמונה מועלת ל-DOCR.

שלב התקנת היישום – מפרסם את היישום ל-Kubernetes (DOKS).

התרשים למטה מתאר את כל העבודות מהצינור והשלבים המשוייכים עם פעולות (רק תצורה רלוונטית מוצגת):

  • הערה:
  • במקרה של פרויקטים המבוססים על kustomize, מומלץ ליצור את התצורה הסופית באמצעות הפקודה kubectl kustomize </path/to/kustomization_/file> כדי לתפוס ולסרוק הכול (כולל משאבים מרוחקים). מצד שני, יכול להיות קשה לזהות איזה משאב של Kubernetes צריך להיות מתוקן. זה קורה בגלל שהקובץ הסופי שנוצר מורכב מכל המשאבים שיש ליישם. כך פועלת ה- Kustomize – הוא אוסף את כל רכיבי התצורה מכל ההטמעות ומיישם אותם מעל בסיס כדי לבנות את המרכיב הסופי.

אתה יכול גם לומר ל- Kubescape לסרוק את כל התיקייה שבה אתה שומר את ההגדרות של kustomize (מדריך זה מסתמך על השיטה הזו). בכך, יותר קל לזהות איזה משאב צריך להיות מתוקן במאגר שלך. משאבים מרוחקים שנמצאים בשימוש על ידי kustomize צריכים להיות מתוקנים מראש. בנוסף, סודות Kubernetes ו- ConfigMaps שנוצרו באמצעות kustomize לא נתפסים.

כיצד אפשר לכשל את הצינור אם רמת התאמה לבטיחות מסוימת לא מתקיימת?

CLI של Kubescape מספק דגל בשם --fail-threshold למטרה זו. הדגל הזה מתאים לתוך הציון הכללי לסיכון שנחשב לאחר כל סריקה. אפשר לכשל או לעבור את הצינור על פי ערך הסף ולהפסיק את התפקוד של האפליקציה אם התנאים לא נתקיימים.

התמונה למטה ממחישה את הזרימה עבור צינור ה-CI/CD הדוגמא המשמש במדריך זה:

  1. אנא עקוב אחר השלבים הבאים כדי ליצור ולבדוק את הזרימת העבודה של kubescape CI/CD ב-GitHub מהמאגר ה-kubernetes-sample-apps:
  2. :

    1. שכפול מאגר ה-GitHub של kubernetes-sample-apps.

  3. SLACK_WEBHOOK_URL – מחזיק את כתובת ה-URL של ה-Webhook הנכנס שלך ל- Slack המשמשת להתראות סריקת kubescape.
  4. נווט אל לשונית פעולות של המאגר שלך ובחר ב- דוגמה ל- CI/CD של Kubescape Game 2048:

A new entry should appear in below list after clicking the Run Workflow green button. Select the running workflow to observe pipeline progress:

לחץ על כפתור הפעל זרימת עבודה והשאר את הערכים ברירת המחדל:

הצינור יכשל ויעצור כאשר העבודה kubescape-nsa-security-check תרוץ. זה צפוי מכיוון שערך הסף המוגדר כברירת מחדל של 30 עבור ציון הסיכון הכולל נמוך מהערך הרצוי. כמו כן, אתה צריך לקבל התראת Slack עם פרטים על ריצת הזרימת עבודה:

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

שלב 5 – בדיקת תוצאות הסריקה של Kubescape ותיקונן של הבעיות הדווחות

כל פעם שערך סף של ניקוד הסיכון לא מתקיים, תהליך העבודה של GitHub של game-2048 יכשל ותישלח הודעת Slack עם פרטים נוספים.

תהליך העבודה של game-2048 מפעיל בדיקת אבטחה אחת (סריקת תמונה מקומית לא נתמכת) – בדיקות תצורת מנפסטים של Kubernetes. המשימה kubescape-nsa-security-check משמשת למטרה זו. הפקודה השוקלת kubescape שמופעלת היא – kubescape scan framework nsa /path/to/project/kubernetes/manifests.

- name: Scan Kubernetes YAML files
  run: |
    kubescape scan framework nsa kustomize/ \
      -t ${{ github.event.inputs.kubescape_fail_threshold || env.KUBESCAPE_FAIL_THRESHOLD }} \
      --submit --account=${{ secrets.ARMOSEC_PORTAL_ACCOUNT_ID }}
  working-directory: ${{ env.PROJECT_DIR }}

המקטע הבא מציג את הלוגיקה העיקרית של המשימה kubescape-nsa-security-check:

–submit –account=${{ secrets.ARMOSEC_PORTAL_ACCOUNT_ID }}

ההגדרה למעלה מספרת ל-CLI של kubescape להתחיל סריקה חדשה עבור כל מנייפסט של Kubernetes הנמצא בתיקיית kustomize/ באמצעות הפריימוורק NSA. היא גם מציינת איזה רמת אתחול להשתמש בה דרך הדגל -t, ולשלוח את התוצאות הסופיות לפורטל הענן של Armo (הדגל –submit בשילוב עם –acount).

לכן, להוריד את ערך ציון הסיכון ולעבור דרך זרימת העבודה כולל חקירה ותיקונים שנדווחו על ידי המשימה kubescape-nsa-security-check. לאחר מכן, תלמד כיצד לטפל בבעיות אבטחה שנדווחו על ידי המשימה הזו.

A new browser window opens showing in detail each control and description. You will also be presented with required actions to remediate the issue (highlighted in green color):

לבדוק את דו"ח המצב, ניתן ללחוץ על קישור תוצאות הסריקה של kubescape מההתראת Slack שהתקבלה. לאחר מכן, ללחוץ על כפתור הסריקה REPOSITORIES SCAN מתפריט השמאלי בפורטל הענן של Armo. כעת, ללחוץ על כניסת kubernetes-sample-apps מהרשימה:

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: game-2048
spec:
  replicas: 1
  selector:
    matchLabels:
      app: game-2048
  strategy:
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: game-2048
    spec:
      containers:
        - name: backend
           לאחר מכן, ללחוץ על כניסת deployment.yaml, ואז ללחוץ על הכלי השונה מהחלק העליון הימני: 
          image: registry.digitalocean.com/sample-apps/2048-game:latest
          ports:
            - name: http
              containerPort: 8080
          resources:
            requests:
              cpu: 100m
              memory: 50Mi
            limits:
              cpu: 200m
              memory: 100Mi
          securityContext:
            readOnlyRootFilesystem: true
            runAsNonRoot: true
            allowPrivilegeEscalation: false
            capabilities:
              drop:
                - all

לאחר איסוף כל המידע מדו"ח הסריקה, ניתן לעבור ולערוך את קובץ deployment.yaml מהמאגר שלך (שממוקם בתת-תיקיית game-2048-example/kustomize/resources). התיקונים כבר נמצאים במקום, עליך רק להסיר את הערות הפעולה האחרונות מהקובץ. הקובץ deployment.yaml הסופי צריך להיראות כך:

# החלפו את המילות המפתח `<>` עם פרטי רישום ה-Docker שלכם

  • הערה:
    ההמלצות C-0055 נושאו במשלוח זה לצורך פשטות. ניתן לקרוא עוד על מצב חישוב מאובטח ב־Kubernetes כאן.
  • מה השתנה? הבאנו את התיקונים הבאים באבטחה:
  • readOnlyRootFilesystem – מפעיל את תמונת התקן במצב קריאה בלבד (לא ניתן לשנות קבצים על ידי kubectl exec בתוך התקן).
  • runAsNonRoot – מפעיל את התהליך כמשתמש שאינו שורש, כפי שהוגדר בהוראת ה־USER מתוך קובץ ה־Dockerfile של פרויקט game-2048 .Dockerfile.

allowPrivilegeEscalation – הגדרת allowPrivilegeEscalation ל־false מבטיחה כי אף תהליך בן של תקן לא יקבל יותר הרשאות מאבא שלו.

capabilities.drop – כדי להבטיח את האבטחה של התקנים, כדאי לספק להם את ההרשאות המינימליות שהם זקוקים להן כדי להריץ. במעשה, כדאי לבטל הכל כברירת מחדל, ואז להוסיף יכולות דרושות שלב אחר שלב. ניתן לקרוא עוד על אבטחת המיכלים במאמר זה שנכתב על ידי Armosec .כאן.

A few final checks can be performed as well on the Kubernetes side to verify if the reported issues were fixed:

  1. לבסוף, יש להעביר את השינויים לקובץ ה־deployment.yaml ולדחוף לסניף הראשי. לאחר הפעלת העבודה באופן ידני, יש לוודא שהיא מושלמת בצורה תקינה הפעם:
  2. בדוק אם לאפליקציית ההפצה game-2048 יש מערכת קבצים קריאה בלבד (לאנדרמל) על ידי כתיבת קובץ היישום index.html:

בדוק אם המיכל רץ כמשתמש לא בעל הרשאות ראשיות (על ידי הדפסת מספר שלם שונה מאפס – לדוגמה, 1000):

kubectl exec -it deployment/game-2048 -n game-2048 -- id -u

בדוק אם המיכל רץ כמשתמש לא בעל הרשאות ראשיות (על ידי הדפסת מספר שלם שונה מאפס – לדוגמה, 1000):

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

טיפול בחריגות

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

A more efficient approach is where you integrate vulnerability scan tools directly in your favorite IDE (or Integrated Development Environment). This way, you can detect and fix security issues ahead of time in the software development cycle.

ניתן לקרוא עוד על התכונה הזו כאן.

  1. Kubescape עבור IDEs
  2. Kubescape מציע תמיכה באינטגרציה של IDE דרך ההרחבות הבאות:

הרחבת Visual Studio Code.

הרחבת Kubernetes Lens.

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

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

on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]

שלב 6 – הפעלת תהליך העבודה של CI/CD של Kubescape אוטומטית

באפשרותך להגדיר את תהליך העבודה כך שיפעל אוטומטית בכל הצטרפות או בכל בקשה למשוב על ידי פעילות כלשהי לעמוד הראשי על ידי הסרת ההערות מהשורות הבאות בראש קובץ ה game-2048-kubescape.yaml:

לאחר שערכת את הקובץ, עשה commit לשינויים בסניף הראשי שלך, ותהיה מוכן להמשך.

שלב 7 – הפעלת התראות ב-Slack למעקב רציף

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

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

אבל מה קורה אם דווחים על בעיות חדשות בינתיים, והיישום שלך שוב פגיע?

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

  1. פורטל הענן של Armo תומך באינטגרציה של Slack לשליחת התראות בזמן אמת לאחר כל סריקת קבוצה. תכונה זו דורשת התקנת תרשים Helm של רכיבי הענן של Armo בקבוצת ה-DOKS שלך כפי שמוסבר ב- שלב 3 – הגדרת סריקות אוטומטיות של Kubescape עבור DOKS.
  2. על ידי הפעלת התראות Slack, תקבל הודעות חשובות אודות פגיעות שנזהרו באשכול ה-DOKS שלך, כגון:
  3. פגיעויות בצמתי העובדים (ברמת מערכת ההפעלה).

פגיעויות בתמונת ה-Container.

  • הגדרות שגויות של Kubernetes עבור משאבים שונים כמו פיתוחים, קפיציים, וכו '.
  • תחילה, עליך ליצור אפליקציית Slack . לאחר מכן, עליך לתת את ההרשאות הבאות לבוט של Slack בדף OAuth & Permissions :
  • channels: join – הצטרף לערוצים ציבוריים במרחב עבודה.
  • channels: read – צפה במידע בסיסי אודות ערוצים ציבוריים במרחב עבודה.
  • groups: read – צפה במידע בסיסי אודות ערוצי פרטיים שהוספה אפליקציית ה-Slack שלך.
  • chat: write – שלח הודעות כ-@< שם האפליקציה שלך ב-Slack >.

im: read – צפה במידע בסיסי אודות הודעות ישירות שהוספה אפליקציית ה-Slack שלך.

mpim: read – צפה במידע בסיסי אודות הודעות ישירות של קבוצה שהוספה אפליקציית ה-Slack שלך.

לאחר מכן, נווט אל דף ה- הגדרות של חשבון הענן שלך בפורטל של Armo (סמל גלגל התחתון הימני). משם, בחר בדף אינטגרציות , ואז Slack .

עכשיו, הדבק את טוקן ה- Slack Bot OAuth שלך (ניתן למצוא בדף OAuth & Permissions מתוך דף האפליקציה שלך ב- Slack) בשדה הקלט הוסף טוקן. לבסוף, בחר כיצד לקבל הודעות ואת ערוץ ה-Slack שבו ישלחו ההתראות. לחץ על הלחצן הגדר התראות ואתה מוכן. בתמונה למטה מודגם הפרטים:

לאחר הגדרת השילוב של Slack, עליך לקבל התראות תקופתיות לאחר כל סריקת אשכול על הערוץ המוקצה:

אם אתה מקבל הודעות דומות לאלה שלמעלה, אז הגדרת את השילוב של Armosec Kubescape ב-Slack בהצלחה.

מסקנה

במדריך זה, למדת כיצד להשתמש באחד מכלי הסריקה לפגיעויות Kubernetes הפופולריים ביותר – Kubescape. למדת גם כיצד לבצע סריקת אשכול וסריקת ריפוסיטורי (מנייפסטים YAML) באמצעות Kubescape CLI. לאחר מכן, למדת כיצד לשלב את כלי סריקת הפגיעויות בצינור CI/CD מסורתי שמיושם באמצעות זרימות עבודה ב-GitHub.

לבסוף, למדת כיצד לחקור דוחות סריקת פגיעויות, ליישם תיקונים כדי לתקן את המצב, ולהפחית את ציון הסיכון למינימום באמצעות דוגמה מעשית – אפליקציית המשחק game-2048 מהריפוסיטורי kubernetes-sample-apps.

Source:
https://www.digitalocean.com/community/developer-center/using-the-kubescape-vulnerability-scan-tool