BHI๋Š” Intel ๋ฐ ARM ํ”„๋กœ์„ธ์„œ์˜ ์ƒˆ๋กœ์šด Spectre ํด๋ž˜์Šค ์ทจ์•ฝ์ ์ž…๋‹ˆ๋‹ค.

Vrije Universiteit Amsterdam์˜ ์—ฐ๊ตฌ์› ๊ทธ๋ฃน์€ Intel ๋ฐ ARM ํ”„๋กœ์„ธ์„œ์˜ ๋งˆ์ดํฌ๋กœ์•„ํ‚คํ…์ฒ˜ ๊ตฌ์กฐ์—์„œ ์ƒˆ๋กœ์šด ์ทจ์•ฝ์ ์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” Spectre-v2 ์ทจ์•ฝ์ ์˜ ํ™•์žฅ ๋ฒ„์ „์œผ๋กœ, ํ”„๋กœ์„ธ์„œ์— ์ถ”๊ฐ€๋œ eIBRS ๋ฐ CSV2 ๋ณดํ˜ธ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์šฐํšŒํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค. . ์ด ์ทจ์•ฝ์ ์—๋Š” BHI(Branch History Injection, CVE-2022-0001), BHB(Branch History Buffer, CVE-2022-0002), Spectre-BHB(CVE-2022-23960) ๋“ฑ ์—ฌ๋Ÿฌ ์ด๋ฆ„์ด ๋ถ™์—ˆ์Šต๋‹ˆ๋‹ค. ๋™์ผํ•œ ๋ฌธ์ œ(BHI - ์‚ฌ์šฉ์ž ํ”„๋กœ์„ธ์Šค ๋ฐ ์ปค๋„๊ณผ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ๊ถŒํ•œ ์ˆ˜์ค€์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ๊ณต๊ฒฉ, BHB - eBPF JIT ๋ฐ ์ปค๋„๊ณผ ๊ฐ™์€ ๋™์ผํ•œ ๊ถŒํ•œ ์ˆ˜์ค€์˜ ๊ณต๊ฒฉ)

์—ฐ๊ตฌ์›๋“ค์€ ์‚ฌ์šฉ์ž ๊ณต๊ฐ„์˜ ์ปค๋„ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ž„์˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ๋Š” ์ž‘๋™ํ•˜๋Š” ์ต์Šคํ”Œ๋กœ์ž‡์„ ์‹œ์—ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ค€๋น„๋œ ์ต์Šคํ”Œ๋กœ์ž‡์„ ์‚ฌ์šฉํ•˜์—ฌ /etc/shadow ํŒŒ์ผ์—์„œ ๋กœ๋“œ๋œ ๋ฃจํŠธ ์‚ฌ์šฉ์ž ๋น„๋ฐ€๋ฒˆํ˜ธ์˜ ํ•ด์‹œ๊ฐ€ ํฌํ•จ๋œ ๋ฌธ์ž์—ด์„ ์ปค๋„ ๋ฒ„ํผ์—์„œ ์ถ”์ถœํ•˜๋Š” ๊ฒƒ์ด ์–ด๋–ป๊ฒŒ ๊ฐ€๋Šฅํ•œ์ง€ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ์ด ์ต์Šคํ”Œ๋กœ์ž‡์€ ์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๋“œํ•œ eBPF ํ”„๋กœ๊ทธ๋žจ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•˜๋‚˜์˜ ๊ถŒํ•œ ์ˆ˜์ค€(์ปค๋„ ๊ฐ„ ๊ณต๊ฒฉ) ๋‚ด์˜ ์ทจ์•ฝ์ ์„ ์•…์šฉํ•  ๊ฐ€๋Šฅ์„ฑ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ์ปค๋„ ์ฝ”๋“œ์—์„œ eBPF ๊ธฐ์กด Spectre ๊ฐ€์ ฏ ๋Œ€์‹  ๋ช…๋ น์˜ ์ถ”์ธก ์‹คํ–‰์œผ๋กœ ์ด์–ด์ง€๋Š” ๋ช…๋ น ์‹œํ€€์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์ทจ์•ฝ์ ์€ Atom ์ œํ’ˆ๊ตฐ์˜ ํ”„๋กœ์„ธ์„œ๋ฅผ ์ œ์™ธํ•œ ๋Œ€๋ถ€๋ถ„์˜ ์ตœ์‹  Intel ํ”„๋กœ์„ธ์„œ์— ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. ARM ํ”„๋กœ์„ธ์„œ ์ค‘์—์„œ Cortex-A15, Cortex-A57, Cortex-A7*, Cortex-X1, Cortex-X2, Cortex-A710, Neoverse N1, Neoverse N2, Neoverse V1 ๋ฐ ์ผ๋ถ€ Cortex-R ์นฉ์ด ์ด ๋ฌธ์ œ์˜ ์˜ํ–ฅ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฐ๊ตฌ์— ๋”ฐ๋ฅด๋ฉด ์ด ์ทจ์•ฝ์ ์€ AMD ํ”„๋กœ์„ธ์„œ์—๋Š” ๋‚˜ํƒ€๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๋ฅผ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด ์ทจ์•ฝ์ ์„ ์ฐจ๋‹จํ•˜๊ธฐ ์œ„ํ•œ ์—ฌ๋Ÿฌ ์†Œํ”„ํŠธ์›จ์–ด ๋ฐฉ๋ฒ•์ด ์ œ์•ˆ๋˜์—ˆ์œผ๋ฉฐ, ์ด๋Š” ํ–ฅํ›„ CPU ๋ชจ๋ธ์— ํ•˜๋“œ์›จ์–ด ๋ณดํ˜ธ ๊ธฐ๋Šฅ์ด ๋“ฑ์žฅํ•˜๊ธฐ ์ „์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

