๐Ÿ”’ Security

Spectre/Meltdown ์ƒ์„ธ

๊ฐœ์š”

Spectre(์ŠคํŽ™ํ„ฐ)์™€ Meltdown(๋ฉœํŠธ๋‹ค์šด)์€ 2018๋…„ 1์›” ๊ณต๊ฐœ๋œ ํ˜„๋Œ€ ํ”„๋กœ์„ธ์„œ์˜ ์ถ”๋ก  ์‹คํ–‰(Speculative Execution)๊ณผ ์บ์‹œ ์‚ฌ์ด๋“œ ์ฑ„๋„์„ ์•…์šฉํ•œ ํ•˜๋“œ์›จ์–ด ๋ณด์•ˆ ์ทจ์•ฝ์ ์ด๋‹ค. ๋‘ ์ทจ์•ฝ์ ์€ CPU์˜ ๋ช…๋ น์–ด ํŒŒ์ดํ”„๋ผ์ธ๊ณผ ๋ธŒ๋žœ์น˜ ์˜ˆ์ธก ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์ด์šฉํ•ด ๊ถŒํ•œ์ด ์—†๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์˜ ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์œ ์ถœํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, Intel x86 ํ”„๋กœ์„ธ์„œ๋ฅผ ๋น„๋กฏํ•ด AMD, ARM ๊ธฐ๋ฐ˜ ํ”„๋กœ์„ธ์„œ๊นŒ์ง€ ๊ด‘๋ฒ”์œ„ํ•˜๊ฒŒ ์˜ํ–ฅ์„ ๋ฏธ์ณค๋‹ค. Meltdown์€ out-of-order ์‹คํ–‰๊ณผ ๊ถŒํ•œ ๊ฒ€์‚ฌ ์‚ฌ์ด์˜ race condition์„ ์•…์šฉํ•ด ์ปค๋„ ๋ฉ”๋ชจ๋ฆฌ์— ์ง์ ‘ ์ ‘๊ทผํ•˜๋Š” ๋ฐ˜๋ฉด, Spectre๋Š” ๋ธŒ๋žœ์น˜ ์˜ˆ์ธก๊ธฐ๋ฅผ ์˜ค์ธ์กฐ์ž‘ํ•˜์—ฌ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์˜ ์ฃผ์†Œ ๊ณต๊ฐ„์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•œ๋‹ค.

2018๋…„ ์ดํ›„ CPU ์„ค๊ณ„์˜ ๊ทผ๋ณธ์ ์ธ ๋ฌธ์ œ๋กœ ๋ถ€์ƒํ•˜์˜€์œผ๋ฉฐ, ์†Œํ”„ํŠธ์›จ์–ด ํŒจ์น˜์™€ ๋งˆ์ดํฌ๋กœ์ฝ”๋“œ ์—…๋ฐ์ดํŠธ, ๊ทธ๋ฆฌ๊ณ  ํ•˜๋“œ์›จ์–ด ๋ฆฌ๋””์ž์ธ์ด ๋ณ‘ํ–‰๋˜์—ˆ๋‹ค. ์ด ๋ฌธ์„œ๋Š” Spectre์™€ Meltdown์˜ ๋ฉ”์ปค๋‹ˆ์ฆ˜, ๋ณ€ํ˜•(variant), ์˜ํ–ฅ ๋ฒ”์œ„, ๋ฐฉ์–ด ๊ธฐ์ˆ , ๊ทธ๋ฆฌ๊ณ  ๊ด€๋ จ ๋ณด์•ˆ ์ทจ์•ฝ์ ๋“ค์„ ์ƒ์„ธํžˆ ๋ถ„์„ํ•œ๋‹ค.

ํ•ต์‹ฌ ๊ฐœ๋…

์ถ”๋ก  ์‹คํ–‰ (Speculative Execution)

