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