Spectre ๊ณต๊ฒฉ์— ๋Œ€ํ•œ ๋ณดํ˜ธ๋ฅผ ์šฐํšŒํ•  ์ˆ˜ ์žˆ๋Š” eBPF ํ•˜์œ„ ์‹œ์Šคํ…œ์˜ ์ทจ์•ฝ์ 

Linux ์ปค๋„(CVE-2021-33624)์—์„œ eBPF ํ•˜์œ„ ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜์—ฌ Spectre ํด๋ž˜์Šค ์ทจ์•ฝ์ ์— ๋Œ€ํ•œ ๋ณดํ˜ธ๋ฅผ ์šฐํšŒํ•  ์ˆ˜ ์žˆ๋Š” ์ทจ์•ฝ์ ์ด ํ™•์ธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํŠน์ • ์ž‘์—…์˜ ์ถ”์ธก ์‹คํ–‰. ์ŠคํŽ™ํ„ฐ(Spectre) ๊ณต๊ฒฉ์„ ์œ„ํ•ด์„œ๋Š” ์ถ”์ธก์„ฑ ๋ช…๋ น ์‹คํ–‰์œผ๋กœ ์ด์–ด์ง€๋Š” ํŠน๊ถŒ ์ฝ”๋“œ์— ํŠน์ • ๋ช…๋ น ์‹œํ€€์Šค๊ฐ€ โ€‹โ€‹์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์‹คํ–‰์„ ์œ„ํ•ด ์ „์†ก๋œ BPF ํ”„๋กœ๊ทธ๋žจ์„ ์กฐ์ž‘ํ•จ์œผ๋กœ์จ eBPF์—์„œ ์œ ์‚ฌํ•œ ๋ช…๋ น์„ ์ƒ์„ฑํ•˜๊ณ  ์ปค๋„ ๋ฉ”๋ชจ๋ฆฌ์˜ ๋‚ด์šฉ๊ณผ ๋ฌผ๋ฆฌ์  ๋ฉ”๋ชจ๋ฆฌ์˜ ์ž„์˜ ์˜์—ญ์„ ์‚ฌ์ด๋“œ ์ฑ„๋„์„ ํ†ตํ•ด ์œ ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์ทจ์•ฝ์ ์€ BPF ํ”„๋กœ๊ทธ๋žจ์—์„œ ์˜ค๋ฅ˜์™€ ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š” ํ™œ๋™์„ ๊ฐ์ง€ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๊ฒ€์ฆ ํ”„๋กœ๊ทธ๋žจ์˜ ๊ฒฐํ•จ์œผ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๊ฒ€์ฆ์ž๋Š” ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ ์‹คํ–‰ ๊ฒฝ๋กœ๋ฅผ ์—ด๊ฑฐํ•˜์ง€๋งŒ ๋ช…๋ น์–ด ์„ธํŠธ ์•„ํ‚คํ…์ฒ˜์˜ ์˜๋ฏธ๋ก ์  ๊ด€์ ์—์„œ ํ—ˆ์šฉํ•  ์ˆ˜ ์—†๋Š” ๋ถ„๊ธฐ ์˜ต์…˜์€ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค. BPF ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•  ๋•Œ ๊ฒ€์ฆ์ž๊ฐ€ ๊ณ ๋ คํ•˜์ง€ ์•Š์€ ๋ถ„๊ธฐ ์˜ต์…˜์€ ํ”„๋กœ์„ธ์„œ์— ์˜ํ•ด ์ž˜๋ชป ์˜ˆ์ธก๋˜์–ด ์ถ”์ธก ๋ชจ๋“œ์—์„œ ์‹คํ–‰๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, "๋กœ๋“œ" ์ž‘์—…์„ ๋ถ„์„ํ•  ๋•Œ ๊ฒ€์ฆ์ž๋Š” ๋ช…๋ น์–ด๊ฐ€ ๊ฐ’์ด ํ•ญ์ƒ ์ง€์ •๋œ ๊ฒฝ๊ณ„ ๋‚ด์— ์žˆ๋Š” ์ฃผ์†Œ๊ฐ€ ์žˆ๋Š” ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•˜์ง€๋งŒ ๊ณต๊ฒฉ์ž๋Š” ํ”„๋กœ์„ธ์„œ๊ฐ€ ์ถ”๋ก ์ ์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜๋Š” ์กฐ๊ฑด์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ™•์ธ ์กฐ๊ฑด์— ๋งž์ง€ ์•Š๋Š” ์ฃผ์†Œ์ž…๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋Š” ์ปค๋„ 4.15 ์ถœ์‹œ ์ดํ›„๋ถ€ํ„ฐ ๋‚˜ํƒ€๋‚˜๊ธฐ ์‹œ์ž‘ํ•ด ํŒจ์น˜(1, 2, 3, 4) ํ˜•ํƒœ๋กœ ์ˆ˜์ •๋๋‹ค. ๋ฐฐํฌํŒ(Debian, RHEL, Ubuntu, Fedora, SUSE, Arch)์—์„œ๋Š” ์ทจ์•ฝ์ ์ด ์ˆ˜์ •๋˜์ง€ ์•Š์€ ์ƒํƒœ๋กœ ๋‚จ์•„ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ Spectre ์ทจ์•ฝ์ ์œผ๋กœ๋ถ€ํ„ฐ ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•œ ๋„๊ตฌ๊ฐ€ ์„ฑ๋Šฅ์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์— ๋Œ€ํ•œ ์ฐธ๊ณ  ์‚ฌํ•ญ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋…ธํŠธ์—๋Š” Firefox์—์„œ ๋ฐ˜๋ณตํ•˜๊ธฐ ์–ด๋ ค์šด ์˜ค๋ฅ˜๋ฅผ ๋””๋ฒ„๊น…ํ•˜๊ธฐ ์œ„ํ•ด Mozilla์—์„œ ๋งŒ๋“  rr(Record and Replay) ๋””๋ฒ„๊ฑฐ์˜ ์ตœ์ ํ™” ๊ฒฐ๊ณผ๊ฐ€ ์š”์•ฝ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋””๋ ‰ํ„ฐ๋ฆฌ ์กด์žฌ๋ฅผ ํ™•์ธํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์‹œ์Šคํ…œ ํ˜ธ์ถœ์„ ์บ์‹ฑํ•˜๋ฉด ํ…Œ์ŠคํŠธ ํ”„๋กœ์ ํŠธ์˜ "rr ์†Œ์Šค" ์ž‘์—…์ด 3๋ถ„ 19์ดˆ์—์„œ 36์ดˆ๋กœ ๋‹จ์ถ•๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ตœ์ ํ™” ์ž‘์„ฑ์ž๋Š” ์ŠคํŽ™ํ„ฐ ๋ณดํ˜ธ๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•œ ํ›„ ์„ฑ๋Šฅ์ด ์–ด๋–ป๊ฒŒ ๋ณ€ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. "mitigations=off" ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹œ์Šคํ…œ์„ ๋ถ€ํŒ…ํ•œ ํ›„, ์ตœ์ ํ™”ํ•˜์ง€ ์•Š์€ "rr ์†Œ์Šค"์˜ ์‹คํ–‰ ์‹œ๊ฐ„์€ 2๋ถ„ 5์ดˆ(1.6๋ฐฐ ๋” ๋นจ๋ผ์ง)์˜€๊ณ , ์ตœ์ ํ™”๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด 33์ดˆ(9% ๋” ๋นจ๋ผ์กŒ์Šต๋‹ˆ๋‹ค)์˜€์Šต๋‹ˆ๋‹ค. ํฅ๋ฏธ๋กญ๊ฒŒ๋„ Spectre ๋ณดํ˜ธ๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๋ฉด ์ปค๋„ ์ˆ˜์ค€์—์„œ ์ฝ”๋“œ ์‹คํ–‰ ์‹œ๊ฐ„์ด 1.4๋ฐฐ(2m9s์—์„œ 1m32s๋กœ) ๋‹จ์ถ•๋˜์—ˆ์„ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์‚ฌ์šฉ์ž ๊ณต๊ฐ„์—์„œ ์‹คํ–‰ ์‹œ๊ฐ„๋„ ์ ˆ๋ฐ˜์œผ๋กœ ์ค„์—ˆ์Šต๋‹ˆ๋‹ค(1m9s์—์„œ 0m33s). ์ด๋Š” ์•„๋งˆ๋„ CPU ์บ์‹œ ์ž‘์—… ๋ฐ TLB ํšจ์œจ์„ฑ์ด ๊ฐ์†Œํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ŠคํŽ™ํ„ฐ ๋ณดํ˜ธ๊ฐ€ ํ™œ์„ฑํ™”๋˜๋ฉด ์žฌ์„ค์ •๋ฉ๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

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