ํ˜„๋Œ€ ํ”„๋กœ์„ธ์„œ๋Š” ๋ถ„๊ธฐ ๋ช…๋ น์–ด์˜ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  ๋ฏธ๋ฆฌ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚จ๋‹ค. ๋ธŒ๋žœ์น˜ ์˜ˆ์ธก๊ธฐ(Branch Predictor)๊ฐ€ ๋ถ„๊ธฐ์˜ ๊ฒฐ๊ณผ๋ฅผ ์˜ˆ์ธกํ•˜๋ฉด, CPU๋Š” ์˜ˆ์ธก๋œ ๊ฒฝ๋กœ์˜ ๋ช…๋ น์–ด๋ฅผ ์ถ”๋ก ์ ์œผ๋กœ ์‹คํ–‰ํ•œ๋‹ค. ๋งŒ์•ฝ ์˜ˆ์ธก์ด ์˜ฌ๋ฐ”๋ฅด๋ฉด ๊ทธ๋Œ€๋กœ ๊ฒฐ๊ณผ๊ฐ€ ์ปค๋ฐ‹๋˜์–ด ์„ฑ๋Šฅ ์ด๋“์ด ๋ฐœ์ƒํ•˜์ง€๋งŒ, ์˜ˆ์ธก์ด ํ‹€๋ฆฌ๋ฉด ์‹คํ–‰๋œ ๊ฒฐ๊ณผ๋Š” ํ๊ธฐ๋œ๋‹ค. ๋ฌธ์ œ๋Š” ์ถ”๋ก  ์‹คํ–‰ ๊ณผ์ •์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ(cache line ๋กœ๋“œ, TLB ์—…๋ฐ์ดํŠธ ๋“ฑ)๊ฐ€ ํ๊ธฐ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ์ด๋‹ค.

์บ์‹œ ์‚ฌ์ด๋“œ ์ฑ„๋„ (Cache Side-Channel)

์บ์‹œ์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋Š” ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ง์ ‘ ์ฝ๋Š” ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ๋น ๋ฅด๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ณต๊ฒฉ์ž๋Š” ํŠน์ • ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ์— ๋Œ€ํ•œ ์ ‘๊ทผ ์‹œ๊ฐ„(timing)์„ ์ธก์ •ํ•˜์—ฌ ํ•ด๋‹น ๋ฐ์ดํ„ฐ๊ฐ€ ์บ์‹œ์— ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๊ถŒํ•œ์ด ์—†๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์˜ ๋ฐ์ดํ„ฐ ๊ฐ’์„ ์œ ์ถ”ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ธŒ๋žœ์น˜ ์˜ˆ์ธก๊ธฐ ์˜ค์ธ์กฐ์ž‘ (Branch Predictor Poisoning)

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

์ปค๋„/์œ ์ € ๋ฉ”๋ชจ๋ฆฌ ๊ฒฉ๋ฆฌ (Kernel/User Memory Isolation)

์šด์˜์ฒด์ œ๋Š” ๋ณดํ˜ธ ๋ ˆ๋ฒจ(Protection Ring)์„ ํ†ตํ•ด ์ปค๋„ ์˜์—ญ๊ณผ ์œ ์ € ์˜์—ญ์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ฒฉ๋ฆฌํ•œ๋‹ค. ์œ ์ € ํ”„๋กœ์„ธ์Šค๋Š” ์ปค๋„ ๋ฉ”๋ชจ๋ฆฌ์— ์ง์ ‘ ์ ‘๊ทผํ•  ์ˆ˜ ์—†์œผ๋ฉฐ, ์‹œ์Šคํ…œ ์ฝœ์„ ํ†ตํ•ด์„œ๋งŒ ์ปค๋„ ์„œ๋น„์Šค๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. Meltdown์€ ์ด ๊ฒฉ๋ฆฌ๋ฅผ ์šฐํšŒํ•˜์—ฌ ์ปค๋„ ๋ฉ”๋ชจ๋ฆฌ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์œ ์ € ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ฝ์„ ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ ๋‹ค.

์™„ํ™” ๊ธฐ๋ฒ•๊ณผ ์ถ”๋ก  ๊ฒฝ๊ณ„ ์ œ์–ด

