Robo de datos: copia de seguridad de restablecimiento de Cloud SQL a una organización externa

En este documento, se describe un tipo de hallazgo de amenazas de Security Command Center. Los detectores de amenazas generan hallazgos de amenazas cuando identifican una posible amenaza en tus recursos de Cloud. Para obtener una lista completa de los hallazgos de amenazas disponibles, consulta el Índice de hallazgos de amenazas.

Descripción general

El robo de datos de una copia de seguridad de Cloud SQL se detecta mediante el análisis de los registros de auditoría para determinar si los datos de la copia de seguridad se restablecieron a una instancia de Cloud SQL fuera de la organización o el proyecto. Se admiten todos los tipos de instancias y copias de seguridad de Cloud SQL.

Event Threat Detection es la fuente de este hallazgo.

Cómo se debe responder

Para responder a este hallazgo, sigue los pasos que se indican a continuación:

Paso 1: Revisa los detalles del hallazgo

  1. Abre un hallazgo de Exfiltration: Cloud SQL Restore Backup to External Organization, como se indica en Revisa los resultados.
  2. En la pestaña Resumen del panel de detalles del hallazgo, revisa la información de las siguientes secciones:

    • Qué se detectó, en especial, los campos siguientes:
      • Correo electrónico principal: Es la cuenta que se usó para robar los datos.
      • Fuentes de robo de datos: Son los detalles de la instancia de Cloud SQL a partir de la que se creó la copia de seguridad.
      • Objetivos de robo de datos: Son los detalles de la instancia de Cloud SQL a la que se restablecieron los datos de la copia de seguridad.
    • Recurso afectado, en especial, los campos siguientes:
      • Nombre completo del recurso: Es el nombre del recurso de la copia de seguridad que se restableció.
      • Nombre completo del proyecto: Es el Google Cloud proyecto deque contiene la instancia de Cloud SQL a partir de la que se creó la copia de seguridad.
  3. Vínculos relacionados, en especial los campos siguientes:

    • URI de Cloud Logging: Es el vínculo a las entradas de Logging.
    • Método MITRE ATT&CK: Es el vínculo a la documentación de MITRE ATT&CK.
    • Hallazgos relacionados: Son los vínculos a los hallazgos relacionados.
  4. Haz clic en la pestaña JSON.

  5. En el archivo JSON, observa los campos que se indican a continuación.

    • resource:
      • parent_name: el nombre del recurso de la instancia de Cloud SQL a partir de la cual se creó la copia de seguridad.
    • evidence:
      • sourceLogId:
        • projectId: Es el Google Cloud proyecto de que contiene el conjunto de datos de BigQuery de origen.
    • properties:
      • restoreToExternalInstance:
        • backupId: el ID de la ejecución de la copia de seguridad que se restableció

Paso 2: Revisa los permisos y la configuración

  1. En la consola de Google Cloud , dirígete a la página IAM.

    Ir a IAM

  2. Si es necesario, elige el proyecto de la instancia que aparece en el projectId campo del archivo JSON del hallazgo (del paso 1).

  3. En la página que aparece, en el cuadro Filtro, escribe la dirección de correo electrónico que aparece en Correo electrónico principal (del Paso 1) y comprueba qué permisos se asignan a la cuenta.

Paso 3: Comprueba los registros

  1. En la Google Cloud consola de, ve al Explorador de registros y haz clic en el vínculo en el URI de Cloud Logging (del Paso 1). En la página Explorador de registros , se incluyen todos los registros relacionados con la instancia de Cloud SQL relevante.

Paso 4: Investiga los métodos de ataque y respuesta

  1. Revisa la entrada del framework de MITRE ATT&CK para este tipo de hallazgo: Exfiltración a través de servicio web: Exfiltración a Cloud Storage.
  2. Para revisar los hallazgos relacionados, haz clic en el vínculo de la fila Hallazgos relacionados. (del paso 1). Los resultados relacionados tienen el mismo tipo de resultado en la misma instancia de Cloud SQL.
  3. Para desarrollar un plan de respuesta, combina los resultados de la investigación con la investigación del MITRE.

Paso 5: Implementa la respuesta

El siguiente plan de respuesta podría ser adecuado para este hallazgo, pero también podría afectar las operaciones. Evalúa con cuidado la información que recopilas durante la investigación para determinar la mejor manera de resolver los hallazgos.

  • Comunícate con el propietario del proyecto del cual se robaron datos.
  • Considera revocar los permisos de la principal que aparece en la fila Correo electrónico principal de la pestaña Resumen de los detalles del hallazgo hasta que se complete la investigación.
  • Para detener el robo de datos, agrega políticas de IAM restrictivas a las instancias de Cloud SQL afectadas.
  • Para limitar el acceso a la API de Cloud SQL Admin, usa los Controles del servicio de VPC.
  • Para identificar y corregir los roles demasiado permisivos, usa el recomendador de IAM.

JSON de ejemplo del hallazgo

El siguiente es un ejemplo del JSON del hallazgo.

{
    "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"
    }
}

¿Qué sigue?