Snap ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ ํˆดํ‚ท์˜ ๋กœ์ปฌ ๋ฃจํŠธ ์ทจ์•ฝ์ 

Qualys๋Š” SUID ๋ฃจํŠธ ํ”Œ๋ž˜๊ทธ์™€ ํ•จ๊ป˜ ์ œ๊ณต๋˜๊ณ  snapd ํ”„๋กœ์„ธ์Šค์—์„œ ํ˜ธ์ถœ๋˜์–ด ์ž์ฒด ํฌํ•จ ํŒจํ‚ค์ง€๋กœ ์ œ๊ณต๋˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋Œ€ํ•œ ์‹คํ–‰ ๊ฐ€๋Šฅ ํ™˜๊ฒฝ์„ ์ƒ์„ฑํ•˜๋Š” snap-confine ์œ ํ‹ธ๋ฆฌํ‹ฐ์—์„œ ๋‘ ๊ฐ€์ง€ ์ทจ์•ฝ์ (CVE-2021-44731, CVE-2021-44730)์„ ์‹๋ณ„ํ–ˆ์Šต๋‹ˆ๋‹ค. ์Šค๋ƒ… ํ˜•์‹์œผ๋กœ. ์ด ์ทจ์•ฝ์ ์œผ๋กœ ์ธํ•ด ๊ถŒํ•œ์ด ์—†๋Š” ๋กœ์ปฌ ์‚ฌ์šฉ์ž๊ฐ€ ์‹œ์Šคํ…œ์—์„œ ๋ฃจํŠธ ๊ถŒํ•œ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋Š” ์˜ค๋Š˜ Ubuntu 21.10, 20.04 ๋ฐ 18.04์šฉ snapd ํŒจํ‚ค์ง€ ์—…๋ฐ์ดํŠธ์—์„œ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ฒซ ๋ฒˆ์งธ ์ทจ์•ฝ์ (CVE-2021-44730)์€ ํ•˜๋“œ ๋งํฌ ์กฐ์ž‘์„ ํ†ตํ•œ ๊ณต๊ฒฉ์„ ํ—ˆ์šฉํ•˜์ง€๋งŒ ์‹œ์Šคํ…œ ํ•˜๋“œ ๋งํฌ ๋ณดํ˜ธ๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(sysctl fs.protected_hardlinks๋ฅผ 0์œผ๋กœ ์„ค์ •). ์ด ๋ฌธ์ œ๋Š” ๋ฃจํŠธ๋กœ ์‹คํ–‰๋˜๋Š” snap-update-ns ๋ฐ snap-discard-ns ๋„์šฐ๋ฏธ ํ”„๋กœ๊ทธ๋žจ์˜ ์‹คํ–‰ ํŒŒ์ผ ์œ„์น˜๋ฅผ ์ž˜๋ชป ํ™•์ธํ•˜์—ฌ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํŒŒ์ผ์˜ ๊ฒฝ๋กœ๋Š” /proc/self/exe์˜ ์ž์ฒด ๊ฒฝ๋กœ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ sc_open_snapd_tool() ํ•จ์ˆ˜์—์„œ ๊ณ„์‚ฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์Šค๋ƒ… ์ œํ•œ์„ ์œ„ํ•œ ํ•˜๋“œ ๋งํฌ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ž์‹ ๋งŒ์˜ ์Šค๋ƒ… ๋ฒ„์ „์„ ๋ฐฐ์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋””๋ ‰ํ† ๋ฆฌ์˜ update-ns ๋ฐ snap- ์œ ํ‹ธ๋ฆฌํ‹ฐ๋Š” Discard-ns์ž…๋‹ˆ๋‹ค. ํ•˜๋“œ ๋งํฌ๋ฅผ ํ†ตํ•ด ์‹คํ–‰ํ•œ ํ›„ ๋ฃจํŠธ ๊ถŒํ•œ์œผ๋กœ snap-confine์€ ๊ณต๊ฒฉ์ž๊ฐ€ ๋Œ€์ฒดํ•˜๋Š” ํ˜„์žฌ ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ snap-update-ns ๋ฐ snap-discard-ns ํŒŒ์ผ์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

