Kubernetes Enumeration
Kubernetes Tokens
As jy toegang tot 'n rekenaar gekompromitteer het, mag die gebruiker toegang tot 'n Kubernetes-platform hê. Die token word gewoonlik in 'n lêer aangedui deur die omgewingsveranderlike KUBECONFIG
of binne ~/.kube
.
In hierdie vouer kan jy konfigurasie-lêers vind met tokens en konfigurasies om met die API-bediener te verbind. In hierdie vouer kan jy ook 'n kasvouer vind met voorheen opgehaalde inligting.
As jy 'n pod binne 'n Kubernetes-omgewing gekompromitteer het, is daar ander plekke waar jy tokens en inligting oor die huidige K8-omgewing kan vind:
Diensrekeningtokens
Voordat jy voortgaan, as jy nie weet wat 'n diens in Kubernetes is nie, sal ek voorstel dat jy hierdie skakel volg en ten minste die inligting oor die Kubernetes-argitektuur lees.
Geneem van die Kubernetes dokumentasie:
"Wanneer jy 'n pod skep, as jy nie 'n diensrekening spesifiseer nie, word dit outomaties toegewys aan die default diensrekening in dieselfde naamruimte."
ServiceAccount is 'n voorwerp wat deur Kubernetes bestuur word en gebruik word om 'n identiteit te voorsien vir prosesse wat in 'n pod loop. Elke diensrekening het 'n geheim wat daarmee verband hou, 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 gids:
/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-kommunikasie 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 omgewingsveranderlike KUBECONFIG
vind. Vir meer inligting voer (env | set) | grep -i "kuber|kube
"
uit.
Die diensrekeningtoken word onderteken deur die sleutel in die lêer sa.key en geverifieer deur sa.pub.
Standaardligging op Kubernetes:
/etc/kubernetes/pki
Standaardligging op Minikube:
/var/lib/localkube/certs
Warm Pods
Warm pods is pods wat 'n bevoorregte diensrekeningtoken bevat. 'n Bevoorregte diensrekeningtoken is 'n token wat toestemming het om bevoorregte take uit te voer, soos lys geheime, pods skep, ens.
RBAC
As jy nie weet wat RBAC is nie, lees hierdie afdeling.
Enumerasie Spiekbriefie
Om 'n K8s-omgewing te enumereer, het jy 'n paar dinge nodig:
'n Geldige outentiserings-token. In die vorige afdeling het ons gesien waar om te soek vir 'n gebruikerstoken en 'n diensrekeningtoken.
Die adres (https://host:port) van die Kubernetes API. Dit kan gewoonlik in die omgewingsveranderlikes en/of in die kube-konfigurasie-lêer gevind word.
Opsioneel: Die ca.crt om die API-bediener te verifieer. Dit kan in dieselfde plekke gevind word waar die token gevind kan word. Dit is nuttig om die API-bediener se sertifikaat te verifieer, maar deur
--insecure-skip-tls-verify
metkubectl
of-k
metcurl
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 rekenaar enumereer.
Gewoonlik is die API-bediener egter binne 'n interne netwerk, dus sal jy 'n tonnel moet skep deur die gekompromitteerde rekenaar om dit vanaf jou rekenaar te kan bereik, of jy kan die kubectl binêre lêer oplaai, of curl/wget/anything
gebruik om rou HTTP-versoeke na die API-bediener uit te voer.
Verskille tussen die list
en get
werkwoorde
list
en get
werkwoordeMet get
-regte kan jy inligting van spesifieke bates (describe
-opsie in kubectl
) API toegang:
As jy die lys
toestemming het, is jy toegelaat om API-versoeke uit te voer om 'n tipe bate te lys (get
opsie in kubectl
):
As jy die watch
toestemming het, is jy toegelaat om API-versoeke uit te voer om bates te monitor:
Hulle maak 'n stroomverbinding oop wat die volledige manifest van 'n Implementering terugstuur telkens as dit verander (of wanneer 'n nuwe een geskep word).
Die volgende kubectl
-opdragte dui net aan hoe om die voorwerpe te lys. As jy die data wil benader, moet jy in plaas daarvan beskryf
gebruik.
Gebruik van curl
Van binne 'n peul kan jy verskeie omgewingsveranderlikes gebruik:
Standaard kan die pod toegang kry tot die kube-api bediener in die domeinnaam kubernetes.default.svc
en jy kan die kube-netwerk sien in /etc/resolv.config
waar jy die adres van die kubernetes DNS-bedieners sal vind (die ".1" van dieselfde reeks is die kube-api eindpunt).
Gebruik kubectl
Met die token en die adres van die API-bedieners kan jy kubectl of curl gebruik om toegang daartoe te verkry soos hier aangedui:
Standaard kommunikeer die APISERVER met die https://
skema
as daar geen
https://
in die url is nie, kan jy 'n fout soos 'n slegte versoek kry.
Jy kan 'n amptelike kubectl spiekbrief hier vind. Die doel van die volgende afdelings is om op 'n geordende manier verskillende opsies te bied om die nuwe K8s waarop jy toegang het, te ondersoek en te verstaan.
Om die HTTP-versoek wat kubectl
stuur te vind, kan jy die parameter -v=8
gebruik.
MitM kubectl - Proksiëring van kubectl
Huidige Konfigurasie
As jy daarin geslaag het om sekere gebruikers se legitimasie te steel, kan jy dit plaaslik konfigureer deur iets soos die volgende te gebruik:
Kry Ondersteunde Hulpbronne
Met hierdie inligting sal jy al die dienste wat jy kan lys, ken
Kry Huidige Voorregte
Om die huidige voorregte van die huidige gebruiker te kry, kan jy die volgende opdrag gebruik:
Hierdie opdrag sal 'n lys van alle aksies gee wat die huidige gebruiker mag uitvoer.
'n Ander manier om jou voorregte te kontroleer, is om die instrument te gebruik: https://github.com/corneliusweig/rakkess****
Jy kan meer leer oor Kubernetes RBAC in:
Kubernetes Role-Based Access Control(RBAC)Sodra jy weet watter voorregte jy het, kyk na die volgende bladsy om uit te vind of jy dit kan misbruik om voorregte te verhoog:
Abusing Roles/ClusterRoles in KubernetesKry ander rolle
Kry namespaces
Kubernetes ondersteun veelvuldige virtuele klusters wat ondersteun word deur dieselfde fisiese kluster. Hierdie virtuele klusters word namespaces genoem.
Kry geheime
Voer die volgende bevel uit om geheime in die huidige naamruimte te kry:
Voer die volgende bevel uit om die inhoud van 'n spesifieke geheim te kry:
Voer die volgende bevel uit om die inhoud van 'n spesifieke geheim te ontsleutel:
As jy geheime kan lees, kan jy die volgende lyne gebruik om die voorregte wat verband hou met elke token te kry:
Kry Diensrekeninge
Soos bespreek aan die begin van hierdie bladsy word 'n diensrekening gewoonlik aan 'n pod toegewys wanneer dit uitgevoer word. Daarom kan die lys van diensrekeninge, hul toestemmings en waar hulle uitgevoer word, 'n gebruiker in staat stel om voorregte te verhoog.
Kry Implementasies
Die implementasies spesifiseer die komponente wat moet uitgevoer word.
Kry Pods
Die Pods is die werklike houers wat sal loop.
Kry Dienste
Kubernetes dienste word gebruik om 'n diens op 'n spesifieke poort en IP bloot te stel (wat as 'n vragbalanser sal optree vir die peule wat die diens eintlik aanbied). Dit is interessant om te weet waar jy ander dienste kan vind om te probeer aanval.
Kry knooppunte
Kry al die knooppunte wat binne die groep geconfigureer is.
Kry DaemonSets
DaeamonSets maak dit moontlik om te verseker dat 'n spesifieke pod in alle nodusse van die groep (of in die geselekteerde) loop. As jy die DaemonSet verwyder, sal die pods wat deur dit bestuur word, ook verwyder word.
Kry cronjob
Cron-werk neem toe om met behulp van crontab-soort sintaksis die lancering van 'n pod te skeduleer wat 'n bepaalde aksie sal uitvoer.
Kry configMap
configMap bevat altyd baie inligting en konfigurasie lêers wat aan programme verskaf word wat in die kubernetes loop. Gewoonlik kan jy baie wagwoorde, geheime, tokens vind wat gebruik word om te verbind en te valideer na ander interne/eksterne dienste.
Kry Pods verbruik
Ontsnapping uit die houer
As jy nuwe houers kan skep, kan jy dalk daaruit ontsnap na die node. Om dit te doen, moet jy 'n nuwe houer skep deur 'n yaml-lêer te gebruik, oorskakel na die geskepte houer en dan chroot in die stelsel van die node. Jy kan bestaande houers as verwysing vir die yaml-lêer gebruik, aangesien hulle bestaande beelde en paaie vertoon.
as jy 'n pod op 'n spesifieke node wil skep, kan jy die volgende bevel 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 oorskakel na die geskepte pod soos volg:
En uiteindelik chroot jy in die stelsel van die node.
Inligting verkry vanaf: Kubernetes Namespace Uitbreek deur gebruik te maak van 'n Onveilige Host Path Volume - Deel 1 Aanval en Verdediging van Kubernetes: Bust-A-Kube - Episode 1
Verwysings
Last updated