Spectre์™€ Meltdown ๋Œ€์‘์€ ๋‹จ์ผ ํŒจ์น˜๋กœ ๋๋‚˜์ง€ ์•Š๋Š”๋‹ค. Meltdown์€ KPTI๋กœ ์ปค๋„ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” ๋งคํ•‘์„ ๋ถ„๋ฆฌํ•ด ์œ ์ € ๋ชจ๋“œ์—์„œ ์ปค๋„ ์ฃผ์†Œ๊ฐ€ ์ถ”๋ก  ๊ฒฝ๋กœ์— ๋…ธ์ถœ๋˜๋Š” ํญ์„ ์ค„์ด๊ณ , Spectre๋Š” retpoline, IBRS/eIBRS, IBPB, STIBP, LFENCE, array_index_nospec() ๊ฐ™์€ ์ œ์–ด ํ๋ฆ„ ๋ฐ ์ธ๋ฑ์Šค ์ •ํ™” ๊ธฐ๋ฒ•์„ ์กฐํ•ฉํ•ด ์‚ฌ์šฉํ•œ๋‹ค. ์ตœ๊ทผ ์ปค๋„์€ /sys/devices/system/cpu/vulnerabilities/ ์•„๋ž˜ ์ƒํƒœ ํŒŒ์ผ๋กœ ์™„ํ™” ์ ์šฉ ์—ฌ๋ถ€๋ฅผ ๋…ธ์ถœํ•˜๋ฏ€๋กœ, ์‹ค์ œ ์šด์˜ ํ™˜๊ฒฝ์—์„œ๋Š” ์ทจ์•ฝ์  ์กด์žฌ ์—ฌ๋ถ€๋ณด๋‹ค ํ™œ์„ฑํ™”๋œ ์™„ํ™” ์กฐํ•ฉ๊ณผ ์„ฑ๋Šฅ ๋น„์šฉ์„ ํ•จ๊ป˜ ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค.

๋น„๊ต/๋ถ„์„

Spectre vs Meltdown ๋น„๊ตํ‘œ

ํ•ญ๋ชฉ Meltdown Spectre
CVE CVE-2017-5754 (RDCL) CVE-2017-5753 (V1), CVE-2017-5715 (V2)
๋ฉ”์ปค๋‹ˆ์ฆ˜ Out-of-order ์‹คํ–‰๊ณผ ๊ถŒํ•œ ๊ฒ€์‚ฌ์˜ race condition ๋ธŒ๋žœ์น˜ ์˜ˆ์ธก๊ธฐ ์˜ค์ธ์กฐ์ž‘์„ ํ†ตํ•œ ์ถ”๋ก  ์‹คํ–‰
์˜ํ–ฅ ํ”„๋กœ์„ธ์„œ Intel x86 (1995~), IBM Power, ARM Cortex-A75 Intel, AMD, ARM (๋ธŒ๋žœ์น˜ ์˜ˆ์ธก๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฑฐ์˜ ๋ชจ๋“  ํ”„๋กœ์„ธ์„œ)
์˜ํ–ฅ ๋ฒ”์œ„ ์ปค๋„ ๋ฉ”๋ชจ๋ฆฌ ์ง์ ‘ ์ฝ๊ธฐ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์˜ ์ฃผ์†Œ ๊ณต๊ฐ„์—์„œ ๋ฐ์ดํ„ฐ ์ถ”์ถœ
๊ณต๊ฒฉ ๋‚œ์ด๋„ ๋น„๊ต์  ์‰ฌ์›€ (๋‹จ์ผ ํ”„๋กœ์„ธ์Šค๋กœ ๊ฐ€๋Šฅ) ์ƒ๋Œ€์ ์œผ๋กœ ์–ด๋ ค์›€ (์ •๋ฐ€ํ•œ ํƒ€์ด๋ฐ ์ธก์ • ํ•„์š”)
์†Œํ”„ํŠธ์›จ์–ด ๋ฐฉ์–ด KPTI (์ปค๋„ ํŽ˜์ด๋ธ” ํ…Œ์ด๋ธ” ๊ฒฉ๋ฆฌ) retpoline, IBRS, stibp, SSBD
ํ•˜๋“œ์›จ์–ด ์ˆ˜์ • Intel ์นฉ ๋ฆฌ๋””์ž์ธ (2018๋…„ ํ•˜๋ฐ˜๊ธฐ~) ์ƒˆ ๋ช…๋ น์–ด(microcode), ํŒŒํ‹ฐ์…”๋‹
์„ฑ๋Šฅ ์˜ํ–ฅ 5~30% (์›Œํฌ๋กœ๋“œ์— ๋”ฐ๋ผ ์ฐจ์ด) 2~14% (8์„ธ๋Œ€ ์ฝ”์–ด ๊ธฐ์ค€)
๊ฒ€์ถœ ๊ฐ€๋Šฅ์„ฑ ๋ถˆ๊ฐ€๋Šฅ (์ „ํ†ต์  ๋กœ๊ทธ ๋ฏธ๊ธฐ๋ก) ์–ด๋ ค์›€ (์‹ค์‹œ๊ฐ„ ML ๊ฐ์ง€ ์‹œ๋„ ์ค‘)

