CGroups
Tip
AWS ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:HackTricks Training GCP Red Team Expert (GRTE)
Azure ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.
Basic Information
Linux Control Groups ๋๋ cgroups๋ CPU, ๋ฉ๋ชจ๋ฆฌ ๋ฐ ๋์คํฌ I/O์ ๊ฐ์ ์์คํ ๋ฆฌ์์ค๋ฅผ ํ๋ก์ธ์ค ๊ทธ๋ฃน ๊ฐ์ ํ ๋น, ์ ํ ๋ฐ ์ฐ์ ์์๋ฅผ ์ง์ ํ ์ ์๋ Linux ์ปค๋์ ๊ธฐ๋ฅ์ ๋๋ค. ์ด๋ ๋ฆฌ์์ค ์ ํ, ์์ ๋ถํ ๊ฒฉ๋ฆฌ ๋ฐ ๋ค์ํ ํ๋ก์ธ์ค ๊ทธ๋ฃน ๊ฐ์ ๋ฆฌ์์ค ์ฐ์ ์์ ์ง์ ๊ณผ ๊ฐ์ ๋ชฉ์ ์ ์ํด ํ๋ก์ธ์ค ์ปฌ๋ ์ ์ ๋ฆฌ์์ค ์ฌ์ฉ์ ๊ด๋ฆฌํ๊ณ ๊ฒฉ๋ฆฌํ๋ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํฉ๋๋ค.
cgroups์ ๋ ๊ฐ์ง ๋ฒ์ ์ด ์์ต๋๋ค: ๋ฒ์ 1๊ณผ ๋ฒ์ 2. ๋ ๋ฒ์ ๋ชจ๋ ์์คํ ์์ ๋์์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ฃผ์ ์ฐจ์ด์ ์ cgroups ๋ฒ์ 2๊ฐ ๊ณ์ธต์ ์ด๊ณ ํธ๋ฆฌ์ ๊ฐ์ ๊ตฌ์กฐ๋ฅผ ๋์ ํ์ฌ ํ๋ก์ธ์ค ๊ทธ๋ฃน ๊ฐ์ ๋ฆฌ์์ค ๋ถ๋ฐฐ๋ฅผ ๋ณด๋ค ์ธ๋ฐํ๊ณ ์์ธํ๊ฒ ํ ์ ์๊ฒ ํ๋ค๋ ๊ฒ์ ๋๋ค. ๋ํ, ๋ฒ์ 2๋ ์๋ก์ด ๋ฆฌ์์ค ์ปจํธ๋กค๋ฌ์ ๋ํ ์ง์, ๋ ๊ฑฐ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ํ ๋ ๋์ ์ง์ ๋ฐ ์ฑ๋ฅ ํฅ์๊ณผ ๊ฐ์ ๋ค์ํ ๊ฐ์ ์ฌํญ์ ๊ฐ์ ธ์ต๋๋ค.
์ ๋ฐ์ ์ผ๋ก cgroups ๋ฒ์ 2๋ ๋ฒ์ 1๋ณด๋ค ๋ ๋ง์ ๊ธฐ๋ฅ๊ณผ ๋ ๋์ ์ฑ๋ฅ์ ์ ๊ณตํ์ง๋ง, ํ์๋ ๊ตฌํ ์์คํ ๊ณผ์ ํธํ์ฑ์ด ์ฐ๋ ค๋๋ ํน์ ์๋๋ฆฌ์ค์์ ์ฌ์ ํ ์ฌ์ฉ๋ ์ ์์ต๋๋ค.
ํ๋ก์ธ์ค์ cgroup ํ์ผ์ /proc/<pid>์์ ํ์ธํ์ฌ v1 ๋ฐ v2 cgroups๋ฅผ ๋์ดํ ์ ์์ต๋๋ค. ์ด ๋ช ๋ น์ด๋ก ์ ธ์ cgroups๋ฅผ ํ์ธํ๋ ๊ฒ๋ถํฐ ์์ํ ์ ์์ต๋๋ค:
$ cat /proc/self/cgroup
12:rdma:/
11:net_cls,net_prio:/
10:perf_event:/
9:cpuset:/
8:cpu,cpuacct:/user.slice
7:blkio:/user.slice
6:memory:/user.slice 5:pids:/user.slice/user-1000.slice/session-2.scope 4:devices:/user.slice
3:freezer:/
2:hugetlb:/testcgroup
1:name=systemd:/user.slice/user-1000.slice/session-2.scope
0::/user.slice/user-1000.slice/session-2.scope
- ์ซ์ 2โ12: cgroups v1, ๊ฐ ์ค์ ๋ค๋ฅธ cgroup์ ๋ํ๋ ๋๋ค. ์ด๋ค์ ์ปจํธ๋กค๋ฌ๋ ์ซ์ ์์ ์ง์ ๋์ด ์์ต๋๋ค.
- ์ซ์ 1: ๋ํ cgroups v1์ด์ง๋ง ๊ด๋ฆฌ ๋ชฉ์ ์ผ๋ก๋ง ์ฌ์ฉ๋๋ฉฐ(์: systemd์ ์ํด ์ค์ ๋จ) ์ปจํธ๋กค๋ฌ๊ฐ ์์ต๋๋ค.
- ์ซ์ 0: cgroups v2๋ฅผ ๋ํ๋ ๋๋ค. ์ปจํธ๋กค๋ฌ๊ฐ ๋์ด๋์ง ์์ผ๋ฉฐ, ์ด ์ค์ cgroups v2๋ง ์คํํ๋ ์์คํ ์์ ๋ ์ ์ ์ ๋๋ค.
- ์ด๋ฆ์ ๊ณ์ธต์ ์ด๋ฉฐ, ํ์ผ ๊ฒฝ๋ก๋ฅผ ๋ฎ์ ์๋ก ๋ค๋ฅธ cgroups ๊ฐ์ ๊ตฌ์กฐ์ ๊ด๊ณ๋ฅผ ๋ํ๋ ๋๋ค.
- /user.slice ๋๋ /system.slice์ ๊ฐ์ ์ด๋ฆ์ cgroups์ ๋ถ๋ฅ๋ฅผ ์ง์ ํ๋ฉฐ, user.slice๋ ์ผ๋ฐ์ ์ผ๋ก systemd์ ์ํด ๊ด๋ฆฌ๋๋ ๋ก๊ทธ์ธ ์ธ์ ์ ์ํด, system.slice๋ ์์คํ ์๋น์ค๋ฅผ ์ํด ์ฌ์ฉ๋ฉ๋๋ค.
cgroups ๋ณด๊ธฐ
ํ์ผ ์์คํ
์ ์ผ๋ฐ์ ์ผ๋ก cgroups์ ์ ๊ทผํ๋ ๋ฐ ์ฌ์ฉ๋๋ฉฐ, ์ ํต์ ์ผ๋ก ์ปค๋ ์ํธ์์ฉ์ ์ฌ์ฉ๋๋ Unix ์์คํ
ํธ์ถ ์ธํฐํ์ด์ค์๋ ๋ค๋ฆ
๋๋ค. ์
ธ์ cgroup ๊ตฌ์ฑ์ ์กฐ์ฌํ๋ ค๋ฉด /proc/self/cgroup ํ์ผ์ ํ์ธํด์ผ ํ๋ฉฐ, ์ด ํ์ผ์ ์
ธ์ cgroup์ ๋ณด์ฌ์ค๋๋ค. ๊ทธ๋ฐ ๋ค์ /sys/fs/cgroup (๋๋ /sys/fs/cgroup/unified) ๋๋ ํ ๋ฆฌ๋ก ์ด๋ํ์ฌ cgroup์ ์ด๋ฆ๊ณผ ๊ณต์ ํ๋ ๋๋ ํ ๋ฆฌ๋ฅผ ์ฐพ์ผ๋ฉด cgroup๊ณผ ๊ด๋ จ๋ ๋ค์ํ ์ค์ ๋ฐ ์์ ์ฌ์ฉ ์ ๋ณด๋ฅผ ๊ด์ฐฐํ ์ ์์ต๋๋ค.
.png)
cgroups์ ์ฃผ์ ์ธํฐํ์ด์ค ํ์ผ์ cgroup์ผ๋ก ์ ๋์ฌ๊ฐ ๋ถ์ต๋๋ค. cgroup.procs ํ์ผ์ ํ์ค ๋ช ๋ น(cat ๋ฑ)์ผ๋ก ๋ณผ ์ ์์ผ๋ฉฐ, cgroup ๋ด์ ํ๋ก์ธ์ค๋ฅผ ๋์ดํฉ๋๋ค. ๋ ๋ค๋ฅธ ํ์ผ์ธ cgroup.threads๋ ์ค๋ ๋ ์ ๋ณด๋ฅผ ํฌํจํฉ๋๋ค.
.png)
์ ธ์ ๊ด๋ฆฌํ๋ cgroups๋ ์ผ๋ฐ์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋๊ณผ ํ๋ก์ธ์ค ์๋ฅผ ์กฐ์ ํ๋ ๋ ๊ฐ์ ์ปจํธ๋กค๋ฌ๋ฅผ ํฌํจํฉ๋๋ค. ์ปจํธ๋กค๋ฌ์ ์ํธ์์ฉํ๋ ค๋ฉด ์ปจํธ๋กค๋ฌ์ ์ ๋์ฌ๊ฐ ๋ถ์ ํ์ผ์ ์ฐธ์กฐํด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, pids.current๋ฅผ ์ฐธ์กฐํ์ฌ cgroup ๋ด์ ์ค๋ ๋ ์๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
.png)
๊ฐ์ max๊ฐ ํ์๋๋ฉด cgroup์ ๋ํ ํน์ ์ ํ์ด ์์์ ๋ํ๋ ๋๋ค. ๊ทธ๋ฌ๋ cgroups์ ๊ณ์ธต์ ํน์ฑ์ผ๋ก ์ธํด, ํ์ ๋๋ ํ ๋ฆฌ ๊ณ์ธต์ cgroup์์ ์ ํ์ด ๋ถ๊ณผ๋ ์ ์์ต๋๋ค.
cgroups ์กฐ์ ๋ฐ ์์ฑ
ํ๋ก์ธ์ค๋ cgroup.procs ํ์ผ์ ํ๋ก์ธ์ค ID (PID)๋ฅผ ์์ฑํ์ฌ cgroups์ ํ ๋น๋ฉ๋๋ค. ์ด๋ ๋ฃจํธ ๊ถํ์ด ํ์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ํ๋ก์ธ์ค๋ฅผ ์ถ๊ฐํ๋ ค๋ฉด:
echo [pid] > cgroup.procs
์ ์ฌํ๊ฒ, PID ์ ํ์ ์ค์ ํ๋ ๊ฒ๊ณผ ๊ฐ์ cgroup ์์ฑ์ ์์ ํ๋ ๊ฒ์ ์ํ๋ ๊ฐ์ ๊ด๋ จ ํ์ผ์ ์์ฑํจ์ผ๋ก์จ ์ํ๋ฉ๋๋ค. cgroup์ ๋ํด ์ต๋ 3,000๊ฐ์ PID๋ฅผ ์ค์ ํ๋ ค๋ฉด:
echo 3000 > pids.max
์ cgroups ์์ฑ์ cgroup ๊ณ์ธต ๋ด์ ์๋ก์ด ํ์ ๋๋ ํ ๋ฆฌ๋ฅผ ๋ง๋๋ ๊ฒ์ ํฌํจํ๋ฉฐ, ์ด๋ ์ปค๋์ด ํ์ํ ์ธํฐํ์ด์ค ํ์ผ์ ์๋์ผ๋ก ์์ฑํ๋๋ก ์ ๋ํฉ๋๋ค. ํ์ฑ ํ๋ก์ธ์ค๊ฐ ์๋ cgroups๋ rmdir๋ก ์ ๊ฑฐํ ์ ์์ง๋ง, ํน์ ์ ์ฝ ์ฌํญ์ ์ธ์งํด์ผ ํฉ๋๋ค:
- ํ๋ก์ธ์ค๋ ๋ฆฌํ cgroups์๋ง ๋ฐฐ์น๋ ์ ์์ต๋๋ค (์ฆ, ๊ณ์ธต์์ ๊ฐ์ฅ ์ค์ฒฉ๋ ๊ฒ๋ค).
- cgroup์ ๋ถ๋ชจ์ ์๋ ์ปจํธ๋กค๋ฌ๋ฅผ ๊ฐ์ง ์ ์์ต๋๋ค.
- ์์ cgroups์ ์ปจํธ๋กค๋ฌ๋
cgroup.subtree_controlํ์ผ์ ๋ช ์์ ์ผ๋ก ์ ์ธ๋์ด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์์ cgroup์์ CPU ๋ฐ PID ์ปจํธ๋กค๋ฌ๋ฅผ ํ์ฑํํ๋ ค๋ฉด:
echo "+cpu +pids" > cgroup.subtree_control
๋ฃจํธ cgroup์ ์ด๋ฌํ ๊ท์น์ ์์ธ๋ก, ํ๋ก์ธ์ค๋ฅผ ์ง์ ๋ฐฐ์นํ ์ ์์ต๋๋ค. ์ด๋ systemd ๊ด๋ฆฌ์์ ํ๋ก์ธ์ค๋ฅผ ์ ๊ฑฐํ๋ ๋ฐ ์ฌ์ฉ๋ ์ ์์ต๋๋ค.
cgroup ๋ด์์ CPU ์ฌ์ฉ๋ ๋ชจ๋ํฐ๋ง์ cpu.stat ํ์ผ์ ํตํด ๊ฐ๋ฅํ๋ฉฐ, ์ด CPU ์๊ฐ ์๋น๋ฅผ ํ์ํ์ฌ ์๋น์ค์ ํ์ ํ๋ก์ธ์ค์์ ์ฌ์ฉ๋์ ์ถ์ ํ๋ ๋ฐ ์ ์ฉํฉ๋๋ค:
.png)
cpu.stat ํ์ผ์ ํ์๋ CPU ์ฌ์ฉ ํต๊ณ
References
- Book: How Linux Works, 3rd Edition: What Every Superuser Should Know By Brian Ward
Tip
AWS ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:HackTricks Training GCP Red Team Expert (GRTE)
Azure ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.


