Translated ['src/pentesting-cloud/kubernetes-security/abusing-roles-clus

This commit is contained in:
Translator
2025-04-14 22:08:09 +00:00
parent 0a81bc555a
commit 1d3d1d814a
2 changed files with 124 additions and 33 deletions

View File

@@ -29,13 +29,13 @@ rules:
resources: ["*"]
verbs: ["*"]
```
### Pristup bilo kojem resursu sa specifičnom radnjom
### Pristup bilo kojem resursu sa specifičnom glagolskom radnjom
U RBAC-u, određene dozvole predstavljaju značajne rizike:
1. **`create`:** Daje mogućnost kreiranja bilo kog klasterskog resursa, što može dovesti do eskalacije privilegija.
1. **`create`:** Daje mogućnost kreiranja bilo kojeg klasterskog resursa, što može dovesti do eskalacije privilegija.
2. **`list`:** Omogućava listanje svih resursa, potencijalno otkrivajući osetljive podatke.
3. **`get`:** Dozvoljava pristup tajnama iz servisnih naloga, predstavljajući bezbednosnu pretnju.
3. **`get`:** Dozvoljava pristup tajnama iz servisnih naloga, što predstavlja bezbednosnu pretnju.
```yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
@@ -49,7 +49,7 @@ verbs: ["create", "list", "get"]
```
### Pod Create - Steal Token
Napadač sa dozvolama za kreiranje poda može prikačiti privilegovani Service Account u pod i ukrasti token kako bi se pretvarao da je taj Service Account. Efektivno povećavajući privilegije.
Napadač sa dozvolama za kreiranje poda može da prikači privilegovani Service Account u pod i ukrade token kako bi se pretvarao da je taj Service Account. Efektivno povećavajući privilegije.
Primer poda koji će ukrasti token `bootstrap-signer` service account-a i poslati ga napadaču:
```yaml
@@ -136,11 +136,11 @@ Verovatno želite da budete **diskretniji**, na sledećim stranicama možete vid
- **hostNetwork**
- **hostIPC**
_Možete pronaći primer kako da kreirate/iskoristite prethodne privilegovane pod konfiguracije u_ [_https://github.com/BishopFox/badPods_](https://github.com/BishopFox/badPods)
_Možete pronaći primer kako da kreirate/iskoristite prethodne privilegovane konfiguracije podova u_ [_https://github.com/BishopFox/badPods_](https://github.com/BishopFox/badPods)
### Pod Create - Move to cloud
Ako možete da **kreirate** **pod** (i opcionalno **service account**) možda ćete moći da **dobijete privilegije u cloud okruženju** dodeljujući **cloud roles** podu ili **service account** i zatim mu pristupite.\
Ako možete da **kreirate** **pod** (i opcionalno **service account**) možda ćete moći da **dobijete privilegije u cloud okruženju** dodeljujući **cloud role podu ili service account-u** i zatim mu pristupajući.\
Štaviše, ako možete da kreirate **pod sa host network namespace** možete **ukrasti IAM** ulogu **node** instance.
Za više informacija proverite:
@@ -200,7 +200,7 @@ kubectl exec -it <POD_NAME> -n <NAMESPACE> -- sh
> [!NOTE]
> Po defaultu, komanda se izvršava u prvom kontejneru poda. Dobijte **sve podove u kontejneru** sa `kubectl get pods <pod_name> -o jsonpath='{.spec.containers[*].name}'` i zatim **naznačite kontejner** u kojem želite da ga izvršite sa `kubectl exec -it <pod_name> -c <container_name> -- sh`
Ako je u pitanju distroless kontejner, možete pokušati koristiti **shell builtins** da dobijete informacije o kontejnerima ili da otpremite svoje alate poput **busybox** koristeći: **`kubectl cp </path/local/file> <podname>:</path/in/container>`**.
Ako je u pitanju distroless kontejner, možete pokušati da koristite **shell builtins** da dobijete informacije o kontejnerima ili da otpremite svoje alate poput **busybox** koristeći: **`kubectl cp </path/local/file> <podname>:</path/in/container>`**.
### port-forward
@@ -252,7 +252,7 @@ allowedHostPaths:
- pathPrefix: "/foo"
readOnly: true
```
Koji je bio zamišljen da spreči eskape poput prethodnih, tako što će umesto korišćenja hostPath montaže, koristiti PersistentVolume i PersistentVolumeClaim za montiranje foldera sa hosta u kontejner sa pristupom za pisanje:
Koji je bio zamišljen da spreči eskape poput prethodnih, tako što će umesto korišćenja hostPath montaže, koristiti PersistentVolume i PersistentVolumeClaim za montiranje foldera domaćina u kontejner sa pristupom za pisanje:
```yaml
apiVersion: v1
kind: PersistentVolume
@@ -384,17 +384,76 @@ $ kubectl get secret stolen-admin-sa-token --token=$SECRETS_MANAGER_TOKEN -o jso
```
Napomena da, ako vam je dozvoljeno da kreirate i čitate tajne u određenom namespace-u, žrtvinska serviceaccount takođe mora biti u tom istom namespace-u.
### Čitanje tajne brute-forcing token ID-eva
### Čitanje tajne brute-forcing token ID-ova
Dok napadač u posedu tokena sa pravima čitanja zahteva tačno ime tajne da bi je koristio, za razliku od šireg privilegija _**listing secrets**_, i dalje postoje ranjivosti. Podrazumevane service accounts u sistemu mogu se enumerisati, svaka povezana sa tajnom. Ove tajne imaju strukturu imena: statički prefiks praćen nasumičnim alfanumeričkim tokenom od pet karaktera (izuzimajući određene karaktere) prema [izvornom kodu](https://github.com/kubernetes/kubernetes/blob/8418cccaf6a7307479f1dfeafb0d2823c1c37802/staging/src/k8s.io/apimachinery/pkg/util/rand/rand.go#L83).
Dok napadač u posedu tokena sa pravima čitanja zahteva tačno ime tajne da bi je koristio, za razliku od šireg _**listing secrets**_ privilegije, i dalje postoje ranjivosti. Podrazumevani service accounts u sistemu mogu se enumerisati, svaki povezan sa tajnom. Ove tajne imaju strukturu imena: statički prefiks praćen nasumičnim alfanumeričkim tokenom od pet karaktera (izuzimajući određene karaktere) prema [izvornom kodu](https://github.com/kubernetes/kubernetes/blob/8418cccaf6a7307479f1dfeafb0d2823c1c37802/staging/src/k8s.io/apimachinery/pkg/util/rand/rand.go#L83).
Token se generiše iz ograničenog skupa od 27 karaktera (`bcdfghjklmnpqrstvwxz2456789`), umesto iz celog alfanumeričkog opsega. Ova ograničenja smanjuju ukupan broj mogućih kombinacija na 14,348,907 (27^5). Kao rezultat, napadač bi mogao izvesti brute-force napad da bi dedukovao token u roku od nekoliko sati, što bi potencijalno dovelo do eskalacije privilegija pristupom osetljivim service accounts.
Token se generiše iz ograničenog skupa od 27 karaktera (`bcdfghjklmnpqrstvwxz2456789`), umesto iz celog alfanumeričkog opsega. Ova ograničenja smanjuju ukupan broj mogućih kombinacija na 14,348,907 (27^5). Kao rezultat, napadač bi mogao izvesti brute-force napad kako bi dedukovao token u roku od nekoliko sati, što potencijalno može dovesti do eskalacije privilegija pristupom osetljivim service accounts.
### Zahtevi za potpisivanje sertifikata
### EncrpytionConfiguration u čistom tekstu
Ako imate glagole **`create`** u resursu `certificatesigningrequests` (ili barem u `certificatesigningrequests/nodeClient`). Možete **kreirati** novi CeSR za **novi čvor.**
Moguće je pronaći ključeve u čistom tekstu za enkripciju podataka u mirovanju u ovoj vrsti objekta kao:
```yaml
# From https://kubernetes.io/docs/tasks/administer-cluster/encrypt-data/
Prema [dokumentaciji, moguće je automatski odobriti ove zahteve](https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet-tls-bootstrapping/), tako da u tom slučaju **ne trebate dodatne dozvole**. Ako ne, morali biste biti u mogućnosti da odobrite zahtev, što znači ažuriranje u `certificatesigningrequests/approval` i `approve` u `signers` sa resourceName `<signerNameDomain>/<signerNamePath>` ili `<signerNameDomain>/*`
#
# CAUTION: this is an example configuration.
# Do not use this for your own cluster!
#
apiVersion: apiserver.config.k8s.io/v1
kind: EncryptionConfiguration
resources:
- resources:
- secrets
- configmaps
- pandas.awesome.bears.example # a custom resource API
providers:
# This configuration does not provide data confidentiality. The first
# configured provider is specifying the "identity" mechanism, which
# stores resources as plain text.
#
- identity: {} # plain text, in other words NO encryption
- aesgcm:
keys:
- name: key1
secret: c2VjcmV0IGlzIHNlY3VyZQ==
- name: key2
secret: dGhpcyBpcyBwYXNzd29yZA==
- aescbc:
keys:
- name: key1
secret: c2VjcmV0IGlzIHNlY3VyZQ==
- name: key2
secret: dGhpcyBpcyBwYXNzd29yZA==
- secretbox:
keys:
- name: key1
secret: YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoxMjM0NTY=
- resources:
- events
providers:
- identity: {} # do not encrypt Events even though *.* is specified below
- resources:
- '*.apps' # wildcard match requires Kubernetes 1.27 or later
providers:
- aescbc:
keys:
- name: key2
secret: c2VjcmV0IGlzIHNlY3VyZSwgb3IgaXMgaXQ/Cg==
- resources:
- '*.*' # wildcard match requires Kubernetes 1.27 or later
providers:
- aescbc:
keys:
- name: key3
secret: c2VjcmV0IGlzIHNlY3VyZSwgSSB0aGluaw==
```
### Certificate Signing Requests
Ako imate glagole **`create`** u resursu `certificatesigningrequests` (ili barem u `certificatesigningrequests/nodeClient`). Možete **create** novi CeSR novog **noda.**
Prema [dokumentaciji, moguće je automatski odobriti ove zahteve](https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet-tls-bootstrapping/), tako da u tom slučaju **ne trebaju vam dodatne dozvole**. Ako ne, morali biste biti u mogućnosti da odobrite zahtev, što znači ažuriranje u `certificatesigningrequests/approval` i `approve` u `signers` sa resourceName `<signerNameDomain>/<signerNamePath>` ili `<signerNameDomain>/*`
**Primer uloge** sa svim potrebnim dozvolama je:
```yaml
@@ -429,7 +488,7 @@ verbs:
```
Dakle, sa odobrenim novim node CSR-om, možete **iskoristiti** posebne dozvole nodova da **ukradete tajne** i **povećate privilegije**.
U [**ovom postu**](https://www.4armed.com/blog/hacking-kubelet-on-gke/) i [**ovom**](https://rhinosecuritylabs.com/cloud-security/kubelet-tls-bootstrap-privilege-escalation/) GKE K8s TLS Bootstrap konfiguracija je podešena sa **automatskim potpisivanjem** i koristi se za generisanje kredencijala novog K8s nod-a, a zatim se koristi za povećanje privilegija ukradanjem tajni.\
U [**ovom postu**](https://www.4armed.com/blog/hacking-kubelet-on-gke/) i [**ovom**](https://rhinosecuritylabs.com/cloud-security/kubelet-tls-bootstrap-privilege-escalation/) GKE K8s TLS Bootstrap konfiguracija je podešena sa **automatskim potpisivanjem** i koristi se za generisanje kredencijala novog K8s nod-a, a zatim se ti kredencijali koriste za povećanje privilegija ukradanjem tajni.\
Ako **imate pomenute privilegije, mogli biste uraditi istu stvar**. Imajte na umu da prvi primer zaobilazi grešku koja sprečava novi nod da pristupi tajnama unutar kontejnera jer **nod može pristupiti samo tajnama kontejnera koji su montirani na njemu.**
Način da se to zaobiđe je jednostavno **napraviti kredencijale nod-a za ime nod-a gde je kontejner sa zanimljivim tajnama montiran** (ali samo proverite kako to uraditi u prvom postu):
@@ -438,7 +497,7 @@ Način da se to zaobiđe je jednostavno **napraviti kredencijale nod-a za ime no
```
### AWS EKS aws-auth configmaps
Principali koji mogu da modifikuju **`configmaps`** u kube-system imenskom prostoru na EKS (moraju biti u AWS) klasterima mogu dobiti privilegije klaster admina prepisivanjem **aws-auth** configmap-a.\
Principals koji mogu da modifikuju **`configmaps`** u kube-system imenskom prostoru na EKS (moraju biti u AWS) klasterima mogu dobiti privilegije klaster admina prepisivanjem **aws-auth** configmap-a.\
Potrebni glagoli su **`update`** i **`patch`**, ili **`create`** ako configmap nije kreiran:
```bash
# Check if config map exists
@@ -482,7 +541,7 @@ groups:
> Možete koristiti **`aws-auth`** za **persistence** davanje pristupa korisnicima iz **drugih naloga**.
>
> Međutim, `aws --profile other_account eks update-kubeconfig --name <cluster-name>` **ne radi iz drugog naloga**. Ali zapravo `aws --profile other_account eks get-token --cluster-name arn:aws:eks:us-east-1:123456789098:cluster/Testing` radi ako stavite ARN klastera umesto samo imena.\
> Da bi `kubectl` radio, samo se pobrinite da **konfigurišete** **kubeconfig žrtve** i u aws exec args dodajte `--profile other_account_role` tako da kubectl koristi profil drugog naloga za dobijanje tokena i kontaktiranje AWS-a.
> Da bi `kubectl` radio, samo se pobrinite da **konfigurišete** **kubeconfig žrtve** i u aws exec argumentima dodajte `--profile other_account_role` tako da kubectl koristi profil drugog naloga za dobijanje tokena i kontaktiranje AWS-a.
### CoreDNS config map
@@ -532,13 +591,13 @@ Postoje **2 načina za dodeljivanje K8s dozvola GCP principalima**. U svakom slu
> Kada se komunicira sa K8s API krajnjom tačkom, **GCP auth token će biti poslat**. Tada će GCP, preko K8s API krajnje tačke, prvo **proveriti da li principal** (prema emailu) **ima bilo kakav pristup unutar klastera**, zatim će proveriti da li ima **bilo kakav pristup putem GCP IAM**.\
> Ako je **bilo koja** od ovih **tačna**, biće mu **odgovoreno**. Ako **nije**, biće data **greška** koja sugeriše da se **dozvole dodele putem GCP IAM**.
Prvi metod je korišćenje **GCP IAM**, K8s dozvole imaju svoje **ekvivalentne GCP IAM dozvole**, i ako principal to ima, moći će da ih koristi.
Prva metoda je korišćenje **GCP IAM**, K8s dozvole imaju svoje **ekvivalentne GCP IAM dozvole**, i ako principal to ima, moći će da ih koristi.
{{#ref}}
../../gcp-security/gcp-privilege-escalation/gcp-container-privesc.md
{{#endref}}
Drugi metod je **dodeljivanje K8s dozvola unutar klastera** identifikovanjem korisnika prema njegovom **emailu** (uključujući GCP servisne naloge).
Druga metoda je **dodeljivanje K8s dozvola unutar klastera** identifikovanjem korisnika prema njegovom **emailu** (uključujući GCP servisne naloge).
### Kreiranje tokena za servisne naloge
@@ -584,7 +643,7 @@ kubectl delete pods -n kube-system <privileged_pod_name>
```
### Status usluga (CVE-2020-8554)
Principali koji mogu **modifikovati** **`services/status`** mogu postaviti polje `status.loadBalancer.ingress.ip` da iskoriste **nepopravljeni CVE-2020-8554** i pokrenu **MiTM napade protiv klastera**. Većina mera za ublažavanje CVE-2020-8554 samo sprečava ExternalIP usluge (prema [**ovome**](https://github.com/PaloAltoNetworks/rbac-police/blob/main/lib/modify_service_status_cve_2020_8554.rego)).
Principali koji mogu **modifikovati** **`services/status`** mogu postaviti polje `status.loadBalancer.ingress.ip` da iskoriste **neispravljeni CVE-2020-8554** i pokrenu **MiTM napade protiv klastera**. Većina mera za ublažavanje CVE-2020-8554 samo sprečava ExternalIP usluge (prema [**ovome**](https://github.com/PaloAltoNetworks/rbac-police/blob/main/lib/modify_service_status_cve_2020_8554.rego)).
### Status čvorova i podova
@@ -668,7 +727,7 @@ Kao što možete videti na gornjoj slici, pokušali smo da pokrenemo sliku `ngin
#### Tehnički detalji
Skript `./deploy.sh` uspostavlja mutirajući webhook admission controller, koji modifikuje zahteve za Kubernetes API prema specifikacijama u svojim konfiguracionim linijama, utičući na zapažene rezultate:
Skript `./deploy.sh` uspostavlja mutirajući webhook admission controller, koji modifikuje zahteve ka Kubernetes API-ju kako je navedeno u njegovim konfiguracionim linijama, utičući na posmatrane rezultate:
```
patches = append(patches, patchOperation{
Op: "replace",
@@ -686,9 +745,9 @@ Gore navedeni isječak zamenjuje prvu sliku kontejnera u svakom podu sa `rewanth
## Najbolje prakse
### **Onemogućavanje automatskog montiranja tokena servisnog naloga**
### **Onemogućavanje automount-a tokena servisnog naloga**
- **Podovi i servisni nalozi**: Podovi po defaultu montiraju token servisnog naloga. Da bi se poboljšala sigurnost, Kubernetes omogućava onemogućavanje ove automatske funkcije montiranja.
- **Podovi i servisni nalozi**: Podovi po defaultu montiraju token servisnog naloga. Da bi se poboljšala sigurnost, Kubernetes omogućava onemogućavanje ove automount funkcije.
- **Kako primeniti**: Postavite `automountServiceAccountToken: false` u konfiguraciji servisnih naloga ili podova počevši od Kubernetes verzije 1.6.
### **Restriktivno dodeljivanje korisnika u RoleBindings/ClusterRoleBindings**

View File

@@ -4,9 +4,9 @@
## Introduction
U Kubernetes-u, primećeno je da podrazumevano ponašanje omogućava uspostavljanje veza između **svih kontejnera koji se nalaze na istom čvoru**. To važi bez obzira na razlike u imenskim prostorima. Ova povezanost se proteže do **Layer 2** (Ethernet). Kao rezultat, ova konfiguracija potencijalno izlaže sistem ranjivostima. Konkretno, otvara mogućnost da **maliciozni kontejner** izvrši **ARP spoofing napad** na druge kontejnere smeštene na istom čvoru. Tokom takvog napada, maliciozni kontejner može obmanuti da presretne ili izmeni mrežni saobraćaj namenjen drugim kontejnerima.
U Kubernetes-u, primećeno je da podrazumevano ponašanje omogućava uspostavljanje veza između **svih kontejnera koji se nalaze na istom čvoru**. Ovo važi bez obzira na razlike u imenskim prostorima. Takva povezanost se proteže do **Layer 2** (Ethernet). Kao rezultat, ova konfiguracija potencijalno izlaže sistem ranjivostima. Konkretno, otvara mogućnost da **maliciozni kontejner** izvrši **ARP spoofing napad** na druge kontejnere smeštene na istom čvoru. Tokom takvog napada, maliciozni kontejner može obmanuti da presretne ili izmeni mrežni saobraćaj namenjen drugim kontejnerima.
ARP spoofing napadi uključuju **napadača koji šalje lažne ARP** (Address Resolution Protocol) poruke preko lokalne mreže. To rezultira povezivanjem **MAC adrese napadača sa IP adresom legitimnog računara ili servera na mreži**. Nakon uspešnog izvršenja takvog napada, napadač može presresti, izmeniti ili čak zaustaviti podatke u tranzitu. Napad se izvršava na Layer 2 OSI modela, zbog čega podrazumevana povezanost u Kubernetes-u na ovom sloju izaziva bezbednosne brige.
ARP spoofing napadi uključuju **napadača koji šalje falsifikovane ARP** (Address Resolution Protocol) poruke preko lokalne mreže. To rezultira povezivanjem **MAC adrese napadača sa IP adresom legitimnog računara ili servera na mreži**. Nakon uspešne realizacije takvog napada, napadač može presresti, izmeniti ili čak zaustaviti podatke u tranzitu. Napad se izvršava na Layer 2 OSI modela, zbog čega podrazumevana povezanost u Kubernetes-u na ovom sloju izaziva zabrinutost za bezbednost.
U scenariju će biti kreirane 4 mašine:
@@ -102,7 +102,7 @@ Ako želite više detalja o mrežnim temama predstavljenim ovde, idite na refere
### ARP
Opšte govoreći, **mrežno povezivanje između podova unutar čvora** je dostupno putem **mosta** koji povezuje sve podove. Ovaj most se zove “**cbr0**”. (Neki mrežni dodaci će instalirati svoj vlastiti most.) **cbr0 takođe može da obrađuje ARP** (Protokol za rešavanje adresa) rezoluciju. Kada dolazni paket stigne na cbr0, može da reši odredišnu MAC adresu koristeći ARP.
Opšte govoreći, **mrežno povezivanje podova unutar čvora** je dostupno putem **mosta** koji povezuje sve podove. Ovaj most se zove “**cbr0**”. (Neki mrežni dodaci će instalirati svoj vlastiti most.) **cbr0 takođe može obraditi ARP** (Protokol za rešavanje adresa) rezoluciju. Kada dolazni paket stigne na cbr0, može rešiti odredišnu MAC adresu koristeći ARP.
Ova činjenica implicira da, po defaultu, **svaki pod koji radi u istom čvoru** će moći da **komunicira** sa bilo kojim drugim podom u istom čvoru (nezavisno od imenskog prostora) na ethernet nivou (sloj 2).
@@ -136,7 +136,7 @@ Port: metrics 9153/TCP
TargetPort: 9153/TCP
Endpoints: 172.17.0.2:9153
```
U prethodnim informacijama možete videti nešto zanimljivo, **IP usluge** je **10.96.0.10** ali je **IP pod-a** koji pokreće uslugu **172.17.0.2.**
U prethodnim informacijama možete videti nešto zanimljivo, **IP usluge** je **10.96.0.10**, ali **IP pod-a** koji pokreće uslugu je **172.17.0.2.**
Ako proverite DNS adresu unutar bilo kog pod-a, naći ćete nešto poput ovoga:
```
@@ -233,11 +233,11 @@ arpspoof -t 172.17.0.9 172.17.0.10
```
## DNS Spoofing
Kao što je već pomenuto, ako **kompromitujete pod u istoj nodi kao DNS server pod**, možete **MitM** sa **ARPSpoofing** **mostom i DNS** podom i **modifikovati sve DNS odgovore**.
Kao što je već pomenuto, ako **kompromitujete pod na istoj čvoru kao DNS server pod**, možete **MitM** sa **ARPSpoofing** mostom i **DNS** podom i **modifikovati sve DNS odgovore**.
Imate stvarno dobar **alat** i **tutorijal** da testirate ovo u [**https://github.com/danielsagi/kube-dnsspoof/**](https://github.com/danielsagi/kube-dnsspoof/)
Imate stvarno dobar **alat** i **tutorijal** za testiranje ovoga u [**https://github.com/danielsagi/kube-dnsspoof/**](https://github.com/danielsagi/kube-dnsspoof/)
U našem scenariju, **preuzmite** **alat** u napadačkom podu i kreirajte \*\*datoteku nazvanu `hosts` \*\* sa **domenama** koje želite da **spoof** kao:
U našem scenariju, **preuzmite** **alat** u napadačkom podu i kreirajte **datoteku nazvanu `hosts`** sa **domenima** koje želite da **spoof** kao:
```
cat hosts
google.com. 1.1.1.1
@@ -263,12 +263,44 @@ google.com. 1 IN A 1.1.1.1
> Ako pokušate da kreirate svoj vlastiti DNS spoofing skript, ako **samo modifikujete DNS odgovor** to **neće** **raditi**, jer će **odgovor** imati **src IP** adresu **malicioznog** **poda** i **neće** biti **prihvaćen**.\
> Morate generisati **novi DNS paket** sa **src IP** adrese **DNS** na koju žrtva šalje DNS zahtev (što je nešto poput 172.16.0.2, a ne 10.96.0.10, to je IP adresa K8s DNS servisa, a ne IP adresa DNS servera, više o tome u uvodu).
## Capturing Traffic
## DNS Spoofing putem coreDNS configmap
Korisnik sa pravima pisanja nad configmap `coredns` u kube-system imenu može modifikovati DNS odgovore klastera.
Proverite više informacija o ovom napadu u:
{{#ref}}
abusing-roles-clusterroles-in-kubernetes/README.md
{{/ref}}
## Zloupotreba izloženih kubernetes upravljačkih servisa
Servisi poput Apache NiFi, Kubeflow, Argo Workflows, Weave Scope i Kubernetes kontrolne table često su izloženi ili internetu ili unutar kubernetes mreže. Napadač koji uspe da **pronađe bilo koju platformu koja se koristi za upravljanje kubernetesom i pristupi joj** može je zloupotrebiti da dobije pristup kubernetes API-ju i izvrši radnje poput kreiranja novih podova, modifikovanja postojećih ili čak brisanja.
## Nabrajanje kubernetes mrežnih politika
Dobijte konfigurisane **networkpolicies**:
```bash
kubectl get networkpolicies --all-namespaces
```
Dobijte **Callico** mrežne politike:
```bash
kubectl get globalnetworkpolicy --all-namespaces
```
Dobijte **Cillium** mrežne politike:
```bash
kubectl get ciliumnetworkpolicy --all-namespaces
```
Instalirajte druge CRD-ove povezane sa politikom koje je instalirao vaš mrežni dodatak ili rešenje za bezbednost:
```bash
kubectl get crd | grep -i policy
```
## Zapošljavanje saobraćaja
Alat [**Mizu**](https://github.com/up9inc/mizu) je jednostavan, ali moćan API **pregledač saobraćaja za Kubernetes** koji vam omogućava da **vidite svu API komunikaciju** između mikroservisa kako biste pomogli u debagovanju i rešavanju regresija.\
Instaliraće agente u odabranim podovima i prikupiti informacije o njihovom saobraćaju i prikazati ih na web serveru. Međutim, biće vam potrebne visoke K8s dozvole za ovo (i nije baš diskretno).
Instaliraće agente u odabranim podovima i prikupiti informacije o njihovom saobraćaju i prikazati ih na veb serveru. Međutim, biće vam potrebne visoke K8s dozvole za ovo (i nije baš diskretno).
## References
## Reference
- [https://www.cyberark.com/resources/threat-research-blog/attacking-kubernetes-clusters-through-your-network-plumbing-part-1](https://www.cyberark.com/resources/threat-research-blog/attacking-kubernetes-clusters-through-your-network-plumbing-part-1)
- [https://blog.aquasec.com/dns-spoofing-kubernetes-clusters](https://blog.aquasec.com/dns-spoofing-kubernetes-clusters)