User Namespace
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
Basic Information
User namespace je funkcija Linux kernela koja omogućava izolaciju mapa korisničkih i grupnih ID-ova, omogućavajući svakom korisničkom prostoru da ima svoj set korisničkih i grupnih ID-ova. Ova izolacija omogućava procesima koji se izvršavaju u različitim korisničkim prostorima da imaju različite privilegije i vlasništvo, čak i ako dele iste korisničke i grupne ID-ove numerički.
Korisnički prostori su posebno korisni u kontejnerizaciji, gde svaki kontejner treba da ima svoj nezavistan set korisničkih i grupnih ID-ova, omogućavajući bolju sigurnost i izolaciju između kontejnera i host sistema.
How it works:
Kada se kreira novi korisnički prostor, on počinje sa praznim setom mapa korisničkih i grupnih ID-ova. To znači da bilo koji proces koji se izvršava u novom korisničkom prostoru prvobitno neće imati privilegije van prostora.
Mape ID-ova mogu biti uspostavljene između korisničkih i grupnih ID-ova u novom prostoru i onih u roditeljskom (ili host) prostoru. Ovo omogućava procesima u novom prostoru da imaju privilegije i vlasništvo koja odgovaraju korisničkim i grupnim ID-ovima u roditeljskom prostoru. Međutim, mape ID-ova mogu biti ograničene na specifične opsege i podskupove ID-ova, omogućavajući preciznu kontrolu nad privilegijama dodeljenim procesima u novom prostoru.
Unutar korisničkog prostora, procesi mogu imati pune root privilegije (UID 0) za operacije unutar prostora, dok i dalje imaju ograničene privilegije van prostora. Ovo omogućava kontejnerima da rade sa root-sličnim sposobnostima unutar svog prostora bez punih root privilegija na host sistemu.
Procesi mogu prelaziti između prostora koristeći
setns()
sistemski poziv ili kreirati nove prostore koristećiunshare()
iliclone()
sistemske pozive saCLONE_NEWUSER
zastavicom. Kada proces pređe u novi prostor ili ga kreira, počeće da koristi mape korisničkih i grupnih ID-ova povezane sa tim prostorom.
Lab:
Create different Namespaces
CLI
Montiranjem nove instance /proc
datotečnog sistema ako koristite parametar --mount-proc
, osiguravate da nova mount namespace ima tačan i izolovan prikaz informacija o procesima specifičnim za tu namespace.
Docker
Da biste koristili korisnički prostor, Docker demon treba da se pokrene sa --userns-remap=default
(U ubuntu 14.04, to se može uraditi modifikovanjem /etc/default/docker
i zatim izvršavanjem sudo service docker restart
)
Proverite u kojem je prostoru vaš proces
Moguće je proveriti mapu korisnika iz docker kontejnera sa:
Ili sa hosta sa:
Pronađite sve korisničke imenske prostore
Uđite unutar User namespace-a
Takođe, možete ući u drugi procesni prostor samo ako ste root. I ne možete ući u drugi prostor bez deskriptora koji na njega ukazuje (kao što je /proc/self/ns/user
).
Kreirajte novi korisnički prostor (sa mapiranjima)
Oporavak sposobnosti
U slučaju korisničkih prostora, kada se kreira novi korisnički prostor, procesu koji ulazi u prostor dodeljuje se potpuni skup sposobnosti unutar tog prostora. Ove sposobnosti omogućavaju procesu da izvršava privilegovane operacije kao što su montiranje fajl sistema, kreiranje uređaja ili promena vlasništva nad fajlovima, ali samo unutar konteksta svog korisničkog prostora.
Na primer, kada imate sposobnost CAP_SYS_ADMIN
unutar korisničkog prostora, možete izvršavati operacije koje obično zahtevaju ovu sposobnost, poput montiranja fajl sistema, ali samo unutar konteksta vašeg korisničkog prostora. Sve operacije koje izvršavate sa ovom sposobnošću neće uticati na host sistem ili druge prostore.
Stoga, čak i ako dobijanje novog procesa unutar novog korisničkog prostora će vam vratiti sve sposobnosti (CapEff: 000001ffffffffff), zapravo možete koristiti samo one koje se odnose na prostor (montiranje na primer) ali ne svaku. Dakle, ovo samo po sebi nije dovoljno da pobegnete iz Docker kontejnera.
Last updated