Spectre ๋ณ€ํ˜• ๋น„๊ตํ‘œ

๋ณ€ํ˜• ์ด๋ฆ„ CVE ๋ฉ”์ปค๋‹ˆ์ฆ˜ ์˜ํ–ฅ
V1 Bounds Check Bypass CVE-2017-5753 ์กฐ๊ฑด๋ถ€ ๋ถ„๊ธฐ ์˜ค์ธ์กฐ์ž‘์œผ๋กœ ๊ฒฝ๊ณ„ ๊ฒ€์‚ฌ ์šฐํšŒ ๋ฐฐ์—ด ๊ฒฝ๊ณ„ ๋ฐ”๊นฅ ๋ฉ”๋ชจ๋ฆฌ ์ฝ๊ธฐ
V2 Branch Target Injection CVE-2017-5715 ๊ฐ„์ ‘ ๋ถ„๊ธฐ ์˜ˆ์ธก๊ธฐ ์˜ค์ธ์กฐ์ž‘ ์ž„์˜ ์ฃผ์†Œ๋กœ ๋ถ„๊ธฐ ์œ ๋„
V1.1 Bounds Check Bypass Store CVE-2018-3693 V1์˜ ์“ฐ๊ธฐ ๋ณ€ํ˜• ๊ฒฝ๊ณ„ ๋ฐ”๊นฅ ์“ฐ๊ธฐ ๊ฐ€๋Šฅ
V1.2 Read-only Protection Bypass - ์ฝ๊ธฐ ์ „์šฉ ๋ณดํ˜ธ ์šฐํšŒ ์ฝ๊ธฐ ์ „์šฉ ๋ฉ”๋ชจ๋ฆฌ ์“ฐ๊ธฐ
V3a Rogue System Register Read CVE-2018-3640 ์‹œ์Šคํ…œ ๋ ˆ์ง€์Šคํ„ฐ ์ฝ๊ธฐ MSR ๋“ฑ ์‹œ์Šคํ…œ ๋ ˆ์ง€์Šคํ„ฐ ๋ฐ์ดํ„ฐ ์œ ์ถœ
V4 Speculative Store Bypass CVE-2018-3639 ์Šคํ† ์–ด ๋ฒ„ํผ์˜ ์ถ”๋ก ์  ์ฝ๊ธฐ ๋ฉ”๋ชจ๋ฆฌ ๊ฐ’ ์œ ์ถ”
V5 SpectreRSB - RSB(Return Stack Buffer) ์˜ค์ธ์กฐ์ž‘ ํ•จ์ˆ˜ ๋ฐ˜ํ™˜ ์ฃผ์†Œ ์กฐ์ž‘
BHI Branch History Injection CVE-2022-0001, CVE-2022-0002 BHB๋ฅผ ์˜ค์—ผ์‹œ์ผœ ๊ฐ„์ ‘ ๋ถ„๊ธฐ ์˜ˆ์ธก ๋ณด์กฐ ์ •๋ณด ์กฐ์ž‘ eIBRS ํ™˜๊ฒฝ์—์„œ๋„ ์ถ”๊ฐ€ ์™„ํ™” ํ•„์š”

๋™์ž‘ ์›๋ฆฌ

Meltdown ๊ณต๊ฒฉ ํ๋ฆ„

Meltdown ๊ณต๊ฒฉ ํ๋ฆ„๋„

