Kubernetes Network Attacks
Uvod
U Kubernetes-u se primećuje da podrazumevano ponašanje omogućava uspostavljanje veza između svih kontejnera smeštenih na istom čvoru. Ovo važi bez obzira na razlike u imenovnom prostoru (namespace). Takva povezanost se prostire do sloja 2 (Ethernet). Kao rezultat, ova konfiguracija potencijalno izlaže sistem ranjivostima. Konkretno, otvara mogućnost za zlonamerni kontejner da izvrši ARP spoofing napad na druge kontejnere smeštene na istom čvoru. Tokom takvog napada, zlonamerni kontejner može prevarno presresti ili izmeniti mrežni saobraćaj namenjen drugim kontejnerima.
Napadi ARP spoofing-a 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 koji se prenose. Napad se izvršava na sloju 2 OSI modela, zbog čega podrazumevana povezanost u Kubernetes-u na ovom sloju izaziva sigurnosne probleme.
U scenariju će biti kreirane 4 mašine:
ubuntu-pe: Privilegovana mašina za bekstvo na čvor i proveru metrika (nije potrebna za napad)
ubuntu-attack: Zlonamerni kontejner u podrazumevanom imenovnom prostoru
ubuntu-victim: Žrtvena mašina u kube-system imenovnom prostoru
mysql: Žrtvena mašina u podrazumevanom imenovnom prostoru
Osnovna Kubernetes mrežna infrastruktura
Ako želite više detalja o mrežnim temama koje su ovde predstavljene, pogledajte reference.
ARP
Općenito govoreći, mreža između podova unutar čvora je dostupna putem mosta koji povezuje sve podove. Ovaj most se naziva "cbr0". (Neki mrežni dodaci će instalirati svoj sopstveni most.) cbr0 takođe može rukovati ARP (Address Resolution Protocol) rezolucijom. Kada dolazi dolazni paket na cbr0, može se rešiti odredišna MAC adresa koristeći ARP.
Ova činjenica implicira da, prema podrazumevanim podešavanjima, svaki pod koji se izvršava na istom čvoru će moći da komunicira sa bilo kojim drugim podom na istom čvoru (nezavisno od imenskog prostora) na nivou Ethernet-a (sloj 2).
Stoga je moguće izvršiti napade ARP Spoofing između podova na istom čvoru.
DNS
U Kubernetes okruženjima obično ćete pronaći 1 (ili više) DNS usluga koje se izvršavaju obično u kube-system imenskom prostoru:
U prethodnim informacijama možete videti nešto interesantno, IP adresa servisa je 10.96.0.10, ali IP adresa poda na kojem se izvršava servis je 172.17.0.2.
Ako proverite DNS adresu unutar bilo kog poda, pronaći ćete nešto slično ovome:
Međutim, pod ne zna kako da pristupi toj adresi jer je opseg poda u ovom slučaju 172.17.0.10/26.
Stoga će pod poslati DNS zahtev na adresu 10.96.0.10 koja će biti prevedena od strane cbr0 u 172.17.0.2.
To znači da će DNS zahtev poda uvek ići preko mosta kako bi se preveo IP servisa u IP krajnje tačke, čak i ako je DNS server u istoj podmreži kao pod.
Znajući ovo, i znajući da su ARP napadi mogući, pod na čvoru će moći da presretne saobraćaj između svakog poda u podmreži i mosta i izmeni DNS odgovore od DNS servera (DNS prevara).
Osim toga, ako je DNS server na istom čvoru kao napadač, napadač može presresti sve DNS zahteve bilo kog poda u klasteru (između DNS servera i mosta) i izmeniti odgovore.
ARP prevara u podovima na istom čvoru
Naš cilj je da ukrademo komunikaciju barem od ubuntu-victim do mysql.
Scapy
ARPSpoof
ARPSpoof је техника напада која се користи за превару у мрежи засноване на Ethernet-у. Ова техника се користи за превару у мрежи тако што се шаљу лажни ARP одговори на циљане рачунаре у мрежи. Ово омогућава нападачу да превари рачунаре у мрежи и преусмери саобраћај преко свог рачунара. Нападач може да прати, снима и мења саобраћај између циљаног рачунара и других рачунара у мрежи. Ова техника је корисна за извршавање различитих напада, као што су Man-in-the-Middle напади и снимање лозинки.
DNS Spoofing
Kao što je već pomenuto, ako kompromitujete pod na istom čvoru kao DNS server pod, možete MitM sa ARPSpoofingom mosta i DNS poda i izmeniti sve DNS odgovore.
Imate veoma koristan alat i tutorial za testiranje ovoga na https://github.com/danielsagi/kube-dnsspoof/
U našem scenariju, preuzmite alat na napadački pod i kreirajte fajl nazvan hosts
sa domenima koje želite da prevarite, kao što je:
Izvršite napad na mašinu ubuntu-victim:
Ako pokušate da napravite svoj DNS spoofing skript, ako samo izmenite DNS odgovor, to neće raditi, jer će odgovor imati izvor IP adresu zlonamernog poda i neće biti prihvaćen. Potrebno je generisati novi DNS paket sa izvor IP adresom DNS-a 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).
Snimanje saobraćaja
Alatka Mizu je jednostavan, ali moćan preglednik API saobraćaja za Kubernetes koji vam omogućava da vidite svu komunikaciju API-ja između mikroservisa kako biste pomogli u otklanjanju grešaka i rešavanju problema. Instaliraće agente u odabranim podovima i prikupiti informacije o njihovom saobraćaju i prikazati ih na veb serveru. Međutim, za ovo će vam biti potrebne visoke K8s dozvole (i nije baš neprimetno).
Reference
Last updated