Kubernetes Hardening

Soutenez HackTricks et bénéficiez d'avantages !

Outils pour analyser un cluster

Kubescape

Kubescape est un outil open-source K8s fournissant une vue d'ensemble multi-cloud de K8s, comprenant l'analyse des risques, la conformité de sécurité, la visualisation des RBAC et la numérisation des vulnérabilités des images. Kubescape analyse les clusters K8s, les fichiers YAML et les charts HELM, détectant les mauvaises configurations selon plusieurs frameworks (comme le NSA-CISA, MITRE ATT&CK®), les vulnérabilités logicielles et les violations des RBAC (contrôle d'accès basé sur les rôles) aux premiers stades du pipeline CI/CD, calcule instantanément le score de risque et montre les tendances des risques au fil du temps.

kubescape scan --verbose

Kube-bench

L'outil kube-bench est un outil qui vérifie si Kubernetes est déployé de manière sécurisée en exécutant les vérifications documentées dans le CIS Kubernetes Benchmark. Vous pouvez choisir de :

  • exécuter kube-bench à partir d'un conteneur (partageant l'espace de noms PID avec l'hôte)

  • exécuter un conteneur qui installe kube-bench sur l'hôte, puis exécuter kube-bench directement sur l'hôte

  • installer les derniers binaires à partir de la page des versions,

  • le compiler à partir des sources.

Kubeaudit

L'outil kubeaudit est un outil en ligne de commande et une bibliothèque Go pour auditer les clusters Kubernetes pour divers problèmes de sécurité.

Kubeaudit peut détecter s'il s'exécute dans un conteneur d'un cluster. Dans ce cas, il essaiera d'auditer toutes les ressources Kubernetes de ce cluster :

kubeaudit all

Cet outil dispose également de l'argument autofix pour corriger automatiquement les problèmes détectés.

Kube-hunter

L'outil kube-hunter recherche les faiblesses de sécurité dans les clusters Kubernetes. L'outil a été développé pour sensibiliser et mettre en évidence les problèmes de sécurité dans les environnements Kubernetes.

kube-hunter --remote some.node.com

Kubei

Kubei est un outil d'analyse des vulnérabilités et de référence CIS Docker qui permet aux utilisateurs d'obtenir une évaluation précise et immédiate des risques de leurs clusters Kubernetes. Kubei analyse 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 de balayage des clusters Kubernetes à la recherche d'autorisations risquées dans le modèle d'autorisation basé sur les rôles (RBAC) de Kubernetes.

Audit du code IaC

Popeye

Popeye est un utilitaire qui analyse en direct un cluster Kubernetes et signale les problèmes potentiels liés aux ressources et configurations déployées. Il nettoie votre cluster en fonction de ce qui est déployé et non de ce qui est stocké sur le disque. En analysant votre cluster, il détecte les mauvaises configurations et vous aide à vous assurer que les meilleures pratiques sont en place, évitant ainsi les problèmes futurs. Il vise à réduire la surcharge cognitive à laquelle on est confronté lors de l'exploitation d'un cluster Kubernetes dans la nature. De plus, s'il utilise un serveur de métriques, il signale les éventuelles sur ou sous-allocations de ressources et tente de vous avertir si votre cluster manque de capacité.

Kicks

KICS trouve des vulnérabilités de sécurité, des problèmes de conformité et des erreurs de configuration d'infrastructure dans les solutions suivantes d'Infrastructure as Code : Terraform, Kubernetes, Docker, AWS CloudFormation, Ansible, Helm, Microsoft ARM et spécifications OpenAPI 3.0.

Checkov

Checkov est un outil d'analyse statique du code pour l'infrastructure en tant que code.

Il analyse l'infrastructure cloud provisionnée à l'aide de 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é à l'aide d'une analyse basée sur les graphiques.

Kube-score

kube-score est un outil qui effectue une analyse statique du code de vos définitions d'objets Kubernetes.

Pour l'installation :

DistributionCommande / Lien

Binaires précompilés pour macOS, Linux et Windows

Docker

docker pull zegl/kube-score (Docker Hub)

Homebrew (macOS et Linux)

brew install kube-score

Krew (macOS et Linux)

kubectl krew install score

Conseils

Surveillance avec Falco

Kubernetes PodSecurityContext et SecurityContext

Vous pouvez configurer le contexte de sécurité des pods (avec PodSecurityContext) et des conteneurs qui vont être exécutés (avec SecurityContext). Pour plus d'informations, lisez :

pageKubernetes SecurityContext(s)

Durcissement de l'API Kubernetes

Il est très important de protéger l'accès au serveur API Kubernetes, car un acteur malveillant disposant de privilèges suffisants pourrait l'exploiter et endommager l'environnement de nombreuses manières. Il est important de sécuriser à la fois l'accès (autoriser les origines en liste blanche à accéder au serveur API et refuser toute autre connexion) et l'authentification (en suivant le principe du privilège minimal). Et surtout, ne jamais autoriser les requêtes anonymes.

Processus de demande courant : Utilisateur ou compte de service K8s -> Authentification -> Autorisation -> Contrôle d'admission.

Conseils :

  • Fermez les ports.

  • Évitez l'accès anonyme.

  • Restriction de nœud ; aucun accès depuis des nœuds spécifiques à l'API.

  • Empêche essentiellement les kubelets d'ajouter/supprimer/mettre à jour des étiquettes avec un préfixe node-restriction.kubernetes.io/. Ce préfixe d'étiquette est réservé aux administrateurs pour étiqueter leurs objets Node à des fins d'isolation des charges de travail, et les kubelets ne seront pas autorisés à modifier les étiquettes avec ce préfixe.

  • Et aussi, permet aux kubelets d'ajouter/supprimer/mettre à jour ces étiquettes et préfixes d'étiquettes.

  • Assurez-vous avec des étiquettes de l'isolation sécurisée des charges de travail.

  • Évitez l'accès API spécifique aux pods.

  • Évitez l'exposition de l'ApiServer à Internet.

  • Évitez l'accès non autorisé RBAC.

  • Port ApiServer avec pare-feu et liste blanche d'adresses IP.

Durcissement du SecurityContext

Par défaut, l'utilisateur root sera utilisé lorsqu'un pod est démarré si aucun autre utilisateur n'est spécifié. Vous pouvez exécuter votre application dans un contexte plus sécurisé en utilisant un modèle 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

Kubernetes NetworkPolicies

Durcissement général

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

  • Avoir des dépendances à jour.

  • Avoir des correctifs de bogues et de sécurité.

Cycles de publication : 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 (à partir de ici) :

  • Mettre à niveau les composants du nœud maître en suivant cette séquence :

  • etcd (toutes les instances).

  • kube-apiserver (tous les hôtes du plan de contrôle).

  • kube-controller-manager.

  • kube-scheduler.

  • cloud controller manager, si vous en utilisez un.

  • Mettre à niveau les composants du nœud de travail tels que kube-proxy, kubelet.

Soutenez HackTricks et bénéficiez d'avantages !

Dernière mise à jour