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

This commit is contained in:
Translator
2025-01-02 21:34:46 +00:00
parent f97679c6a0
commit 0be3325f7d
7 changed files with 180 additions and 50 deletions

View File

@@ -27,7 +27,7 @@ Način da se omogući pristup GSA GKE klasteru je povezivanje na sledeći način
```bash
Copy codekubectl create serviceaccount <service-account-name>
```
- Kreirajte Kubernetes Secret koji sadrži akreditive GCP servisnog naloga kojem želite da dodelite pristup GKE klasteru. To možete uraditi koristeći `gcloud` komandnu liniju, kao što je prikazano u sledećem primeru:
- Kreirajte Kubernetes Secret koji sadrži akreditive GCP servisnog naloga kojem želite dodeliti pristup GKE klasteru. To možete uraditi koristeći `gcloud` komandnu liniju, kao što je prikazano u sledećem primeru:
```bash
Copy codegcloud iam service-accounts keys create <key-file-name>.json \
--iam-account <gcp-service-account-email>
@@ -44,7 +44,7 @@ iam.gke.io/gcp-service-account=<gcp-service-account-email>
### GKE Workload Identity
Sa Workload Identity, možemo konfigurisati a [Kubernetes servisni nalog](https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/) da deluje kao a [Google servisni nalog](https://cloud.google.com/iam/docs/understanding-service-accounts). Podovi koji rade sa Kubernetes servisnim nalogom će se automatski autentifikovati kao Google servisni nalog prilikom pristupa Google Cloud API-ima.
Sa Workload Identity, možemo konfigurisati a[ Kubernetes servisni nalog](https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/) da deluje kao a[ Google servisni nalog](https://cloud.google.com/iam/docs/understanding-service-accounts). Podovi koji rade sa Kubernetes servisnim nalogom će se automatski autentifikovati kao Google servisni nalog prilikom pristupanja Google Cloud API-ima.
**Prva serija koraka** za omogućavanje ovog ponašanja je da **omogućite Workload Identity u GCP** ([**koraci**](https://medium.com/zeotap-customer-intelligence-unleashed/gke-workload-identity-a-secure-way-for-gke-applications-to-access-gcp-services-f880f4e74e8c)) i kreirate GCP SA koji želite da k8s imitira.
@@ -124,7 +124,7 @@ gcloud auth activate-service-account --key-file=/var/run/secrets/google/service-
```
> [!WARNING]
> Kao napadač unutar K8s, trebali biste **tražiti SAs** sa **`iam.gke.io/gcp-service-account` anotacijom**, jer to ukazuje da SA može pristupiti nečemu u GCP-u. Druga opcija bi bila da pokušate da zloupotrebite svaki KSA u klasteru i proverite da li ima pristup.\
> Iz GCP-a je uvek zanimljivo enumerisati veze i znati **koji pristup dajete SAs unutar Kubernetes-a**.
> Iz GCP-a je uvek zanimljivo enumerisati vezivanja i znati **koji pristup dajete SAs unutar Kubernetes-a**.
Ovo je skripta za lako **iteriranje kroz sve definicije podova** **tražeći** tu **anotaciju**:
```bash
@@ -141,7 +141,7 @@ done | grep -B 1 "gcp-service-account"
### Kiam & Kube2IAM (IAM uloga za Podove) <a href="#workflow-of-iam-role-for-service-accounts" id="workflow-of-iam-role-for-service-accounts"></a>
Zastarjeli način davanja IAM uloga Podovima je korišćenje [**Kiam**](https://github.com/uswitch/kiam) ili [**Kube2IAM**](https://github.com/jtblin/kube2iam) **servera.** U suštini, potrebno je pokrenuti **daemonset** u vašem klasteru sa **nekom privilegovanom IAM ulogom**. Ovaj daemonset će biti taj koji će omogućiti pristup IAM ulogama podovima kojima je to potrebno.
Zastarjeli način davanja IAM uloga Podovima je korišćenje [**Kiam**](https://github.com/uswitch/kiam) ili [**Kube2IAM**](https://github.com/jtblin/kube2iam) **servera.** U suštini, potrebno je pokrenuti **daemonset** u vašem klasteru sa **nekom privilegovanom IAM ulogom**. Ovaj daemonset će biti onaj koji će omogućiti pristup IAM ulogama podovima kojima je to potrebno.
Prvo što treba da uradite je da konfigurišete **koje uloge mogu biti pristupne unutar imenskog prostora**, a to radite sa anotacijom unutar objekta imenskog prostora:
```yaml:Kiam
@@ -161,7 +161,7 @@ iam.amazonaws.com/allowed-roles: |
["role-arn"]
name: default
```
Kada je prostor imena konfiguran sa IAM rolama koje Podovi mogu imati, možete **naznačiti ulogu koju želite u svakoj definiciji poda sa nečim poput**:
Kada je prostor imena konfigurisan sa IAM rolama koje Podovi mogu imati, možete **naznačiti ulogu koju želite u svakoj definiciji poda sa nečim poput**:
```yaml:Kiam & Kube2iam
kind: Pod
metadata:
@@ -196,10 +196,10 @@ args: ["-c", "sleep 100000"]' | kubectl apply -f -
Ovo je **preporučeni način od strane AWS**.
1. Prvo, potrebno je da [napravite OIDC provajdera za klaster](https://docs.aws.amazon.com/eks/latest/userguide/enable-iam-roles-for-service-accounts.html).
1. Prvo treba da [napravite OIDC provajder za klaster](https://docs.aws.amazon.com/eks/latest/userguide/enable-iam-roles-for-service-accounts.html).
2. Zatim kreirajte IAM ulogu sa dozvolama koje će SA zahtevati.
3. Napravite [odnos poverenja između IAM uloge i SA](https://docs.aws.amazon.com/eks/latest/userguide/associate-service-account-role.html) imenom (ili imenom prostora imena koji daje pristup ulozi svim SA-ima u prostoru imena). _Odnos poverenja će uglavnom proveravati ime OIDC provajdera, ime prostora imena i ime SA_.
4. Na kraju, **napravite SA sa anotacijom koja ukazuje na ARN uloge**, a podovi koji se pokreću sa tom SA će imati **pristup tokenu uloge**. **Token** je **napisan** unutar datoteke i putanja je specificirana u **`AWS_WEB_IDENTITY_TOKEN_FILE`** (podrazumevano: `/var/run/secrets/eks.amazonaws.com/serviceaccount/token`)
4. Na kraju, **napravite SA sa anotacijom koja označava ARN uloge**, a podovi koji se pokreću sa tom SA će imati **pristup tokenu uloge**. **Token** je **napisan** unutar datoteke i putanja je specificirana u **`AWS_WEB_IDENTITY_TOKEN_FILE`** (podrazumevano: `/var/run/secrets/eks.amazonaws.com/serviceaccount/token`)
```bash
# Create a service account with a role
cat >my-service-account.yaml <<EOF
@@ -221,12 +221,12 @@ Da **dobijete aws koristeći token** iz `/var/run/secrets/eks.amazonaws.com/serv
aws sts assume-role-with-web-identity --role-arn arn:aws:iam::123456789098:role/EKSOIDCTesting --role-session-name something --web-identity-token file:///var/run/secrets/eks.amazonaws.com/serviceaccount/token
```
> [!WARNING]
> Kao napadač, ako možete da enumerišete K8s klaster, proverite za **service accounts sa tom anotacijom** da **escalate-ujete na AWS**. Da biste to uradili, jednostavno **exec/create** **pod** koristeći jedan od IAM **privileged service accounts** i ukradite token.
> Kao napadač, ako možete da enumerišete K8s klaster, proverite za **service accounts sa tom anotacijom** da **escalate to AWS**. Da biste to uradili, jednostavno **exec/create** **pod** koristeći jedan od IAM **privileged service accounts** i ukradite token.
>
> Pored toga, ako ste unutar poda, proverite za env varijable kao što su **AWS_ROLE_ARN** i **AWS_WEB_IDENTITY_TOKEN.**
> [!CAUTION]
> Ponekad može biti **loše konfigurisana** **Trust Policy** uloga i umesto da daje AssumeRole pristup očekivanom service account-u, daje ga **svim service accounts**. Stoga, ako ste u mogućnosti da napišete anotaciju na kontrolisanom service account-u, možete pristupiti ulozi.
> Ponekad **Trust Policy of a role** može biti **loše konfigurisana** i umesto da daje AssumeRole pristup očekivanom service account-u, daje ga **svim service accounts**. Stoga, ako ste u mogućnosti da napišete anotaciju na kontrolisanom service account-u, možete pristupiti roli.
>
> Proverite **sledeću stranicu za više informacija**:
@@ -234,7 +234,7 @@ aws sts assume-role-with-web-identity --role-arn arn:aws:iam::123456789098:role/
../aws-security/aws-basic-information/aws-federation-abuse.md
{{#endref}}
### Pronađite Podove i SAs sa IAM Ulogama u Klasteru
### Pronađite Podove i SAs sa IAM Rolama u Klasteru
Ovo je skripta za lako **iteriranje kroz sve podove i sas** definicije **tražeći** tu **anotaciju**:
```bash
@@ -265,7 +265,7 @@ kubectl run NodeIAMStealer --restart=Never -ti --rm --image lol --overrides '{"s
Prethodno smo razgovarali o tome kako da **priključite IAM Role na Pods** ili čak kako da **pobegnete na Node da ukradete IAM Role** koji je instanci priključen.
Možete koristiti sledeći skript da **ukradete** svoje nove, teško zarađene **IAM role kredencijale**:
Možete koristiti sledeći skript da **ukradete** svoje nove teško zarađene **IAM role kredencijale**:
```bash
IAM_ROLE_NAME=$(curl http://169.254.169.254/latest/meta-data/iam/security-credentials/ 2>/dev/null || wget http://169.254.169.254/latest/meta-data/iam/security-credentials/ -O - 2>/dev/null)
if [ "$IAM_ROLE_NAME" ]; then