ביצוע: קוד Python זדוני בוצע

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

סקירה כללית

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

זיהוי איומים בקונטיינר הוא המקור של הממצא הזה.

איך מגיבים

כדי להגיב לממצא הזה:

שלב 1: בדיקת פרטי הממצא

  1. פותחים ממצא Execution: Malicious Python executed כמו שמתואר במאמר בדיקת ממצאים. חלונית הפרטים של הממצא תיפתח בכרטיסייה סיכום.

  2. בכרטיסייה סיכום, בודקים את המידע בקטעים הבאים:

    • מה זוהה, במיוחד השדות הבאים:
      • קובץ בינארי של התוכנית: פרטים על המפענח שהפעיל את הסקריפט.
      • Script: נתיב מוחלט של שם הסקריפט בדיסק. המאפיין הזה מופיע רק עבור סקריפטים שנכתבו בדיסק, ולא עבור ביצוע סקריפט מילולי. לדוגמה: python3 -c.
      • ארגומנטים: הארגומנטים שסופקו כשמפעילים את הסקריפט.
    • מקור המידע שהושפע, במיוחד השדות הבאים:
      • שם המשאב המלא: שם המשאב המלא של האשכול, כולל מספר הפרויקט, המיקום ושם האשכול.
    • קישורים רלוונטיים, במיוחד השדות הבאים:
      • אינדיקטור של VirusTotal: קישור לדף הניתוח של VirusTotal.
  3. בתצוגת הפרטים של הממצא, לוחצים על הכרטיסייה JSON.

  4. שימו לב לשדות הבאים ב-JSON.

    • finding:
      • processes:
      • script:
        • contents: התוכן של הסקריפט שהופעל, שעשוי להיות קטוע מסיבות שקשורות לביצועים. יכול לעזור לכם בחקירה.
        • sha256: גיבוב SHA-256 של script.contents
    • resource:
      • project_display_name: שם הפרויקט שמכיל את הנכס.
    • sourceProperties:
      • Pod_Namespace: השם של מרחב השמות של ה-Pod ב-Kubernetes.
      • Pod_Name: השם של ה-Pod ב-GKE.
      • Container_Name: השם של הקונטיינר המושפע.
      • Container_Image_Uri: השם של קובץ האימג' בקונטיינר שמופעל.
      • VM_Instance_Name: השם של צומת GKE שבו ה-Pod הופעל.
  5. מזהים ממצאים אחרים שהתרחשו בזמן דומה במאגר התגים הזה. לדוגמה, אם הסקריפט משחרר קובץ בינארי, צריך לבדוק אם יש ממצאים שקשורים לקובץ הבינארי.

שלב 2: בדיקת האשכול והצומת

  1. נכנסים לדף Kubernetes clusters במסוף Google Cloud .

    מעבר אל Kubernetes clusters

  2. בסרגל הכלים של המסוף Google Cloud , בוחרים את הפרויקט שמופיע ב-resource.project_display_name, אם צריך.

  3. בוחרים את האשכול שמופיע בשורה Resource full name (השם המלא של המשאב) בכרטיסייה Summary (סיכום) של פרטי הממצא. רושמים את המטא-נתונים של האשכול והבעלים שלו.

  4. לוחצים על הכרטיסייה Nodes. בוחרים את הצומת שמופיע ב-VM_Instance_Name.

  5. לוחצים על הכרטיסייה פרטים ורושמים את ההערה container.googleapis.com/instance_id.

שלב 3: בדיקת הפודקאסט

  1. נכנסים לדף Kubernetes Workloads במסוף Google Cloud .

    עוברים אל Kubernetes Workloads

  2. בסרגל הכלים של המסוף Google Cloud , בוחרים את הפרויקט שמופיע ב-resource.project_display_name, אם צריך.

  3. אם צריך, מסננים לפי האשכול שמופיע ב-resource.name ומרחב השמות של ה-Pod שמופיע ב-Pod_Namespace.

  4. בוחרים את ה-Pod שמופיע ב-Pod_Name. שימו לב לכל מטא-נתונים לגבי הפוד והבעלים שלו.

שלב 4: בדיקת היומנים

  1. במסוף Google Cloud , עוברים אל Logs Explorer.

    כניסה לדף Logs Explorer

  2. בסרגל הכלים של המסוף Google Cloud , בוחרים את הפרויקט שמופיע ב-resource.project_display_name, אם צריך.

  3. מגדירים את בחירת טווח זמן לתקופה הרצויה.

  4. בדף שנטען, מבצעים את הפעולות הבאות:

    1. כדי למצוא את היומנים של Pod‏ Pod_Name, משתמשים במסנן הבא:
      • resource.type="k8s_container"
      • resource.labels.project_id="resource.project_display_name"
      • resource.labels.location="location"
      • resource.labels.cluster_name="cluster_name"
      • resource.labels.namespace_name="Pod_Namespace"
      • resource.labels.pod_name="Pod_Name"
    2. כדי למצוא יומני ביקורת של אשכול, משתמשים במסנן הבא:
      • logName="projects/resource.project_display_name/logs/cloudaudit.googleapis.com%2Factivity"
      • resource.type="k8s_cluster"
      • resource.labels.project_id="resource.project_display_name"
      • resource.labels.location="location"
      • resource.labels.cluster_name="cluster_name"
      • Pod_Name
    3. כדי למצוא יומני מסוף של צומתי GKE, משתמשים במסנן הבא:
      • resource.type="gce_instance"
      • resource.labels.instance_id="instance_id"

שלב 5: בדיקת קונטיינר שפועל

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

  1. נכנסים לדף Kubernetes clusters במסוף Google Cloud .

    מעבר אל Kubernetes clusters

  2. לוחצים על שם האשכול שמוצג ב-resource.labels.cluster_name.

  3. בדף Clusters (אשכולות), לוחצים על Connect (קישור) ואז על Run in Cloud Shell (הפעלה ב-Cloud Shell).

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

  4. לוחצים על Enter, ואם מופיעה תיבת הדו-שיח Authorize Cloud Shell, לוחצים על Authorize.

  5. מריצים את הפקודה הבאה כדי להתחבר לסביבת הקונטיינר:

      kubectl exec --namespace=Pod_Namespace -ti Pod_Name -c Container_Name -- /bin/sh
    

    כדי להשתמש בפקודה הזו, צריך להתקין מעטפת במיקום /bin/sh במאגר.

שלב 6: מחקר של שיטות התקפה ותגובה

  1. כדאי לעיין בערכים של מסגרת MITRE ATT&CK לגבי סוג הממצא הזה: Command and Scripting Interpreter, Ingress Tool Transfer.
  2. כדי לבדוק את ערך הגיבוב (hash) ‏SHA-256 של הקובץ הבינארי שסומן כזדוני ב-VirusTotal, לוחצים על הקישור באינדיקטור של VirusTotal. ‫VirusTotal הוא שירות בבעלות Alphabet שמספק הקשר לגבי קבצים, כתובות URL, דומיינים וכתובות IP שעלולים להיות זדוניים.
  3. כדי לפתח תוכנית תגובה, משלבים את תוצאות החקירה עם המחקר של MITRE והניתוח של VirusTotal.

שלב 7: מיישמים את התגובה

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

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

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