竊取資料:將 Cloud SQL 備份還原至外部機構

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

總覽

檢查稽核記錄,判斷備份資料是否已還原至組織或專案外的 Cloud SQL 執行個體,藉此偵測 Cloud SQL 備份資料外洩事件。支援所有 Cloud SQL 執行個體和備份類型。

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

回應方式

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

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

  1. 按照「查看發現項目」一文的說明,開啟Exfiltration: Cloud SQL Restore Backup to External Organization發現項目。
  2. 在發現項目詳細資料面板的「摘要」分頁中,查看下列各節的資訊:

    • 偵測到的內容,尤其是下列欄位:
      • 主要電子郵件地址:用來外洩資料的帳戶。
      • 外洩來源:備份檔的建立來源 Cloud SQL 執行個體詳細資料。
      • 外洩目標:備份資料還原至 Cloud SQL 執行個體的詳細資料。
    • 受影響的資源,尤其是下列欄位:
      • 完整資源名稱:還原備份的資源名稱。
      • 專案完整名稱:包含備份來源 Cloud SQL 執行個體的專案。 Google Cloud
  3. 相關連結,尤其是下列欄位:

    • Cloud Logging URI:記錄項目連結。
    • MITRE ATT&CK 方法:連結至 MITRE ATT&CK 文件。
    • 相關發現項目:任何相關發現項目的連結。
  4. 按一下「JSON」分頁標籤。

  5. 請注意 JSON 中的下列欄位。

    • resource
      • parent_name:備份來源 Cloud SQL 執行個體的資源名稱
    • evidence
      • sourceLogId
        • projectId:包含來源 BigQuery 資料集的 Google Cloud 專案。
    • properties
      • restoreToExternalInstance
        • backupId:已還原的備份作業 ID

步驟 2:檢查權限和設定

  1. 前往 Google Cloud 控制台的「IAM」(身分與存取權管理) 頁面。

    前往「IAM」頁面

  2. 如有必要,請選取在發現項目 JSON 的 projectId 欄位中列出的執行個體專案 (如步驟 1 所述)。

  3. 在隨即顯示的頁面中,於「篩選器」方塊中輸入「主體電子郵件」 (來自步驟 1) 中列出的電子郵件地址,並查看指派給該帳戶的權限。

步驟 3:檢查記錄

  1. 在 Google Cloud 控制台中,按一下「Cloud Logging URI」 (來自步驟 1) 中的連結,前往「Logs Explorer」。 「記錄檔瀏覽器」頁面會顯示與相關 Cloud SQL 執行個體有關的所有記錄。

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

  1. 查看這類發現項目的 MITRE ATT&CK 架構項目: 透過網路服務外洩資料:外洩至雲端儲存空間
  2. 按一下「相關發現項目」列中的連結,即可查看相關發現項目。(來自步驟 1)。相關發現項目在同一個 Cloud SQL 執行個體上具有相同的發現項目類型。
  3. 如要制定回應計畫,請將調查結果與 MITRE 研究結合。

步驟 5:實作回應

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

  • 與遭外洩資料的專案擁有者聯絡。
  • 在調查完成前,請考慮撤銷發現項目詳細資料「摘要」分頁中「主體電子郵件」列所列主體的權限。
  • 如要防止資料外洩,請在受影響的 Cloud SQL 執行個體中新增限制性 IAM 政策。
  • 如要限制 Cloud SQL Admin API 的存取權,請使用 VPC Service Controls
  • 如要找出並修正權限過多的角色,請使用 IAM 建議工具

發現項目 JSON 範例

以下是發現項目 JSON 的範例。

