Elevación de privilegios: Obtención de CSR de Kubernetes con credenciales de arranque comprometidas

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 potencialmente malicioso realizó una consulta para una solicitud de firma de certificado (CSR), con el comando kubectl, usando credenciales de arranque comprometidas.

El siguiente es un ejemplo de un comando que detecta esta regla:

kubectl --client-certificate kubelet.crt --client-key kubelet.key --server YOUR_SERVER get csr CSR_NAME

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 Privilege Escalation: Get Kubernetes CSR with compromised bootstrap credentials 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 siguientes:

    • 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ó.
    • En Recurso afectado , se muestra la siguiente información:
      • 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: Revisa los registros

Si el nombre del método, que anotaste en el campo Nombre del método en los detalles del hallazgo, es un método GET, haz lo siguiente:

  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.

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. Si la CSR específica está disponible en la entrada de registro, investiga la sensibilidad del certificado y si la acción estaba justificada.
  3. Para elaborar un plan de respuesta, combina los resultados de la investigación con la investigación de MITRE.

Ejemplo de JSON de hallazgo

El siguiente es un ejemplo del JSON de hallazgo.

{
  "findings": {
    "access": {
      "principalEmail": "PRINCIPAL_EMAIL",
      "callerIp": "IP_ADDRESS",
      "callerIpGeo": {
        "regionCode": "US"
      },
      "serviceName": "k8s.io",
      "methodName": "io.k8s.certificates.v1.certificatesigningrequests.list"
    },
    "canonicalName": "projects/PROJECT_NUMBER/sources/SOURCE_ID/findings/025e0ba774da4d678883257cd125fc43",
    "category": "Privilege Escalation: Get Kubernetes CSR with compromised bootstrap credentials",
    "contacts": {
      "technical": {
        "contacts": [
          {
            "email": "EMAIL_ADDRESS"
          },
          {
            "email": "EMAIL_ADDRESS"
          },
          {
            "email": "EMAIL_ADDRESS"
          }
        ]
      }
    },
    "createTime": "2022-10-12T12:28:11.480Z",
    "database": {},
    "eventTime": "2022-10-12T12:28:08.597Z",
    "exfiltration": {},
    "findingClass": "THREAT",
    "findingProviderId": "organizations/ORGANIZATION_NUMBER/firstPartyFindingProviders/etd",
    "indicator": {},
    "kubernetes": {},
    "mitreAttack": {},
    "mute": "UNDEFINED",
    "name": "organizations/ORGANIZATION_NUMBER/sources/SOURCE_ID/findings/025e0ba774da4d678883257cd125fc43",
    "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": "get_csr_with_compromised_bootstrap_credentials"
    },
    "detectionPriority": "LOW",
    "affectedResources": [
      {
        "gcpResourceName": "//k8s.io/certificates.k8s.io/v1/certificatesigningrequests"
      },
      {
        "gcpResourceName": "//cloudresourcemanager.googleapis.com/projects/PROJECT_NUMBER"
      }
    ],
    "evidence": [
      {
        "sourceLogId": {
          "projectId": "PROJECT_ID",
          "resourceContainer": "projects/PROJECT_ID",
          "timestamp": {
            "seconds": "1665577688",
            "nanos": 597107000
          },
          "insertId": "a189aaf0-90dc-4aaf-a48c-1daa850dd993"
        }
      }
    ],
    "properties": {},
    "findingId": "025e0ba774da4d678883257cd125fc43",
    "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-12T12:28:08.597107Z%22%0AinsertId%3D%22a189aaf0-90dc-4aaf-a48c-1daa850dd993%22%0Aresource.labels.project_id%3D%22PROJECT_ID%22?project=PROJECT_ID"
        }
      ],
      "relatedFindingUri": {}
    }
  }
}

¿Qué sigue?