SWAPGS - CPU ์ถ”์ธก ์‹คํ–‰ ๋ฉ”์ปค๋‹ˆ์ฆ˜์˜ ์ƒˆ๋กœ์šด ์ทจ์•ฝ์ 

๋น„ํŠธ๋””ํŽœ๋” ์—ฐ๊ตฌ์› ๋…ธ์ถœ๋œ ์ƒˆ๋กœ์šด ์ทจ์•ฝ์ (CVE-2019-1125) SWAPGS๋ผ๋Š” ์ด๋ฆ„์˜ ํ˜„๋Œ€ CPU์˜ ์ถ”์ธก ๋ช…๋ น์–ด ์‹คํ–‰ ๋ฉ”์ปค๋‹ˆ์ฆ˜์—์„œ ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ค๋Š” ํ”„๋กœ์„ธ์„œ ๋ช…๋ น์–ด์˜ ์ด๋ฆ„์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค. ์ทจ์•ฝ์  ๊ทธ๊ฒƒ์€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ๊ถŒํ•œ ์—†๋Š” ๊ณต๊ฒฉ์ž๊ฐ€ ์ปค๋„ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์˜ ๋‚ด์šฉ์„ ํ™•์ธํ•˜๊ฑฐ๋‚˜ ๊ฐ€์ƒ ๋จธ์‹ ์„ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์ œ ํ™•์ธ Intel ํ”„๋กœ์„ธ์„œ(x86_64) ๋ฐ ๋ถ€๋ถ„์ ์œผ๋กœ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋‹ค ์ฃผ์š” ๊ณต๊ฒฉ ๋ฒกํ„ฐ๊ฐ€ ๋‚˜ํƒ€๋‚˜์ง€ ์•Š๋Š” AMD ํ”„๋กœ์„ธ์„œ. Spectre ๋ฐ Meltdown ์ทจ์•ฝ์ ์— ๋Œ€์‘ํ•˜๊ธฐ ์œ„ํ•ด ์ด์ „์— ๊ตฌํ˜„๋œ ๋ฐฉ๋ฒ•์€ Intel ํ”„๋กœ์„ธ์„œ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ SWAPGS ๊ณต๊ฒฉ์œผ๋กœ๋ถ€ํ„ฐ ๋ณดํ˜ธํ•˜์ง€ ๋ชปํ•˜์ง€๋งŒ Linux, ChromeOS, Android ๋ฐ Windows์— ๋Œ€ํ•œ ์ˆ˜์ • ์‚ฌํ•ญ์€ ์ด๋ฏธ ์ œ์•ˆ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

ํ•ด๋‹น ์ทจ์•ฝ์ ์€ Spectre v1 ํด๋ž˜์Šค์— ์†ํ•˜๋ฉฐ ์ถ”์ธก์— ์˜ํ•œ ๋ช…๋ น ์‹คํ–‰ ์ดํ›„ ๋‚จ์€ ํ”„๋กœ์„ธ์„œ ์บ์‹œ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต์›ํ•œ๋‹ค๋Š” ์•„์ด๋””์–ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•ด ์ตœ์‹  CPU์˜ ๋ถ„๊ธฐ ์˜ˆ์ธก ์žฅ์น˜๋Š” ์‹คํ–‰๋  ๊ฐ€๋Šฅ์„ฑ์ด ๊ฐ€์žฅ ๋†’์€ ์ผ๋ถ€ ๋ช…๋ น์˜ ์„ ์ œ ์‹คํ–‰์„ ์‚ฌ์šฉํ•˜์ง€๋งŒ ์‹คํ–‰์„ ๊ฒฐ์ •ํ•˜๋Š” ๋ชจ๋“  ์š”์†Œ์˜ ๊ณ„์‚ฐ์„ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค(์˜ˆ: ๋ถ„๊ธฐ ์กฐ๊ฑด ๋˜๋Š” ์•ก์„ธ์Šค ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์ง€์ •๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ). ์•„์ง ๊ณ„์‚ฐ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค). ์˜ˆ์ธก์ด ํ™•์ธ๋˜์ง€ ์•Š์œผ๋ฉด ํ”„๋กœ์„ธ์„œ๋Š” ์ถ”์ธก ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ํ๊ธฐํ•˜์ง€๋งŒ, ๊ทธ ๋™์•ˆ ์ฒ˜๋ฆฌ๋œ ๋ฐ์ดํ„ฐ๋Š” ํ”„๋กœ์„ธ์„œ ์บ์‹œ์— ๋‚จ์•„ ์žˆ์œผ๋ฉฐ, ์•ก์„ธ์Šค ๋ณ€ํ™”๋ฅผ ๋ถ„์„ํ•˜๋Š” ์‚ฌ์ด๋“œ ์ฑ„๋„์„ ํ†ตํ•ด ์บ์‹œ์˜ ๋‚ด์šฉ์„ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ณต์›ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์บ์‹œ๋œ ๋ฐ์ดํ„ฐ์™€ ์บ์‹œ๋˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ์— ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„.

