持續性:外部使用者取得 Gemini Discovery Engine API 應用程式的存取權

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

總覽

組織外部的主體已獲派 IAM 角色,可存取 Gemini Enterprise AI 應用程式或資源。發現項目預設為「中」嚴重性。

如果貴組織外部的使用者、服務帳戶或 AI 代理,獲派下列任一 Gemini Enterprise (Discovery Engine) 角色,就會產生這項發現項目:

  • roles/discoveryengine.admin
  • roles/discoveryengine.agentAdmin
  • roles/discoveryengine.agentOwner
  • roles/discoveryengine.agentUser
  • roles/discoveryengine.agentspaceAdmin
  • roles/discoveryengine.agentspaceUser
  • roles/discoveryengine.editor
  • roles/discoveryengine.user

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

回應方式

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

步驟 1:查看發現項目詳細資料

  1. 按照「查看發現項目」中的指示,開啟 Persistence: External Access Granted to Gemini Discovery Engine API Apps 發現項目。系統會開啟發現項目的詳細資料面板,並顯示「摘要」分頁。

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

    • 偵測到的內容,尤其是下列欄位:
      • 主體電子郵件:指派角色的使用者或服務帳戶電子郵件地址。
      • 違規的存取權:新增的 Gemini Enterprise 角色和外部成員詳細資料 (iamBindings)。
    • 受影響的資源
    • 相關連結,尤其是下列欄位:
      • Cloud Logging URI:記錄項目的連結。
      • MITRE ATT&CK 方法:MITRE ATT&CK 說明文件的連結。

步驟 2:檢查記錄

  1. 在發現項目詳細資料面板的「摘要」分頁中,按一下「Cloud Logging URI」連結,開啟「Logs Explorer」。
  2. 在載入的頁面中,使用下列篩選器尋找新的或更新的 IAM 政策繫結:
    • protoPayload.methodName="SetIamPolicy"

步驟 3:研究攻擊和應變方法

  1. 查看這個發現項目類型的 MITRE ATT&CK 框架項目:帳戶操控:其他雲端角色。
  2. 如要制定應變計畫,請結合調查結果與 MITRE 研究。

步驟 4:實施應變措施

下列應變計畫可能適用於這項發現項目,但也可能影響作業。 請仔細評估調查中收集到的資訊,判斷解決發現問題的最佳方式。

  1. 請與授予外部角色的專案或資源擁有者聯絡,確認存取權是否已獲授權。
  2. 撤銷外部主體未經授權的 IAM 角色繫結。
  3. 如果授予角色的帳戶 (principalEmail) 遭到入侵,請撤銷其存取權,或刪除遭入侵的服務帳戶並輪替金鑰。
  4. 如要限制將外部主體新增至資源,請使用網域限定共用組織政策限制。

如需應對建議,請參閱「應對 AI 威脅發現項目」。

JSON 格式的發現項目範例

以下是發現項目 JSON 的範例,其中省略了預設值。