eBPF ํ•˜์œ„ ์‹œ์Šคํ…œ์„ ํ†ตํ•œ ๊ณต๊ฒฉ์„ ์ฐจ๋‹จํ•˜๋ ค๋ฉด "/proc/sys/kernel/unprivileged_bpf_disabled" ํŒŒ์ผ์— 1์„ ์“ฐ๊ฑฐ๋‚˜ "sysctl -w kernel" ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์—ฌ ๊ถŒํ•œ ์—†๋Š” ์‚ฌ์šฉ์ž๊ฐ€ eBPF ํ”„๋กœ๊ทธ๋žจ์„ ๋‹ค์šด๋กœ๋“œํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. unprivileged_bpf_disabled=1โ€์ž…๋‹ˆ๋‹ค. ๊ฐ€์ ฏ ๊ณต๊ฒฉ์„ ์ฐจ๋‹จํ•˜๋ ค๋ฉด ์ž ์žฌ์ ์œผ๋กœ ์ถ”์ธก ์‹คํ–‰์œผ๋กœ ์ด์–ด์งˆ ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ ์˜์—ญ์—์„œ LFENCE ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ Linux ๋ฐฐํฌํŒ์˜ ๊ธฐ๋ณธ ๊ตฌ์„ฑ์—๋Š” ์—ฐ๊ตฌ์›์ด ์ž…์ฆํ•œ eBPF ๊ณต๊ฒฉ์„ ์ฐจ๋‹จํ•˜๋Š” ๋ฐ ์ถฉ๋ถ„ํ•œ ํ•„์ˆ˜ ๋ณดํ˜ธ ์กฐ์น˜๊ฐ€ ์ด๋ฏธ ํฌํ•จ๋˜์–ด ์žˆ๋‹ค๋Š” ์ ์€ ์ฃผ๋ชฉํ•  ๋งŒํ•ฉ๋‹ˆ๋‹ค. eBPF์— ๋Œ€ํ•œ ๊ถŒํ•œ ์—†๋Š” ์•ก์„ธ์Šค๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๊ธฐ ์œ„ํ•œ Intel์˜ ๊ถŒ์žฅ ์‚ฌํ•ญ๋„ Linux ์ปค๋„ 5.16 ์ดํ›„์˜ ๊ธฐ๋ณธ๊ฐ’์ด๋ฉฐ ์ด์ „ ๋ถ„๊ธฐ๋กœ ๋ฐฑํฌํŠธ๋  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

๊ฐœ๋…์ ์œผ๋กœ BHI๋Š” Spectre-v2 ๊ณต๊ฒฉ์˜ ํ™•์žฅ ๋ฒ„์ „์œผ๋กœ, ์ถ”๊ฐ€ ๋ณดํ˜ธ(Intel eIBRS ๋ฐ Arm CSV2)๋ฅผ ์šฐํšŒํ•˜๊ณ  ๋ฐ์ดํ„ฐ ์œ ์ถœ์„ ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด Branch History Buffer์—์„œ ๊ฐ’ ๋Œ€์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์˜ˆ์ธก์„ ๋†’์ด๊ธฐ ์œ„ํ•ด CPU์—์„œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ณผ๊ฑฐ ์ „ํ™˜ ์ด๋ ฅ์„ ๊ณ ๋ คํ•˜์—ฌ ์ •ํ™•๋„ ๋ถ„๊ธฐ. ๊ณต๊ฒฉ ์ค‘์— ์ „ํ™˜ ๊ธฐ๋ก์„ ์กฐ์ž‘ํ•˜์—ฌ ์ „ํ™˜์„ ์ž˜๋ชป ์˜ˆ์ธกํ•˜๊ณ  ํ•„์š”ํ•œ ๋ช…๋ น์„ ์ถ”์ธก์ ์œผ๋กœ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์กฐ๊ฑด์ด ์ƒ์„ฑ๋˜๋ฉฐ ๊ทธ ๊ฒฐ๊ณผ๋Š” ์บ์‹œ์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

Branch Target Buffer ๋Œ€์‹  Branch History Buffer๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ์ ์„ ์ œ์™ธํ•˜๋ฉด ์ƒˆ๋กœ์šด ๊ณต๊ฒฉ์€ Spectre-v2์™€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ๊ณต๊ฒฉ์ž์˜ ์ž„๋ฌด๋Š” ์ถ”์ธก ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ๋•Œ ์ •์˜๋œ ๋ฐ์ดํ„ฐ ์˜์—ญ์—์„œ ์ฃผ์†Œ๋ฅผ ๊ฐ€์ ธ์˜ค๋„๋ก ์กฐ๊ฑด์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ถ”๋ก ์  ๊ฐ„์ ‘ ์ ํ”„๋ฅผ ์ˆ˜ํ–‰ํ•œ ํ›„ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ฝ์€ ์ ํ”„ ์ฃผ์†Œ๋Š” ์บ์‹œ์— ๋‚จ์•„ ์žˆ์œผ๋ฉฐ, ๊ทธ ํ›„ ์บ์‹œ ๋‚ด์šฉ์„ ๊ฒฐ์ •ํ•˜๋Š” ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์บ์‹œ๋œ ์•ก์„ธ์Šค ์‹œ๊ฐ„๊ณผ ์บ์‹œ๋˜์ง€ ์•Š์€ ์•ก์„ธ์Šค ์‹œ๊ฐ„์˜ ๋ณ€ํ™”๋ฅผ ๋ถ„์„ํ•˜์—ฌ ์ด๋ฅผ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ.

์ถœ์ฒ˜ : opennet.ru

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