CGroup Namespace
Reading time: 6 minutes
tip
Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
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
'n cgroup namespace is 'n Linux-kernfunksie wat isolatie van cgroup hiërargieë vir prosesse wat binne 'n namespace loop bied. Cgroups, kort vir kontrole groepe, is 'n kernfunksie wat toelaat dat prosesse in hiërargiese groepe georganiseer word om grense op stelselhulpbronne soos CPU, geheue en I/O te bestuur en af te dwing.
Terwyl cgroup namespaces nie 'n aparte namespace tipe is soos die ander wat ons vroeër bespreek het (PID, mount, netwerk, ens.), is hulle verwant aan die konsep van namespace-isolatie. Cgroup namespaces virtualiseer die siening van die cgroup hiërargie, sodat prosesse wat binne 'n cgroup namespace loop 'n ander siening van die hiërargie het in vergelyking met prosesse wat in die gasheer of ander namespaces loop.
Hoe dit werk:
- Wanneer 'n nuwe cgroup namespace geskep word, begin dit met 'n siening van die cgroup hiërargie gebaseer op die cgroup van die skepende proses. Dit beteken dat prosesse wat in die nuwe cgroup namespace loop slegs 'n subset van die hele cgroup hiërargie sal sien, beperk tot die cgroup subboom wat op die skepende proses se cgroup gegrond is.
- Prosesse binne 'n cgroup namespace sal hulle eie cgroup as die wortel van die hiërargie sien. Dit beteken dat, vanuit die perspektief van prosesse binne die namespace, hulle eie cgroup as die wortel verskyn, en hulle kan nie cgroups buite hul eie subboom sien of toegang daartoe kry nie.
- Cgroup namespaces bied nie direk isolasie van hulpbronne nie; hulle bied slegs isolasie van die cgroup hiërargie siening. Hulpbronbeheer en isolasie word steeds deur die cgroup subsisteme (bv., cpu, geheue, ens.) self afgedwing.
Vir meer inligting oor CGroups kyk:
Laboratorium:
Skep verskillende Namespaces
CLI
sudo unshare -C [--mount-proc] /bin/bash
Deur 'n nuwe instansie van die /proc
lêerstelsel te monteer as jy die parameter --mount-proc
gebruik, verseker jy dat die nuwe monteernaamruimte 'n akkurate en geïsoleerde siening van die prosesinligting spesifiek vir daardie naamruimte het.
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) naamruimtes hanteer. Die sleutelbesonderhede en die oplossing word hieronder uiteengesit:
- Probleemverklaring:
- Die Linux-kern laat 'n proses toe om nuwe naamruimtes te skep met die
unshare
stelselaanroep. Die proses wat die skepping van 'n nuwe PID naamruimte inisieer (genoem die "unshare" proses) gaan egter 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, veroorsaak 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 diealloc_pid
funksie wat misluk 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.
Docker
docker run -ti --name ubuntu1 -v /usr:/ubuntu1 ubuntu bash
Kontroleer in watter naamruimte jou proses is
ls -l /proc/self/ns/cgroup
lrwxrwxrwx 1 root root 0 Apr 4 21:19 /proc/self/ns/cgroup -> 'cgroup:[4026531835]'
Vind alle CGroup name ruimtes
sudo find /proc -maxdepth 3 -type l -name cgroup -exec readlink {} \; 2>/dev/null | sort -u
# Find the processes with an specific namespace
sudo find /proc -maxdepth 3 -type l -name cgroup -exec ls -l {} \; 2>/dev/null | grep <ns-number>
Gaan binne 'n CGroup naamruimte in
nsenter -C TARGET_PID --pid /bin/bash
Ook, jy kan slegs in 'n ander prosesnaamruimte ingaan as jy root is. En jy kan nie ingaan in 'n ander naamruimte sonder 'n beskrywer wat daarna verwys nie (soos /proc/self/ns/cgroup
).
Verwysings
tip
Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
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.