User Namespace
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)
User namespace ni kipengele cha kernel ya Linux ambacho kinatoa kutengwa kwa ramani za ID za mtumiaji na kundi, kuruhusu kila user namespace kuwa na seti yake ya kipekee ya ID za mtumiaji na kundi. Kutengwa huku kunaruhusu michakato inayofanya kazi katika user namespaces tofauti kuwa na mamlaka na umiliki tofauti, hata kama zinashiriki ID za mtumiaji na kundi kwa nambari.
User namespaces ni muhimu sana katika uundaji wa kontena, ambapo kila kontena linapaswa kuwa na seti yake huru ya ID za mtumiaji na kundi, kuruhusu usalama bora na kutengwa kati ya kontena na mfumo wa mwenyeji.
Wakati user namespace mpya inaundwa, inaanza na seti tupu ya ramani za ID za mtumiaji na kundi. Hii inamaanisha kwamba mchakato wowote unaofanya kazi katika user namespace mpya utakuwa na mamlaka hakuna nje ya namespace.
Ramani za ID zinaweza kuanzishwa kati ya ID za mtumiaji na kundi katika namespace mpya na zile katika namespace ya mzazi (au mwenyeji). Hii inaruhusu michakato katika namespace mpya kuwa na mamlaka na umiliki yanayolingana na ID za mtumiaji na kundi katika namespace ya mzazi. Hata hivyo, ramani za ID zinaweza kuwekewa mipaka kwa anuwai maalum na subsets za ID, kuruhusu udhibiti wa kina juu ya mamlaka zinazotolewa kwa michakato katika namespace mpya.
Ndani ya user namespace, michakato inaweza kuwa na mamlaka kamili ya root (UID 0) kwa shughuli ndani ya namespace, wakati bado ikiwa na mamlaka ndogo nje ya namespace. Hii inaruhusu kontena kuendesha kwa uwezo kama root ndani ya namespace yao bila kuwa na mamlaka kamili ya root kwenye mfumo wa mwenyeji.
Michakato inaweza kuhamia kati ya namespaces kwa kutumia wito wa mfumo wa setns()
au kuunda namespaces mpya kwa kutumia wito wa mfumo wa unshare()
au clone()
na bendera ya CLONE_NEWUSER
. Wakati mchakato unahamia kwenye namespace mpya au kuunda moja, utaanza kutumia ramani za ID za mtumiaji na kundi zinazohusiana na namespace hiyo.
Kwa kuunganisha mfano mpya wa mfumo wa /proc
ikiwa unatumia param --mount-proc
, unahakikisha kwamba nafasi mpya ya kuunganisha ina mtazamo sahihi na uliojitegemea wa taarifa za mchakato maalum kwa nafasi hiyo.
Ili kutumia user namespace, Docker daemon inahitaji kuanzishwa na --userns-remap=default
(Katika ubuntu 14.04, hii inaweza kufanywa kwa kubadilisha /etc/default/docker
na kisha kutekeleza sudo service docker restart
)
Ni rahisi kuangalia ramani ya mtumiaji kutoka kwenye kontena la docker kwa:
Au kutoka kwa mwenyeji na:
Pia, unaweza tu kuingia katika nafasi nyingine ya mchakato ikiwa wewe ni root. Na huwezi kuingia katika nafasi nyingine bila desktopa inayorejelea hiyo (kama /proc/self/ns/user
).
Katika kesi ya majina ya mtumiaji, wakati jina jipya la mtumiaji linaundwa, mchakato unaoingia kwenye jina hilo unapata seti kamili ya uwezo ndani ya jina hilo. Uwezo huu unaruhusu mchakato kufanya operesheni zenye mamlaka kama vile kuunganisha sistimu za faili, kuunda vifaa, au kubadilisha umiliki wa faili, lakini tu ndani ya muktadha wa jina lake la mtumiaji.
Kwa mfano, unapokuwa na uwezo wa CAP_SYS_ADMIN
ndani ya jina la mtumiaji, unaweza kufanya operesheni ambazo kawaida zinahitaji uwezo huu, kama kuunganisha mifumo ya faili, lakini tu ndani ya muktadha wa jina lako la mtumiaji. Operesheni zozote unazofanya kwa uwezo huu hazitaathiri mfumo wa mwenyeji au majina mengine.
Hivyo, hata kama kupata mchakato mpya ndani ya jina jipya la Mtumiaji kutakupa uwezo wote tena (CapEff: 000001ffffffffff), kwa kweli unaweza kutumia tu zile zinazohusiana na jina hilo (kuunganisha kwa mfano) lakini si kila mmoja. Hivyo, hii peke yake haitoshi kutoroka kutoka kwa kontena la Docker.
hacking tricks by submitting PRs to the** HackTricks and HackTricks Cloud github repos.
Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)