Kubernetes Network Attacks
Last updated
Last updated
Leer & oefen AWS Hacking:HackTricks Opleiding AWS Red Team Expert (ARTE) Leer & oefen GCP Hacking: HackTricks Opleiding GCP Red Team Expert (GRTE)
In Kubernetes word dit waargeneem dat 'n standaard gedrag die vestiging van verbindings tussen alle houers wat op dieselfde node woon toelaat. Dit geld ongeag die namespace verskille. So 'n verbindbaarheid strek af na Laag 2 (Ethernet). Gevolglik stel hierdie konfigurasie die stelsel potensieel bloot aan kwesbaarhede. Spesifiek, dit maak die moontlikheid oop vir 'n kwaadwillige houer om 'n ARP spoofing aanval teen ander houers wat op dieselfde node geleë is, uit te voer. Tydens so 'n aanval kan die kwaadwillige houer bedrogstig die netwerkverkeer wat bedoel is vir ander houers onderskep of verander.
ARP spoofing aanvalle behels dat die aanvaller vervalste ARP (Address Resolution Protocol) boodskappe oor 'n plaaslike area netwerk stuur. Dit lei tot die koppel van die aanvaller se MAC adres met die IP adres van 'n wettige rekenaar of bediener op die netwerk. Na suksesvolle uitvoering van so 'n aanval kan die aanvaller data in-transit onderskep, verander of selfs stop. Die aanval word op Laag 2 van die OSI model uitgevoer, wat die rede is waarom die standaard verbindbaarheid in Kubernetes op hierdie laag sekuriteitskwessies laat ontstaan.
In die scenario gaan 4 masjiene geskep word:
ubuntu-pe: Bevoorregte masjien om na die node te ontsnap en metrieks te kontroleer (nie nodig vir die aanval nie)
ubuntu-attack: Kwaadwillige houer in standaard namespace
ubuntu-victim: Slachtoffer masjien in kube-system namespace
mysql: Slachtoffer masjien in standaard namespace
As jy meer besonderhede oor die netwerkonderwerpe wat hier bekendgestel word, wil hê, gaan na die verwysings.
In die algemeen is pod-tot-pod-netwerk binne die node beskikbaar via 'n brug wat al die pods verbind. Hierdie brug word “cbr0” genoem. (Sommige netwerkpluggins sal hul eie brug installeer.) Die cbr0 kan ook ARP (Address Resolution Protocol) resolusie hanteer. Wanneer 'n inkomende pakket by cbr0 aankom, kan dit die bestemmings MAC-adres met behulp van ARP oplos.
Hierdie feit impliseer dat, per default, elke pod wat in dieselfde node loop in staat gaan wees om te kommunikeer met enige ander pod in dieselfde node (onafhanklik van die namespace) op ethernetvlak (laag 2).
Daarom is dit moontlik om ARP Spoofing-aanvalle tussen pods in dieselfde node uit te voer.
In kubernetes omgewings sal jy gewoonlik 1 (of meer) DNS-dienste wat loop gewoonlik in die kube-system namespace vind:
In die vorige inligting kan jy iets interessant sien, die IP van die diens is 10.96.0.10 maar die IP van die pod wat die diens uitvoer is 172.17.0.2.
As jy die DNS adres binne enige pod nagaan, sal jy iets soos hierdie vind:
However, the pod weet nie hoe om by daardie adres te kom nie omdat die pod reeks in hierdie geval 172.17.0.10/26 is.
Therefore, the pod will send the DNS requests to the address 10.96.0.10 which will be vertaal by the cbr0 na 172.17.0.2.
This means that a DNS request of a pod is altyd going to go the bridge to vertaal the service IP to the endpoint IP, even if the DNS server is in the same subnetwork as the pod.
Knowing this, and knowing ARP-aanvalle is moontlik, a pod in a node is going to be able to afluister die verkeer tussen elke pod in die subnetwerk en die bridge en wysig die DNS antwoorde van die DNS server (DNS Spoofing).
Moreover, if the DNS server is in the dieselfde node as the attacker, the attacker can afluister al die DNS versoek van enige pod in die cluster (tussen die DNS server en die bridge) and modify the responses.
Our goal is to steel ten minste die kommunikasie van die ubuntu-victim na die mysql.
Soos reeds genoem, as jy 'n pod in dieselfde node van die DNS bediener pod kompromitteer, kan jy MitM met ARPSpoofing die brug en die DNS pod en alle DNS-antwoorde verander.
Jy het 'n regtig goeie instrument en handleiding om dit te toets in https://github.com/danielsagi/kube-dnsspoof/
In ons scenario, aflaai die instrument in die aanvaller pod en skep 'n **lêer genaamd hosts
** met die domeine wat jy wil spoof soos:
Voer die aanval op die ubuntu-victim masjien uit:
As jy probeer om jou eie DNS spoofing script te skep, as jy net die DNS antwoord aanpas, gaan dit nie werk nie, omdat die antwoord 'n src IP gaan hê van die IP adres van die kwaadwillige pod en nie aanvaar gaan word nie. Jy moet 'n nuwe DNS pakket genereer met die src IP van die DNS waar die slagoffer die DNS versoek stuur (wat iets soos 172.16.0.2 is, nie 10.96.0.10 nie, dit is die K8s DNS diens IP en nie die DNS bediener IP nie, meer oor dit in die inleiding).
Die hulpmiddel Mizu is 'n eenvoudige maar kragtige API verkeer kyker vir Kubernetes wat jou in staat stel om alle API kommunikasie tussen mikrodiens te bekyk om jou te help om regressies te ontfout en op te los. Dit sal agente in die geselekteerde pods installeer en hul verkeersinligting versamel en dit aan jou in 'n webbediener wys. Jy sal egter hoë K8s toestemmings nodig hê hiervoor (en dit is nie baie stil nie).
Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)