Kubernetes Durcissement

Tip

Apprenez & pratiquez AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Soutenez HackTricks

Outils pour analyser un cluster

Steampipe - Kubernetes Compliance

Il effectuera plusieurs contrĂŽles de conformitĂ© sur le cluster Kubernetes. Il inclut la prise en charge des recommandations CIS, du National Security Agency (NSA) et du Cybersecurity and Infrastructure Security Agency (CISA) — rapport technique sur la cybersĂ©curitĂ© pour le durcissement de Kubernetes.

# Install Steampipe
brew install turbot/tap/powerpipe
brew install turbot/tap/steampipe
steampipe plugin install kubernetes

# Start the service
steampipe service start

# Install the module
mkdir dashboards
cd dashboards
powerpipe mod init
powerpipe mod install github.com/turbot/steampipe-mod-kubernetes-compliance

# Run the module
powerpipe server

Kubescape

Kubescape est un outil open-source K8s offrant une vue centralisĂ©e multi-cloud pour K8s, incluant l’analyse des risques, la conformitĂ© de sĂ©curitĂ©, un visualiseur RBAC et l’analyse des vulnĂ©rabilitĂ©s d’images. Kubescape scanne les clusters K8s, les fichiers YAML et les HELM charts, dĂ©tectant les mauvaises configurations selon plusieurs frameworks (tels que le NSA-CISA , le MITRE ATT&CKÂź), les vulnĂ©rabilitĂ©s logicielles et les violations RBAC (role-based-access-control) dĂšs les premiĂšres phases du pipeline CI/CD, calcule instantanĂ©ment un score de risque et affiche les tendances de risque dans le temps.

curl -s https://raw.githubusercontent.com/kubescape/kubescape/master/install.sh | /bin/bash
kubescape scan --verbose

Popeye

Popeye est un utilitaire qui analyse un cluster Kubernetes en production et signale les problĂšmes potentiels liĂ©s aux ressources dĂ©ployĂ©es et aux configurations. Il assainit votre cluster en se basant sur ce qui est dĂ©ployĂ© et non sur ce qui est prĂ©sent sur le disque. En scannant votre cluster, il dĂ©tecte les mauvaises configurations et vous aide Ă  garantir que les bonnes pratiques sont en place, Ă©vitant ainsi des maux de tĂȘte ultĂ©rieurs. Il vise Ă  rĂ©duire la charge cognitive _over_load rencontrĂ©e lors de l’exploitation d’un cluster Kubernetes en environnement rĂ©el. De plus, si votre cluster utilise un metric-server, il signale les Ă©ventuelles sur/sous-allocations de ressources et tente de vous avertir si votre cluster manque de capacitĂ©.

Kube-bench

L’outil kube-bench vĂ©rifie si Kubernetes est dĂ©ployĂ© de maniĂšre sĂ©curisĂ©e en exĂ©cutant les contrĂŽles documentĂ©s dans le [CIS Kubernetes Benchmark].
Vous pouvez choisir de :

  • exĂ©cuter kube-bench depuis l’intĂ©rieur d’un conteneur (en partageant le PID namespace avec l’hĂŽte)
  • exĂ©cuter un conteneur qui installe kube-bench sur l’hĂŽte, puis lancer kube-bench directement sur l’hĂŽte
  • installer les derniers binaires depuis la Releases page,
  • le compiler depuis les sources.

Kubeaudit

[OBSOLÈTE] L’outil kubeaudit est un outil en ligne de commande et un package Go pour auditer des clusters Kubernetes concernant diverses problĂ©matiques de sĂ©curitĂ©.

Kubeaudit peut dĂ©tecter s’il s’exĂ©cute Ă  l’intĂ©rieur d’un conteneur dans un cluster. Dans ce cas, il tentera d’auditer toutes les ressources Kubernetes de ce cluster :

kubeaudit all

Cet outil possĂšde Ă©galement l’argument autofix pour corriger automatiquement les problĂšmes dĂ©tectĂ©s.

Kube-hunter

[DÉPRÉCIÉ] L’outil kube-hunter recherche des faiblesses de sĂ©curitĂ© dans les clusters Kubernetes. L’outil a Ă©tĂ© dĂ©veloppĂ© pour accroĂźtre la sensibilisation et la visibilitĂ© des problĂšmes de sĂ©curitĂ© dans les environnements Kubernetes.

kube-hunter --remote some.node.com

Trivy

Trivy dispose de scanners qui recherchent des problĂšmes de sĂ©curitĂ©, et des cibles oĂč ils peuvent trouver ces problĂšmes :

  • Image de conteneur
  • SystĂšme de fichiers
  • DĂ©pĂŽt Git (remote)
  • Image de machine virtuelle
  • Kubernetes

Kubei

[Semble non maintenu]

Kubei est un outil de scan de vulnĂ©rabilitĂ©s et de benchmark CIS Docker qui permet aux utilisateurs d’obtenir une Ă©valuation prĂ©cise et immĂ©diate du risque de leurs clusters kubernetes. Kubei scanne toutes les images utilisĂ©es dans un cluster Kubernetes, y compris les images des pods d’application et des pods systĂšme.