Meltdown ๊ณต๊ฒฉ์€ ๋‹ค์Œ ๋‹จ๊ณ„๋กœ ์ง„ํ–‰๋œ๋‹ค:

  1. ๋ช…๋ น์–ด ์Šค์ผ€์ค„๋ง: CPU๊ฐ€ ์œ ์ € ํ”„๋กœ์„ธ์Šค์˜ ๋ช…๋ น์–ด๋ฅผ ๋งŒ๋‚˜๋ฉด, ํ•ด๋‹น ๋ช…๋ น์–ด๋Š” out-of-order ์‹คํ–‰์„ ์œ„ํ•ด ์Šค์ผ€์ค„๋Ÿฌ์— ์˜ํ•ด ์‹คํ–‰ ์œ ๋‹›์œผ๋กœ ๋””์ŠคํŒจ์น˜๋œ๋‹ค. ์ด๋•Œ ๊ถŒํ•œ ๊ฒ€์‚ฌ์™€ ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ์ด ๋ณ‘๋ ฌ๋กœ ์ˆ˜ํ–‰๋œ๋‹ค.

  2. ๊ถŒํ•œ ๊ฒ€์‚ฌ ์ „ ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ: CPU๋Š” ๊ถŒํ•œ ๊ฒ€์‚ฌ๊ฐ€ ์™„๋ฃŒ๋˜๊ธฐ ์ „์— ์ถ”๋ก ์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ์— ์ ‘๊ทผํ•œ๋‹ค. ๋งŒ์•ฝ ํ•ด๋‹น ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๊ฐ€ ์ปค๋„ ์˜์—ญ์— ์žˆ๋‹ค๋ฉด, ๋ฐ์ดํ„ฐ๋Š” ์บ์‹œ์— ๋กœ๋“œ๋œ๋‹ค.

  3. ๊ถŒํ•œ ๊ฒ€์‚ฌ ์‹คํŒจ์™€ ํ๊ธฐ: ๊ถŒํ•œ ๊ฒ€์‚ฌ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ํ•ด๋‹น ์ ‘๊ทผ์€ ๊ฑฐ๋ถ€๋˜๊ณ , ์ถ”๋ก ์ ์œผ๋กœ ์‹คํ–‰๋œ ๋ช…๋ น์–ด์˜ ๊ฒฐ๊ณผ๋Š” ํ๊ธฐ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋ฏธ ๋กœ๋“œ๋œ ์บ์‹œ ๋ฐ์ดํ„ฐ๋Š” ๋‚จ์•„์žˆ๋‹ค.

  4. ํƒ€์ด๋ฐ ๊ณต๊ฒฉ: ๊ณต๊ฒฉ์ž๋Š” ์บ์‹œ ํžˆํŠธ/๋ฏธ์Šค๋ฅผ ์ธก์ •ํ•˜์—ฌ ํŠน์ • ์ฃผ์†Œ์˜ ๋ฐ์ดํ„ฐ ๊ฐ’์„ ์œ ์ถ”ํ•œ๋‹ค. ์บ์‹œ์— ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์œผ๋ฉด ์ ‘๊ทผ ์‹œ๊ฐ„์ด ์งง๊ณ , ์—†์œผ๋ฉด ๊ธธ๋‹ค.

  5. ๋ฐ˜๋ณต์„ ํ†ตํ•œ ๋ฐ์ดํ„ฐ ์ถ”์ถœ: ์ด ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜์—ฌ ์ปค๋„ ๋ฉ”๋ชจ๋ฆฌ์˜ ๋ฐ”์ดํŠธ ๋‹จ์œ„ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.

Spectre ๊ณต๊ฒฉ ํ๋ฆ„

Spectre ๊ณต๊ฒฉ ํ๋ฆ„๋„

