Translated ['src/pentesting-cloud/kubernetes-security/kubernetes-pivotin

This commit is contained in:
Translator
2025-01-02 21:35:00 +00:00
parent 0a742969af
commit 1778196f60
7 changed files with 177 additions and 47 deletions

View File

@@ -17,7 +17,7 @@ Une façon courante de donner **accès à une application kubernetes à GCP** es
- Définir la variable d'environnement GOOGLE_APPLICATION_CREDENTIALS pointant vers le chemin où se trouve le json.
> [!WARNING]
> Par conséquent, en tant qu'**attaquant**, si vous compromettez un conteneur à l'intérieur d'un pod, vous devez vérifier cette **var** **env** et les **fichiers** **json** avec les identifiants GCP.
> Par conséquent, en tant qu'**attaquant**, si vous compromettez un conteneur à l'intérieur d'un pod, vous devez vérifier cette **variable** **env** et les **fichiers** **json** avec les identifiants GCP.
### Lier le json GSA au secret KSA
@@ -46,7 +46,7 @@ iam.gke.io/gcp-service-account=<gcp-service-account-email>
Avec l'Identité de Charge de Travail, nous pouvons configurer un [compte de service Kubernetes](https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/) pour agir en tant que [compte de service Google](https://cloud.google.com/iam/docs/understanding-service-accounts). Les pods s'exécutant avec le compte de service Kubernetes s'authentifieront automatiquement en tant que compte de service Google lors de l'accès aux API Google Cloud.
La **première série d'étapes** pour activer ce comportement est de **définir l'Identité de Charge de Travail dans GCP** ([**étapes**](https://medium.com/zeotap-customer-intelligence-unleashed/gke-workload-identity-a-secure-way-for-gke-applications-to-access-gcp-services-f880f4e74e8c)) et de créer le SA GCP que vous souhaitez que k8s imite.
La **première série d'étapes** pour activer ce comportement est d'**activer l'Identité de Charge de Travail dans GCP** ([**étapes**](https://medium.com/zeotap-customer-intelligence-unleashed/gke-workload-identity-a-secure-way-for-gke-applications-to-access-gcp-services-f880f4e74e8c)) et de créer le SA GCP que vous souhaitez que k8s imite.
- **Activer l'Identité de Charge de Travail** sur un nouveau cluster
```bash
@@ -141,7 +141,7 @@ done | grep -B 1 "gcp-service-account"
### Kiam & Kube2IAM (rôle IAM pour les Pods) <a href="#workflow-of-iam-role-for-service-accounts" id="workflow-of-iam-role-for-service-accounts"></a>
Une manière (dépassée) de donner des rôles IAM aux Pods est d'utiliser un [**Kiam**](https://github.com/uswitch/kiam) ou un [**Kube2IAM**](https://github.com/jtblin/kube2iam) **serveur.** Fondamentalement, vous devrez exécuter un **daemonset** dans votre cluster avec un **type de rôle IAM privilégié**. Ce daemonset sera celui qui donnera accès aux rôles IAM aux pods qui en ont besoin.
Une manière (dépassée) de donner des rôles IAM aux Pods est d'utiliser un [**Kiam**](https://github.com/uswitch/kiam) ou un [**Kube2IAM**](https://github.com/jtblin/kube2iam) **serveur.** En gros, vous devrez exécuter un **daemonset** dans votre cluster avec une **sorte de rôle IAM privilégié**. Ce daemonset sera celui qui donnera accès aux rôles IAM aux pods qui en ont besoin.
Tout d'abord, vous devez configurer **quels rôles peuvent être accessibles à l'intérieur de l'espace de noms**, et vous le faites avec une annotation à l'intérieur de l'objet d'espace de noms :
```yaml:Kiam
@@ -234,9 +234,9 @@ aws sts assume-role-with-web-identity --role-arn arn:aws:iam::123456789098:role/
../aws-security/aws-basic-information/aws-federation-abuse.md
{{#endref}}
### Trouver des Pods et des SAs avec des Rôles IAM dans le Cluster
### Trouver des Pods et des Comptes de Service avec des Rôles IAM dans le Cluster
Ceci est un script pour facilement **itérer sur tous les pods et définitions de sas** **cherchant** cette **annotation** :
Ceci est un script pour facilement **itérer sur tous les pods et définitions de comptes de service** **cherchant** cette **annotation** :
```bash
for ns in `kubectl get namespaces -o custom-columns=NAME:.metadata.name | grep -v NAME`; do
for pod in `kubectl get pods -n "$ns" -o custom-columns=NAME:.metadata.name | grep -v NAME`; do
@@ -255,15 +255,15 @@ done | grep -B 1 "amazonaws.com"
```
### Rôle IAM du nœud
La section précédente portait sur la manière de voler des rôles IAM avec des pods, mais notez qu'un **nœud du** cluster K8s va être une **instance dans le cloud**. Cela signifie que le nœud est très probablement **susceptible d'avoir un nouveau rôle IAM que vous pouvez voler** (_notez que généralement tous les nœuds d'un cluster K8s auront le même rôle IAM, donc cela peut ne pas valoir la peine d'essayer de vérifier chaque nœud_).
La section précédente portait sur la manière de voler des rôles IAM avec des pods, mais notez qu'un **nœud du** cluster K8s va être une **instance à l'intérieur du cloud**. Cela signifie que le nœud a de fortes chances d'**avoir un nouveau rôle IAM que vous pouvez voler** (_notez que généralement tous les nœuds d'un cluster K8s auront le même rôle IAM, donc cela peut ne pas valoir la peine d'essayer de vérifier chaque nœud_).
Cependant, il y a une exigence importante pour accéder au point de terminaison des métadonnées depuis le nœud, vous devez être dans le nœud (session ssh ?) ou au moins avoir le même réseau :
Il y a cependant une exigence importante pour accéder au point de terminaison des métadonnées depuis le nœud, vous devez être dans le nœud (session ssh ?) ou au moins avoir le même réseau :
```bash
kubectl run NodeIAMStealer --restart=Never -ti --rm --image lol --overrides '{"spec":{"hostNetwork": true, "containers":[{"name":"1","image":"alpine","stdin": true,"tty":true,"imagePullPolicy":"IfNotPresent"}]}}'
```
### Voler le jeton de rôle IAM
Auparavant, nous avons discuté de la manière de **lier des rôles IAM aux Pods** ou même de **s'échapper vers le nœud pour voler le rôle IAM** auquel l'instance est attachée.
Auparavant, nous avons discuté de la façon de **lier des rôles IAM aux Pods** ou même de **s'échapper vers le nœud pour voler le rôle IAM** que l'instance a attaché à elle.
Vous pouvez utiliser le script suivant pour **voler** vos nouvelles **informations d'identification de rôle IAM** durement acquises :
```bash