הסלמת הרשאות: שינויים באובייקטים רגישים של Kubernetes RBAC

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

סקירה כללית

כדי להרחיב את ההרשאות, גורם זדוני פוטנציאלי ניסה לשנות אובייקט של בקרת גישה מבוססת-תפקידים (RBAC) בתפקיד cluster-admin הרגיש ClusterRole, RoleBinding או ClusterRoleBinding באמצעות בקשת PUT או PATCH.

המקור של הממצא הזה הוא Event Threat Detection.

איך מגיבים

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

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

  1. פותחים את Privilege Escalation: Changes to sensitive Kubernetes RBAC objects הממצא לפי ההוראות שבקטע בדיקת הממצאים. חלונית הפרטים של הממצא נפתחת בכרטיסייה סיכום.

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

    • מה זוהה, במיוחד השדות הבאים:
      • כתובת אימייל ראשית: החשבון שממנו בוצעה השיחה.
      • שם השיטה: השיטה שהופעלה.
      • Kubernetes bindings: the sensitive Kubernetes binding or ClusterRoleBinding that was modified.
    • מקור המידע שהושפע, במיוחד השדות הבאים:
      • השם המוצג של המשאב: קלאסטר Kubernetes שבו התרחשה הפעולה.
    • קישורים רלוונטיים, במיוחד השדות הבאים:
      • ‫Cloud Logging URI: קישור לרשומות ב-Logging.
      • שיטת MITRE ATT&CK: קישור למסמכי התיעוד של MITRE ATT&CK.
      • ממצאים קשורים: קישורים לממצאים קשורים.
  3. בקטע What was detected (מה זוהה), לוחצים על שם הקישור בשורה Kubernetes bindings (קישורי Kubernetes). פרטי הקישור מוצגים.

  4. בקישור שמוצג, רושמים את פרטי הקישור.

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

  1. בכרטיסייה סיכום של פרטי הממצא ב Google Cloud מסוף, לוחצים על הקישור בשדה Cloud Logging URI כדי לעבור אל Logs Explorer.
  2. אם הערך בשם השיטה היה שיטת PATCH, בודקים את גוף הבקשה כדי לראות אילו מאפיינים שונו.

    בשיחות של update (PUT), האובייקט כולו נשלח בבקשה, ולכן השינויים לא ברורים.

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

    • resource.labels.cluster_name="CLUSTER_NAME"
    • protoPayload.authenticationInfo.principalEmail="PRINCIPAL_EMAIL"

      מחליפים את מה שכתוב בשדות הבאים:

    • ‫CLUSTER_NAME: הערך שרשמתם בשדה שם התצוגה של המשאב בפרטי הממצא.

    • ‫PRINCIPAL_EMAIL: הערך שרשמתם בשדה כתובת האימייל העיקרית בפרטי הממצא.

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

  1. כדאי לעיין ברשומות של מסגרת MITRE ATT&CK לגבי סוג הממצא הזה: העלאת רמת ההרשאה
  2. מאשרים את רמת הרגישות של האובייקט ואם השינוי מוצדק.
  3. במקרה של קישורים, אפשר לבדוק את הנושא ולחקור אם הנושא צריך את התפקיד שהוא מקושר אליו.
  4. בודקים אם יש ביומנים סימנים אחרים לפעילות זדונית של הגורם המרכזי.
  5. אם כתובת האימייל של הגורם המבצע לא שייכת לחשבון שירות, צריך ליצור קשר עם הבעלים של החשבון כדי לוודא שהבעלים הלגיטימי ביצע את הפעולה.

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

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

דוגמה למציאת JSON

הנה דוגמה ל-JSON של הממצא.