KubiScan

KubiScan est un outil pour scanner les clusters Kubernetes Ă  la recherche de permissions risquĂ©es dans le modĂšle d’autorisation Role-based access control (RBAC) de Kubernetes.

Managed Kubernetes Auditing Toolkit

Mkat est un outil conçu pour tester d’autres types de contrĂŽles Ă  haut risque comparĂ© aux autres outils. Il possĂšde principalement 3 modes diffĂ©rents :

  • find-role-relationships: Qui trouvera quels rĂŽles AWS s’exĂ©cutent dans quels pods
  • find-secrets: Qui tente d’identifier des secrets dans les ressources K8s telles que Pods, ConfigMaps et Secrets.
  • test-imds-access: Qui essaiera de lancer des pods et d’accĂ©der aux metadata v1 et v2. ATTENTION : Cela exĂ©cutera un pod dans le cluster, soyez trĂšs prudent car peut-ĂȘtre vous ne voulez pas faire cela !

Auditer le code IaC

KICS

KICS trouve des vulnĂ©rabilitĂ©s de sĂ©curitĂ©, des problĂšmes de conformitĂ© et des mauvaises configurations d’infrastructure dans les solutions Infrastructure as Code suivantes : Terraform, Kubernetes, Docker, AWS CloudFormation, Ansible, Helm, Microsoft ARM, et les spĂ©cifications OpenAPI 3.0

Checkov

Checkov est un outil d’analyse statique de code pour l’infrastructure-as-code.

Il scanne l’infrastructure cloud provisionnĂ©e en utilisant Terraform, Terraform plan, Cloudformation, AWS SAM, Kubernetes, Dockerfile, Serverless ou ARM Templates et dĂ©tecte les erreurs de configuration de sĂ©curitĂ© et de conformitĂ© en utilisant une analyse basĂ©e sur un graphe.

Kube-score

kube-score est un outil qui effectue une analyse statique des dĂ©finitions d’objets Kubernetes.

Pour installer :

DistributionCommande / Lien
Binaries précompilés pour macOS, Linux, et WindowsGitHub releases
Dockerdocker pull zegl/kube-score (Docker Hub)
Homebrew (macOS et Linux)brew install kube-score
Krew (macOS et Linux)kubectl krew install score

Outils pour analyser les fichiers YAML et les Helm Charts

Kube-linter

# Install Kube-linter
brew install kube-linter

# Run Kube-linter
## lint ./path/to/yaml/or/chart

Checkov

# Install Checkov
pip install checkov

# Run Checkov
checkov -d ./path/to/yaml/or/chart

kube‑score

# Install kube-score
brew install kube-score

# Run kube-score
kube-score score ./path/to/yaml
# or
helm template chart /path/to/chart | kube-score score -
# or if the chart needs some values
helm template chart /path/to/chart \
--set 'config.urls[0]=https://dummy.backend.internal' \
| kube-score score -

Kubesec

# Install Kubesec
## Download from https://github.com/controlplaneio/kubesec/releases

# Run Kubesec in a yaml
kubesec scan ./path/to/yaml
# or
helm template chart /path/to/chart | kubesec scan -
# or if the chart needs some values
helm template chart /path/to/chart \
--set 'config.urls[0]=https://dummy.backend.internal' \
| kubesec scan -

Scan des problÚmes de dépendances

Scan des images

#!/bin/bash
export images=$(kubectl get pods --all-namespaces -o jsonpath="{range .items[]}{.spec.containers[].image}{'\n'}{end}" | sort | uniq)
echo "All images found: $images"
echo ""
echo ""
for image in $images; do
# Run trivy scan and save JSON output
trivy image --format json --output /tmp/result.json --severity HIGH,CRITICAL "$image" >/dev/null 2>&1
# Extract binary targets that have vulnerabilities
binaries=$(jq -r '.Results[] | select(.Vulnerabilities != null) | .Target' /tmp/result.json)
if [ -n "$binaries" ]; then
echo "- **Image:** $image"
while IFS= read -r binary; do
echo "  - **Binary:** $binary"
jq -r --arg target "$binary" '
.Results[] | select(.Target == $target) | .Vulnerabilities[] |
"    - **\(.Title)** (\(.Severity)): Affecting `\(.PkgName)` fixed in version `\(.FixedVersion)` (current version is `\(.InstalledVersion)`)."
' /tmp/result.json
done <<< "$binaries"
echo ""
echo ""
echo ""
fi
done

Scan Helm charts

#!/bin/bash
# scan-helm-charts.sh
# This script lists all Helm releases, renders their manifests,
# and then scans each manifest with Trivy for configuration issues.

# Check that jq is installed
if ! command -v jq &>/dev/null; then
echo "jq is required but not installed. Please install jq and rerun."
exit 1
fi

# List all helm releases and extract namespace and release name
echo "Listing Helm releases..."
helm list --all-namespaces -o json | jq -r '.[] | "\(.namespace) \(.name)"' > helm_releases.txt

# Check if any releases were found
if [ ! -s helm_releases.txt ]; then
echo "No Helm releases found."
exit 0
fi

