Google์€ ๋ธŒ๋ผ์šฐ์ €์—์„œ JavaScript๋ฅผ ์‹คํ–‰ํ•˜์—ฌ Spectre ์ทจ์•ฝ์  ์•…์šฉ์„ ์‹œ์—ฐํ•ฉ๋‹ˆ๋‹ค.

Google์€ ์ด์ „์— ์ถ”๊ฐ€๋œ ๋ณดํ˜ธ ๋ฐฉ๋ฒ•์„ ์šฐํšŒํ•˜์—ฌ ๋ธŒ๋ผ์šฐ์ €์—์„œ JavaScript ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ Spectre ํด๋ž˜์Šค ์ทจ์•ฝ์ ์„ ์•…์šฉํ•  ๊ฐ€๋Šฅ์„ฑ์„ ๋ณด์—ฌ์ฃผ๋Š” ์—ฌ๋Ÿฌ ์ต์Šคํ”Œ๋กœ์ž‡ ํ”„๋กœํ† ํƒ€์ž…์„ ๊ฒŒ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค. ์ต์Šคํ”Œ๋กœ์ž‡์€ ํ˜„์žฌ ํƒญ์—์„œ ์›น ์ฝ˜ํ…์ธ ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ํ”„๋กœ์„ธ์Šค์˜ ๋ฉ”๋ชจ๋ฆฌ์— ์•ก์„ธ์Šคํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ต์Šคํ”Œ๋กœ์ž‡์˜ ์ž‘๋™์„ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์œ„ํ•ด Leaky.page ์‚ฌ์ดํŠธ๊ฐ€ ์‹œ์ž‘๋˜์—ˆ๊ณ  ์ž‘์—… ๋…ผ๋ฆฌ๋ฅผ ์„ค๋ช…ํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ GitHub์— ๊ฒŒ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ œ์•ˆ๋œ ํ”„๋กœํ† ํƒ€์ž…์€ Linux ๋ฐ Chrome 7 ํ™˜๊ฒฝ์—์„œ Intel Core i6500-88U ํ”„๋กœ์„ธ์„œ๋ฅผ ํƒ‘์žฌํ•œ ์‹œ์Šคํ…œ์„ ๊ณต๊ฒฉํ•˜๊ธฐ ์œ„ํ•ด ์„ค๊ณ„๋˜์—ˆ์œผ๋ฉฐ, ๋‹ค๋ฅธ ํ™˜๊ฒฝ์—๋„ ์ต์Šคํ”Œ๋กœ์ž‡์„ ์ ์šฉํ•˜๋ ค๋ฉด ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์•…์šฉ ๋ฐฉ๋ฒ•์€ Intel ํ”„๋กœ์„ธ์„œ์—๋งŒ ๊ตญํ•œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ ์ ˆํ•˜๊ฒŒ ์ ์šฉํ•œ ํ›„์—๋Š” ARM ์•„ํ‚คํ…์ฒ˜ ๊ธฐ๋ฐ˜ Apple M1์„ ํฌํ•จํ•˜์—ฌ ๋‹ค๋ฅธ ์ œ์กฐ์—…์ฒด์˜ CPU๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‹œ์Šคํ…œ์—์„œ ์•…์šฉ์ด ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ํ™•์ธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์†Œํ•œ ์กฐ์ • ํ›„์—๋Š” Chromium ์—”์ง„์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ๋‹ค๋ฅธ ์šด์˜ ์ฒด์ œ ๋ฐ ๊ธฐํƒ€ ๋ธŒ๋ผ์šฐ์ €์—์„œ๋„ ์ต์Šคํ”Œ๋กœ์ž‡์ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

