Translated ['', 'src/pentesting-cloud/kubernetes-security/kubernetes-har

This commit is contained in:
Translator
2025-11-17 12:18:50 +00:00
parent 5619af952e
commit 5362793c2a

View File

@@ -4,9 +4,9 @@
## Outils pour analyser un cluster
### [**Steampipe - Conformité Kubernetes](https://github.com/turbot/steampipe-mod-kubernetes-compliance)
### [Steampipe - Kubernetes Compliance](https://github.com/turbot/steampipe-mod-kubernetes-compliance)
Il effectuera **plusieurs vérifications de conformité sur le cluster Kubernetes**. Il inclut le support pour CIS, l'Agence de sécurité nationale (NSA) et le rapport technique de cybersécurité de l'Agence de cybersécurité et de sécurité des infrastructures (CISA) pour le renforcement de Kubernetes.
Il effectuera **plusieurs contrôles de conformité sur le cluster Kubernetes**. Il inclut le support pour CIS, National Security Agency (NSA) et Cybersecurity and Infrastructure Security Agency (CISA) Cybersecurity technical report pour le renforcement de Kubernetes.
```bash
# Install Steampipe
brew install turbot/tap/powerpipe
@@ -27,38 +27,38 @@ powerpipe server
```
### [**Kubescape**](https://github.com/armosec/kubescape)
[**Kubescape**](https://github.com/armosec/kubescape) est un outil open-source K8s fournissant une vue unique multi-cloud de K8s, incluant l'analyse des risques, la conformité de sécurité, un visualiseur RBAC et le scan des vulnérabilités d'image. Kubescape scanne les clusters K8s, les fichiers YAML et les charts HELM, détectant les erreurs de configuration selon plusieurs cadres (comme le [NSA-CISA](https://www.armosec.io/blog/kubernetes-hardening-guidance-summary-by-armo), [MITRE ATT\&CK®](https://www.microsoft.com/security/blog/2021/03/23/secure-containerized-environments-with-updated-threat-matrix-for-kubernetes/)), les vulnérabilités logicielles et les violations 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 de risque au fil du temps.
[**Kubescape**](https://github.com/armosec/kubescape) est un outil open-source pour K8s offrant une interface unique multi-cloud pour K8s, incluant l'analyse de risques, la conformité de sécurité, le visualiseur RBAC et l'analyse des vulnérabilités des images. Kubescape scanne les clusters K8s, les fichiers YAML et les HELM charts, détecte les mauvaises configurations selon plusieurs frameworks (tels que le [NSA-CISA](https://www.armosec.io/blog/kubernetes-hardening-guidance-summary-by-armo), le [MITRE ATT\&CK®](https://www.microsoft.com/security/blog/2021/03/23/secure-containerized-environments-with-updated-threat-matrix-for-kubernetes/)), les vulnérabilités logicielles et les violations RBAC (role-based-access-control) dès les premières étapes du pipeline CI/CD, calcule instantanément un score de risque et affiche les tendances de risque au fil du temps.
```bash
curl -s https://raw.githubusercontent.com/kubescape/kubescape/master/install.sh | /bin/bash
kubescape scan --verbose
```
### [**Popeye**](https://github.com/derailed/popeye)
[**Popeye**](https://github.com/derailed/popeye) est un utilitaire qui analyse les clusters Kubernetes en direct et **signale les problèmes potentiels avec les ressources et configurations déployées**. Il assainit votre cluster en fonction de ce qui est déployé et non de ce qui est stocké sur le disque. En scannant votre cluster, il détecte les erreurs de configuration et vous aide à vous assurer que les meilleures pratiques sont en place, évitant ainsi de futurs maux de tête. Il vise à réduire la charge cognitive à laquelle on fait face lors de l'exploitation d'un cluster Kubernetes en production. De plus, si votre cluster utilise un serveur de métriques, il signale les allocations de ressources sur/sous-utilisées et tente de vous avertir si votre cluster manque de capacité.
[**Popeye**](https://github.com/derailed/popeye) est un utilitaire qui scanne 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 à vous assurer que les bonnes pratiques sont en place, évitant ainsi des maux de tête futurs. Il vise à réduire la surcharge cognitive \_over_load que l'on rencontre lors de l'exploitation d'un cluster Kubernetes en conditions réelles. De plus, si votre cluster utilise un metric-server, il signale les éventuelles sous/sur-allocation de ressources et tente de vous avertir si votre cluster venait à manquer de capacité.
### [**Kube-bench**](https://github.com/aquasecurity/kube-bench)
L'outil [**kube-bench**](https://github.com/aquasecurity/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**](https://www.cisecurity.org/benchmark/kubernetes/).\
L'outil [**kube-bench**](https://github.com/aquasecurity/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**](https://www.cisecurity.org/benchmark/kubernetes/).\
Vous pouvez choisir de :
- exécuter kube-bench depuis un conteneur (partageant l'espace de noms PID avec l'hôte)
- exécuter kube-bench depuis l'intérieur d'un conteneur (en partageant le namespace 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 depuis la [page des Releases](https://github.com/aquasecurity/kube-bench/releases),
- le compiler à partir des sources.
- installer les derniers binaires depuis la [Releases page](https://github.com/aquasecurity/kube-bench/releases),
- le compiler depuis les sources.
### [**Kubeaudit**](https://github.com/Shopify/kubeaudit)
**[DÉPRÉCIÉ]** L'outil [**kubeaudit**](https://github.com/Shopify/kubeaudit) est un outil en ligne de commande et un package Go pour **auditer les clusters Kubernetes** pour diverses préoccupations de sécurité.
**[DEPRECATED]** L'outil [**kubeaudit**](https://github.com/Shopify/kubeaudit) est un outil en ligne de commande et un package Go pour **auditer des clusters Kubernetes** sur différentes problématiques de sécurité.
Kubeaudit peut détecter s'il s'exécute dans un conteneur dans un cluster. Si c'est le cas, il essaiera d'auditer toutes les ressources Kubernetes dans ce cluster :
Kubeaudit peut détecter s'il s'exécute à l'intérieur d'un conteneur dans un cluster. Si c'est le cas, il tentera d'auditer toutes les ressources Kubernetes de ce cluster :
```
kubeaudit all
```
Cet outil a également l'argument `autofix` pour **corriger automatiquement les problèmes détectés.**
Cet outil possède également l'argument `autofix` pour **corriger automatiquement les problèmes détectés.**
### [**Kube-hunter**](https://github.com/aquasecurity/kube-hunter)
**[DÉPRÉCIÉ]** L'outil [**kube-hunter**](https://github.com/aquasecurity/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.
**[DÉPRÉCATÉ]** L'outil [**kube-hunter**](https://github.com/aquasecurity/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.
```bash
kube-hunter --remote some.node.com
```
@@ -77,80 +77,126 @@ kube-hunter --remote some.node.com
**[Semble non maintenu]**
[**Kubei**](https://github.com/Erezf-p/kubei) est un outil de scan de vulnérabilités et de benchmark CIS Docker qui permet aux utilisateurs d'obtenir une évaluation des risques précise et immédiate 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.
[**Kubei**](https://github.com/Erezf-p/kubei) est un outil d'analyse des vulnérabilités et du CIS Docker benchmark 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 applicatifs et des pods système.
### [**KubiScan**](https://github.com/cyberark/KubiScan)
[**KubiScan**](https://github.com/cyberark/KubiScan) est un outil pour scanner les clusters Kubernetes à la recherche de permissions risquées dans le modèle d'autorisation basé sur les rôles (RBAC) de Kubernetes.
[**KubiScan**](https://github.com/cyberark/KubiScan) est un outil qui scanne 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](https://github.com/DataDog/managed-kubernetes-auditing-toolkit)
[**Mkat**](https://github.com/DataDog/managed-kubernetes-auditing-toolkit) est un outil conçu pour tester d'autres types de vérifications à haut risque par rapport aux autres outils. Il dispose principalement de 3 modes différents :
[**Mkat**](https://github.com/DataDog/managed-kubernetes-auditing-toolkit) est un outil conçu pour tester d'autres types de contrôles à haut risque comparé aux autres outils. Il dispose principalement de 3 modes différents :
- **`find-role-relationships`** : Qui trouvera quels rôles AWS s'exécutent dans quels pods
- **`find-secrets`** : Qui essaie d'identifier des secrets dans les ressources K8s telles que les Pods, ConfigMaps et Secrets.
- **`test-imds-access`** : Qui essaiera d'exécuter des pods et d'accéder aux métadonnées v1 et v2. AVERTISSEMENT : Cela exécutera un pod dans le cluster, soyez très prudent car vous ne voudrez peut-être pas faire cela !
- **`find-role-relationships`** : qui trouvera quels rôles AWS s'exécutent dans quels pods
- **`find-secrets`** : qui tente d'identifier les secrets dans les ressources K8s telles que Pods, ConfigMaps et Secrets.
- **`test-imds-access`** : qui essaiera d'exécuter des pods et d'accéder aux metadata v1 et v2. ATTENTION : cela lancera un pod dans le cluster, soyez très prudent car vous ne voudrez peutêtre pas faire cela !
## **Audit du code IaC**
### [**KICS**](https://github.com/Checkmarx/kics)
[**KICS**](https://github.com/Checkmarx/kics) trouve des **vulnérabilités de sécurité**, des problèmes de conformité et des erreurs de configuration d'infrastructure dans les **solutions Infrastructure as Code** suivantes : Terraform, Kubernetes, Docker, AWS CloudFormation, Ansible, Helm, Microsoft ARM et spécifications OpenAPI 3.0
[**KICS**](https://github.com/Checkmarx/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**](https://github.com/bridgecrewio/checkov)
[**Checkov**](https://github.com/bridgecrewio/checkov) est un outil d'analyse de code statique pour l'infrastructure en tant que code.
[**Checkov**](https://github.com/bridgecrewio/checkov) est un outil d'analyse statique de code pour l'infrastructure-as-code.
Il analyse l'infrastructure cloud provisionnée à l'aide de [Terraform](https://terraform.io), du plan Terraform, de [Cloudformation](https://aws.amazon.com/cloudformation/), de [AWS SAM](https://aws.amazon.com/serverless/sam/), de [Kubernetes](https://kubernetes.io), de [Dockerfile](https://www.docker.com), de [Serverless](https://www.serverless.com) ou de [ARM Templates](https://docs.microsoft.com/en-us/azure/azure-resource-manager/templates/overview) et détecte les erreurs de configuration de sécurité et de conformité à l'aide d'une analyse basée sur des graphes.
Il scanne l'infrastructure cloud provisionnée en utilisant [Terraform](https://terraform.io), Terraform plan, [Cloudformation](https://aws.amazon.com/cloudformation/), [AWS SAM](https://aws.amazon.com/serverless/sam/), [Kubernetes](https://kubernetes.io), [Dockerfile](https://www.docker.com), [Serverless](https://www.serverless.com) ou [ARM Templates](https://docs.microsoft.com/en-us/azure/azure-resource-manager/templates/overview) et détecte les mauvaises configurations de sécurité et de conformité en utilisant une analyse basée sur les graphes.
### [**Kube-score**](https://github.com/zegl/kube-score)
[**kube-score**](https://github.com/zegl/kube-score) est un outil qui effectue une analyse de code statique de vos définitions d'objets Kubernetes.
[**kube-score**](https://github.com/zegl/kube-score) est un outil qui effectue une analyse statique du code de vos définitions d'objets Kubernetes.
Pour installer :
To install:
| Distribution | Commande / Lien |
| --------------------------------------------------- | --------------------------------------------------------------------------------------- |
| Binaries préconstruits pour macOS, Linux et Windows | [Releases GitHub](https://github.com/zegl/kube-score/releases) |
| Docker | `docker pull zegl/kube-score` ([Docker Hub](https://hub.docker.com/r/zegl/kube-score/)) |
| Binaires précompilés pour macOS, Linux, et Windows | [GitHub releases](https://github.com/zegl/kube-score/releases) |
| Docker | `docker pull zegl/kube-score` ([Docker Hub)](https://hub.docker.com/r/zegl/kube-score/) |
| Homebrew (macOS et Linux) | `brew install kube-score` |
| [Krew](https://krew.sigs.k8s.io/) (macOS et Linux) | `kubectl krew install score` |
## Outils pour analyser les fichiers YAML & Helm Charts
### [**Kube-linter**](https://github.com/stackrox/kube-linter)
```bash
# Install Kube-linter
brew install kube-linter
# Run Kube-linter
## lint ./path/to/yaml/or/chart
```
### [Checkov](https://github.com/bridgecrewio/checkov)
```bash
# Install Checkov
pip install checkov
# Run Checkov
checkov -d ./path/to/yaml/or/chart
```
### [kubescore](https://github.com/zegl/kube-score)
```bash
# 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](https://github.com/controlplaneio/kubesec)
```bash
# 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 -
```
## Conseils
### Kubernetes PodSecurityContext et SecurityContext
### Kubernetes PodSecurityContext and 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 :
Vous pouvez configurer le **security context des Pods** (avec _PodSecurityContext_) et des **conteneurs** qui vont être exécutés (avec _SecurityContext_). Pour plus d'informations, lisez :
{{#ref}}
kubernetes-securitycontext-s.md
{{#endref}}
### Durcissement de l'API Kubernetes
### Kubernetes API Hardening
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 en abuser et endommager l'environnement de plusieurs manières.\
Il est important de sécuriser à la fois l'**accès** (**whitelist** des origines pour accéder au serveur API et refuser toute autre connexion) et l'**authentification** (suivant le principe du **moindre** **privilège**). Et surtout **ne jamais** **autoriser** **les** **requêtes** **anonymes**.
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 de multiples façons l'environnement.\
Il est crucial de sécuriser à la fois **l'accès** (**whitelist** des origines pouvant accéder à l'API Server et refus de toute autre connexion) et la [**authentication**](https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet-authentication-authorization/) (en suivant le principe du **moindre** **privilège**). Et surtout **ne jamais** **autoriser** **de** **requêtes** **anonymes**.
**Processus de demande commun :**\
Utilisateur ou K8s ServiceAccount > Authentification > Autorisation > Contrôle d'admission.
**Processus de requête courant :**\
User ou K8s ServiceAccount > Authentication > Authorization > Admission Control.
**Conseils** :
- Fermez les ports.
- Évitez l'accès anonyme.
- NodeRestriction ; Pas d'accès depuis des nœuds spécifiques à l'API.
- Fermer les ports.
- Éviter l'accès anonyme.
- NodeRestriction ; pas d'accès depuis des nœuds spécifiques à l'API.
- [https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/#noderestriction](https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/#noderestriction)
- Prévient essentiellement les kubelets d'ajouter/retirer/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'isolement 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/retirer/mettre à jour ces étiquettes et préfixes d'étiquettes.
- Assurez-vous avec des étiquettes de l'isolement sécurisé des charges de travail.
- Évitez que des pods spécifiques n'accèdent à l'API.
- Évitez l'exposition de l'ApiServer à Internet.
- Évitez l'accès non autorisé RBAC.
- Port de l'ApiServer avec pare-feu et liste blanche d'IP.
- Empêche essentiellement les kubelets d'ajouter/supprimer/mettre à jour des labels avec le 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 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 certains pods d'accéder à l'API.
- Éviter l'exposition de l'ApiServer sur Internet.
- Prévenir les accès non autorisés via RBAC.
- Sécuriser le port de l'ApiServer avec un firewall et du whitelisting IP.
### Durcissement du SecurityContext
### SecurityContext Hardening
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 à celui-ci :
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 template similaire au suivant :
```yaml
apiVersion: v1
kind: Pod
@@ -179,30 +225,30 @@ allowPrivilegeEscalation: true
- [https://kubernetes.io/docs/tasks/configure-pod-container/security-context/](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/)
- [https://kubernetes.io/docs/concepts/policy/pod-security-policy/](https://kubernetes.io/docs/concepts/policy/pod-security-policy/)
### Renforcement Général
### Renforcement général
Vous devriez mettre à jour votre environnement Kubernetes aussi souvent que nécessaire pour avoir :
- Dépendances à jour.
- Correctifs de bogues et de sécurité.
- Correctifs de bugs et de sécurité.
[**Cycles de publication**](https://kubernetes.io/docs/setup/release/version-skew-policy/) : Chaque 3 mois, il y a une nouvelle version mineure -- 1.20.3 = 1(Majeur).20(Minor).3(patch)
[**Release cycles**](https://kubernetes.io/docs/setup/release/version-skew-policy/): Tous les 3 mois il y a une nouvelle version mineure -- 1.20.3 = 1(Major).20(Minor).3(patch)
**La meilleure façon de mettre à jour un cluster Kubernetes est (depuis** [**ici**](https://kubernetes.io/docs/tasks/administer-cluster/cluster-upgrade/)**) :**
**La meilleure façon de mettre à jour un cluster Kubernetes est (depuis** [**here**](https://kubernetes.io/docs/tasks/administer-cluster/cluster-upgrade/)**):**
- Mettre à niveau les composants du nœud maître en suivant cette séquence :
- Mettre à niveau les composants du Master Node dans l'ordre suivant :
- etcd (toutes les instances).
- kube-apiserver (tous les hôtes du plan de contrôle).
- kube-apiserver (tous les control plane hosts).
- 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.
- Mettre à niveau les composants des Worker Nodes tels que kube-proxy, kubelet.
## Surveillance et sécurité de Kubernetes :
## Surveillance et sécurité Kubernetes :
- Kyverno Policy Engine
- Cilium Tetragon - Observabilité de sécurité basée sur eBPF et application en temps réel
- Politiques de sécurité réseau
- Falco - Surveillance et détection de sécurité en temps réel
- Cilium Tetragon - Observabilité de sécurité basée sur eBPF et application de politiques à l'exécution
- Network Security Policies
- Falco - surveillance et détection de sécurité à l'exécution
{{#include ../../../banners/hacktricks-training.md}}