# Loop through each Helm release and scan its rendered manifest
while IFS=" " read -r namespace release; do
echo "---------------------------------------------"
echo "Scanning Helm release '$release' in namespace '$namespace'..."
# Render the Helm chart manifest
manifest_file="${release}-manifest.yaml"
helm get manifest "$release" -n "$namespace" > "$manifest_file"
if [ $? -ne 0 ]; then
echo "Failed to get manifest for $release in $namespace. Skipping."
continue
fi
# Scan the manifest with Trivy (configuration scan)
echo "Running Trivy config scan on $manifest_file..."
trivy config --severity MEDIUM,HIGH,CRITICAL "$manifest_file"
echo "Completed scan for $release."
done < helm_releases.txt

echo "---------------------------------------------"
echo "Helm chart scanning complete."

Conseils

Kubernetes PodSecurityContext and SecurityContext

Vous pouvez configurer le contexte de sĂ©curitĂ© des Pods (avec PodSecurityContext) et des containers qui vont ĂȘtre exĂ©cutĂ©s (avec SecurityContext). Pour plus d’informations lisez :

Kubernetes SecurityContext(s)

Renforcement de l’API Kubernetes

Il est trĂšs important de protĂ©ger l’accĂšs au Kubernetes Api Server car un acteur malveillant disposant de privilĂšges suffisants pourrait l’abuser et endommager l’environnement de nombreuses façons.
Il est important de sĂ©curiser Ă  la fois l’accĂšs (whitelist des origines autorisĂ©es Ă  accĂ©der Ă  l’API Server et refuser toute autre connexion) et la authentication (en suivant le principe du moindre privilĂšge). Et surtout ne laissez jamais de requĂȘtes anonymes.

Processus de requĂȘte courant :
Utilisateur ou K8s ServiceAccount –> Authentication –> Authorization –> Admission Control.

Conseils :

  • Fermer les ports.
  • Éviter l’accĂšs anonyme.
  • NodeRestriction ; pas d’accĂšs depuis des nƓuds spĂ©cifiques vers l’API.
  • https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/#noderestriction
  • EmpĂȘche essentiellement les kubelets d’ajouter/supprimer/mettre Ă  jour des labels avec un prĂ©fixe node-restriction.kubernetes.io/. Ce prĂ©fixe d’étiquette est rĂ©servĂ© aux administrateurs pour Ă©tiqueter leurs Node objects Ă  des fins d’isolation des workloads, et les kubelets ne seront pas autorisĂ©s Ă  modifier les labels avec ce prĂ©fixe.
  • Et aussi, permet aux kubelets d’ajouter/supprimer/mettre Ă  jour ces labels et prĂ©fixes d’étiquettes.
  • Assurer l’isolation sĂ©curisĂ©e des workloads via les labels.
  • EmpĂȘcher l’accĂšs Ă  l’API pour certains pods.
  • Éviter l’exposition de l’ApiServer sur Internet.
  • Éviter l’accĂšs non autorisĂ© via RBAC.
  • Port de l’ApiServer protĂ©gĂ© par firewall et IP whitelisting.

Renforcement de SecurityContext

Par dĂ©faut, l’utilisateur root sera utilisĂ© lorsqu’un Pod dĂ©marre si aucun autre utilisateur n’est spĂ©cifiĂ©. Vous pouvez exĂ©cuter votre application dans un contexte plus sĂ©curisĂ© en utilisant un template similaire au suivant :

apiVersion: v1
kind: Pod
metadata:
name: security-context-demo
spec:
securityContext:
runAsUser: 1000
runAsGroup: 3000
fsGroup: 2000
volumes:
- name: sec-ctx-vol
emptyDir: {}
containers:
- name: sec-ctx-demo
image: busybox
command: [ "sh", "-c", "sleep 1h" ]
securityContext:
runAsNonRoot: true
volumeMounts:
- name: sec-ctx-vol
mountPath: /data/demo
securityContext:
allowPrivilegeEscalation: true

Durcissement général

Vous devriez mettre à jour votre environnement Kubernetes aussi fréquemment que nécessaire pour avoir :

  • DĂ©pendances Ă  jour.
  • Correctifs de bugs et de sĂ©curitĂ©.

Release cycles: Tous les 3 mois il y a une nouvelle version mineure – 1.20.3 = 1(Majeur).20(Mineur).3(correctif)

La meilleure façon de mettre à jour un Cluster Kubernetes est (d’aprùs here):

  • Mettre Ă  niveau les composants du Master Node dans l’ordre suivant :
  • etcd (toutes les instances).
  • kube-apiserver (tous les hĂŽtes du control plane).
  • kube-controller-manager.
  • kube-scheduler.
  • cloud controller manager, si vous en utilisez un.
  • Mettre Ă  niveau les composants des Worker Node tels que kube-proxy, kubelet.

Kubernetes monitoring & security:

  • Kyverno Policy Engine
  • Cilium Tetragon - eBPF-based Security Observability and Runtime Enforcement
  • Network Security Policies
  • Falco - Runtime security monitoring & detection

Tip

Apprenez & pratiquez AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Soutenez HackTricks