์ โฆ ํ์ฅ์ค์ด ์ด๋์์?: Type Confusion ์ด์ผ๊ธฐ
์๋ ํ์ธ์...๐ฝ ํน์.. ํ์ฅ์ค์ด ์ด๋์ง ์์๋์..? ใ ใ
๊ฐ์๊ธฐ ํ์ฅ์ค์ ๋ฌผ์ด๋ด์ ๋นํฉํ์ จ๋์?! ๐คฃ ๋ค๋ฆ์ด ์๋๋ผ ๊ธ ์ฐ๊ธฐ ์ ์ ์งน์งน์ด์ TMI ํ๋๋ฅผ ๋ง์๋๋ฆฌ๋ ค๊ณ ํ๋๋ฐ์! ์ค๋์ ์ฐ๊ตฌ์ค์์ ์์๋ ์ฌ๋ฏธ์๋(?) ๊ฒฝํ ํ๋๋ฅผ ๊ณต์ ํ๋ฉฐ ์ด์ผ๊ธฐ๋ฅผ ์์ํด๋ณผ๊ฒ์.
์งน์งน์ด์ TMI
์ ๊ฐ ์๋ ์ฐ๊ตฌ์ค์ 4์ธต์ธ๋ฐ, ์ฌ๊ธฐ์ ํ ๊ฐ์ง ํฅ๋ฏธ๋ก์ด ์ฌ์ค์ด ์์ต๋๋ค. 4์ธต์๋ ์ค๋ฅธ์ชฝ์ ๋จ์๐โโ๏ธ ํ์ฅ์ค์ด ์๊ณ , 3์ธต์๋ ์ค๋ฅธ์ชฝ์ ์ฌ์๐โโ๏ธ ํ์ฅ์ค์ด ์์ฃ . ํ์ ์ค์ด ์๋ 3์ธต์ ๋ค๋ ๋ค๊ฐ ํ์์ฒ๋ผ ํ์ฅ์ค์ ๊ฐ๋ ค๊ณ ์ค๋ฅธ์ชฝ์ผ๋ก ๊ฐ๋๋โฆ ํฐ์ผ ๋ ๋ปํ์ต๋๋ค ๐
์ด๊ฒ ๋ฐ๋ก Type Confusion(ํ์ ํผ๋)์ ๋๋ค!
3์ธต๊ณผ 4์ธต์ ํ์ฅ์ค ํ์ ์ด ๋ค๋ฅด๋ค๋ ์ฌ์ค์ ์ ๋๋ก ์ธ์ํ์ง ๋ชปํด ๋ฐ์ํ ํผ๋์ธ ์ ์ด์ฃ . ์ด๋ฐ ๋ฌธ์ ๊ฐ ์ผ์์์ ๋๋๋ฉด ๋คํ์ด์ง๋ง, ์ปดํจํฐ ์์คํ ์์๋ ์น๋ช ์ ์ธ ๋ฌธ์ ๋ก ์ด์ด์ง ์ ์์ต๋๋ค ๐ฅ ์ปดํจํฐ๋ ํ์ (type)์ ์ ํํ ์ธ์ํ์ง ๋ชปํ๋ฉด ์์์น ๋ชปํ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ฑฐ๋ ์ฌ์ง์ด ๋ณด์ ์ทจ์ฝ์ ์ด ์๊ธธ ์ ์๊ฑฐ๋ ์ ๐
๊ทธ๋ผ, ์ปดํจํฐ์์ 'ํ์ '์ด๋ ๋ฌด์์ด๊ณ , ํ์ ์ด ํผ๋๋๋ฉด ์ด๋ค ์ผ์ด ๋ฒ์ด์ง๋์ง ์์๋ณผ๊น์?
์ปดํจํฐ์์์ ํ์ (Type)์ด๋?
์ปดํจํฐ์์ 'ํ์ '์ด๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ ์๋ฏธํฉ๋๋ค. ๊ฐ๋จํ ๋งํด, ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ๋ ๋ณ์์ ๋ฐ์ดํฐ ์ข ๋ฅ๋ฅผ ๊ตฌ๋ถ์ง๋ ์ญํ ์ ํ์ฃ .
์๋ฅผ ๋ค์ด:
- ์ ์(Integer): ์ซ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ
- ๋ฌธ์(Char): ๋จ์ผ ๊ธ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ
- ๋ฐฐ์ด(Array): ์ฌ๋ฌ ๋ฐ์ดํฐ๋ฅผ ํ๋๋ก ๋ฌถ์
์ด์ฒ๋ผ ํ์ ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๊ธฐ๋ณธ ๋จ์๋ก, ์ ํํ ํ์ ์ด ์ง์ ๋์ด์ผ ์ปดํจํฐ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
์ด๋ฐ ํ์ ์ด ํผ๋๋๋ฉด ์ด๋ป๊ฒ ๋ ๊น์?
๋ค์์ ์ฝ๋๋ฅผ ํ๋ฒ ๋ณผ๊น์?
number ๋ผ๋ ๋ณ์๋ โ123โ์ด๋ผ๋ ๊ฐ์ด ๋ฌธ์์ด๋ก ์ ์ฅ๋์์ต๋๋ค. ๊ทธ๋ผ ์ด ๋ฌธ์์ด์ ์ซ์ ์ฐ์ฐ์ธ +10 ์ ํ๋ฉด 134 ๋ผ๋ ์ ์๊ฐ ๋์ฌ๊น์? ์๋๋ฉด ๋ฌธ์์ด๊ณผ ์ ์์ ๋ง์ ์ด๊ธฐ์ ์ฝ๋์์ ์๋ฌ๊ฐ ๋ ๊น์? ๐ค
์ ์์๊ฐ ์กฐ๊ธ ์ฌ์๋ณด์ด์๋์? ๊ทธ๋ ๋ค๋ฉด ๋ค์์ ์์๋ ์ด๋ค๊ฐ์!
๊ทธ๋ผโฆ ์ด ์ฐ์ฐ์ ๊ฒฐ๊ณผ๋ ์ด๋ป๊ฒ ๋ ๊น์?
์์ ์ซ์๊ฐ ์์ด์ 456 ์ผ๋ก ํด์๋ ์ง, ๋ค์ abc๊ฐ ์์ด์ ๋ฌธ์์ด๋ก ํด์๋์ด ์๋ฌ๋ฅผ ๋ฐ์์ํฌ์ง, ํ๋จํ๊ธฐ๊ฐ ์ฝ์ง ์๋ค์ ๐ ์ด๋ฌํ ์ ๋งคํจ์ ๋จ์ํ ์ฝ๋์ ์ค๋ฅ๋ก ๋๋์ง ์๊ณ , ์ค์ ์ํํธ์จ์ด์ ์ฌ๊ฐํ ๋ณด์ ์ทจ์ฝ์ ์ผ๋ก๊น์ง ์ด์ด์ง ์ ์๋ต๋๋ค(๋ง์น ํ์ฅ์ค์ ์๋ชป ๋ค์ด๊ฐ๋ ๊ฒ์ฒ๋ผ ๋ง์ด์ฃ ..) ๐จ ๊ทธ๋ผ ๊ณ์ํด์ Type Confusion์ด ๋ฌด์์ธ์ง ์์๋ณผ๊น์?
Type Confusion
Type Confusion์ด๋, ์ปดํจํฐ ํ๋ก๊ทธ๋จ์ด ํ ํ์ ์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฅธ ํ์ ์ผ๋ก ์๋ชป ์ธ์ํ๋ ์ค๋ฅ๋ฅผ ๋งํฉ๋๋ค. ์ด๋ฐ ํผ๋์ด ์๊ธฐ๋ฉด 1๏ธโฃํ๋ก๊ทธ๋จ์ด ๋น์ ์์ ์ผ๋ก ์๋ํ๊ฑฐ๋, 2๏ธโฃ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ด ์์๋ ๋ฟ๋ง ์๋๋ผ, ๊ฒฐ๊ตญ์๋ 3๏ธโฃ๋ณด์ ์ทจ์ฝ์ ์ด ๋ฐ์ํ ์ ์์ต๋๋ค. ํนํ, Type Confusion์ผ๋ก ์ธํด ์๋ชป๋ ๋ฉ๋ชจ๋ฆฌ์ ์ ๊ทผ ํ ์ ์์ด, ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๊ฐ ์ค์ํ ์์คํ ์์๋ ๋ ์ฌ๊ฐํ ๋ฌธ์ โ ๏ธ๋ฅผ ์ผ๊ธฐํ ์ ์์ด์.
Type Confusion์ ๋ฌธ์ ๋ ๋ณดํต ๋์ ์ผ๋ก ํ์ ์ ๊ฒฐ์ ํ๋ JavaScript๋ PHP์ ๊ฐ์ ์ธ์ด์์ ๋ฐ์ํฉ๋๋ค. ํ๋ก๊ทธ๋จ์ด ์คํ๋ ๋ ํ์ ์ ๊ฒฐ์ ํ๋๊ฑด, ์ํํธ์จ์ด๋ฅผ ๋ ์ ์ฐํ๊ฒ ๋ง๋ค๊ณ ๊ฐ๋ฐ์ ๋น ๋ฅด๊ฒ ๋ง๋ค ์ ์์ง๋ง, ๊ทธ๋งํผ Type Confusion ๊ณต๊ฒฉ์ ๋ฌธ์ ์ด์ด์ฃผ๊ธฐ๋ ํฉ๋๋ค.
์น ๋ธ๋ผ์ฐ์ ์ Type Confusion
ํ๋ ์น ๋ธ๋ผ์ฐ์ ๋ ๋จ์ํ ์น์ฌ์ดํธ๋ฅผ ํ์ํ๋ ๊ฒ๋ฟ๋ง ์๋๋ผ, ๊ฐ๋ ฅํ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ๋ด์ฅํ์ฌ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ ์ ์๋๋ก ์ค๊ณ๋์ด ์์ต๋๋ค. ์ด๋ฌํ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ๋น ๋ฅธ ์คํ ์๋๋ฅผ ์ํด ๋ค์ํ ์ต์ ํ ๊ธฐ๋ฒ์ ์ฌ์ฉํฉ๋๋ค. ๊ทธ์ค ํ๋๊ฐ JIT(Just-In-Time) ์ปดํ์ผ๋ฌ์ธ๋ฐ์. JIT ์ปดํ์ผ๋ฌ๋ ํ๋ก๊ทธ๋จ์ด ์คํ๋๋ ๋์ ๋ณ์์ ํ์ ์ ์์ธกํ๊ณ ์ต์ ํํ์ฌ ๋น ๋ฅด๊ฒ ์คํํ ์ ์๋๋ก ๋์์ค๋๋ค.J
๊ทธ๋ฌ๋, JIT์ ์ต์ ํ ๊ณผ์ ์์ Type Confusion์ด ๋ฐ์ํ๋ฉด ๋ณด์ ์ทจ์ฝ์ ์ผ๋ก ์ด์ด์ง ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ด ์ด๋ค ๋ณ์๋ฅผ ํน์ ํ์ ์ผ๋ก ๊ฐ์ ํ๊ณ ์ต์ ํํ๋๋ฐ, ์ค์ ์คํ ์ค์ ์์๊ณผ ๋ค๋ฅธ ํ์ ์ ๋ฐ์ดํฐ๊ฐ ๋ค์ด์ค๋ฉด ์๋ชป๋ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ์ด ๋ฐ์ํ ์ ์์ต๋๋ค. ์ด์ ๊ฐ๋จํ๊ฒ Type Confusion ์ฌ๋ก๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
Type Confusion in V8
Google์ Chrome ๋ธ๋ผ์ฐ์ ์์ ์ฌ์ฉ๋๋ V8 JavaScript ์์ง์์ Type Confusion ์ทจ์ฝ์ ์ด ๊ณ์ํด์ ๋ฐ๊ฒฌ๋๊ณ ์์ด์. ๊ทธ ์ค์์ ๋ง์ ๋ถ๋ถ์ด ๊ณต๊ฒฉ์๊ฐ ์์คํ ๊ถํ์ ์ป์ ์ ์๋ ์น๋ช ์ ์ธ ๋ฌธ์ ๋ก ํ๊ฐ๋ฐ์์ต๋๋ค. CVE-2023-2033์์๋ ๋ณด๋ฉด ๋ฐ์ดํฐ๊ฐ ์ ์ ํ๊ฒ ๋ณํ๋๊ฑฐ๋ ํ์ธ๋์ง ์์ ์ฑ ์ ๋ฌ๋์ด, ์๊ฒฉ ์ฝ๋ ์คํ์ด ๊ฐ๋ฅํ Type Confusion ์ทจ์ฝ์ ์ด์์ต๋๋ค. ๋ ์์ธํ ๋ด์ฉ์ ์๊ณ ์ถ๋ค๋ฉด, ์๋ ๋งํฌ๋ฅผ ํตํด ์ ํฌ ๋ธ๋ก๊ทธ์ ์ ๋ฆฌ๋ ๊ธ์ ํ์ธํด์ฃผ์ธ์! ๐
(๋งํฌ)
๋ง๋ฌด๋ฆฌ
๐ Type Confusion ์ทจ์ฝ์ , ์ด๋ป๊ฒ ์๋ฐฉํ ์ ์์๊น์?
๋ค์์ ์ธ ๊ฐ์ง ๋ฐฉ๋ฒ์ ๊ณ ๋ คํด๋ณด์ธ์!
- ๐ ๋ช ์์ ์ธ ํ์ ๊ฒ์ฌ: JavaScript์์ typeof์ instanceof๋ฅผ ์ฌ์ฉํ์ฌ ๋ณ์์ ํ์ ์ ์ ํํ ํ์ธํ๊ณ , ์์์น ๋ชปํ ๋ฐ์ดํฐ๊ฐ ์ ๋ฌ๋๋ ๊ฒ์ ๋ฐฉ์งํฉ๋๋ค.
- ๐ก๏ธ ์ ๋ ฅ ๊ฒ์ฆ ๊ฐํ: ์ธ๋ถ์์ ๋ฐ๋ ๋ฐ์ดํฐ๋ ํญ์ ์ฒ ์ ํ ๊ฒ์ฆํ์ฌ ์๋ชป๋ ํ์ ์ ๋ฐ์ดํฐ๊ฐ ์์คํ ์ ์ ์ ๋์ง ์๋๋ก ํฉ๋๋ค.
- ๐ก ํ์ ์์ ์ธ์ด ํ์ฉ: TypeScript์ ๊ฐ์ ์ธ์ด๋ ํ๋ก๊ทธ๋จ์ด ์คํ๋๊ธฐ ์ ์ ์ค๋ฅ๋ฅผ ์ก์๋ด์ด ๋ฌธ์ ๋ฅผ ์๋ฐฉํ ์ ์์ด ์ ์ฉํฉ๋๋ค.
Type Confusion์ ๋จ์ํ ์ฝ๋ ์ค๋ฅ๋ฅผ ๋์ด ์์คํ ๋ณด์์ ์ฌ๊ฐํ ์ํ์ ์ด๋ํ ์ ์์ต๋๋ค. ๊ทธ๋ ๊ธฐ์ ํ์ ์ ์ ํํ ์ดํดํ๊ณ ์ ์คํ๊ฒ ๋ค๋ฃจ๋ ๊ฒ์ ๋ณด์์ ๊ธฐ๋ณธ์ด์, ์์คํ ์์ ์ฑ์ ๋ณด์ฅํ๋ ์ค์ํ ์์์์. ์ฝ๋๋ฅผ ์์ฑํ์๊ฑฐ๋ ์์คํ ์ ์ค๊ณํ์ค ๋, ์ด๋ฌํ ์ ์ ์ผ๋์ ๋์๋ฉด ๋ณด์์ ํ์ธต ๋ ๊ฐํํ ์ ์๊ฒ ์ฃ ? ใ ใ ๐
์ค๋ ๋ด์ค๋ ํฐ๊ฐ Type Confusion์ ๋ํ ์ดํด์ ํจ๊ป, ๊ฐ๋ฐ๊ณผ ๋ณด์ ๋ชจ๋์ ๋์๋์๊ธธ ๋ฐ๋๋๋ค ๐
ํ์ ๊ธฐ์ธ ์์ฆ ๊ฐ๊ธฐ ์กฐ์ฌํ์๊ณ ๋ค์ ์๊ฐ์๋ ์ ์ตํ๊ณ ์ฌ๋ฐ๋ ๊ธ๊ณผ ํจ๊ป ๋ ๋ต๊ฒ์!
๊ฐ์ฌํฉ๋๋ค! ๐
์๊ฒฌ์ ๋จ๊ฒจ์ฃผ์ธ์