Kubernetes Enumeration
Last updated
Last updated
Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
As jy gecompromitteerde toegang tot 'n masjien het, mag die gebruiker toegang hê tot 'n paar Kubernetes platforms. Die token is gewoonlik geleë in 'n lêer wat aangedui word deur die env var KUBECONFIG
of binne ~/.kube
.
In hierdie gids mag jy konfigurasielêers vind met tokens en konfigurasies om met die API bediener te verbind. In hierdie gids kan jy ook 'n kasgids vind met inligting wat voorheen verkry is.
As jy 'n pod binne 'n kubernetes omgewing gecompromitteer het, is daar ander plekke waar jy tokens en inligting oor die huidige K8 omgewing kan vind:
Voordat jy voortgaan, as jy nie weet wat 'n diens in Kubernetes is nie, sou ek jou aanbeveel om hierdie skakel te volg en ten minste die inligting oor Kubernetes argitektuur te lees.
Geneem uit die Kubernetes dokumentasie:
“Wanneer jy 'n pod skep, as jy nie 'n diensrekening spesifiseer nie, word dit outomaties die standaard diensrekening in dieselfde naamruimte toegeken.”
ServiceAccount is 'n objek wat deur Kubernetes bestuur word en gebruik word om 'n identiteit te verskaf vir prosesse wat in 'n pod loop. Elke diensrekening het 'n geheim wat daaraan verwant is en hierdie geheim bevat 'n draer token. Dit is 'n JSON Web Token (JWT), 'n metode om aansprake veilig tussen twee partye voor te stel.
Gewoonlik bevat een van die gidse:
/run/secrets/kubernetes.io/serviceaccount
/var/run/secrets/kubernetes.io/serviceaccount
/secrets/kubernetes.io/serviceaccount
die lêers:
ca.crt: Dit is die ca sertifikaat om kubernetes kommunikasies te kontroleer
namespace: Dit dui die huidige naamruimte aan
token: Dit bevat die diens token van die huidige pod.
Nou dat jy die token het, kan jy die API bediener binne die omgewingsvariabele KUBECONFIG
vind. Vir meer inligting, voer (env | set) | grep -i "kuber|kube
"
Die diensrekening token word onderteken deur die sleutel wat in die lêer sa.key geleë is en geverifieer deur sa.pub.
Standaard ligging op Kubernetes:
/etc/kubernetes/pki
Standaard ligging op Minikube:
/var/lib/localkube/certs
Warm pods is pods wat 'n bevoorregte diensrekening token bevat. 'n Bevoorregte diensrekening token is 'n token wat toestemming het om bevoorregte take uit te voer soos om geheime te lys, pods te skep, ens.
As jy nie weet wat RBAC is nie, lees hierdie afdeling.
k9s: 'n GUI wat 'n kubernetes kluster vanuit die terminal opnoem. Kyk na die opdragte in https://k9scli.io/topics/commands/. Skryf :namespace
en kies alles om dan hulpbronne in al die naamruimtes te soek.
k8slens: Dit bied 'n paar gratis proefdae aan: https://k8slens.dev/
Om 'n K8s omgewing te enumereer, het jy 'n paar van hierdie nodig:
'n geldige autentikasie token. In die vorige afdeling het ons gesien waar om 'n gebruikers token en 'n diensrekening token te soek.
Die adres (https://host:port) van die Kubernetes API. Dit kan gewoonlik in die omgewingsvariabeles en/of in die kube konfigurasielêer gevind word.
Opsioneel: Die ca.crt om die API bediener te verifieer. Dit kan gevind word in dieselfde plekke waar die token gevind kan word. Dit is nuttig om die API bediener sertifikaat te verifieer, maar deur --insecure-skip-tls-verify
met kubectl
of -k
met curl
te gebruik, sal jy dit nie nodig hê nie.
Met daardie besonderhede kan jy kubernetes enumereer. As die API om een of ander rede toeganklik is deur die Internet, kan jy net daardie inligting aflaai en die platform vanaf jou masjien enumereer.
Echter, gewoonlik is die API bediener binne 'n interne netwerk, daarom sal jy 'n tonnel moet skep deur die gecompromitteerde masjien om toegang daartoe vanaf jou masjien te verkry, of jy kan die kubectl binêre lêer oplaai, of curl/wget/anything
gebruik om rou HTTP versoeke aan die API bediener te doen.
list
en get
werkwoordeMet get
toestemmings kan jy inligting van spesifieke bates (describe
opsie in kubectl
) API:
As jy die list
toestemming het, mag jy API versoeke uitvoer om 'n tipe bate op te som (get
opsie in kubectl
):
As jy die watch
toestemming het, mag jy API-versoeke uitvoer om bates te monitor:
Hulle open 'n streaming verbinding wat jou die volle manifest van 'n Deployment teruggee wanneer dit verander (of wanneer 'n nuwe een geskep word).
Die volgende kubectl
opdragte dui net aan hoe om die voorwerpe te lys. As jy toegang tot die data wil hê, moet jy describe
gebruik in plaas van get
Van binne 'n pod kan jy verskeie omgewingsveranderlikes gebruik:
Standaard kan die pod toegang verkry tot die kube-api server in die domeinnaam kubernetes.default.svc
en jy kan die kube netwerk in /etc/resolv.config
sien, aangesien jy hier die adres van die kubernetes DNS-server sal vind (die ".1" van dieselfde reeks is die kube-api eindpunt).
Met die token en die adres van die API-server gebruik jy kubectl of curl om toegang te verkry soos hier aangedui:
Standaard kommunikeer die APISERVER met https://
skema
as daar geen
https://
in die url is nie, kan jy 'n fout soos 'Bad Request' kry.
Jy kan 'n amptelike kubectl cheatsheet hier vind. Die doel van die volgende afdelings is om verskillende opsies om te enumerate en die nuwe K8s wat jy toegang tot verkry het, op 'n geordende manier voor te stel.
Om die HTTP-versoek wat kubectl
stuur te vind, kan jy die parameter -v=8
gebruik.
As jy daarin geslaag het om 'n paar gebruikers se akrediteer te steel, kan jy hulle plaaslik konfigureer met iets soos:
Met hierdie inligting sal jy al die dienste weet wat jy kan lys
'n Ander manier om jou bevoegdhede te kontroleer, is deur die hulpmiddel: https://github.com/corneliusweig/rakkess****
Jy kan meer leer oor Kubernetes RBAC in:
Kubernetes Role-Based Access Control(RBAC)Sodra jy weet watter bevoegdhede jy het, kyk na die volgende bladsy om uit te vind of jy dit kan misbruik om bevoegdhede te verhoog:
Abusing Roles/ClusterRoles in KubernetesKubernetes ondersteun meervoudige virtuele klusters wat deur dieselfde fisiese kluster ondersteun word. Hierdie virtuele klusters word namespaces genoem.
As jy geheime kan lees, kan jy die volgende lyne gebruik om die regte wat aan elke token gekoppel is, te verkry:
Soos bespreek aan die begin van hierdie bladsy wanneer 'n pod uitgevoer word, word 'n diensrekening gewoonlik aan dit toegeken. Daarom kan die lys van die diensrekeninge, hul toestemmings en waar hulle loop, 'n gebruiker in staat stel om bevoegdhede te verhoog.
Die ontplooiings spesifiseer die komponente wat moet loop.
Die Pods is die werklike houers wat sal loop.
Kubernetes dienste word gebruik om 'n diens op 'n spesifieke poort en IP bloot te stel (wat as 'n laaibalanser vir die pods wat werklik die diens bied, sal optree). Dit is interessant om te weet waar jy ander dienste kan vind om te probeer aanval.
Kry al die knope wat binne die kluster geconfigureer is.
DaeamonSets maak dit moontlik om te verseker dat 'n spesifieke pod in al die nodes van die kluster (of in die geselekteerde) loop. As jy die DaemonSet verwyder, sal die pods wat deur dit bestuur word ook verwyder word.
Cron jobs laat toe om die bekendstelling van 'n pod wat 'n aksie sal uitvoer, te skeduleer met 'n crontab-agtige sintaksis.
configMap bevat altyd baie inligting en konfigurasie lêers wat aan toepassings verskaf word wat in die kubernetes loop. Gewoonlik kan jy baie wagwoorde, geheime, tokens vind wat gebruik word om te verbind en te valideer met ander interne/buite dienste.
As jy in staat is om nuwe pods te skep, mag jy in staat wees om uit hulle te ontsnap na die node. Om dit te doen, moet jy 'n nuwe pod skep met 'n yaml-lêer, oor te skakel na die geskepte pod en dan chroot in die node se stelsel. Jy kan reeds bestaande pods as verwysing vir die yaml-lêer gebruik, aangesien hulle bestaande beelde en paaie vertoon.
as jy 'n pod op die spesifieke node moet skep, kan jy die volgende opdrag gebruik om etikette op die node te kry
k get nodes --show-labels
Gewoonlik is kubernetes.io/hostname en node-role.kubernetes.io/master albei goeie etikette om te kies.
Dan skep jy jou attack.yaml-lêer
Daarna skep jy die pod
Nou kan jy na die geskepte pod oorgaan soos volg
En uiteindelik chroot jy in die node se stelsel
Inligting verkry uit: Kubernetes Namespace Breakout using Insecure Host Path Volume — Deel 1 Aanval en Verdediging van Kubernetes: Bust-A-Kube – Episode 1
Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)