{
  "findings": {
    "access": {
      "principalEmail": "PRINCIPAL_EMAIL",
      "callerIp": "IP_ADDRESS",
      "callerIpGeo": {
        "regionCode": "US"
      },
      "serviceName": "k8s.io",
      "methodName": "io.k8s.authorization.rbac.v1.clusterrolebindings.update"
    },
    "canonicalName": "projects/PROJECT_NUMBER/sources/SOURCE_ID/findings/05b52fe8267d44bdb33c89367f0dd11a",
    "category": "Privilege Escalation: Changes to sensitive Kubernetes RBAC objects",
    "contacts": {
      "technical": {
        "contacts": [
          {
            "email": "EMAIL_ADDRESS"
          },
          {
            "email": "EMAIL_ADDRESS"
          },
          {
            "email": "EMAIL_ADDRESS"
          }
        ]
      }
    },
    "createTime": "2022-10-07T07:42:36.536Z",
    "database": {},
    "eventTime": "2022-10-07T07:42:06.044Z",
    "exfiltration": {},
    "findingClass": "THREAT",
    "findingProviderId": "organizations/ORGANIZATION_NUMBER/firstPartyFindingProviders/etd",
    "indicator": {},
    "kubernetes": {
      "bindings": [
        {
          "name": "cluster-admin",
          "role": {
            "kind": "CLUSTER_ROLE",
            "name": "cluster-admin"
          },
          "subjects": [
            {
              "kind": "USER",
              "name": "testUser-1665153212"
            }
          ]
        }
      ]
    },
    "mitreAttack": {},
    "mute": "UNDEFINED",
    "name": "organizations/ORGANIZATION_NUMBER/sources/SOURCE_ID/findings/05b52fe8267d44bdb33c89367f0dd11a",
    "parent": "organizations/ORGANIZATION_NUMBER/sources/SOURCE_ID",
    "parentDisplayName": "Event Threat Detection",
    "resourceName": "//container.googleapis.com/projects/PROJECT_ID/locations/us-west1-a/clusters/CLUSTER_NAME",
    "severity": "LOW",
    "sourceDisplayName": "Event Threat Detection",
    "state": "ACTIVE",
    "vulnerability": {},
    "workflowState": "NEW"
  },
  "resource": {
    "name": "//container.googleapis.com/projects/PROJECT_ID/locations/us-west1-a/clusters/CLUSTER_NAME",
    "display_name": "CLUSTER_NAME",
    "project_name": "//cloudresourcemanager.googleapis.com/projects/PROJECT_NUMBER",
    "project_display_name": "PROJECT_ID",
    "parent_name": "//cloudresourcemanager.googleapis.com/projects/PROJECT_NUMBER",
    "parent_display_name": "PROJECT_ID",
    "type": "google.container.Cluster",
    "folders": [
      {
        "resourceFolderDisplayName": "FOLDER_NAME",
        "resourceFolder": "//cloudresourcemanager.googleapis.com/folders/FOLDER_NUMBER"
      }
    ]
  },
  "sourceProperties": {
    "sourceId": {
      "projectNumber": "PROJECT_NUMBER",
      "customerOrganizationNumber": "ORGANIZATION_NUMBER"
    },
    "detectionCategory": {
      "ruleName": "gke_control_plane",
      "subRuleName": "edit_sensitive_rbac_object"
    },
    "detectionPriority": "LOW",
    "affectedResources": [
      {
        "gcpResourceName": "//k8s.io/rbac.authorization.k8s.io/v1/clusterrolebindings/cluster-admin"
      },
      {
        "gcpResourceName": "//cloudresourcemanager.googleapis.com/projects/PROJECT_NUMBER"
      }
    ],
    "evidence": [
      {
        "sourceLogId": {
          "projectId": "PROJECT_ID",
          "resourceContainer": "projects/PROJECT_ID",
          "timestamp": {
            "seconds": "1665128526",
            "nanos": 44146000
          },
          "insertId": "5d80de5c-84b8-4f42-84c7-6b597162e00a"
        }
      }
    ],
    "properties": {},
    "findingId": "05b52fe8267d44bdb33c89367f0dd11a",
    "contextUris": {
      "mitreUri": {
        "displayName": "MITRE Link",
        "url": "https://attack.mitre.org/tactics/TA0004/"
      },
      "cloudLoggingQueryUri": [
        {
          "displayName": "Cloud Logging Query Link",
          "url": "https://console.cloud.google.com/logs/query;query=timestamp%3D%222022-10-07T07:42:06.044146Z%22%0AinsertId%3D%225d80de5c-84b8-4f42-84c7-6b597162e00a%22%0Aresource.labels.project_id%3D%22PROJECT_ID%22?project=PROJECT_ID"
        }
      ],
      "relatedFindingUri": {}
    }
  }
}

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