WebAssembly์ ์ ํ ๋ฉ๋ชจ๋ฆฌ ์ธ๊ทธ๋จผํธ ๋ณดํธ ๋ฉ์ปค๋์ฆ์ ์ดํด๋ณด๊ณ , ํฅ์๋ ๋ณด์ ๋ฐ ๊ฒฌ๊ณ ์ฑ์ ์ํ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ ์ ์ด์ ์ด์ ์ ๋ง์ถฅ๋๋ค. ๊ตฌํ, ์ด์ ๋ฐ ์ ์ธ๊ณ ๊ฐ๋ฐ์์ ๋ํ ์ํฅ์ ์์๋ณด์ธ์.
WebAssembly ์ ํ ๋ฉ๋ชจ๋ฆฌ ์ธ๊ทธ๋จผํธ ๋ณดํธ: ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ ์ ์ด ์ฌ์ธต ๋ถ์
WebAssembly(Wasm)๋ ์น ๋ธ๋ผ์ฐ์ ์์ ์๋ฒ ๋๋ ์์คํ ๋ฐ ์๋ฒ ์ธก ์ ํ๋ฆฌ์ผ์ด์ ์ ์ด๋ฅด๊ธฐ๊น์ง ๋ค์ํ ํ๊ฒฝ์์ ์คํํ ์ ์๋ ๊ณ ์ฑ๋ฅ, ํด๋ ๊ฐ๋ฅํ๊ณ ์์ ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๊ธฐ ์ํ ๊ฐ๋ ฅํ ๊ธฐ์ ๋ก ๋ถ์ํ์ต๋๋ค. WebAssembly ๋ณด์ ๋ชจ๋ธ์ ํต์ฌ ๊ตฌ์ฑ ์์๋ Wasm ๋ชจ๋์ด ์ ๊ทผํ ์ ์๋ ์ฐ์์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๋ธ๋ก์ธ ์ ํ ๋ฉ๋ชจ๋ฆฌ์ ๋๋ค. ์ด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ฌด๋จ ์ ๊ทผ์ผ๋ก๋ถํฐ ๋ณดํธํ๋ ๊ฒ์ WebAssembly ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณด์ ๋ฐ ๋ฌด๊ฒฐ์ฑ์ ๋ณด์ฅํ๋ ๋ฐ ๋งค์ฐ ์ค์ํฉ๋๋ค. ์ด ๊ธฐ์ฌ์์๋ WebAssembly์ ์ ํ ๋ฉ๋ชจ๋ฆฌ ์ธ๊ทธ๋จผํธ ๋ณดํธ ๋ฉ์ปค๋์ฆ์ ์์ธํ ์ดํด๋ณด๊ณ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ ์ ์ด ๋ฐ ์ ์ธ๊ณ ๊ฐ๋ฐ์์ ๋ํ ์ํฅ์ ์ด์ ์ ๋ง์ถฅ๋๋ค.
WebAssembly ์ ํ ๋ฉ๋ชจ๋ฆฌ ์ดํด
๋ฉ๋ชจ๋ฆฌ ์ธ๊ทธ๋จผํธ ๋ณดํธ์ ๋ค์ด๊ฐ๊ธฐ ์ ์ WebAssembly ์ ํ ๋ฉ๋ชจ๋ฆฌ์ ๊ธฐ๋ณธ ์ฌํญ์ ์ดํดํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
- ์ ํ ์ฃผ์ ๊ณต๊ฐ: Wasm ์ ํ ๋ฉ๋ชจ๋ฆฌ๋ 32๋นํธ ๋๋ 64๋นํธ(ํฅํ) ์ ํ ์ฃผ์๋ฅผ ์ฌ์ฉํ์ฌ ์ฃผ์๋ฅผ ์ง์ ํ๋ ๋จ์ผ ์ฐ์ ๋ฐ์ดํธ ๋ธ๋ก์ ๋๋ค. ์ด ์ฃผ์ ๊ณต๊ฐ์ ํธ์คํธ ํ๊ฒฝ์ ๋ฉ๋ชจ๋ฆฌ์ ๋ถ๋ฆฌ๋์ด ์์ต๋๋ค.
- ๋ฉ๋ชจ๋ฆฌ ์ธ์คํด์ค: WebAssembly ๋ชจ๋์ ํ๋ ์ด์์ ๋ฉ๋ชจ๋ฆฌ ์ธ์คํด์ค๋ฅผ ๊ฐ์ง ์ ์์ผ๋ฉฐ, ๊ฐ ์ธ์คํด์ค๋ ๋ณ๋์ ์ ํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๋ํ๋ ๋๋ค.
- ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ: ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฝ๊ฑฐ๋ ์ฐ๋ WebAssembly ๋ช ๋ น์ด(์: `i32.load`, `i32.store`)๋ ์ด ์ ํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ ๋ด์์ ์๋ํฉ๋๋ค.
ํต์ฌ ๊ณผ์ ๋ Wasm ๋ชจ๋์ด ์ ๊ทผ ๊ถํ์ด ์๋ ๋ฉ๋ชจ๋ฆฌ ์์น์๋ง ์ ๊ทผํ๋๋ก ๋ณด์ฅํ๋ ๊ฒ์ ๋๋ค. ์ ์ ํ ๋ณดํธ๊ฐ ์์ผ๋ฉด ์ ์ฑ ๋๋ ๋ฒ๊ทธ๊ฐ ์๋ ๋ชจ๋์ด ์์์ ๋ฉ๋ชจ๋ฆฌ ์์น๋ฅผ ์ฝ๊ฑฐ๋ ์ธ ์ ์์ด ๋ณด์ ์ทจ์ฝ์ฑ ๋๋ ์ ํ๋ฆฌ์ผ์ด์ ์ถฉ๋์ด ๋ฐ์ํ ์ ์์ต๋๋ค.
๋ฉ๋ชจ๋ฆฌ ์ธ๊ทธ๋จผํธ ๋ณดํธ์ ํ์์ฑ
WebAssembly์ ๋ฉ๋ชจ๋ฆฌ ์ธ๊ทธ๋จผํธ ๋ณดํธ๋ ๋ค์๊ณผ ๊ฐ์ ์ค์ํ ๋ณด์ ๋ฐ ์์ ์ฑ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ฒ์ ๋ชฉํ๋ก ํฉ๋๋ค.
- ๋ฒ์ ์ธ ์ ๊ทผ ๋ฐฉ์ง: Wasm ๋ชจ๋์ด ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๊ฒฝ๊ณ๋ฅผ ๋ฒ์ด๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฝ๊ฑฐ๋ ์ธ ์ ์๋๋ก ๋ณด์ฅํฉ๋๋ค. ์ด๋ ๋ฉ๋ชจ๋ฆฌ ์์ ์ ์ํ ๊ธฐ๋ณธ์ ์ธ ์๊ตฌ ์ฌํญ์ ๋๋ค.
- ๋ชจ๋ ๊ฒฉ๋ฆฌ: ์ฌ๋ฌ Wasm ๋ชจ๋์ด ๋์ผํ ํ๊ฒฝ์์ ์คํ๋๋ ๊ฒฝ์ฐ(์: ์ฌ๋ฌ Wasm ๊ตฌ์ฑ ์์๊ฐ ์๋ ์น ํ์ด์ง ๋๋ Wasm ๊ธฐ๋ฐ ์ด์ ์ฒด์ ) ๋ฉ๋ชจ๋ฆฌ ๋ณดํธ๋ ํ ๋ชจ๋์ด ๋ค๋ฅธ ๋ชจ๋์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ฐ์ญํ๋ ๊ฒ์ ๋ฐฉ์งํฉ๋๋ค.
- ํธ์คํธ ํ๊ฒฝ ๋ณดํธ: Wasm ๋ฉ๋ชจ๋ฆฌ ๋ณดํธ๋ Wasm ๋ชจ๋์ด ํธ์คํธ ํ๊ฒฝ(์: ๋ธ๋ผ์ฐ์ ๋๋ ์ด์ ์ฒด์ )์ ๋ฉ๋ชจ๋ฆฌ์ ์ ๊ทผํ๊ฑฐ๋ ์์ ํ๋ ๊ฒ์ ๋ฐฉ์งํด์ผ ํฉ๋๋ค. ์ด๋ฅผ ํตํด ํธ์คํธ๊ฐ ์์ ํ๊ณ ์์ ์ ์ผ๋ก ์ ์ง๋ฉ๋๋ค.
- ๋ฉ๋ชจ๋ฆฌ ๊ด๋ จ ๊ณต๊ฒฉ ์ํ: ๋ฉ๋ชจ๋ฆฌ ๋ณดํธ ๋ฉ์ปค๋์ฆ์ ๋ฒํผ ์ค๋ฒํ๋ก, ํ ์ค๋ฒํ๋ก ๋ฐ use-after-free ์ทจ์ฝ์ฑ๊ณผ ๊ฐ์ ์ผ๋ฐ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ จ ๊ณต๊ฒฉ์ ์ํํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
WebAssembly์ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ ์ ์ด ๋ฉ์ปค๋์ฆ
WebAssembly๋ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ ์ ์ด๋ฅผ ์ํํ๊ณ ์ธ๊ทธ๋จผํธ ๋ณดํธ๋ฅผ ์ ๊ณตํ๊ธฐ ์ํด ์ฌ๋ฌ ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํฉ๋๋ค.
1. ๊ฒฝ๊ณ ๊ฒ์ฌ
WebAssembly ๋ฐํ์์ ๋ชจ๋ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ ๋ช ๋ น์ด์ ๋ํด ๊ฒฝ๊ณ ๊ฒ์ฌ๋ฅผ ์ํํฉ๋๋ค. ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฝ๊ฑฐ๋ ์ฐ๊ธฐ ์ ์ ๋ฐํ์์ ์ ํจ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๊ฐ ํ ๋น๋ ์ ํ ๋ฉ๋ชจ๋ฆฌ์ ๊ฒฝ๊ณ ๋ด์ ์๋์ง ํ์ธํฉ๋๋ค. ์ฃผ์๊ฐ ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ฉด ๋ฐํ์์ ์ ๊ทผ์ด ๋ฐ์ํ๋ ๊ฒ์ ๋ฐฉ์งํ๊ธฐ ์ํด ํธ๋ฉ(๋ฐํ์ ์ค๋ฅ)์ ๋ฐ์์ํต๋๋ค.
์: 64KB(65536๋ฐ์ดํธ)์ ๋ฉ๋ชจ๋ฆฌ ์ธ์คํด์ค๊ฐ ์๋ Wasm ๋ชจ๋์ ๊ณ ๋ คํ์ญ์์ค. ๋ชจ๋์ด `i32.store` ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ๋ฉ๋ชจ๋ฆฌ ์์น 65537์ ์ฐ๋ ค๊ณ ํ๋ฉด ๋ฐํ์์ ์ด ์ฃผ์๊ฐ ๋ฒ์๋ฅผ ๋ฒ์ด๋ฌ์์ ๊ฐ์งํ๊ณ ์ฐ๊ธฐ๊ฐ ๋ฐ์ํ์ง ์๋๋ก ํธ๋ฉ์ ๋ฐ์์ํต๋๋ค.
๊ฒฝ๊ณ ๊ฒ์ฌ๋ WebAssembly์์ ๋ฉ๋ชจ๋ฆฌ ์์ ์ ์ํ ๊ธฐ๋ณธ์ ์ด๊ณ ํ์์ ์ธ ๋ฉ์ปค๋์ฆ์ ๋๋ค. ์ด๋ Java ๋๋ Rust์ ๊ฐ์ ๋ค๋ฅธ ์ธ์ด์ ๊ฒฝ๊ณ ๊ฒ์ฌ์ ๊ฐ๋ ์ ์ผ๋ก ์ ์ฌํ์ง๋ง WebAssembly ๋ฐํ์์์ ์ํํ๋ฏ๋ก ์ฐํํ๊ธฐ๊ฐ ๋ ์ด๋ ต์ต๋๋ค.
2. ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ ์ ํ
WebAssembly๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ๋ฐ์๊ฐ ์ ํ ๋ฉ๋ชจ๋ฆฌ ์ธ์คํด์ค์ ์ต์ ๋ฐ ์ต๋ ํฌ๊ธฐ๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค. ์ต์ ํฌ๊ธฐ๋ ํ ๋น๋ ์ด๊ธฐ ๋ฉ๋ชจ๋ฆฌ ์์ด๊ณ , ์ต๋ ํฌ๊ธฐ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋๋ฆด ์ ์๋ ์ํ์ ๋๋ค. `memory.grow` ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ๋ฉด Wasm ๋ชจ๋์ด ์ต๋ ์ ํ๊น์ง ๋ ๋ง์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์์ฒญํ ์ ์์ต๋๋ค.
์: Wasm ๋ชจ๋์ ์ต์ ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ๊ฐ 1ํ์ด์ง(64KB)์ด๊ณ ์ต๋ ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ๊ฐ 16ํ์ด์ง(1MB)๋ก ์ ์๋ ์ ์์ต๋๋ค. ์ด๋ ๋ชจ๋์ด ์๋นํ ์ ์๋ ๋ฉ๋ชจ๋ฆฌ ์์ ์ ํํ์ฌ ์ ์ฌ์ ์ผ๋ก ์์คํ ๋ฆฌ์์ค๋ฅผ ์๋ชจํ๋ ๊ฒ์ ๋ฐฉ์งํฉ๋๋ค.
์ ์ ํ ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ ์ ํ์ ์ค์ ํจ์ผ๋ก์จ ๊ฐ๋ฐ์๋ WebAssembly ๋ชจ๋์ ๋ฆฌ์์ค ์ฌ์ฉ๋์ ์ ํํ๊ณ ๊ณผ๋ํ ๋ฉ๋ชจ๋ฆฌ ์๋น๋ฅผ ๋ฐฉ์งํ ์ ์์ผ๋ฉฐ, ์ด๋ ์๋ฒ ๋๋ ์์คํ ๋๋ ๋ชจ๋ฐ์ผ ์ฅ์น์ ๊ฐ์ ๋ฆฌ์์ค๊ฐ ์ ํ๋ ํ๊ฒฝ์์ ํนํ ์ค์ํฉ๋๋ค.
3. ๋ฉ๋ชจ๋ฆฌ ์ธ๊ทธ๋จผํธ ๋ฐ ์ด๊ธฐํ
WebAssembly๋ ๋ชจ๋์ ๋ฐ์ดํฐ ์ธ๊ทธ๋จผํธ์์ ๊ฐ์ ธ์จ ๋ฐ์ดํฐ๋ก ์ ํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ด๊ธฐํํ๋ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํฉ๋๋ค. ๋ฐ์ดํฐ ์ธ๊ทธ๋จผํธ๋ Wasm ๋ชจ๋ ๋ด์ ์ ์๋์ด ์์ผ๋ฉฐ ์ธ์คํด์คํ ์ ๋๋ ๋์ค์ `memory.init` ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ์ ํ ๋ฉ๋ชจ๋ฆฌ์ ๋ณต์ฌํ ์ ์๋ ์ ์ ๋ฐ์ดํฐ๋ฅผ ํฌํจํฉ๋๋ค.
์: ๋ฐ์ดํฐ ์ธ๊ทธ๋จผํธ์๋ ๋ฏธ๋ฆฌ ๊ณ์ฐ๋ ์กฐํ ํ ์ด๋ธ, ๋ฌธ์์ด ๋ฆฌํฐ๋ด ๋๋ ๊ธฐํ ์ฝ๊ธฐ ์ ์ฉ ๋ฐ์ดํฐ๊ฐ ํฌํจ๋ ์ ์์ต๋๋ค. ๋ชจ๋ ์ธ์คํด์คํ ์ ์ธ๊ทธ๋จผํธ์ ๋ฐ์ดํฐ๋ ์ง์ ๋ ์คํ์ ์์ ์ ํ ๋ฉ๋ชจ๋ฆฌ์ ๋ณต์ฌ๋ฉ๋๋ค. ๋ฐํ์์ ๋ณต์ฌ ์์ ์ด ๋ฉ๋ชจ๋ฆฌ ๊ฒฝ๊ณ๋ฅผ ์ด๊ณผํ์ง ์๋๋ก ๋ณด์ฅํฉ๋๋ค.
๋ฉ๋ชจ๋ฆฌ ์ธ๊ทธ๋จผํธ๋ ์๋ ค์ง ์์ ํ ๋ฐ์ดํฐ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ด๊ธฐํํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ์ฌ ์ด๊ธฐํ๋์ง ์์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํตํด ์ทจ์ฝ์ฑ์ด ๋์ ๋ ์ํ์ ์ค์ ๋๋ค. `memory.init` ๋ช ๋ น์ด๋ ๋ฐํ์ ๋์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์ ์ด๋๊ณ ๊ฒ์ฆ๋ ์ด๊ธฐํ๋ฅผ ๋์ฑ ํ์ฉํฉ๋๋ค.
4. ๊ต์ฐจ ์ถ์ฒ ๊ฒฉ๋ฆฌ(์น ๋ธ๋ผ์ฐ์ ์ฉ)
์น ๋ธ๋ผ์ฐ์ ์์ WebAssembly ๋ชจ๋์ ๋์ผ ์ถ์ฒ ์ ์ฑ ์ ์ ์ฉ์ ๋ฐ์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ณด์์ ๋์ฑ ๊ฐํํ๊ธฐ ์ํด ๋ธ๋ผ์ฐ์ ๋ ๊ต์ฐจ ์ถ์ฒ ๊ฒฉ๋ฆฌ(COI) ๊ธฐ๋ฅ์ ์ ์ ๋ ๋ง์ด ์ฑํํ๊ณ ์์ต๋๋ค. COI๋ ์น ํ์ด์ง๋ฅผ ๋ค๋ฅธ ์ถ์ฒ์ ๊ฒฉ๋ฆฌํ์ฌ ๋ฉ๋ชจ๋ฆฌ์ ๋ํ ๊ต์ฐจ ์ถ์ฒ ์ ๊ทผ์ ๋ฐฉ์งํฉ๋๋ค.
์: COI๋ฅผ ํ์ฑํํ `example.com`์์ ์ ๊ณต๋๋ ์น ํ์ด์ง๋ `evil.com`๊ณผ ๊ฐ์ ๋ค๋ฅธ ์ถ์ฒ์ ๊ฒฉ๋ฆฌ๋ฉ๋๋ค. ์ด๋ `evil.com`์ด Spectre ๋๋ Meltdown๊ณผ ๊ฐ์ ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ `example.com` ํ์ด์ง์ WebAssembly ๋ฉ๋ชจ๋ฆฌ์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๋ ๊ฒ์ ๋ฐฉ์งํฉ๋๋ค.
๊ต์ฐจ ์ถ์ฒ ๊ฒฉ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ์น ์๋ฒ๊ฐ ํน์ HTTP ํค๋(์: `Cross-Origin-Opener-Policy: same-origin`, `Cross-Origin-Embedder-Policy: require-corp`)๋ฅผ ์ ์กํ์ฌ ๊ฒฉ๋ฆฌ๋ฅผ ํ์ฑํํด์ผ ํฉ๋๋ค. COI๊ฐ ํ์ฑํ๋๋ฉด WebAssembly ์ ํ ๋ฉ๋ชจ๋ฆฌ๋ ๊ต์ฐจ ์ถ์ฒ ๊ณต๊ฒฉ์ผ๋ก๋ถํฐ ๋์ฑ ๋ณดํธ๋์ด ์น ํ๊ฒฝ์ ๋ณด์์ด ํฌ๊ฒ ํฅ์๋ฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ํฌ๊ธฐ์ ์คํ ์ทจ์ฝ์ ์ ์ ์ฉํ๋ ๊ฒ์ด ํจ์ฌ ๋ ์ด๋ ค์์ง๋๋ค.
5. ์๋๋ฐ์ค ํ๊ฒฝ
WebAssembly๋ ์๋๋ฐ์ค ํ๊ฒฝ์์ ์คํ๋๋๋ก ์ค๊ณ๋์์ต๋๋ค. ์ฆ, Wasm ๋ชจ๋์ ํ์ผ ์์คํ , ๋คํธ์ํฌ ๋๋ ํ๋์จ์ด์ ๊ฐ์ ์์คํ ๋ฆฌ์์ค์ ์ง์ ์ ๊ทผํ ์ ์์ต๋๋ค. ๋์ ๋ชจ๋์ ์ ์ ์๋ ๊ฐ์ ธ์ค๊ธฐ ํจ์ ์งํฉ์ ํตํด ํธ์คํธ ํ๊ฒฝ๊ณผ ์ํธ ์์ฉํด์ผ ํฉ๋๋ค.
์: ํ์ผ์ ์ฝ์ด์ผ ํ๋ Wasm ๋ชจ๋์ ํ์ผ ์์คํ ์ ์ง์ ์ ๊ทผํ ์ ์์ต๋๋ค. ๋์ ํธ์คํธ ํ๊ฒฝ์์ ์ ๊ณตํ๋ ๊ฐ์ ธ์ค๊ธฐ ํจ์๋ฅผ ํธ์ถํด์ผ ํฉ๋๋ค. ๊ทธ๋ฌ๋ฉด ํธ์คํธ ํ๊ฒฝ์ ํ์ผ ์ ๊ทผ์ ์ค์ฌํ์ฌ ๋ณด์ ์ ์ฑ ๋ฐ ์ ๊ทผ ์ ์ด๋ฅผ ์ํํฉ๋๋ค.
์๋๋ฐ์ค ํ๊ฒฝ์ ์ ์ฑ Wasm ๋ชจ๋์ด ๋ฐ์์ํฌ ์ ์๋ ์ ์ฌ์ ์์์ ์ ํํฉ๋๋ค. ์์คํ ๋ฆฌ์์ค์ ๋ํ ์ ๊ทผ์ ์ ํํจ์ผ๋ก์จ ์๋๋ฐ์ค๋ ๊ณต๊ฒฉ ํ๋ฉด์ ์ค์ด๊ณ ๋ชจ๋์ด ํธ์คํธ ์์คํ ์ ์์์ํค๋ ๊ฒ์ ๋ฐฉ์งํฉ๋๋ค.
6. ์ธ๋ถํ๋ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ ์ ์ด(๋ฏธ๋ ๋ฐฉํฅ)
์์ ์ค๋ช ๋ ๋ฉ์ปค๋์ฆ์ ๋ฉ๋ชจ๋ฆฌ ๋ณดํธ๋ฅผ ์ํ ๊ฒฌ๊ณ ํ ํ ๋๋ฅผ ์ ๊ณตํ์ง๋ง ๋ ์ธ๋ถํ๋ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ ์ ์ด ๊ธฐ์ ์ ํ์ํ๊ธฐ ์ํ ์ฐ๊ตฌ๊ฐ ์งํ ์ค์ ๋๋ค. ์ด๋ฌํ ๊ธฐ์ ์ ์ ์ฌ์ ์ผ๋ก ๊ฐ๋ฐ์๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ๋ค๋ฅธ ์์ญ์ ๋ํด ๋ ์ธ๋ถํ๋ ๊ถํ์ ์ง์ ํ ์ ์๋๋ก ํ์ฌ ๋ณด์ ๋ฐ ์ ์ฐ์ฑ์ ๋์ฑ ํฅ์์ํฌ ์ ์์ต๋๋ค.
์ ์ฌ์ ์ธ ๋ฏธ๋ ๊ธฐ๋ฅ:
- ๋ฉ๋ชจ๋ฆฌ ๊ธฐ๋ฅ: ๊ธฐ๋ฅ์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๋ํ ํน์ ์ ๊ทผ ๊ถํ์ ๋ถ์ฌํ๋ ์์กฐ ๋ถ๊ฐ๋ฅํ ํ ํฐ์ ๋๋ค. Wasm ๋ชจ๋์ ํน์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์ ๊ทผํ๋ ค๋ฉด ์ ํจํ ๊ธฐ๋ฅ์ด ํ์ํฉ๋๋ค.
- ๋ฉ๋ชจ๋ฆฌ ํ๊น : ๋ฉ๋ชจ๋ฆฌ ํ๊น ์๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ๊ณผ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ฐ๊ฒฐํ์ฌ ํด๋น ๋ชฉ์ ๋๋ ๋ณด์ ์์ค์ ๋ํ๋ ๋๋ค. ๊ทธ๋ฌ๋ฉด ๋ฐํ์์ ์ด ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ ๊ทผ ์ ์ด ์ ์ฑ ์ ์ํํ ์ ์์ต๋๋ค.
- ํ๋์จ์ด ์ง์ ๋ฉ๋ชจ๋ฆฌ ๋ณดํธ: Intel Memory Protection Extensions(MPX) ๋๋ ARM Memory Tagging Extension(MTE)๊ณผ ๊ฐ์ ํ๋์จ์ด ๊ธฐ๋ฅ์ ํ์ฉํ์ฌ ํ๋์จ์ด ์์ค์ ๋ฉ๋ชจ๋ฆฌ ๋ณดํธ๋ฅผ ์ ๊ณตํฉ๋๋ค.
์ด๋ฌํ ๊ณ ๊ธ ๊ธฐ์ ์ ์ฌ์ ํ ์ฐ๊ตฌ ๊ฐ๋ฐ ๋จ๊ณ์ ์์ง๋ง WebAssembly์ ๋ฉ๋ชจ๋ฆฌ ๋ณด์ ๋ชจ๋ธ์ ๋์ฑ ๊ฐํํ ๊ฐ๋ฅ์ฑ์ด ์์ต๋๋ค.
WebAssembly ๋ฉ๋ชจ๋ฆฌ ๋ณดํธ์ ์ด์
WebAssembly์ ๋ฉ๋ชจ๋ฆฌ ๋ณดํธ ๋ฉ์ปค๋์ฆ์ ๋ค์๊ณผ ๊ฐ์ ๋ค์ํ ์ด์ ์ ์ ๊ณตํฉ๋๋ค.
- ํฅ์๋ ๋ณด์: ๋ฉ๋ชจ๋ฆฌ ๋ณดํธ๋ ๋ฉ๋ชจ๋ฆฌ์ ๋ํ ๋ฌด๋จ ์ ๊ทผ์ ๋ฐฉ์งํ์ฌ ๋ณด์ ์ทจ์ฝ์ฑ ๋ฐ ๊ณต๊ฒฉ์ ์ํ์ ์ค์ ๋๋ค.
- ํฅ์๋ ์์ ์ฑ: ๋ฒ์ ์ธ ์ ๊ทผ ๋ฐ ๋ฉ๋ชจ๋ฆฌ ์์์ ๋ฐฉ์งํจ์ผ๋ก์จ ๋ฉ๋ชจ๋ฆฌ ๋ณดํธ๋ WebAssembly ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ ์ฑ๊ณผ ์์ ์ฑ์ ํฅ์์ํต๋๋ค.
- ํฌ๋ก์ค ํ๋ซํผ ํธํ์ฑ: WebAssembly์ ๋ฉ๋ชจ๋ฆฌ ๋ณดํธ ๋ฉ์ปค๋์ฆ์ ๋ฐํ์์ ๊ตฌํ๋์ด ๋ค์ํ ํ๋ซํผ ๋ฐ ์ํคํ ์ฒ์์ ์ผ๊ด๋ ๋์์ ๋ณด์ฅํฉ๋๋ค.
- ์ฑ๋ฅ: ๊ฒฝ๊ณ ๊ฒ์ฌ๋ ์ฝ๊ฐ์ ์ค๋ฒํค๋๋ฅผ ๋ฐ์์ํค์ง๋ง WebAssembly ๋ฐํ์์ ์ฑ๋ฅ ์ํฅ์ ์ต์ํํ๋๋ก ์ต์ ํ๋์ด ์์ต๋๋ค. ๋ง์ ๊ฒฝ์ฐ ์ฑ๋ฅ ๋น์ฉ์ ๋ฉ๋ชจ๋ฆฌ ๋ณดํธ์ ์ด์ ์ ๋นํด ๋ฏธ๋ฏธํฉ๋๋ค.
- ๊ฒฉ๋ฆฌ: ์๋ก ๋ค๋ฅธ Wasm ๋ชจ๋๊ณผ ํธ์คํธ ํ๊ฒฝ์ด ์๋ก์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์์ ๊ฒฉ๋ฆฌ๋๋๋ก ๋ณด์ฅํ์ฌ ๋ค์ค ๋ชจ๋ ๋๋ ๋ค์ค ํ ๋ํธ ํ๊ฒฝ์ ๋ณด์์ ๊ฐํํฉ๋๋ค.
๊ฐ๋ฐ์์ ๋ํ ์์ฌ์
WebAssembly์ ๋ฉ๋ชจ๋ฆฌ ๋ณดํธ ๋ฉ์ปค๋์ฆ์ ๊ฐ๋ฐ์์๊ฒ ๋ค์๊ณผ ๊ฐ์ ์ฌ๋ฌ ๊ฐ์ง ์ํฅ์ ๋ฏธ์นฉ๋๋ค.
- ์์ ํ ์ฝ๋ ์์ฑ: ๊ฐ๋ฐ์๋ ๋ฒํผ ์ค๋ฒํ๋ก, use-after-free ์ทจ์ฝ์ฑ ๋ฐ ๋ฒ์ ์ธ ์ ๊ทผ๊ณผ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ จ ์ค๋ฅ๋ฅผ ํผํ๋ ์์ ํ ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ์ํด ๋ ธ๋ ฅํด์ผ ํฉ๋๋ค. Rust์ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ์์ ์ธ์ด๋ฅผ ์ฌ์ฉํ๋ฉด ์ด๋ฌํ ์ค๋ฅ๋ฅผ ๋ฐฉ์งํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
- ๋ฉ๋ชจ๋ฆฌ ์ ํ ์ดํด: WebAssembly ๋ชจ๋์ ๋ถ๊ณผ๋๋ ๋ฉ๋ชจ๋ฆฌ ์ ํ์ ์๊ณ ์ด๋ฌํ ์ ํ ๋ด์์ ์๋ํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค๊ณํ์ญ์์ค. `memory.grow`๋ฅผ ์ฑ ์๊ฐ ์๊ฒ ์ฌ์ฉํ๊ณ ๊ณผ๋ํ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ํผํ์ญ์์ค.
- ๋ฉ๋ชจ๋ฆฌ ์ธ๊ทธ๋จผํธ ํ์ฉ: ๋ฉ๋ชจ๋ฆฌ ์ธ๊ทธ๋จผํธ๋ฅผ ์ฌ์ฉํ์ฌ ์๋ ค์ง ์์ ํ ๋ฐ์ดํฐ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ด๊ธฐํํ๊ณ ์ด๊ธฐํ๋์ง ์์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํตํด ์ทจ์ฝ์ฑ์ด ๋์ ๋ ์ํ์ ์ค์ ๋๋ค.
- ๊ต์ฐจ ์ถ์ฒ ๊ฒฉ๋ฆฌ ๊ณ ๋ ค: ์น ๋ธ๋ผ์ฐ์ ์ฉ WebAssembly ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ๋ ๊ฒฝ์ฐ ๋ณด์์ ๋์ฑ ๊ฐํํ๊ธฐ ์ํด ๊ต์ฐจ ์ถ์ฒ ๊ฒฉ๋ฆฌ๋ฅผ ํ์ฑํํ๋ ๊ฒ์ ๊ณ ๋ คํ์ญ์์ค.
- ์ฒ ์ ํ ํ ์คํธ: WebAssembly ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฒ ์ ํ ํ ์คํธํ์ฌ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ จ ์ค๋ฅ๋ฅผ ์๋ณํ๊ณ ์์ ํ์ญ์์ค. ๋ฉ๋ชจ๋ฆฌ ๋์, use-after-free ์ทจ์ฝ์ฑ ๋ฐ ๊ธฐํ ๋ฉ๋ชจ๋ฆฌ ์ค๋ฅ๋ฅผ ๊ฐ์งํ๋ ค๋ฉด ๋ฉ๋ชจ๋ฆฌ ์ญ์ ๊ธฐ์ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๊ณ ๋ คํ์ญ์์ค.
- ๊ฐ์ ธ์ค๊ธฐ ์ธ์: ๊ฐ์ ธ์ค๊ธฐ ํจ์๋ฅผ ์ฌ์ฉํ ๋๋ ๋ณด์ ์ํฅ์ ์ ์คํ๊ฒ ๊ณ ๋ คํ์ญ์์ค. ๊ฐ์ ธ์ค๊ธฐ ํจ์๊ฐ ์ ๋ขฐํ ์ ์๊ณ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ์ ์์ ํ๊ฒ ์ฒ๋ฆฌํ๋์ง ํ์ธํ์ญ์์ค. ์ฃผ์ ๊ณต๊ฒฉ๊ณผ ๊ฐ์ ์ทจ์ฝ์ฑ์ ๋ฐฉ์งํ๊ธฐ ์ํด ๊ฐ์ ธ์ค๊ธฐ ํจ์์์ ์์ ํ ๋ฐ์ดํฐ๋ฅผ ์ ํจ์ฑ ๊ฒ์ฌํ์ญ์์ค.
์ค์ ์ฌ๋ก ๋ฐ ์ฌ๋ก ์ฐ๊ตฌ
๋ค์์ WebAssembly ๋ฉ๋ชจ๋ฆฌ ๋ณดํธ์ ์ค์์ฑ์ ๋ณด์ฌ์ฃผ๋ ์ค์ ์ฌ๋ก ๋ฐ ์ฌ๋ก ์ฐ๊ตฌ์ ๋๋ค.
- ์น ๋ธ๋ผ์ฐ์ : ์น ๋ธ๋ผ์ฐ์ ๋ WebAssembly ๋ชจ๋์ ์๋ก ๊ฒฉ๋ฆฌํ๊ณ ๋ธ๋ผ์ฐ์ ์์ฒด์ ๊ฒฉ๋ฆฌํ๊ธฐ ์ํด WebAssembly์ ๋ฉ๋ชจ๋ฆฌ ๋ณดํธ ๋ฉ์ปค๋์ฆ์ ํฌ๊ฒ ์์กดํฉ๋๋ค. ์ด๋ ์ ์ฑ WebAssembly ์ฝ๋๊ฐ ๋ธ๋ผ์ฐ์ ๋ฅผ ์์์ํค๊ฑฐ๋ ์ฌ์ฉ์ ๋ฐ์ดํฐ๋ฅผ ํ์น๋ ๊ฒ์ ๋ฐฉ์งํฉ๋๋ค.
- ํด๋ผ์ฐ๋ ์ปดํจํ : ํด๋ผ์ฐ๋ ์ปดํจํ ํ๋ซํผ์ ์ฌ์ฉ์ ์ ๊ณต ์ฝ๋๋ฅผ ์์ ํ๊ณ ๊ฒฉ๋ฆฌ๋ ํ๊ฒฝ์์ ์คํํ๊ธฐ ์ํด WebAssembly๋ฅผ ์ ์ ๋ ๋ง์ด ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ๋ฉ๋ชจ๋ฆฌ ๋ณดํธ๋ ํ ๋ํธ๊ฐ ์๋ก์ ์ํฌ๋ก๋๋ฅผ ๋ฐฉํดํ๊ฑฐ๋ ์ค์ํ ๋ฐ์ดํฐ์ ์ ๊ทผํ๋ ๊ฒ์ ๋ฐฉ์งํ๋ ๋ฐ ํ์์ ์ ๋๋ค.
- ์๋ฒ ๋๋ ์์คํ : WebAssembly๋ ๋ฆฌ์์ค๊ฐ ์ ํ๋ ์ฅ์น์์ ๋ณต์กํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ๊ธฐ ์ํด ์๋ฒ ๋๋ ์์คํ ์์ ์ฌ์ฉ๋๊ณ ์์ต๋๋ค. ๋ฉ๋ชจ๋ฆฌ ๋ณดํธ๋ ๋ฉ๋ชจ๋ฆฌ ์์์ ๋ฐฉ์งํ๊ณ ์ด๋ฌํ ์์คํ ์ ์์ ์ฑ๊ณผ ์์ ์ฑ์ ๋ณด์ฅํ๋ ๋ฐ ๋งค์ฐ ์ค์ํฉ๋๋ค.
- ๋ธ๋ก์ฒด์ธ: ์ผ๋ถ ๋ธ๋ก์ฒด์ธ ํ๋ซํผ์ WebAssembly๋ฅผ ์ฌ์ฉํ์ฌ ์ค๋งํธ ๊ณ์ฝ์ ์คํํฉ๋๋ค. ๋ฉ๋ชจ๋ฆฌ ๋ณดํธ๋ ์ ์ฑ ๊ณ์ฝ์ด ๋ธ๋ก์ฒด์ธ ์ํ๋ฅผ ์กฐ์ํ๊ฑฐ๋ ์๊ธ์ ํ์น๋ ๊ฒ์ ๋ฐฉ์งํ๋ ๋ฐ ํ์์ ์ ๋๋ค. ์๋ฅผ ๋ค์ด Polkadot ๋ธ๋ก์ฒด์ธ์ ์ค๋งํธ ๊ณ์ฝ์ Wasm์ ์ฌ์ฉํ๋ฉฐ ๊ณ ์ ํ ๋ณด์ ๊ธฐ๋ฅ์ ํ์ฉํฉ๋๋ค.
- ๊ฒ์ ๊ฐ๋ฐ: WebAssembly๋ ๊ฒ์ ๊ฐ๋ฐ์ ์ฌ์ฉ๋์ด ๊ฒ์์ด ์น ๋ธ๋ผ์ฐ์ ์์ ๊ฑฐ์ ๋ค์ดํฐ๋ธ ์ฑ๋ฅ์ผ๋ก ์คํ๋ ์ ์๋๋ก ํฉ๋๋ค. ๋ฉ๋ชจ๋ฆฌ ๋ณดํธ๋ ์ ์ฑ ๊ฒ์ ์ฝ๋๊ฐ ๋ธ๋ผ์ฐ์ ๋๋ ์ด์ ์ฒด์ ์ ์ทจ์ฝ์ ์ ์ ์ฉํ๋ ๊ฒ์ ๋ฐฉ์งํฉ๋๋ค.
๊ฒฐ๋ก
WebAssembly์ ์ ํ ๋ฉ๋ชจ๋ฆฌ ์ธ๊ทธ๋จผํธ ๋ณดํธ ๋ฉ์ปค๋์ฆ์ ๋ณด์ ๋ชจ๋ธ์ ์ค์ํ ๊ตฌ์ฑ ์์์ ๋๋ค. ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ ์ ์ด๋ฅผ ์ํํจ์ผ๋ก์จ WebAssembly๋ ๋ฉ๋ชจ๋ฆฌ์ ๋ํ ๋ฌด๋จ ์ ๊ทผ์ ๋ฐฉ์งํ๊ณ ๋ณด์ ์ทจ์ฝ์ฑ์ ์ํ์ ์ค์ด๋ฉฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ ์ฑ๊ณผ ์์ ์ฑ์ ํฅ์์ํค๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. WebAssembly๊ฐ ๊ณ์ ๋ฐ์ ํจ์ ๋ฐ๋ผ ์ง์์ ์ธ ์ฐ๊ตฌ ๊ฐ๋ฐ ๋ ธ๋ ฅ์ ๋ฉ๋ชจ๋ฆฌ ๋ณด์ ๋ชจ๋ธ์ ๋์ฑ ๊ฐํํ๊ณ ๊ฐ๋ฐ์์๊ฒ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ์ ๋ํ ๋ ์ธ๋ถํ๋ ์ ์ด๋ฅผ ์ ๊ณตํ๋ ๋ฐ ์ค์ ์ ๋๊ณ ์์ต๋๋ค.
๊ฐ๋ฐ์๋ ๋ฉ๋ชจ๋ฆฌ ๋ณดํธ์ ์ค์์ฑ์ ์ดํดํ๊ณ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ จ ์ค๋ฅ๋ฅผ ํผํ๋ ์์ ํ ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ์ํด ๋ ธ๋ ฅํด์ผ ํฉ๋๋ค. ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฐ๋ฅด๊ณ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฉ๋ชจ๋ฆฌ ๋ณดํธ ๋ฉ์ปค๋์ฆ์ ํ์ฉํจ์ผ๋ก์จ ๊ฐ๋ฐ์๋ ๋ค์ํ ํ๊ฒฝ์์ ์คํํ ์ ์๋ ์์ ํ๊ณ ์์ ์ ์ธ WebAssembly ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ์ ์์ต๋๋ค. WebAssembly๊ฐ ๋ค์ํ ์ฐ์ ๋ฐ ํ๋ซํผ์์ ๋ ๋์ ์ฑํ์ ์ป์์ ๋ฐ๋ผ ๊ฐ๋ ฅํ ๋ฉ๋ชจ๋ฆฌ ๋ณด์ ๋ชจ๋ธ์ ์ฑ๊ณต์ ํต์ฌ ์์๋ก ๊ณ์ ์์ฉํ ๊ฒ์ ๋๋ค.
๋ํ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๋ฐ ๋ณด์๊ณผ ๊ด๋ จ๋ ์๋ก์ด WebAssembly ๊ธฐ๋ฅ(์: ๋ฉ๋ชจ๋ฆฌ ํ๊น ๋ฐ ํ๋์จ์ด ์ง์ ๋ฉ๋ชจ๋ฆฌ ๋ณดํธ)์ ์ง์์ ์ธ ๊ฐ๋ฐ ๋ฐ ํ์คํ๋ ์๋ก์ด ๋ณด์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ WebAssembly๊ฐ ์ฐจ์ธ๋ ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌ์ถ์ ์ํ ์์ ํ๊ณ ์ ๋ขฐํ ์ ์๋ ํ๋ซํผ์ผ๋ก ์ ์ง๋๋๋ก ํ๋ ๋ฐ ์ค์ํฉ๋๋ค.
๊ถ๊ทน์ ์ผ๋ก WebAssembly์ ๊ณ ์ ํ ๊ธฐ๋ฅ๊ณผ ์ํํธ์จ์ด ๊ฐ๋ฐ ๋ฐ ๋ฐฐํฌ์ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๊ฒฐํฉํ ๊ณ์ธตํ๋ ๋ณด์ ์ ๊ทผ ๋ฐฉ์์ ์ด ํ์ ์ ์ธ ๊ธฐ์ ์ ๋ชจ๋ ์ ์ฌ๋ ฅ์ ์คํํ๋ ๋ฐ ํ์์ ์ ๋๋ค.