์ƒˆ๋กœ์šด ๊ณต๊ฒฉ์˜ ํŠน์ง•์€ ์ œ์–ด๊ฐ€ ์‚ฌ์šฉ์ž ๊ณต๊ฐ„์—์„œ OS ์ปค๋„(GS ์‚ฌ์šฉ์ž ๊ณต๊ฐ„์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ฐ’์€ ์ปค๋„์—์„œ ์ž‘์—… ์ค‘์— ์‚ฌ์šฉ๋˜๋Š” ๊ฐ’์œผ๋กœ ๋Œ€์ฒด๋ฉ๋‹ˆ๋‹ค. Linux ์ปค๋„์—์„œ GS๋Š” ์ปค๋„ ๋ฐ์ดํ„ฐ์— ์•ก์„ธ์Šคํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” per_cpu ํฌ์ธํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ , ์‚ฌ์šฉ์ž ๊ณต๊ฐ„์€ TLS(Thread Local Storage)์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

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

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

๋ฆฌ๋ˆ…์Šค ์ปค๋„์— ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค ์ œ๊ฑฐ ๋‹ค๋ฅธ Spectre v1 ํด๋ž˜์Šค ์ทจ์•ฝ์ ์˜ ์ˆ˜์ •๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ SWAPGS ๋ช…๋ น ํ˜ธ์ถœ ๋…ผ๋ฆฌ(์˜ˆ์ธก ์‹คํ–‰ ์ฐจ๋‹จ)๋ฅผ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. ์ถ”๊ฐ€๋œ ๋ณดํ˜ธ๋Š” ์ผ๋ฐ˜์ ์ธ ์›Œํฌ๋กœ๋“œ์˜ ์„ฑ๋Šฅ์— ์ตœ์†Œํ•œ์˜ ์˜ํ–ฅ์„ ๋ฏธ์น  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ๊ณต๊ฐ„๊ณผ ์ปค๋„ ๊ณต๊ฐ„ ์‚ฌ์ด์˜ ์ „ํ™˜ ๋‹จ๊ณ„์—์„œ ๋Œ€๊ธฐ ์‹œ๊ฐ„์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๊ณผ๋„ํ•œ ์‹œ์Šคํ…œ ํ˜ธ์ถœ์ด ๋ฐœ์ƒํ•˜๊ฑฐ๋‚˜ NMI ๋ฐ ์ธํ„ฐ๋ŸฝํŠธ๊ฐ€ ์ž์ฃผ ์ƒ์„ฑ๋˜๋Š” ๊ฒฝ์šฐ ์„ฑ๋Šฅ์ด ์ €ํ•˜๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ˆ˜์ •ํ•˜๋ ค๋ฉด ํ˜ธ์ŠคํŠธ ์‹œ์Šคํ…œ๊ณผ ๊ฒŒ์ŠคํŠธ ํ™˜๊ฒฝ ๋ชจ๋‘์— ์ปค๋„ ์—…๋ฐ์ดํŠธ๋ฅผ ์„ค์น˜ํ•œ ํ›„ ์‹œ์Šคํ…œ์„ ์žฌ๋ถ€ํŒ…ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Linux์—์„œ ๋ณดํ˜ธ๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด "nospectre_v1" ์˜ต์…˜์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด ์˜ต์…˜์€ SWAPGS ์ทจ์•ฝ์ ์„ ์ฐจ๋‹จํ•˜๋Š” ์กฐ์น˜๋„ ๋น„ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค. ์ˆ˜์ • ์‚ฌํ•ญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. ๋ฐ˜์  ์ด๋ฏธ ๋ฆด๋ฆฌ์Šค์— ํฌํ•จ๋œ Linux ์ปค๋„์šฉ 4.19.65, 5.2.7, 4.14.137, 4.9.188 ๋ฐ 4.4.188. Linux ๋ฐฐํฌํŒ์šฉ ์—…๋ฐ์ดํŠธ๋Š” ์•„์ง ์ถœ์‹œ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค(๋ฐ๋น„์•ˆ, RHEL, ํŽ˜๋„๋ผ, ์•„์น˜ ๋ฆฌ๋ˆ…์Šค, ์ˆ˜์„ธ/์˜คํ”ˆ์ˆ˜์„ธ, Ubuntu). Windows์—์„œ๋Š” ๋ฌธ์ œ๊ฐ€ ์กฐ์šฉํžˆ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. XNUMX์›” ์—…๋ฐ์ดํŠธ. ๊ตฌ๊ธ€ ํšŒ์‚ฌ ์ค€๋น„๋œ ChromeOS์™€ ํ•จ๊ป˜ ์ œ๊ณต๋˜๋Š” ์ปค๋„ 4.19์— ๋Œ€ํ•œ ์ˆ˜์ • ์‚ฌํ•ญ ๋ฐ Android.

Bitdefender์˜ ์—ฐ๊ตฌ์›์— ๋”ฐ๋ฅด๋ฉด Intel์€ ์ž‘๋…„ XNUMX์›”์— ์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ํ†ต๋ณด๋ฅผ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๋ฅผ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์œผ๋กœ ํ•ด๊ฒฐํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์œผ๋ฉฐ Microsoft, Google ๋ฐ Linux ์ปค๋„์˜ ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ณต๋™ ์ˆ˜์ • ๊ฐœ๋ฐœ์— ์ฐธ์—ฌํ–ˆ์Šต๋‹ˆ๋‹ค. Ivy Bridge ์ด์ „์˜ ๊ตฌํ˜• Intel ํ”„๋กœ์„ธ์„œ๋Š” ์ต์Šคํ”Œ๋กœ์ž‡์— ์‚ฌ์šฉ๋œ WRGSBASE ๋ช…๋ น์–ด์— ๋Œ€ํ•œ ์ง€์›์ด ๋ถ€์กฑํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ณต๊ฒฉํ•˜๊ธฐ๊ฐ€ ํ›จ์”ฌ ๋” ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ARM, POWER, SPARC, MIPS ๋ฐ RISC-V ์‹œ์Šคํ…œ์€ SWAPGS ๋ช…๋ น์„ ์ง€์›ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋ฌธ์ œ์˜ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋Š” ์ฃผ๋กœ Intel ํ”„๋กœ์„ธ์„œ ์†Œ์œ ์ž์—๊ฒŒ ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค.
AMD ์‹œ์Šคํ…œ์—์„œ๋Š” XNUMX์ฐจ ๊ณต๊ฒฉ ์‹œ๋‚˜๋ฆฌ์˜ค๋งŒ ์žฌํ˜„ํ•  ์ˆ˜ ์žˆ์—ˆ๋Š”๋ฐ, ์ด๋Š” ๋žœ๋ค ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์—์„œ ํŠน์ • ๊ฐ’์„ ์ฐพ๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” GS ๋ ˆ์ง€์Šคํ„ฐ์˜ ๊ธฐ๋ณธ ๊ฐ’์— ๋Œ€ํ•œ ์ถ”์ธก ์ฒ˜๋ฆฌ์— ๊ตญํ•œ๋๋‹ค. ์ด ๊ณต๊ฒฉ ์˜ต์…˜์„ ์ฐจ๋‹จํ•˜๋ ค๋ฉด ์ถฉ๋ถ„ํ•˜๋‹ค Spectre v1์— ๋Œ€ํ•œ ๊ธฐ์กด ๋ณดํ˜ธ ๋ฐฉ๋ฒ•.

์ถœ์ฒ˜ : opennet.ru

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