權限提升:變更機密 Kubernetes RBAC 物件

本文說明 Security Command Center 中的威脅發現項目類型。威脅偵測工具偵測到雲端資源中可能存在威脅時,就會產生威脅發現項目。如需可用威脅發現項目的完整清單,請參閱威脅發現項目索引

總覽

為提升權限,可能有惡意的行為人試圖使用 PUTPATCH 要求,修改機密 cluster-admin 角色的 ClusterRoleRoleBindingClusterRoleBinding 角色式存取權控管 (RBAC) 物件。

Event Threat Detection 是這項發現項目的來源。

回應方式

如要回應這項發現項目,請按照下列步驟操作:

步驟 1:查看調查結果詳細資料

  1. 按照「查看結果」一文的指示,開啟 Privilege Escalation: Changes to sensitive Kubernetes RBAC objects 發現項目。系統會開啟發現項目的詳細資料面板,並顯示「摘要」分頁。

  2. 在「摘要」分頁中,查看下列各節的資訊:

    • 偵測到的內容,尤其是下列欄位:
      • 主體電子郵件地址:發出呼叫的帳戶。
      • 方法名稱:呼叫的方法。
      • Kubernetes 繫結:已修改的機密 Kubernetes 繫結或 ClusterRoleBinding
    • 受影響的資源,尤其是下列欄位:
      • 資源顯示名稱:發生動作的 Kubernetes 叢集。
    • 相關連結,尤其是下列欄位:
      • Cloud Logging URI:記錄項目連結。
      • MITRE ATT&CK 方法:連結至 MITRE ATT&CK 文件。
      • 相關發現項目:任何相關發現項目的連結。
  3. 在「偵測到什麼?」部分,點選「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": {}
    }
  }
}

後續步驟