ํ‘œ์ค€ Chrome 88 ๋ฐ Intel Skylake ํ”„๋กœ์„ธ์„œ ๊ธฐ๋ฐ˜ ํ™˜๊ฒฝ์—์„œ ํ˜„์žฌ Chrome ํƒญ(๋ Œ๋”๋Ÿฌ ํ”„๋กœ์„ธ์Šค)์˜ ์›น ์ฝ˜ํ…์ธ  ์ฒ˜๋ฆฌ๋ฅผ ๋‹ด๋‹นํ•˜๋Š” ํ”„๋กœ์„ธ์Šค์—์„œ ์ดˆ๋‹น 1KB์˜ ์†๋„๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ์œ ์ถœ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ 8๋งˆ์ดํฌ๋กœ์ดˆ(5๋ฐ€๋ฆฌ์ดˆ)์˜ ์ •ํ™•๋„๋กœperformance.now() ํƒ€์ด๋จธ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์•ˆ์ •์„ฑ์„ ๋‚ฎ์ถ”๋Š” ๋Œ€์‹  ๋ˆ„์ถœ ์†๋„๋ฅผ 0.005kB/s๋กœ ์ฆ๊ฐ€์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ์ต์Šคํ”Œ๋กœ์ž‡๊ณผ ๊ฐ™์€ ๋Œ€์ฒด ํ”„๋กœํ† ํƒ€์ž…์ด ๊ฐœ๋ฐœ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. . ์ดˆ๋‹น ์•ฝ 60๋ฐ”์ดํŠธ์˜ ์†๋„๋กœ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์˜ ๋ฉ”๋ชจ๋ฆฌ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” XNUMX๋ฐ€๋ฆฌ์ดˆ์˜ ํƒ€์ด๋จธ ์ •ํ™•๋„๋กœ ์ž‘๋™ํ•˜๋Š” ๋ณ€ํ˜•๋„ ์ค€๋น„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๊ณต๊ฐœ๋œ ๋ฐ๋ชจ ์ฝ”๋“œ๋Š” ์„ธ ๋ถ€๋ถ„์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ๋ถ€๋ถ„์€ CPU ๋ช…๋ น์˜ ์ถ”์ธก ์‹คํ–‰ ๊ฒฐ๊ณผ๋กœ ํ”„๋กœ์„ธ์„œ ์บ์‹œ์— ๋‚จ์•„ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต์›ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์ž‘์—…์˜ ์‹คํ–‰ ์‹œ๊ฐ„์„ ์ถ”์ •ํ•˜๊ธฐ ์œ„ํ•ด ํƒ€์ด๋จธ๋ฅผ ๋ณด์ •ํ•ฉ๋‹ˆ๋‹ค. ๋‘ ๋ฒˆ์งธ ๋ถ€๋ถ„์€ JavaScript ๋ฐฐ์—ด์„ ํ• ๋‹นํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ๋ ˆ์ด์•„์›ƒ์„ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

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

์ œ์•ˆ๋œ ํ™œ์šฉ ๊ธฐ์ˆ ์€ Performance.now() API๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ณ ์ •๋ฐ€ ํƒ€์ด๋จธ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ์— ๋ฐฐ์—ด์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” SharedArrayBuffer ์œ ํ˜•์„ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ต์Šคํ”Œ๋กœ์ž‡์—๋Š” ์ถ”์ธก์„ฑ ์ฝ”๋“œ ์‹คํ–‰์„ ์ œ์–ดํ•˜๋Š” โ€‹โ€‹Spectre ๊ฐ€์ ฏ๊ณผ ์ถ”์ธก์„ฑ ์‹คํ–‰ ์ค‘์— ์บ์‹œ์— ๋“ค์–ด๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ํ™•์ธํ•˜๋Š” ๋ถ€์ฑ„๋„ ๋ˆ„์ถœ ๋ถ„์„๊ธฐ๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

๊ฐ€์ ฏ์€ JavaScript ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„๋ฉ๋‹ˆ๋‹ค. ์ด ๋ฐฐ์—ด์—์„œ๋Š” ๋ฒ„ํผ ๊ฒฝ๊ณ„ ์™ธ๋ถ€ ์˜์—ญ์— ์•ก์„ธ์Šคํ•˜๋ ค๋Š” ์‹œ๋„๊ฐ€ ์ด๋ฃจ์–ด์ง€๋ฉฐ ์ปดํŒŒ์ผ๋Ÿฌ(ํ”„๋กœ์„ธ์„œ, ์•ž์„ ๋‚ด๋‹ค๋ณด๋Š” ํ”„๋กœ์„ธ์„œ)๊ฐ€ ์ถ”๊ฐ€ํ•œ ๋ฒ„ํผ ํฌ๊ธฐ ํ™•์ธ์œผ๋กœ ์ธํ•ด ๋ถ„๊ธฐ ์˜ˆ์ธก ๋ธ”๋ก์˜ ์ƒํƒœ์— ์˜ํ–ฅ์„ ์ค๋‹ˆ๋‹ค. , ์ถ”๋ก ์ ์œผ๋กœ ์•ก์„ธ์Šค๋ฅผ ์ˆ˜ํ–‰ํ•˜์ง€๋งŒ ํ™•์ธ ํ›„ ์ƒํƒœ๋ฅผ ๋กค๋ฐฑํ•ฉ๋‹ˆ๋‹ค. ํƒ€์ด๋จธ ์ •ํ™•๋„๊ฐ€ ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์€ ์กฐ๊ฑด์—์„œ ์บ์‹œ์˜ ๋‚ด์šฉ์„ ๋ถ„์„ํ•˜๊ธฐ ์œ„ํ•ด ํ”„๋กœ์„ธ์„œ์—์„œ ์‚ฌ์šฉํ•˜๋Š” Tree-PLRU ์บ์‹œ ์ œ๊ฑฐ ์ „๋žต์„ ์†์ด๊ณ  ์‚ฌ์ดํด ์ˆ˜๋ฅผ ๋Š˜๋ ค์„œ ๋ฐ˜ํ™˜ ์‹œ ์‹œ๊ฐ„ ์ฐจ์ด๋ฅผ ํฌ๊ฒŒ ๋Š˜๋ฆด ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค. ์บ์‹œ์˜ ๊ฐ’๊ณผ ์บ์‹œ์— ๊ฐ’์ด ์—†์„ ๋•Œ.

