Élévation des privilèges : exécution d'un conteneur Kubernetes privilégié

Ce document décrit un type de résultat de détection de menace dans Security Command Center. Ces résultats sont générés par les détecteurs de menaces lorsqu'ils détectent une menace potentielle dans vos ressources cloud. Pour obtenir la liste complète des résultats de détection de menace disponibles, consultez cet index.

Présentation

Une personne potentiellement malveillante a créé un pod contenant des conteneurs privilégiés ou dotés de capacités d'élévation des droits.

Le champ privileged d'un conteneur privilégié est défini sur true. Le champ allowPrivilegeEscalation d'un conteneur doté de capacités d'élévation des privilèges est défini sur true. Pour en savoir plus, consultez la documentation de référence de l'API SecurityContext v1 Core dans la documentation de Kubernetes.

Event Threat Detection est la source de ce résultat.

Actions à mettre en place

Pour traiter ce résultat, procédez comme suit :

Étape 1 : Examiner les résultats détaillés

  1. Ouvrez le résultat Privilege Escalation: Launch of privileged Kubernetes container comme indiqué dans Examiner les résultats. Le panneau des détails du résultat s'ouvre dans l'onglet Résumé.

  2. Dans l'onglet Résumé, examinez les informations des sections suivantes :

    • Risque détecté, en particulier les champs suivants :
      • Adresse e-mail du compte principal : compte qui a effectué l'appel.
      • Pods Kubernetes : pod nouvellement créé avec des conteneurs privilégiés.
    • Ressource concernée, en particulier les champs suivants :
      • Nom à afficher de la ressource : cluster Kubernetes où l'action a eu lieu.
    • Liens associés, en particulier les champs suivants :
      • URI Cloud Logging : lien vers les entrées Logging.
      • Méthode MITRE ATT&CK : lien vers la documentation MITRE ATT&CK.
      • Résultats associés : liens vers les éventuels résultats associés.
  3. Dans l'onglet JSON, notez les valeurs des champs du résultat :

    • findings.kubernetes.pods[].containers : conteneur privilégié trouvé dans le pod.

Étape 2 : Vérifier les journaux

  1. Dans l'onglet Résumé des détails du résultat dans la Google Cloud console, accédez à l'explorateur de journaux en cliquant sur le lien dans le champ URI Cloud Logging.
  2. Vérifiez les autres actions effectuées par le compte principal à l'aide des filtres suivants :

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

      Remplacez les éléments suivants :

    • CLUSTER_NAME : valeur que vous avez notée dans le champ Nom à afficher pour la ressource des détails du résultat.

    • PRINCIPAL_EMAIL : valeur que vous avez notée dans le champ Adresse e-mail du compte principal des résultats détaillés.

Étape 3 : Rechercher des méthodes d'attaque et de réponse

  1. Examinez les entrées du framework MITRE ATT&CK pour ce type de résultat : Élévation des privilèges.
  2. Vérifiez que le conteneur créé nécessite un accès aux ressources de l'hôte et aux fonctionnalités du kernel.
  3. Déterminez s'il existe d'autres signes d'activité malveillante de la part du compte principal dans les journaux.
  4. Si l'adresse e-mail du compte principal n'est pas un compte de service, contactez le propriétaire du compte pour confirmer que ce propriétaire légitime est bien à l'origine de l'action.

    Si l'adresse e-mail du compte principal est un compte de service (IAM ou Kubernetes), identifiez la source de l'action pour déterminer sa légitimité.

  5. Pour élaborer votre plan de réponse, combinez les résultats de votre enquête aux recherches de MITRE.

Exemple de code JSON pour un résultat

Voici un exemple de code JSON pour un résultat.

{
  "findings": {
    "access": {
      "principalEmail": "PRINCIPAL_EMAIL",
      "callerIp": "IP_ADDRESS",
      "callerIpGeo": {
        "regionCode": "US"
      },
      "serviceName": "k8s.io",
      "methodName": "io.k8s.core.v1.pods.create"
    },
    "canonicalName": "projects/PROJECT_NUMBER/sources/SOURCE_ID/findings/04206668443b45078d5b51c908ad87da",
    "category": "Privilege Escalation: Launch of privileged Kubernetes container",
    "contacts": {
      "technical": {
        "contacts": [
          {
            "email": "EMAIL_ADDRESS"
          },
          {
            "email": "EMAIL_ADDRESS"
          },
          {
            "email": "EMAIL_ADDRESS"
          }
        ]
      }
    },
    "createTime": "2022-10-08T21:43:41.145Z",
    "database": {},
    "eventTime": "2022-10-08T21:43:09.188Z",
    "exfiltration": {},
    "findingClass": "THREAT",
    "findingProviderId": "organizations/ORGANIZATION_NUMBER/firstPartyFindingProviders/etd",
    "indicator": {},
    "kubernetes": {
      "pods": [
        {
          "ns": "default",
          "name": "POD_NAME",
          "containers": [
            {
              "name": "CONTAINER_NAME",
              "uri": "CONTAINER_URI"
            }
          ]
        }
      ]
    },
    "mitreAttack": {},
    "mute": "UNDEFINED",
    "name": "organizations/ORGANIZATION_NUMBER/sources/SOURCE_ID/findings/04206668443b45078d5b51c908ad87da",
    "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": "LOW",
    "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": "launch_privileged_container"
    },
    "detectionPriority": "LOW",
    "affectedResources": [
      {
        "gcpResourceName": "//k8s.io/core/v1/namespaces/default/pods/POD_NAME"
      },
      {
        "gcpResourceName": "//cloudresourcemanager.googleapis.com/projects/PROJECT_NUMBER"
      }
    ],
    "evidence": [
      {
        "sourceLogId": {
          "projectId": "PROJECT_ID",
          "resourceContainer": "projects/PROJECT_ID",
          "timestamp": {
            "seconds": "1665265389",
            "nanos": 188357000
          },
          "insertId": "98b6dfb7-05f6-4279-a902-7e18e815364c"
        }
      }
    ],
    "properties": {},
    "findingId": "04206668443b45078d5b51c908ad87da",
    "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-08T21:43:09.188357Z%22%0AinsertId%3D%2298b6dfb7-05f6-4279-a902-7e18e815364c%22%0Aresource.labels.project_id%3D%22PROJECT_ID%22?project=PROJECT_ID"
        }
      ],
      "relatedFindingUri": {}
    }
  }
}

Étape suivante