PID Namespace
Reading time: 6 minutes
tip
Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
Basiese Inligting
Die PID (Process IDentifier) namespace is 'n kenmerk in die Linux-kern wat proses-isolasie bied deur 'n groep prosesse in staat te stel om hul eie stel unieke PIDs te hê, apart van die PIDs in ander namespaces. Dit is veral nuttig in containerisering, waar proses-isolasie noodsaaklik is vir sekuriteit en hulpbronbestuur.
Wanneer 'n nuwe PID namespace geskep word, word die eerste proses in daardie namespace aan PID 1 toegeken. Hierdie proses word die "init" proses van die nuwe namespace en is verantwoordelik vir die bestuur van ander prosesse binne die namespace. Elke daaropvolgende proses wat binne die namespace geskep word, sal 'n unieke PID binne daardie namespace hê, en hierdie PIDs sal onafhanklik wees van PIDs in ander namespaces.
Van die perspektief van 'n proses binne 'n PID namespace, kan dit slegs ander prosesse in dieselfde namespace sien. Dit is nie bewus van prosesse in ander namespaces nie, en dit kan nie met hulle interaksie hê nie met tradisionele prosesbestuur gereedskap (bv. kill
, wait
, ens.). Dit bied 'n vlak van isolasie wat help om te voorkom dat prosesse mekaar steur.
Hoe dit werk:
- Wanneer 'n nuwe proses geskep word (bv. deur die
clone()
stelselskakel te gebruik), kan die proses aan 'n nuwe of bestaande PID namespace toegeken word. As 'n nuwe namespace geskep word, word die proses die "init" proses van daardie namespace. - Die kern handhaaf 'n kaart tussen die PIDs in die nuwe namespace en die ooreenstemmende PIDs in die ouer namespace (d.w.s. die namespace waaruit die nuwe namespace geskep is). Hierdie kaart stel die kern in staat om PIDs te vertaal wanneer nodig, soos wanneer dit seine tussen prosesse in verskillende namespaces stuur.
- Prosesse binne 'n PID namespace kan slegs ander prosesse in dieselfde namespace sien en met hulle interaksie hê. Hulle is nie bewus van prosesse in ander namespaces nie, en hul PIDs is uniek binne hul namespace.
- Wanneer 'n PID namespace vernietig word (bv. wanneer die "init" proses van die namespace verlaat), word alle prosesse binne daardie namespace beëindig. Dit verseker dat alle hulpbronne wat met die namespace geassosieer word, behoorlik skoongemaak word.
Laboratorium:
Skep verskillende Namespaces
CLI
sudo unshare -pf --mount-proc /bin/bash
Fout: bash: fork: Kan nie geheue toewys nie
Wanneer unshare
sonder die -f
opsie uitgevoer word, word 'n fout ondervind weens die manier waarop Linux nuwe PID (Proses ID) name ruimtes hanteer. Die sleutelbesonderhede en die oplossing word hieronder uiteengesit:
- Probleem Verklaring:
- Die Linux-kern laat 'n proses toe om nuwe name ruimtes te skep met die
unshare
stelselskakel. egter, die proses wat die skepping van 'n nuwe PID naamruimte begin (genoem die "unshare" proses) gaan nie in die nuwe naamruimte in nie; slegs sy kindprosesse doen. - Die uitvoering van
%unshare -p /bin/bash%
begin/bin/bash
in dieselfde proses asunshare
. Gevolglik is/bin/bash
en sy kindprosesse in die oorspronklike PID naamruimte. - Die eerste kindproses van
/bin/bash
in die nuwe naamruimte word PID 1. Wanneer hierdie proses verlaat, aktiveer dit die opruiming van die naamruimte as daar geen ander prosesse is nie, aangesien PID 1 die spesiale rol het om weesprosesse aan te neem. Die Linux-kern sal dan PID-toewysing in daardie naamruimte deaktiveer.
- Gevolg:
- Die uitgang van PID 1 in 'n nuwe naamruimte lei tot die opruiming van die
PIDNS_HASH_ADDING
vlag. Dit lei tot die mislukking van diealloc_pid
funksie om 'n nuwe PID toe te wys wanneer 'n nuwe proses geskep word, wat die "Kan nie geheue toewys nie" fout veroorsaak.
- Oplossing:
- Die probleem kan opgelos word deur die
-f
opsie saam metunshare
te gebruik. Hierdie opsie maak datunshare
'n nuwe proses fork nadat die nuwe PID naamruimte geskep is. - Die uitvoering van
%unshare -fp /bin/bash%
verseker dat dieunshare
opdrag self PID 1 in die nuwe naamruimte word./bin/bash
en sy kindprosesse is dan veilig binne hierdie nuwe naamruimte, wat die voortydige uitgang van PID 1 voorkom en normale PID-toewysing toelaat.
Deur te verseker dat unshare
met die -f
vlag loop, word die nuwe PID naamruimte korrek gehandhaaf, wat toelaat dat /bin/bash
en sy subprosesse funksioneer sonder om die geheue toewysing fout te ondervind.
Deur 'n nuwe instansie van die /proc
lêerstelsel te monteer as jy die param --mount-proc
gebruik, verseker jy dat die nuwe monteer naamruimte 'n akkurate en geïsoleerde siening van die prosesinligting spesifiek vir daardie naamruimte het.
Docker
docker run -ti --name ubuntu1 -v /usr:/ubuntu1 ubuntu bash
Kontroleer in watter naamruimte jou proses is
ls -l /proc/self/ns/pid
lrwxrwxrwx 1 root root 0 Apr 3 18:45 /proc/self/ns/pid -> 'pid:[4026532412]'
Vind alle PID-namespaces
sudo find /proc -maxdepth 3 -type l -name pid -exec readlink {} \; 2>/dev/null | sort -u
Let op dat die root-gebruiker van die aanvanklike (standaard) PID-namespace al die prosesse kan sien, selfs die in nuwe PID-namespaces, daarom kan ons al die PID-namespaces sien.
Gaan binne in 'n PID-namespace
nsenter -t TARGET_PID --pid /bin/bash
Wanneer jy binne 'n PID namespace van die standaard namespace ingaan, sal jy steeds al die prosesse kan sien. En die proses van daardie PID ns sal die nuwe bash op die PID ns kan sien.
Ook, jy kan slegs in 'n ander proses PID namespace ingaan as jy root is. En jy kan nie ingaan in 'n ander namespace sonder 'n beskrywer wat daarna verwys nie (soos /proc/self/ns/pid
)
References
tip
Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.