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 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.
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. To 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. To 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ći unshare()
ili clone()
sistemske pozive sa CLONE_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.
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.
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
)
Moguće je proveriti mapu korisnika iz docker kontejnera sa:
Ili sa hosta sa:
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
).
U slučaju korisničkih prostora, kada se kreira novi korisnički prostor, procesu koji ulazi u prostor dodeljuje se potpuni skup kapaciteta unutar tog prostora. Ove kapacitete omogućavaju procesu da izvršava privilegovane operacije kao što su montiranje fajl sistema, kreiranje uređaja ili menjanje vlasništva nad fajlovima, ali samo unutar konteksta svog korisničkog prostora.
Na primer, kada imate kapacitet CAP_SYS_ADMIN
unutar korisničkog prostora, možete izvršavati operacije koje obično zahtevaju ovaj kapacitet, poput montiranja fajl sistema, ali samo unutar konteksta vašeg korisničkog prostora. Sve operacije koje izvršavate sa ovim kapacitetom 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 kapacitete (CapEff: 000001ffffffffff), zapravo možete koristiti samo one povezane sa prostorom (montiranje na primer) ali ne i svaki. Dakle, ovo samo po sebi nije dovoljno da pobegnete iz Docker kontejnera.
hacking trikove slanjem PR-ova na** HackTricks i HackTricks Cloud github repozitorijume.
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)