Spectre ๊ณต๊ฒฉ์€ ๋‹ค์Œ ๋‹จ๊ณ„๋กœ ์ง„ํ–‰๋œ๋‹ค:

  1. ๋ธŒ๋žœ์น˜ ์˜ˆ์ธก๊ธฐ ํ•™์Šต: ๊ณต๊ฒฉ์ž๋Š” ๋ฐ˜๋ณต์ ์ธ ์ž‘์—…์„ ํ†ตํ•ด ๋ธŒ๋žœ์น˜ ์˜ˆ์ธก๊ธฐ(PHT, BTB ๋“ฑ)๋ฅผ ์›ํ•˜๋Š” ๋Œ€๋กœ ํ•™์Šต์‹œํ‚จ๋‹ค. ์ด๋Š” ๊ณต๊ฒฉ์ž๊ฐ€ ์ œ์–ดํ•˜๋Š” ์ฝ”๋“œ์—์„œ ๋ฐ˜๋ณต์ ์œผ๋กœ ํŠน์ • ํŒจํ„ด์˜ ๋ถ„๊ธฐ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์˜ˆ์ธก๊ธฐ์˜ ๋‚ด๋ถ€ ์ƒํƒœ๋ฅผ ์กฐ์ž‘ํ•œ๋‹ค.

  2. ํŠธ๋ฆฌ๊ฑฐ ์ฝ”๋“œ ์‹คํ–‰: ํ”ผํ•ด์ž๊ฐ€ ์‹คํ–‰ํ•˜๋Š” ์ฝ”๋“œ์—์„œ ์กฐ๊ฑด๋ถ€ ๋ถ„๊ธฐ ๋ช…๋ น์–ด๊ฐ€ ์‹คํ–‰๋œ๋‹ค. ์ด ๋ถ„๊ธฐ๋Š” ๊ณต๊ฒฉ์ž๊ฐ€ ์˜ค์ธ์กฐ์ž‘ํ•œ ์˜ˆ์ธก๊ธฐ์— ์˜ํ•ด ์ž˜๋ชป๋œ ๊ฒฝ๋กœ๋กœ ์˜ˆ์ธก๋œ๋‹ค.

  3. ์ถ”๋ก  ์‹คํ–‰: CPU๋Š” ์˜ˆ์ธก๋œ ๊ฒฝ๋กœ๋ฅผ ์ถ”๋ก ์ ์œผ๋กœ ์‹คํ–‰ํ•œ๋‹ค. ์ด ๊ณผ์ •์—์„œ ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ(์˜ˆ: ์–ด๋ ˆ์ด์˜ ๊ฒฝ๊ณ„ ๋ฐ”๊นฅ ๊ฐ’)์— ์ ‘๊ทผํ•˜๊ฒŒ ๋œ๋‹ค.

  4. ์บ์‹œ ์ƒํƒœ ๋ณ€๊ฒฝ: ์ถ”๋ก  ์‹คํ–‰์—์„œ ์ ‘๊ทผํ•œ ๋ฐ์ดํ„ฐ๋Š” ์บ์‹œ์— ๋กœ๋“œ๋œ๋‹ค. ์ด ์บ์‹œ ์ƒํƒœ ๋ณ€ํ™”๋Š” ์‚ฌ์ด๋“œ ์ฑ„๋„๋กœ ์‚ฌ์šฉ๋œ๋‹ค.

  5. ํƒ€์ด๋ฐ ์ธก์ • ๋ฐ ๋ฐ์ดํ„ฐ ์ถ”์ถœ: ๊ณต๊ฒฉ์ž๋Š” ํŠน์ • ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ์— ๋Œ€ํ•œ ์ ‘๊ทผ ์‹œ๊ฐ„์„ ์ธก์ •ํ•˜์—ฌ ์–ด๋–ค ๋ฐ์ดํ„ฐ๊ฐ€ ์บ์‹œ์— ๋กœ๋“œ๋˜์—ˆ๋Š”์ง€ ์œ ์ถ”ํ•˜๊ณ , ์ด๋ฅผ ํ†ตํ•ด ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•œ๋‹ค.

์žฅ๋‹จ์ 

Meltdown

์žฅ์ :
- ์†Œํ”„ํŠธ์›จ์–ด ํŒจ์น˜(KPTI)๋กœ ์ฆ‰์‹œ ์œ„ํ—˜์„ ํฌ๊ฒŒ ๋‚ฎ์ถœ ์ˆ˜ ์žˆ์Œ
- ๋น„๊ต์  ๋‹จ์ˆœํ•œ ๊ณต๊ฒฉ ๊ตฌํ˜„์œผ๋กœ ์—ฐ๊ตฌ์™€ ์žฌํ˜„์ด ์‰ฌ์›€
- ์ปค๋„/์œ ์ € ๊ฒฉ๋ฆฌ ๊ฒฝ๊ณ„์˜ ์•ฝ์ ์„ ๋ช…ํ™•ํžˆ ๋“œ๋Ÿฌ๋‚ด ์„ค๊ณ„ ๊ฐœ์„  ๊ณ„๊ธฐ๊ฐ€ ๋จ

