CGroup Namespace
Reading time: 5 minutes
tip
Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Jifunze na fanya mazoezi ya Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za hacking kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.
Basic Information
Cgroup namespace ni kipengele cha kernel ya Linux ambacho kinatoa kujitengea kwa hierarchies za cgroup kwa michakato inayofanya kazi ndani ya namespace. Cgroups, kifupi cha control groups, ni kipengele cha kernel kinachoruhusu kupanga michakato katika vikundi vya kihierarkia ili kudhibiti na kutekeleza mipaka kwenye rasilimali za mfumo kama CPU, kumbukumbu, na I/O.
Ingawa cgroup namespaces si aina tofauti ya namespace kama zile tulizojadili awali (PID, mount, network, n.k.), zinahusiana na dhana ya kujitengea kwa namespace. Cgroup namespaces zinafanya virtualize mtazamo wa hierarchi ya cgroup, hivyo michakato inayofanya kazi ndani ya cgroup namespace ina mtazamo tofauti wa hierarchi ikilinganishwa na michakato inayofanya kazi kwenye mwenyeji au namespaces nyingine.
How it works:
- Wakati cgroup namespace mpya inaundwa, inaanza na mtazamo wa hierarchi ya cgroup kulingana na cgroup ya mchakato unaounda. Hii inamaanisha kwamba michakato inayofanya kazi katika cgroup namespace mpya itaona tu sehemu ya hierarchi nzima ya cgroup, iliyopunguzia kwenye cgroup subtree iliyoanzishwa na cgroup ya mchakato unaounda.
- Michakato ndani ya cgroup namespace itaona cgroup yao wenyewe kama mzizi wa hierarchi. Hii inamaanisha kwamba, kutoka mtazamo wa michakato ndani ya namespace, cgroup yao wenyewe inaonekana kama mzizi, na hawawezi kuona au kufikia cgroups nje ya subtree yao wenyewe.
- Cgroup namespaces hazitoi moja kwa moja kujitengea kwa rasilimali; zinatoa tu kujitengea kwa mtazamo wa hierarchi ya cgroup. Udhibiti wa rasilimali na kujitengea bado unatekelezwa na cgroup subsystems (mfano, cpu, kumbukumbu, n.k.) wenyewe.
Kwa maelezo zaidi kuhusu CGroups angalia:
Lab:
Create different Namespaces
CLI
sudo unshare -C [--mount-proc] /bin/bash
Kwa kuunganisha mfano mpya wa mfumo wa /proc
ikiwa unatumia param --mount-proc
, unahakikisha kwamba namespace mpya ya kuunganisha ina mtazamo sahihi na uliojitegemea wa taarifa za mchakato maalum kwa namespace hiyo.
Kosa: bash: fork: Haiwezekani kugawa kumbukumbu
Wakati unshare
inatekelezwa bila chaguo la -f
, kosa linakutana kutokana na jinsi Linux inavyoshughulikia namespaces mpya za PID (Kitambulisho cha Mchakato). Maelezo muhimu na suluhisho yameelezwa hapa chini:
- Maelezo ya Tatizo:
- Kernel ya Linux inaruhusu mchakato kuunda namespaces mpya kwa kutumia wito wa mfumo wa
unshare
. Hata hivyo, mchakato unaoanzisha uundaji wa namespace mpya ya PID (inayojulikana kama mchakato wa "unshare") hauingii kwenye namespace mpya; ni watoto wake tu ndio wanaingia. - Kuendesha
%unshare -p /bin/bash%
kunaanzisha/bin/bash
katika mchakato sawa naunshare
. Kwa hivyo,/bin/bash
na watoto wake wako katika namespace ya awali ya PID. - Mchakato wa kwanza wa mtoto wa
/bin/bash
katika namespace mpya unakuwa PID 1. Wakati mchakato huu unapoondoka, unachochea usafishaji wa namespace ikiwa hakuna mchakato mwingine, kwani PID 1 ina jukumu maalum la kupokea mchakato wa yatima. Kernel ya Linux itazima ugawaji wa PID katika namespace hiyo.
- Matokeo:
- Kuondoka kwa PID 1 katika namespace mpya kunasababisha kusafishwa kwa bendera ya
PIDNS_HASH_ADDING
. Hii inasababisha kazi yaalloc_pid
kushindwa kugawa PID mpya wakati wa kuunda mchakato mpya, ikitoa kosa la "Haiwezekani kugawa kumbukumbu".
- Suluhisho:
- Tatizo linaweza kutatuliwa kwa kutumia chaguo la
-f
pamoja naunshare
. Chaguo hili linafanyaunshare
kuunda mchakato mpya baada ya kuunda namespace mpya ya PID. - Kutekeleza
%unshare -fp /bin/bash%
kunahakikisha kwamba amri yaunshare
yenyewe inakuwa PID 1 katika namespace mpya./bin/bash
na watoto wake wanakuwa salama ndani ya namespace hii mpya, kuzuia kuondoka mapema kwa PID 1 na kuruhusu ugawaji wa PID wa kawaida.
Kwa kuhakikisha kwamba unshare
inatekelezwa na bendera ya -f
, namespace mpya ya PID inatunzwa ipasavyo, ikiruhusu /bin/bash
na michakato yake ya chini kufanya kazi bila kukutana na kosa la ugawaji wa kumbukumbu.
Docker
docker run -ti --name ubuntu1 -v /usr:/ubuntu1 ubuntu bash
Angalia ni namespace ipi mchakato wako uko ndani
ls -l /proc/self/ns/cgroup
lrwxrwxrwx 1 root root 0 Apr 4 21:19 /proc/self/ns/cgroup -> 'cgroup:[4026531835]'
Pata majina yote ya CGroup namespaces
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>
Ingia ndani ya cgroup namespace
nsenter -C TARGET_PID --pid /bin/bash
Pia, unaweza tu kuingia katika namespace nyingine ya mchakato ikiwa wewe ni root. Na huwezi kuingia katika namespace nyingine bila deskteta inayorejelea hiyo (kama /proc/self/ns/cgroup
).
References
tip
Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Jifunze na fanya mazoezi ya Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za hacking kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.