Kubernetes Enumeration
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Ikiwa umevamia ufikiaji wa mashine, mtumiaji anaweza kuwa na ufikiaji wa jukwaa la Kubernetes. Token kawaida hupatikana katika faili inayotajwa na env var KUBECONFIG
au ndani ya ~/.kube
.
Katika folda hii unaweza kupata faili za usanidi zenye tokens na usanidi wa kuungana na API server. Katika folda hii pia unaweza kupata folda ya cache yenye taarifa zilizopatikana hapo awali.
Ikiwa umevamia pod ndani ya mazingira ya kubernetes, kuna maeneo mengine ambapo unaweza kupata tokens na taarifa kuhusu mazingira ya K8 ya sasa:
Kabla ya kuendelea, ikiwa hujui ni nini huduma katika Kubernetes ningependekeza ufuate kiungo hiki na usome angalau taarifa kuhusu usanifu wa Kubernetes.
Imechukuliwa kutoka kwa nyaraka za Kubernetes:
“Unapounda pod, ikiwa hujaeleza akaunti ya huduma, inatolewa kiotomatiki akaunti ya huduma default katika namespace hiyo hiyo.”
ServiceAccount ni kitu kinachosimamiwa na Kubernetes na kinatumika kutoa kitambulisho kwa michakato inayofanyika katika pod. Kila akaunti ya huduma ina siri inayohusiana nayo na siri hii ina bearer token. Hii ni JSON Web Token (JWT), njia ya kuwakilisha madai kwa usalama kati ya pande mbili.
Kawaida moja ya directories:
/run/secrets/kubernetes.io/serviceaccount
/var/run/secrets/kubernetes.io/serviceaccount
/secrets/kubernetes.io/serviceaccount
zina faili:
ca.crt: Ni cheti cha ca kuangalia mawasiliano ya kubernetes
namespace: Inaonyesha namespace ya sasa
token: Inabeba service token ya pod ya sasa.
Sasa kwamba una token, unaweza kupata API server ndani ya variable ya mazingira KUBECONFIG
. Kwa maelezo zaidi endesha (env | set) | grep -i "kuber|kube
"
Token ya akaunti ya huduma inasainiwa na funguo zilizoko katika faili sa.key na kuthibitishwa na sa.pub.
Mahali pa default kwenye Kubernetes:
/etc/kubernetes/pki
Mahali pa default kwenye Minikube:
/var/lib/localkube/certs
Hot pods ni pods zinazobeba token ya akaunti ya huduma yenye mamlaka. Token ya akaunti ya huduma yenye mamlaka ni token ambayo ina ruhusa ya kufanya kazi zenye mamlaka kama vile kuorodhesha siri, kuunda pods, n.k.
Ikiwa hujui ni nini RBAC, soma sehemu hii.
k9s: GUI inayoorodhesha klasta ya kubernetes kutoka kwenye terminal. Angalia amri katika https://k9scli.io/topics/commands/. Andika :namespace
na uchague yote ili kisha kutafuta rasilimali katika namespaces zote.
k8slens: Inatoa siku chache za majaribio bure: https://k8slens.dev/
Ili kuorodhesha mazingira ya K8s unahitaji kadhaa ya haya:
token halali ya uthibitishaji. Katika sehemu iliyopita tuliona wapi pa kutafuta token ya mtumiaji na token ya akaunti ya huduma.
anwani (https://host:port) ya Kubernetes API. Hii inaweza kawaida kupatikana katika variable za mazingira na/au katika faili ya kube config.
Hiari: ca.crt ili kuthibitisha API server. Hii inaweza kupatikana katika maeneo sawa ambapo token inaweza kupatikana. Hii ni muhimu kuthibitisha cheti cha API server, lakini ukitumia --insecure-skip-tls-verify
na kubectl
au -k
na curl
hutahitaji hii.
Kwa maelezo hayo unaweza kuorodhesha kubernetes. Ikiwa API kwa sababu fulani inapatikana kupitia Mtandao, unaweza tu kupakua taarifa hiyo na kuorodhesha jukwaa kutoka kwa mwenyeji wako.
Hata hivyo, kawaida API server iko ndani ya mtandao wa ndani, kwa hivyo utahitaji kuunda tunnel kupitia mashine iliyovamiwa ili kuweza kuifikia kutoka kwa mashine yako, au unaweza kupakia kubectl binary, au tumia curl/wget/chochote
kufanya maombi ya HTTP ya moja kwa moja kwa API server.
list
and get
verbsKwa get
ruhusa unaweza kupata taarifa za mali maalum (describe
chaguo katika kubectl
) API:
Ikiwa una ruhusa ya list
, unaruhusiwa kutekeleza maombi ya API ili orodhesha aina ya mali (get
chaguo katika kubectl
):
Ikiwa una ruhusa ya watch
, unaruhusiwa kutekeleza maombi ya API ili kufuatilia mali:
Wanafungua muunganisho wa mtiririko ambao unakurudishia orodha kamili ya Deployment kila wakati inabadilika (au wakati mpya inaundwa).
Amri zifuatazo za kubectl
zinaonyesha jinsi ya kuorodhesha vitu. Ikiwa unataka kufikia data unahitaji kutumia describe
badala ya get
Kutoka ndani ya pod unaweza kutumia mabadiliko kadhaa ya mazingira:
Kwa default, pod inaweza kufikia kube-api server katika jina la domain kubernetes.default.svc
na unaweza kuona mtandao wa kube katika /etc/resolv.config
kwani hapa utapata anwani ya seva ya DNS ya kubernetes (".1" ya safu hiyo ni kiunganishi cha kube-api).
Kuwa na token na anwani ya seva ya API unatumia kubectl au curl kufikia hiyo kama ilivyoonyeshwa hapa:
Kwa default, APISERVER inawasiliana na muundo wa https://
ikiwa hakuna
https://
katika url, unaweza kupata Kosa Kama Ombi Mbaya.
Unaweza kupata karatasi ya udanganyifu rasmi ya kubectl hapa. Lengo la sehemu zifuatazo ni kuwasilisha kwa mpangilio chaguzi tofauti za kuhesabu na kuelewa K8s mpya ambayo umepata ufikiaji nayo.
Ili kupata ombi la HTTP ambalo kubectl
inatuma unaweza kutumia parameter -v=8
Ikiwa umeweza kuiba akiba za watumiaji, unaweza kuziweka kwenye mazingira yako ukitumia kitu kama:
Kwa habari hii utajua huduma zote unazoweza kuorodhesha
Njia nyingine ya kuangalia haki zako ni kutumia chombo: https://github.com/corneliusweig/rakkess****
Unaweza kujifunza zaidi kuhusu Kubernetes RBAC katika:
Kubernetes Role-Based Access Control(RBAC)Mara tu unavyojua ni haki zipi unazo, angalia ukurasa ufuatao ili kubaini kama unaweza kuzitumia vibaya ili kupandisha haki:
Abusing Roles/ClusterRoles in KubernetesKubernetes inasaidia vikundi vingi vya virtual vinavyoungwa mkono na kundi moja la kimwili. Vikundi hivi vya virtual vinaitwa majina ya maeneo.
Ikiwa unaweza kusoma siri unaweza kutumia mistari ifuatayo kupata haki zinazohusiana na kila token:
Kama ilivyojadiliwa mwanzoni mwa ukurasa huu wakati pod inatekelezwa, akaunti ya huduma kwa kawaida inatolewa kwake. Hivyo basi, kuorodhesha akaunti za huduma, ruhusa zao na mahali zinapotekelezwa kunaweza kumwezesha mtumiaji kupandisha hadhi.
Maendeleo yanaelezea vipengele ambavyo vinahitaji kuendeshwa.
Pods ni containers halisi ambazo zitakuwa zinaendesha.
Kubernetes huduma zinatumika ku onyesha huduma katika bandari na IP maalum (ambayo itafanya kazi kama balancer ya mzigo kwa pods ambazo kwa kweli zinatoa huduma). Hii ni ya kuvutia kujua ambapo unaweza kupata huduma nyingine za kujaribu kushambulia.
Pata nodi zote zilizowekwa ndani ya klasta.
DaeamonSets inaruhusu kuhakikisha kwamba pod maalum inafanya kazi katika nodi zote za klasta (au katika zile zilizochaguliwa). Ikiwa utafuta DaemonSet, pods zinazodhibitiwa nayo pia zitaondolewa.
Cron jobs inaruhusu kupanga kutumia sintaksia ya crontab uzinduzi wa pod ambayo itatekeleza kitendo chochote.
configMap kila wakati ina habari nyingi na configfile ambazo zinatoa kwa programu zinazotembea katika kubernetes. Kawaida unaweza kupata nywila nyingi, siri, tokens ambazo zinatumika kuungana na kuthibitisha huduma nyingine za ndani/za nje.
Ikiwa unaweza kuunda pods mpya unaweza kuwa na uwezo wa kutoroka kutoka kwao hadi kwenye node. Ili kufanya hivyo unahitaji kuunda pod mpya kwa kutumia faili ya yaml, badilisha kwenda kwenye pod iliyoundwa kisha chroot kwenye mfumo wa node. Unaweza kutumia pods zilizopo kama rejeleo kwa faili ya yaml kwani zinaonyesha picha na njia zilizopo.
ikiwa unahitaji kuunda pod kwenye nodi maalum, unaweza kutumia amri ifuatayo kupata lebo kwenye nodi
k get nodes --show-labels
Kwa kawaida, kubernetes.io/hostname na node-role.kubernetes.io/master ni lebo nzuri za kuchagua.
Kisha unaunda faili yako ya attack.yaml
Baada ya hapo unaunda podi
Sasa unaweza kubadilisha kwenda kwenye pod iliyoundwa kama ifuatavyo
Na hatimaye unachora chroot ndani ya mfumo wa node.
Information obtained from: Kubernetes Namespace Breakout using Insecure Host Path Volume — Part 1 Attacking and Defending Kubernetes: Bust-A-Kube – Episode 1
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)