๋‘ ๋ฒˆ์งธ ์ทจ์•ฝ์ ์€ ๊ฒฝ์Ÿ ์กฐ๊ฑด์œผ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•˜๋ฉฐ ๊ธฐ๋ณธ Ubuntu ๋ฐ์Šคํฌํƒ‘ ๊ตฌ์„ฑ์—์„œ ์•…์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Ubuntu Server์—์„œ ์ต์Šคํ”Œ๋กœ์ž‡์ด ์„ฑ๊ณต์ ์œผ๋กœ ์ž‘๋™ํ•˜๋ ค๋ฉด ์„ค์น˜ ์‹œ "์ถ”์ฒœ ์„œ๋ฒ„ ์Šค๋ƒ…" ์„น์…˜์—์„œ ํŒจํ‚ค์ง€ ์ค‘ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ฒฝ์Ÿ ์กฐ๊ฑด์€ snap ํŒจํ‚ค์ง€์— ๋Œ€ํ•œ ๋งˆ์šดํŠธ ์ง€์  ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์ค€๋น„ํ•˜๋Š” ๋™์•ˆ ํ˜ธ์ถœ๋˜๋Š” setup_private_mount() ํ•จ์ˆ˜์—์„œ ๋ถ„๋ช…ํ•˜๊ฒŒ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. ์ด ํ•จ์ˆ˜๋Š” ์ž„์‹œ ๋””๋ ‰ํ„ฐ๋ฆฌ "/tmp/snap.$SNAP_NAME/tmp"๋ฅผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ๊ธฐ์กด ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์Šค๋ƒ… ํŒจํ‚ค์ง€์šฉ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ํ•ด๋‹น ๋””๋ ‰ํ„ฐ๋ฆฌ์— ๋ฐ”์ธ๋”ฉํ•ฉ๋‹ˆ๋‹ค.

์ž„์‹œ ๋””๋ ‰ํ† ๋ฆฌ์˜ ์ด๋ฆ„์€ ์˜ˆ์ธก ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ ๊ณต๊ฒฉ์ž๋Š” ์†Œ์œ ์ž๋ฅผ ํ™•์ธํ•œ ํ›„ mount ์‹œ์Šคํ…œ ํ˜ธ์ถœ์„ ํ˜ธ์ถœํ•˜๊ธฐ ์ „์— ํ•ด๋‹น ๋‚ด์šฉ์„ ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๋กœ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ž„์˜์˜ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” /tmp/snap.lxd ๋””๋ ‰ํ† ๋ฆฌ์— "/tmp/snap.lxd/tmp" ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, mount()์— ๋Œ€ํ•œ ํ˜ธ์ถœ์€ ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ๋”ฐ๋ผ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋งˆ์šดํŠธํ•ฉ๋‹ˆ๋‹ค. ์Šค๋ƒ… ๋„ค์ž„์ŠคํŽ˜์ด์Šค. ๋น„์Šทํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ /var/lib์— ์ฝ˜ํ…์ธ ๋ฅผ ๋งˆ์šดํŠธํ•˜๊ณ  /var/lib/snapd/mount/snap.snap-store.user-fstab์„ ๋Œ€์ฒดํ•˜์—ฌ /etc ๋””๋ ‰ํ† ๋ฆฌ์˜ ๋งˆ์šดํŠธ๋ฅผ ๋‹ค์Œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. /etc/ld.so.preload๋ฅผ ๋Œ€์ฒดํ•˜์—ฌ ๋ฃจํŠธ ๊ถŒํ•œ์œผ๋กœ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋กœ๋”ฉ์„ ๊ตฌ์„ฑํ•˜๋Š” ์Šค๋ƒ… ํŒจํ‚ค์ง€์ž…๋‹ˆ๋‹ค.

snap-confine ์œ ํ‹ธ๋ฆฌํ‹ฐ๋Š” ๋ณด์•ˆ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜์—ฌ Go๋กœ ์ž‘์„ฑ๋˜๊ณ , AppArmor ํ”„๋กœํ•„์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ณดํ˜ธํ•˜๊ณ , seccomp ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์‹œ์Šคํ…œ ํ˜ธ์ถœ์„ ํ•„ํ„ฐ๋งํ•˜๊ณ , ๊ฒฉ๋ฆฌ๋ฅผ ์œ„ํ•œ ๋งˆ์šดํŠธ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์—ฐ๊ตฌ์›๋“ค์€ ์‹œ์Šคํ…œ์— ๋Œ€ํ•œ ๋ฃจํŠธ ๊ถŒํ•œ์„ ์–ป๊ธฐ ์œ„ํ•ด ์ž‘๋™ํ•˜๋Š” ์ต์Šคํ”Œ๋กœ์ž‡์„ ์ค€๋น„ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ต์Šคํ”Œ๋กœ์ž‡ ์ฝ”๋“œ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ œ๊ณต๋œ ์—…๋ฐ์ดํŠธ๋ฅผ ์„ค์น˜ํ•œ ํ›„ ๋ช‡ ์ฃผ ํ›„์— ๊ณต๊ฐœ๋ฉ๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€