Google์€ Spectre ํด๋ž˜์Šค์˜ ์ทจ์•ฝ์ ์„ ์ด์šฉํ•œ ๊ณต๊ฒฉ์˜ ํ˜„์‹ค์„ฑ์„ ๋ณด์—ฌ์ฃผ๊ณ  ์›น ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ทธ๋Ÿฌํ•œ ๊ณต๊ฒฉ์œผ๋กœ ์ธํ•œ ์œ„ํ—˜์„ ์ตœ์†Œํ™”ํ•˜๋Š” ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜๋„๋ก ์žฅ๋ คํ•˜๊ธฐ ์œ„ํ•ด ํ”„๋กœํ† ํƒ€์ž… ์ต์Šคํ”Œ๋กœ์ž‡์„ ๋ฐœํ‘œํ–ˆ์Šต๋‹ˆ๋‹ค. ๋™์‹œ์— Google์€ ์ œ์•ˆ๋œ ํ”„๋กœํ† ํƒ€์ž…์„ ๋Œ€ํญ ์ˆ˜์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ์‹œ์—ฐ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋„๋ฆฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฒ”์šฉ ์ต์Šคํ”Œ๋กœ์ž‡์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ๋ฏฟ์Šต๋‹ˆ๋‹ค.

์œ„ํ—˜์„ ์ค„์ด๊ธฐ ์œ„ํ•ด ์‚ฌ์ดํŠธ ์†Œ์œ ์ž๋Š” ์ตœ๊ทผ ๊ตฌํ˜„๋œ COOP(Cross-Origin Opener Policy), COEP(Cross-Origin Embedder Policy), CORP(Cross-Origin Resource Policy), ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๊ฐ€์ ธ์˜ค๊ธฐ ์š”์ฒญ, X-Frame-Options, X -Content-Type-Options ๋ฐ SameSite ์ฟ ํ‚ค. ์ด๋Ÿฌํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์€ ๊ณต๊ฒฉ์œผ๋กœ๋ถ€ํ„ฐ ์ง์ ‘์ ์œผ๋กœ ๋ณดํ˜ธํ•˜์ง€๋Š” ์•Š์ง€๋งŒ ๊ณต๊ฒฉ์ž์˜ JavaScript ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค๋กœ ์‚ฌ์ดํŠธ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ˆ„์ถœ๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(๋ˆ„์ถœ์€ ๊ณต๊ฒฉ์ž์˜ ์ฝ”๋“œ ์™ธ์— ๋ฐ์ดํ„ฐ๊ฐ€ ํ˜„์žฌ ํ”„๋กœ์„ธ์Šค์˜ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค). ๊ฐ™์€ ํƒญ์—์„œ ์—ด๋ฆฐ ๋‹ค๋ฅธ ์‚ฌ์ดํŠธ์—์„œ). ์ฃผ์š” ์•„์ด๋””์–ด๋Š” ์‹ ๋ขฐํ•  ์ˆ˜ ์—†๋Š” ์†Œ์Šค(์˜ˆ: iframe์„ ํ†ตํ•ด ํฌํ•จ๋จ)์—์„œ ์–ป์€ ์ œXNUMX์ž ์ฝ”๋“œ์™€ ์‚ฌ์ดํŠธ ์ฝ”๋“œ ์‹คํ–‰์„ ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค์—์„œ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.



์ถœ์ฒ˜ : opennet.ru

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