ביצוע: קוד 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: גיבוב (hash) מסוג 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. שימו לב למטא-נתונים לגבי ה-Pod והבעלים שלו.

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

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

    כניסה לדף Logs Explorer

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

  3. מגדירים את Select time range לתקופה הרצויה.

  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 ביצע שינויים מכוונים בקונטיינר, צריך לבנות מחדש את קובץ אימג' של קונטיינר כך שלא יהיה צורך בשינויים. כך מאגר התגים יכול להיות בלתי ניתן לשינוי.
  • אחרת, צריך לפנות לבעלים של הפרויקט עם מאגר התגים שנפרץ.
  • צריך להפסיק את השימוש במאגר התגים שנפרץ או למחוק אותו ולהחליף אותו במאגר תגים חדש.

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