{
  "finding": {
    "name": "organizations/ORGANIZATION_ID/sources/SOURCE_ID/locations/global/findings/FINDING_ID",
    "parent": "organizations/ORGANIZATION_ID/sources/SOURCE_ID/locations/global",
    "resourceName": "//cloudresourcemanager.googleapis.com/projects/PROJECT_NUMBER",
    "state": "ACTIVE",
    "category": "Persistence: External Access Granted to Gemini Discovery Engine API Apps",
    "securityMarks": {
      "name": "organizations/ORGANIZATION_ID/sources/SOURCE_ID/locations/global/findings/FINDING_ID/securityMarks"
    },
    "eventTime": "TIMESTAMP",
    "createTime": "TIMESTAMP",
    "severity": "MEDIUM",
    "canonicalName": "projects/PROJECT_NUMBER/sources/SOURCE_ID/locations/global/findings/FINDING_ID",
    "findingClass": "THREAT",
    "access": {
      "principalEmail": "PRINCIPAL_EMAIL",
      "callerIp": "IP_ADDRESS",
      "callerIpGeo": {
        "regionCode": "COUNTRY_CODE"
      },
      "userAgent": "USER_AGENT",
      "serviceName": "cloudresourcemanager.googleapis.com",
      "methodName": "SetIamPolicy",
      "principalSubject": "user:PRINCIPAL_EMAIL"
    },
    "mitreAttack": {
      "primaryTactic": "PERSISTENCE",
      "primaryTechniques": [
        "ADDITIONAL_CLOUD_ROLES",
        "ACCOUNT_MANIPULATION"
      ],
      "additionalTactics": [
        "PRIVILEGE_ESCALATION"
      ]
    },
    "iamBindings": [
      {
        "action": "ADD",
        "role": "roles/discoveryengine.agentspaceUser",
        "member": "user:EXTERNAL_USER_EMAIL"
      }
    ],
    "parentDisplayName": "Event Threat Detection",
    "domains": [
      {
        "category": "AI"
      },
      {
        "category": "IDENTITY_AND_ACCESS"
      }
    ],
    "logEntries": [
      {
        "cloudLoggingEntry": {
          "insertId": "INSERT_ID",
          "logId": "cloudaudit.googleapis.com/activity",
          "resourceContainer": "projects/PROJECT_ID",
          "timestamp": "TIMESTAMP"
        }
      }
    ]
  },
  "resource": {
    "name": "//cloudresourcemanager.googleapis.com/projects/PROJECT_NUMBER",
    "displayName": "PROJECT_ID",
    "type": "google.cloud.resourcemanager.Project",
    "cloudProvider": "GOOGLE_CLOUD_PLATFORM",
    "service": "cloudresourcemanager.googleapis.com",
    "gcpMetadata": {
      "project": "//cloudresourcemanager.googleapis.com/projects/PROJECT_NUMBER",
      "projectDisplayName": "PROJECT_ID",
      "parent": "//cloudresourcemanager.googleapis.com/organizations/ORGANIZATION_ID",
      "parentDisplayName": "ORGANIZATION_DISPLAY_NAME",
      "organization": "organizations/ORGANIZATION_ID"
    },
    "resourcePath": {
      "nodes": [
        {
          "nodeType": "GCP_PROJECT",
          "id": "projects/PROJECT_NUMBER",
          "displayName": "PROJECT_ID"
        },
        {
          "nodeType": "GCP_ORGANIZATION",
          "id": "organizations/ORGANIZATION_ID"
        }
      ]
    },
    "resourcePathString": "organizations/ORGANIZATION_ID/projects/PROJECT_NUMBER"
  },
  "sourceProperties": {
    "sourceId": {
      "projectNumber": "PROJECT_NUMBER",
      "customerOrganizationNumber": "ORGANIZATION_ID"
    },
    "detectionCategory": {
      "ruleName": "granting_external_access_to_gemini_enterprise_ai_apps"
    },
    "detectionPriority": "MEDIUM",
    "affectedResources": [
      {
        "gcpResourceName": "//cloudresourcemanager.googleapis.com/projects/PROJECT_NUMBER"
      }
    ],
    "evidence": [
      {
        "sourceLogId": {
          "projectId": "PROJECT_ID",
          "resourceContainer": "projects/PROJECT_ID",
          "timestamp": {
            "seconds": "TIMESTAMP_SECONDS",
            "nanos": TIMESTAMP_NANOS
          },
          "insertId": "INSERT_ID",
          "logId": "cloudaudit.googleapis.com/activity"
        }
      }
    ],
    "findingId": "FINDING_ID",
    "contextUris": {
      "mitreUri": {
        "displayName": "MITRE Link",
        "url": "https://attack.mitre.org/techniques/T1098/003/"
      },
      "cloudLoggingQueryUri": [
        {
          "displayName": "Cloud Logging Query Link",
          "url": "https://console.cloud.google.com/logs/query;query=timestamp%3D%22TIMESTAMP%22%0AinsertId%3D%22INSERT_ID%22?project=PROJECT_ID"
        }
      ]
    },
    "domains": [
      {
        "category": "AI"
      },
      {
        "category": "IDENTITY_AND_ACCESS"
      }
    ]
  }
}

後續步驟