diff --git a/src/pentesting-cloud/kubernetes-security/abusing-roles-clusterroles-in-kubernetes/README.md b/src/pentesting-cloud/kubernetes-security/abusing-roles-clusterroles-in-kubernetes/README.md index 3676bafcb..e5d3f13d0 100644 --- a/src/pentesting-cloud/kubernetes-security/abusing-roles-clusterroles-in-kubernetes/README.md +++ b/src/pentesting-cloud/kubernetes-security/abusing-roles-clusterroles-in-kubernetes/README.md @@ -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 -n -- sh > [!NOTE] > Po defaultu, komanda se izvršava u prvom kontejneru poda. Dobijte **sve podove u kontejneru** sa `kubectl get pods -o jsonpath='{.spec.containers[*].name}'` i zatim **naznačite kontejner** u kojem želite da ga izvršite sa `kubectl exec -it -c -- 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 :`**. +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 :`**. ### 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 `/` ili `/*` +# +# 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 `/` ili `/*` **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 ` **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 ``` ### 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** diff --git a/src/pentesting-cloud/kubernetes-security/kubernetes-network-attacks.md b/src/pentesting-cloud/kubernetes-security/kubernetes-network-attacks.md index 40c9959a8..031071155 100644 --- a/src/pentesting-cloud/kubernetes-security/kubernetes-network-attacks.md +++ b/src/pentesting-cloud/kubernetes-security/kubernetes-network-attacks.md @@ -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)