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)
Przestrzeń nazw użytkowników to funkcja jądra Linux, która zapewnia izolację mapowań identyfikatorów użytkowników i grup, pozwalając każdej przestrzeni nazw użytkowników na posiadanie własnego zestawu identyfikatorów użytkowników i grup. Ta izolacja umożliwia procesom działającym w różnych przestrzeniach nazw użytkowników posiadanie różnych uprawnień i własności, nawet jeśli dzielą te same identyfikatory użytkowników i grup numerycznie.
Przestrzenie nazw użytkowników są szczególnie przydatne w konteneryzacji, gdzie każdy kontener powinien mieć swój niezależny zestaw identyfikatorów użytkowników i grup, co pozwala na lepsze bezpieczeństwo i izolację między kontenerami a systemem gospodarza.
Gdy tworzona jest nowa przestrzeń nazw użytkowników, zaczyna się od pustego zestawu mapowań identyfikatorów użytkowników i grup. Oznacza to, że każdy proces działający w nowej przestrzeni nazw użytkowników początkowo nie będzie miał uprawnień poza tą przestrzenią.
Mapowania identyfikatorów mogą być ustalane między identyfikatorami użytkowników i grup w nowej przestrzeni a tymi w przestrzeni nadrzędnej (lub gospodarza). To pozwala procesom w nowej przestrzeni na posiadanie uprawnień i własności odpowiadających identyfikatorom użytkowników i grup w przestrzeni nadrzędnej. Jednak mapowania identyfikatorów mogą być ograniczone do określonych zakresów i podzbiorów identyfikatorów, co pozwala na precyzyjną kontrolę nad uprawnieniami przyznawanymi procesom w nowej przestrzeni.
W obrębie przestrzeni nazw użytkowników procesy mogą mieć pełne uprawnienia roota (UID 0) do operacji wewnątrz przestrzeni, jednocześnie mając ograniczone uprawnienia poza tą przestrzenią. To pozwala kontenerom działać z możliwościami podobnymi do roota w ich własnej przestrzeni, nie mając pełnych uprawnień roota w systemie gospodarza.
Procesy mogą przemieszczać się między przestrzeniami nazw, używając wywołania systemowego setns()
lub tworzyć nowe przestrzenie nazw, używając wywołań systemowych unshare()
lub clone()
z flagą CLONE_NEWUSER
. Gdy proces przemieszcza się do nowej przestrzeni lub ją tworzy, zacznie używać mapowań identyfikatorów użytkowników i grup związanych z tą przestrzenią.
Mountując nową instancję systemu plików /proc
, używając parametru --mount-proc
, zapewniasz, że nowa przestrzeń montowania ma dokładny i izolowany widok informacji o procesach specyficznych dla tej przestrzeni.
Aby użyć przestrzeni nazw użytkownika, demon Dockera musi być uruchomiony z --userns-remap=default
(W ubuntu 14.04 można to zrobić, modyfikując /etc/default/docker
, a następnie wykonując sudo service docker restart
)
Można sprawdzić mapę użytkowników z kontenera docker za pomocą:
Lub z hosta za pomocą:
Również, możesz wejść do innej przestrzeni nazw procesu tylko jeśli jesteś root. I nie możesz wejść do innej przestrzeni nazw bez deskryptora wskazującego na nią (jak /proc/self/ns/user
).
W przypadku przestrzeni nazw użytkowników, gdy tworzona jest nowa przestrzeń nazw użytkowników, proces, który wchodzi do tej przestrzeni, otrzymuje pełny zestaw uprawnień w tej przestrzeni. Te uprawnienia pozwalają procesowi na wykonywanie operacji uprzywilejowanych, takich jak montowanie systemów plików, tworzenie urządzeń czy zmiana właściciela plików, ale tylko w kontekście jego przestrzeni nazw użytkowników.
Na przykład, gdy masz uprawnienie CAP_SYS_ADMIN
w przestrzeni nazw użytkowników, możesz wykonywać operacje, które zazwyczaj wymagają tego uprawnienia, takie jak montowanie systemów plików, ale tylko w kontekście swojej przestrzeni nazw użytkowników. Jakiekolwiek operacje, które wykonasz z tym uprawnieniem, nie wpłyną na system gospodarza ani inne przestrzenie nazw.
Dlatego, nawet jeśli uzyskanie nowego procesu w nowej przestrzeni nazw użytkowników przywróci ci wszystkie uprawnienia (CapEff: 000001ffffffffff), w rzeczywistości możesz używać tylko tych związanych z przestrzenią nazw (na przykład montowanie), a nie wszystkich. Tak więc, samo to nie wystarczy, aby uciec z kontenera Docker.
hacking tricks by submitting PRs to the** HackTricks and HackTricks Cloud github repos.
Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)