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
- Consultez les subscription plans!
- Rejoignez le đŹ Discord group ou le telegram group ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des hacking tricks en soumettant des PRs aux HackTricks et HackTricks Cloud github repos.
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 podsfind-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 :
| Distribution | Commande / Lien |
|---|---|
| Binaries précompilés pour macOS, Linux, et Windows | GitHub releases |
| Docker | docker 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 :
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
- https://kubernetes.io/docs/tasks/configure-pod-container/security-context/
- https://kubernetes.io/docs/concepts/policy/pod-security-policy/
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
- Consultez les subscription plans!
- Rejoignez le đŹ Discord group ou le telegram group ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des hacking tricks en soumettant des PRs aux HackTricks et HackTricks Cloud github repos.
HackTricks Cloud