๋‹จ์ :
- KPTI ์ ์šฉ ์‹œ ์„ฑ๋Šฅ ์˜ค๋ฒ„ํ—ค๋“œ ๋ฐœ์ƒ (5~30%)
- ์ปค๋„/์œ ์ € ๋ชจ๋“œ ์ „ํ™˜ ๋น„์šฉ ์ฆ๊ฐ€
- ๊ฐ€์ƒํ™” ํ™˜๊ฒฝ์—์„œ ์ถ”๊ฐ€์ ์ธ ์„ฑ๋Šฅ ์ €ํ•˜

Spectre

์žฅ์ :
- ๊ด‘๋ฒ”์œ„ํ•œ ํ”„๋กœ์„ธ์„œ ์˜ํ–ฅ์œผ๋กœ ์ถ”๋ก  ์‹คํ–‰ ์ „๋ฐ˜์˜ ์œ„ํ—˜์„ ๋“œ๋Ÿฌ๋ƒ„
- ๋‹ค์–‘ํ•œ ๋ณ€ํ˜• ๋ถ„์„์„ ํ†ตํ•ด ๋ธŒ๋žœ์น˜ ์˜ˆ์ธก๊ธฐ์™€ ๊ฒฉ๋ฆฌ ๊ฒฝ๊ณ„ ์—ฐ๊ตฌ๊ฐ€ ํฌ๊ฒŒ ์ง„์ „๋จ
- JavaScript, ์ƒŒ๋“œ๋ฐ•์Šค, VM ๋“ฑ ์—ฌ๋Ÿฌ ํ™˜๊ฒฝ์—์„œ ๊ณต๊ฒฉ ํ‘œ๋ฉด์„ ์ ๊ฒ€ํ•˜๊ฒŒ ๋งŒ๋“ฆ

๋‹จ์ :
- ์™„์ „ํ•œ ๋ฐฉ์–ด๊ฐ€ ์–ด๋ ค์›€ (๊ทผ๋ณธ์  ์„ค๊ณ„ ๋ฌธ์ œ)
- ์†Œํ”„ํŠธ์›จ์–ด ํŒจ์น˜์˜ ์„ฑ๋Šฅ ์˜ํ–ฅ
- ์ง€์†์ ์ธ ์ƒˆ๋กœ์šด ๋ณ€ํ˜• ๋ฐœ๊ฒฌ
- ๊ฒ€์ถœ์ด ๋งค์šฐ ์–ด๋ ค์›€

๊ด€๋ จ ๊ธฐ์ˆ 

์ฐธ๊ณ  ๋ฌธํ—Œ

  1. Kocher, P. et al. "Spectre Attacks: Exploiting Speculative Execution." IEEE S&P, 2019.
  2. Lipp, M. et al. "Meltdown: Reading Kernel Memory from User Space." USENIX Security, 2018.
  3. Horn, J. "Speculative Execution Side Effects Variants." Google Project Zero, 2018.
  4. Intel Corporation. "Microcode Update Guidance." Intel White Paper, 2018.
  5. Canella, C. et al. "A Systematic Evaluation of Transient Execution Attacks and Defenses." arXiv, 2019.
  6. Schwarz, M. et al. "Spectre Goes Mainstream: A Survey on Spectre and Related Transient Execution Attacks." IEEE TDSC, 2023.
  7. Intel Corporation. "Indirect Branch Restricted Speculation (IBRS)." Intel White Paper, 2018.
  8. Google Project Zero. "Retpoline: Binary Instrumentation for Branch Target Injection." 2018.
  9. Texas A&M University. "Spectre Attacks Cannot Be Detected by Typical Antivirus Software." 2021.
  10. North Carolina State University. "Machine Learning Detection of Transient Attacks." 2022.