{
    "finding": {
      "name": "organizations/ORGANIZATION_ID/sources/SOURCE_ID/findings/FINDING_ID",
      "parent": "organizations/ORGANIZATION_ID/sources/SOURCE_ID",
      "resource_name": "//cloudsql.googleapis.com/projects/SOURCE_PROJECT_ID/instances/SOURCE_INSTANCE_NAME/backupRuns/BACKUP_ID",
      "state": "ACTIVE",
      "category": "Exfiltration: CloudSQL Restore Backup to External Organization",
      "sourceProperties": {
        "sourceId": {
          "projectNumber": "SOURCE_PROJECT_NUMBER",
          "customerOrganizationNumber": "ORGANIZATION_ID"
        },
        "detectionCategory": {
          "technique": "backup_exfiltration",
          "indicator": "audit_log",
          "ruleName": "cloudsql_exfil",
          "subRuleName": "restore_to_external_instance"
        },
        "detectionPriority": "HIGH",
        "affectedResources": [
          {
            "gcpResourceName": "//cloudresourcemanager.googleapis.com/projects/SOURCE_PROJECT_NUMBER"
          },
          {
            "gcpResourceName": "//cloudsql.googleapis.com/projects/SOURCE_PROJECT_ID/instances/SOURCE_INSTANCE_NAME"
          },
          {
            "gcpResourceName": "//cloudsql.googleapis.com/projects/TARGET_PROJECT_ID/instances/TARGET_INSTANCE_NAME"
          },
        ],
        "evidence": [{
          "sourceLogId": {
            "projectId": "SOURCE_PROJECT_ID",
            "resourceContainer": "projects/SOURCE_PROJECT_ID",
            "timestamp": {
              "seconds": "0",
              "nanos": 0.0
            },
            "insertId": "INSERT_ID"
          }
        }],
        "properties": {
          "restoreToExternalInstance": {
            "principalEmail": "PRINCIPAL_EMAIL",
            "sourceCloudsqlInstanceResource": "//cloudsql.googleapis.com/projects/SOURCE_PROJECT_ID/instances/SOURCE_INSTANCE_NAME",
            "backupId": "BACKUP_ID",
            "targetCloudsqlInstanceResource": "//cloudsql.googleapis.com/projects/TARGET_PROJECT_ID/instances/TARGET_INSTANCE_NAME"
          }
        },
        "findingId": "FINDING_ID",
        "contextUris": {
          "mitreUri": {
            "displayName": "MITRE Link",
            "url": "https://attack.mitre.org/techniques/T1567/002/"
          },
          "cloudLoggingQueryUri": [{
            "displayName": "Cloud Logging Query Link",
            "url": "LOGGING_LINK"
          }],
          "relatedFindingUri": {
            "displayName": "Related CloudSQL Exfiltration findings",
            "url": "RELATED_FINDINGS_LINK"
          }
        }
      },
      "securityMarks": {
        "name": "organizations/ORGANIZATION_ID/sources/SOURCE_ID/findings/FINDING_ID/securityMarks"
      },
      "eventTime": "2022-01-19T21:36:07.901Z",
      "createTime": "2022-01-19T21:36:08.695Z",
      "severity": "HIGH",
      "workflowState": "NEW",
      "canonicalName": "projects/SOURCE_PROJECT_NUMBER/sources/SOURCE_ID/findings/FINDING_ID"
      "mute": "UNDEFINED",
      "findingClass": "THREAT",
      "mitreAttack": {
        "primaryTactic": "EXFILTRATION",
        "primaryTechniques": ["EXFILTRATION_OVER_WEB_SERVICE", "EXFILTRATION_TO_CLOUD_STORAGE"]
      },
      "access": {
        "principalEmail": "PRINCIPAL_EMAIL",
        "callerIp": "IP",
        "callerIpGeo": {
        },
        "serviceName": "cloudsql.googleapis.com",
        "methodName": "cloudsql.instances.restoreBackup"
      },
      "exfiltration": {
        "sources": [
          {
            "name": "//cloudsql.googleapis.com/projects/SOURCE_PROJECT_ID/instances/SOURCE_INSTANCE_NAME"
          }
        ],
        "targets": [
          {
            "name": "//cloudsql.googleapis.com/projects/TARGET_PROJECT_ID/instances/TARGET_INSTANCE_NAME"
          }
        ]
      }
    },
    "resource": {
      "name": "//cloudsql.googleapis.com/projects/SOURCE_PROJECT_ID/instances/SOURCE_INSTANCE_NAME/backupRuns/BACKUP_ID",
      "projectName": "//cloudresourcemanager.googleapis.com/projects/SOURCE_PROJECT_NUMBER",
      "projectDisplayName": "SOURCE_PROJECT_ID",
      "parentName": "//cloudsql.googleapis.com/projects/SOURCE_PROJECT_ID/instances/SOURCE_INSTANCE_NAME",
      "parentDisplayName": "SOURCE_INSTANCE_NAME",
      "type": "google.cloud.sql.Instance",
      "folders": [{
        "resourceFolder": "//cloudresourcemanager.googleapis.com/folders/FOLDER_NUMBER",
        "resourceFolderDisplayName": "FOLDER_ID"
      }],
      "displayName": "mysql-backup-restore-instance"
    }
}

後續步驟