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 ์ง€์›ํ•˜๊ธฐ

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๊ณผ ๊ด€๋ จ๋œ ๋‹ค์–‘ํ•œ ์„ค์ • ๋ฐ ์ž์› ์‚ฌ์šฉ ์ •๋ณด๋ฅผ ๊ด€์ฐฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Cgroup Filesystem

cgroups์˜ ์ฃผ์š” ์ธํ„ฐํŽ˜์ด์Šค ํŒŒ์ผ์€ cgroup์œผ๋กœ ์ ‘๋‘์‚ฌ๊ฐ€ ๋ถ™์Šต๋‹ˆ๋‹ค. cgroup.procs ํŒŒ์ผ์€ ํ‘œ์ค€ ๋ช…๋ น(cat ๋“ฑ)์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ์œผ๋ฉฐ, cgroup ๋‚ด์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋‚˜์—ดํ•ฉ๋‹ˆ๋‹ค. ๋˜ ๋‹ค๋ฅธ ํŒŒ์ผ์ธ cgroup.threads๋Š” ์Šค๋ ˆ๋“œ ์ •๋ณด๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

Cgroup Procs

์…ธ์„ ๊ด€๋ฆฌํ•˜๋Š” cgroups๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰๊ณผ ํ”„๋กœ์„ธ์Šค ์ˆ˜๋ฅผ ์กฐ์ ˆํ•˜๋Š” ๋‘ ๊ฐœ์˜ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ์ปจํŠธ๋กค๋Ÿฌ์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๋ ค๋ฉด ์ปจํŠธ๋กค๋Ÿฌ์˜ ์ ‘๋‘์‚ฌ๊ฐ€ ๋ถ™์€ ํŒŒ์ผ์„ ์ฐธ์กฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, pids.current๋ฅผ ์ฐธ์กฐํ•˜์—ฌ cgroup ๋‚ด์˜ ์Šค๋ ˆ๋“œ ์ˆ˜๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Cgroup Memory

๊ฐ’์— 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 ์‹œ๊ฐ„ ์†Œ๋น„๋ฅผ ํ‘œ์‹œํ•˜์—ฌ ์„œ๋น„์Šค์˜ ํ•˜์œ„ ํ”„๋กœ์„ธ์Šค์—์„œ ์‚ฌ์šฉ๋Ÿ‰์„ ์ถ”์ ํ•˜๋Š” ๋ฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค:

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 ์ง€์›ํ•˜๊ธฐ