๊ด€๋ จ ๋ฌธ์„œ

์šด์˜ ์ ๊ฒ€ ํฌ์ธํŠธ

  • Linux๋Š” /sys/devices/system/cpu/vulnerabilities/spectre_v1, spectre_v2์—์„œ ์™„ํ™” ์ƒํƒœ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
  • Spectre v2 ๋Œ€์‘์€ retpoline๋งŒ์ด ์•„๋‹ˆ๋ผ IBPB, STIBP, eIBRS, RSB stuffing, BHI ๋Œ€์‘๊นŒ์ง€ ์กฐํ•ฉํ•ด ํ•ด์„ํ•ด์•ผ ํ•œ๋‹ค.
  • Meltdown ๊ณ„์—ด์€ KPTI ์ ์šฉ ์—ฌ๋ถ€์™€ ๊ฐ€์ƒํ™” ํ™˜๊ฒฝ์˜ VM exit ๊ฒฝ๋กœ ๋น„์šฉ์„ ํ•จ๊ป˜ ๋ด์•ผ ํ•œ๋‹ค.

ํ•ต์‹ฌ ์ •๋ฆฌ

Spectre์™€ Meltdown์€ ํ˜„๋Œ€ ํ”„๋กœ์„ธ์„œ์˜ ์„ฑ๋Šฅ ์ตœ์ ํ™” ๋ฉ”์ปค๋‹ˆ์ฆ˜์ธ ์ถ”๋ก  ์‹คํ–‰๊ณผ ๋ธŒ๋žœ์น˜ ์˜ˆ์ธก์„ ์•…์šฉํ•œ ๋Œ€ํ‘œ์ ์ธ transient execution ์ทจ์•ฝ์ ์ด๋‹ค. Meltdown์€ out-of-order ์‹คํ–‰๊ณผ ๊ถŒํ•œ ๊ฒ€์‚ฌ ์‚ฌ์ด์˜ race condition์„ ํ†ตํ•ด ์ปค๋„ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ง์ ‘ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๋ฐ˜๋ฉด, Spectre๋Š” ๋ธŒ๋žœ์น˜ ์˜ˆ์ธก๊ธฐ๋ฅผ ์˜ค์ธ์กฐ์ž‘ํ•˜์—ฌ ๊ฑฐ์˜ ๋ชจ๋“  ํ˜„๋Œ€ ํ”„๋กœ์„ธ์„œ์—์„œ ๋‹ค๋ฅธ ๋ณด์•ˆ ๊ฒฝ๊ณ„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ๋‹ค. ์†Œํ”„ํŠธ์›จ์–ด ๋ฐฉ์–ด(KPTI, retpoline, IBRS/eIBRS, IBPB, STIBP ๋“ฑ)๋Š” ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ์„ฑ๋Šฅ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์ˆ˜๋ฐ˜๋˜๋ฉฐ, ํ•˜๋“œ์›จ์–ด ๋ฆฌ๋””์ž์ธ๊ณผ ์šด์˜์ฒด์ œ ์ฐจ์›์˜ ์™„ํ™” ์กฐํ•ฉ์ด ํ•จ๊ป˜ ํ•„์š”ํ•˜๋‹ค. ์ดํ›„์—๋„ BHI, Retbleed ๊ฐ™์€ ํŒŒ์ƒ ๊ณต๊ฒฉ์ด ์ด์–ด์กŒ๊ธฐ ๋•Œ๋ฌธ์—, ์‹ค์ œ ์šด์˜์—์„œ๋Š” ์ทจ์•ฝ์  ์ด๋ฆ„ ํ•˜๋‚˜๋ณด๋‹ค ํ˜„์žฌ CPU ๋งˆ์ดํฌ๋กœ์ฝ”๋“œ์™€ ์ปค๋„์ด ์–ด๋–ค ์™„ํ™” ์กฐํ•ฉ์„ ํ™œ์„ฑํ™”ํ–ˆ๋Š”์ง€๋ฅผ ์ ๊ฒ€ํ•˜๋Š” ๊ฒƒ์ด ๋” ์ค‘์š”ํ•˜๋‹ค.