Elevación de privilegios: Creación de una CSR de Kubernetes para el certificado principal

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

Para aumentar los privilegios, un agente malicioso en potencia creó una solicitud de firma de certificado (CSR) de instancia principal de Kubernetes, que le da cluster-admin acceso.

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 el Privilege Escalation: Create Kubernetes CSR for master cert hallazgo como se indica en Revisa los hallazgos. Se abrirá el panel de detalles del hallazgo en la pestaña Resumen.

  2. En la pestaña Resumen, revisa la información de las secciones que se indican a continuación:

    • Qué se detectó, en especial, los campos siguientes:
      • Correo electrónico principal: Es la cuenta que realizó la llamada.
      • Nombre del método: Es el método al que se llamó.
    • Recurso afectado, en especial, los campos siguientes:
      • Nombre visible del recurso: Es el clúster de Kubernetes en el que se produjo la acción.
    • 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.

Paso 2: Comprueba los registros

  1. En la pestaña Resumen de los detalles del hallazgo en la Google Cloud consola, haz clic en el vínculo del campo URI de Cloud Logging para ir al Explorador de registros.
  2. Verifica el valor en el campo protoPayload.resourceName para identificar la solicitud de firma de certificado específica.
  3. Verifica otras acciones que realizó el principal con los siguientes filtros:

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

      Reemplaza lo siguiente:

    • CLUSTER_NAME: Es el valor que anotaste en el campo Nombre visible del recurso en los detalles del hallazgo.

    • PRINCIPAL_EMAIL: Es el valor que anotaste en el campo Correo electrónico principal en los detalles del hallazgo.

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

  1. Revisa las entradas del framework de MITRE ATT&CK para este tipo de hallazgo: Elevación de privilegios.
  2. Investiga si se justificó otorgar acceso de cluster-admin.
  3. Si el correo electrónico principal no es una cuenta de servicio, comunícate con el propietario de la cuenta para confirmar si el propietario legítimo realizó la acción.

    Si el correo electrónico principal es una cuenta de servicio (IAM o Kubernetes), identifica el origen de la acción para determinar su legitimidad.

  4. Para elaborar un plan de respuesta, combina los resultados de la investigación con la investigación de MITRE.

JSON de ejemplo del hallazgo

A continuación, se muestra un ejemplo del JSON del hallazgo.

{
  "findings": {
    "access": {
      "principalEmail": "PRINCIPAL_EMAIL",
      "callerIp": "IP_ADDRESS",
      "callerIpGeo": {
        "regionCode": "US"
      },
      "serviceName": "k8s.io",
      "methodName": "io.k8s.certificates.v1.certificatesigningrequests.create"
    },
    "canonicalName": "projects/PROJECT_NUMBER/sources/SOURCE_ID/findings/0562169c2e3b44879030a7369dbf839c",
    "category": "Privilege Escalation: Create Kubernetes CSR for master cert",
    "contacts": {
      "technical": {
        "contacts": [
          {
            "email": "EMAIL_ADDRESS"
          },
          {
            "email": "EMAIL_ADDRESS"
          },
          {
            "email": "EMAIL_ADDRESS"
          }
        ]
      }
    },
    "createTime": "2022-10-08T14:38:12.501Z",
    "database": {},
    "eventTime": "2022-10-08T14:37:46.944Z",
    "exfiltration": {},
    "findingClass": "THREAT",
    "findingProviderId": "organizations/ORGANIZATION_NUMBER/firstPartyFindingProviders/etd",
    "indicator": {},
    "kubernetes": {},
    "mitreAttack": {},
    "mute": "UNDEFINED",
    "name": "organizations/ORGANIZATION_NUMBER/sources/SOURCE_ID/findings/0562169c2e3b44879030a7369dbf839c",
    "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": "HIGH",
    "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": "csr_for_master_cert"
    },
    "detectionPriority": "HIGH",
    "affectedResources": [
      {
        "gcpResourceName": "//k8s.io/certificates.k8s.io/v1/certificatesigningrequests/node-csr-fake-master"
      },
      {
        "gcpResourceName": "//cloudresourcemanager.googleapis.com/projects/PROJECT_NUMBER"
      }
    ],
    "evidence": [
      {
        "sourceLogId": {
          "projectId": "PROJECT_ID",
          "resourceContainer": "projects/PROJECT_ID",
          "timestamp": {
            "seconds": "1665239866",
            "nanos": 944045000
          },
          "insertId": "4d17b41e-7f56-43dc-9b72-abcbdc64f101"
        }
      }
    ],
    "properties": {},
    "findingId": "0562169c2e3b44879030a7369dbf839c",
    "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-08T14:37:46.944045Z%22%0AinsertId%3D%224d17b41e-7f56-43dc-9b72-abcbdc64f101%22%0Aresource.labels.project_id%3D%22PROJECT_ID%22?project=PROJECT_ID"
        }
      ],
      "relatedFindingUri": {}
    }
  }
}

¿Qué sigue?