์ฌ๋ฌ๋ถ๋ค ์ฌํด 3์์ ๋ฐฑ์
๊ด์์ C์ธ์ด ์ฌ์ฉ์ ๊ธ์งํ๊ฑฐ ์๊ณ ๊ณ์
จ๋์? C์ธ์ด๊ฐ ๋ณด์์ ์ทจ์ฝํด์ ํ์ฌ๊น์ง ์ด ์ ์ ์ด์ฉํ ์ฌ์ด๋ฒ ๊ณต๊ฒฉ์ด ๊ณ์ ๋๊ณ ์๋ค๊ณ ํ์ฃ . 2024๋
๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ์ค ์์ 5๊ฐ ์์ ๋ค์ด๊ฐ๋ C์ธ์ด๊ฐ ์ด์ ๋ ๋ณด์์ ์์ ํ rust ๋ฑ์ผ๋ก ๋์ฒด๊ฐ ๋ ์ ๋ง์ด๋ผ๊ณ ํฉ๋๋ค.
White House urges developers to dump C and C++
Biden administration calls for developers to embrace memory-safe programing languages and move away from those that cause buffer overflows and other memory access vulnerabilities.
Biden ํ์ ๋ถ๋ ๊ฐ๋ฐ์๋ค์ด ๋ฉ๋ชจ๋ฆฌ ์์ ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ์ฑํํ๊ณ ๋ฒํผ ์ค๋ฒํ๋ก์ฐ ๋ฐ ๊ธฐํ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ ์ทจ์ฝ์ ์ ์ ๋ฐํ๋ ์ธ์ด์์ ๋ฒ์ด๋ ๊ฒ์ ์ด๊ตฌํ๊ณ ์์ต๋๋ค.
์ต๊ทผ ๋ฐฑ์
๊ด์ ์ฌ์ด๋ฒ ์๋ณด ๊ด๋ จ ๊ธฐ๊ด์ธ ๊ตญ๊ฐ ์ฌ์ด๋ฒ ๊ฐ๋
์ค(ONCD)์ ๊ฐ๋ฐ์๋ค์๊ฒ C ๋ฐ C++์ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ์์ ์ฑ ๋ฌธ์ ๊ฐ ์๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ์ฌ์ฉ์ ์ค๋จํ๊ณ , Rust์ ๊ฐ์ด ๋ฉ๋ชจ๋ฆฌ ์์ ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ์ฌ์ฉํ ๊ฒ์ ๊ถ์ฅํ์ต๋๋ค. ์ด๋ ์ฌ์ด๋ฒ ๊ณต๊ฒฉ์ ์ํ์ ์ค์ด๊ธฐ ์ํ ์กฐ์น๋ก, ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ๊ณผ ๊ด๋ จ๋ ๋ฒ๊ทธ์ ์ทจ์ฝ์ ์ ๋ฐฉ์งํ๊ธฐ ์ํจ์
๋๋ค.
C์ธ์ด๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ์์ด์ ์์ ํ์ง ์์ผ๋ฉฐ, ๊ฐ๋น์ง ์์ง๊ธฐ(garbage collector)๊ฐ ์์ด ๋ฉ๋ชจ๋ฆฌ ๋์์ ๊ฐ์ ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ ์ ์์ต๋๋ค. ์ด๋ก ์ธํด ํด์ปค๋ค์ด ํ๋ก๊ทธ๋จ์ ํดํนํ๊ฑฐ๋ ์์คํ
์ ์ ์ดํ ์ ์์ต๋๋ค. ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๊ฐ๋น์ง ์์ง๊ธฐ๊ฐ ๋ด์ฅ๋ ์ธ์ด๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ฐ๋น์ง ์์ง๊ธฐ๊ฐ ์๋ ์ธ์ด๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ํ๋ก๊ทธ๋จ์ ์๋๋ฅผ ๋๋ฆฌ๊ฒ ๋ง๋ค ์ ์์ผ๋ฉฐ, ์ด๋ก ์ธํด ์ฑ๋ฅ ์ ํ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ๊ฐ๋น์ง ์์ง๊ธฐ๊ฐ ์์ง๋ง ๋ฉ๋ชจ๋ฆฌ ๋ณด์์ด ์์ ํ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋ ์ธ์ด, ์๋ฅผ ๋ค์ด Rust, Ada์ ๊ฐ์ ์ธ์ด๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ต๋๋ค.
์ด ๊ธฐ์ฌ ๊ด๋ จํด์ ๋
ธ๋ง๋ ์ฝ๋๋์ด ์ค๋ช
ํด์ฃผ์ ์์ ๊ฐ์ ธ์ ๋ดค์ด์~
๊ฐ๋น์ง ์ปฌ๋ ํฐ(GC, Garbage Collector)๋?
์ฌ์ฉํ์ง ์๋ ๊ฐ์ฒด์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ GC๊ฐ ์ฃผ๊ธฐ์ ์ผ๋ก ๊ฒ์ฌํด์ ์ฒญ์ ํด ์ฃผ๋ ์ญํ ์ ํด์. ์ฐ๋ฆฌ๊ฐ ์๊ณ ์๋ ์ธ์ด ์ค ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ฅผ ๋ด์ฅํ๊ณ ์๋ ๋ํ์ ์ธ ์ธ์ด๋ ์๋ฐ์
๋๋ค.
์๋ฐ ๊ฐ๋น์ง ์ปฌ๋ ํฐ(GC)๋ ์ฃผ๋ก ํ(heap) ์์ญ์์๋ง ์๋ํ๋๋ฐ์. ํ ์์ญ์ ๋์ ์ผ๋ก ๊ฐ์ฒด๊ฐ ์์ฑ๋๊ณ ํ ๋น๋๋ ์ฃผ์ ๊ณต๊ฐ์ด๊ธฐ ๋๋ฌธ์ GC๊ฐ ํ์์ญ์ ์ง์คํ์ฌ ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๋ฐฉ์งํ๊ณ ,
๋นํ์ฑ ๊ฐ์ฒด๋ฅผ ์ ๋ฆฌํ๋ ์ญํ ์ ํ๋๊ฑฐ์ฃ . ๋ฐ๋ฉด ๋ฐ๋ฉด, ์คํ(stack) ์์ญ๊ณผ ๋ฉ์๋(method) ์์ญ์ GC์ ๊ด๋ฆฌ ๋์์ด ์๋๋๋ค.
์๋ฅผ ๋ค๋ฉด ์คํ ๋ฉ๋ชจ๋ฆฌ๋ ๋ฉ์๋ ํธ์ถ์ด ์๋ฃ๋๋ฉด ์๋์ผ๋ก ํด์ ๋๊ธฐ ๋๋ฌธ์ GC์ ๊ฐ์
์ด ํ์ํ์ง ์์ต๋๋ค.
์๋ ๊ทธ๋ฆผ์ฒ๋ผ Heap ์์ญ์ ์๋ ๊ฐ์ฒด ์ค, ๋ฉ์๋๋ ์คํ ์์ญ์์ ์ฐธ์กฐํ๊ณ ์์ง ์์ ๊ฐ์ฒด๊ฐ ๋ฐ๋ก GG์ ๋์์ด ๋์ฃ .
C์ธ์ด๋ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ฅผ ๋ด์ฅํ๊ณ ์์ง ์๋ค. (๋ฉ๋ชจ๋ฆฌ ์ง์ ๊ด๋ฆฌ)
๋ฐ๋ฉด, C, C++์ ๊ฐ์ Unmanaged language์์๋ alloc์ ํ ํ์ free()๋ฅผ ๋ฐ๋์ ํด์ค์ผ ๋์๋ค๋ ์ฌ์ค, ๊ธฐ์ต๋์์ฃ ?
์ง์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ๋ ์์
์ธ๋ฐ์, ๋ง์ฝ ์ด ์์
์ ์ฌ๋ฐ๋ฅด๊ฒ ์ํํ์ง ์์ผ๋ฉด ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ฐํ๋์ง ์์ ๋ฉ๋ชจ๋ฆฌ ๋์(Memory Leak)๋ ๋๊ธ๋ง ํฌ์ธํฐ(Dangling Pointer)๊ฐ ๋ฐ์ํฉ๋๋ค. ์ด๋ฌํ ๋ฌธ์ ๋ค์ ํ๋ก๊ทธ๋จ์ ์์ ์ฑ๊ณผ ๋ณด์์ ์ ํดํ ์ ์์ต๋๋ค.
1. ๋์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ํ ํด์ ํ์ง ์์
2. ์๋ชป๋ ์์ ์์ ๋ฉ๋ชจ๋ฆฌ ํด์
3. ๋ฐ๋ณต์ ์ธ ํ ๋น๊ณผ ํด์
ํนํ ํ๋ก๊ทธ๋จ ๊ท๋ชจ๊ฐ ์ปค์ง๋ฉด ๋์ ์ผ๋ก ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ ๊ฐ์๊ฐ ๋์ด๋๊ฒ ๋๋๋ฐ, ๊ทธ ๋ ๋ถํฐ๋ ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ๋ค์ ์๋ช
์ฃผ๊ธฐ๋ฅผ ํ๋๋ ๋น ์ง์์ด ๊ด๋ฆฌํ๋ ๊ฒ์ ๊ฑฐ์ ๋ถ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ์ ๋ ์ฌ๋ฐ๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ํ์ง ์์ผ๋ฉด ๋ณด์์ทจ์ฝ์ ์ด ๋ง์์ง๋๋ค.
๋ฒํผ ์ค๋ฒํ๋ก ๊ด๋ จํ ํดํน ๋ฌธ์
๋ฒํผ ์ค๋ฒํ๋ก๋ ๋ฒํผ์ ๋ฐ์ดํฐ๋ฅผ ์ฐ๋ ์ํํธ์จ์ด๊ฐ ๋ฒํผ์ ์ฉ๋์ ์ด๊ณผํ์ฌ ์ธ์ ํ ๋ฉ๋ชจ๋ฆฌ ์์น๊น์ง ๋ฎ์ด์ธ ๋ ๋ฐ์ํ๋ ๋ณด์ ์ทจ์ฝํ์์
๋๋ค. ๋ฌ๋ฆฌ ๋งํ์๋ฉด, ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ถฉ๋ถํ์ง ์์ ์ปจํ
์ด๋์ ๋๋ฌด ๋ง์ ์ ๋ณด๊ฐ ์ ๋ฌ๋์ด ๊ฒฐ๊ตญ ํด๋น ์ ๋ณด๊ฐ ์ธ์ ํ ์ปจํ
์ด๋์ ๋ฐ์ดํฐ๋ฅผ ๋์ฒดํ๊ฒ ๋๋ ๊ฒ์
๋๋ค. ๊ทธ๋์ ๋ฒํผ ์ค๋ฒํ๋ก๋ ํ๋ก๊ทธ๋จ ์คํ์ ๋ฐฉํดํ๊ฑฐ๋ ์ ์ดํ๊ธฐ ์ํด ์ปดํจํฐ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์์ ํ๋ ค๋ ๊ณต๊ฒฉ์๊ฐ ์
์ฉํ๋ ์๋จ์ด ๋ฉ๋๋ค.
๊ณต๊ฒฉ์๋ ์กฐ์๋ ์
๋ ฅ์ ํ๋ก๊ทธ๋จ์ ์๋์ ์ผ๋ก ์ฝ์
ํ์ฌ ํ๋ก๊ทธ๋จ์ด ํด๋น ์
๋ ฅ์ ์ถฉ๋ถํ ํฌ์ง ์์ ๋ฒํผ์ ์ ์ฅํ๋๋ก ํ์ฌ ๋ฒํผ ๊ณต๊ฐ์ ์ฐ๊ฒฐ๋ ๋ฉ๋ชจ๋ฆฌ ์ผ๋ถ๋ฅผ ๋ฎ์ด์ฐ๊ฒ ํ ์ ์์ต๋๋ค. ํ๋ก๊ทธ๋จ์ ๋ฉ๋ชจ๋ฆฌ ๋ ์ด์์์ด ์ ์ ์๋์ด ์๋ค๋ฉด ๊ณต๊ฒฉ์๋ ์คํ ์ฝ๋๊ฐ ํฌํจ๋ ๊ฒ์ผ๋ก ์๋ ค์ง ์์ญ์ ์๋์ ์ผ๋ก ๋ฎ์ด์ธ ์ ์์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ๊ณต๊ฒฉ์๋ ์ด ์ฝ๋๋ฅผ ์์ ์ ์คํ ์ฝ๋๋ก ๋์ฒดํ์ฌ ํ๋ก๊ทธ๋จ์ ์๋ ๋ฐฉ์์ ํฌ๊ฒ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ๋ฉ๋ชจ๋ฆฌ์ ๋ฎ์ด์ด ๋ถ๋ถ์ ํฌ์ธํฐ(๋ฉ๋ชจ๋ฆฌ์ ๋ค๋ฅธ ์์น๋ฅผ ๊ฐ๋ฆฌํค๋ ๊ฐ์ฒด)๊ฐ ํฌํจ๋์ด ์๋ ๊ฒฝ์ฐ ๊ณต๊ฒฉ์์ ์ฝ๋๋ ํด๋น ์ฝ๋๋ฅผ ์ต์คํ๋ก์ ํ์ด๋ก๋๋ฅผ ๊ฐ๋ฆฌํค๋ ๋ค๋ฅธ ํฌ์ธํฐ๋ก ๋์ฒดํ ์ ์์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ ์ฒด ํ๋ก๊ทธ๋จ์ ์ ์ด๊ถ์ด ๊ณต๊ฒฉ์์ ์ฝ๋๋ก ๋์ด๊ฐ ์ ์์ต๋๋ค.
ํนํ C์ C++๋ ๋ฉ๋ชจ๋ฆฌ์ ์๋ ๋ฐ์ดํฐ์ ์ก์ธ์คํ๊ฑฐ๋ ๋ฎ์ด์ฐ๋ ๊ฒ์ ๋ํ ๋ณดํธ ๊ธฐ๋ฅ์ด ๋ด์ฅ๋์ด ์์ง ์์ผ๋ฏ๋ก ๋ฒํผ ์ค๋ฒํ๋ก์ ๋งค์ฐ ์ทจ์กํฉ๋๋ค. Windows, Mac OSX, Linux๋ C๋ C++์ผ๋ก ์์ฑ๋ ๋ถ๋ถ์ ํฌํจํ๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ์ด์ฉํ ๊ณต๊ฒฉ์ ์ทจ์ฝ์ ์ด ์๋ค๋ ๊ฒ์ด์ฃ .
๋ฒํผ ์ค๋ฒํ๋ก ์ ํ
์ถ์ฒ: https://www.cloudflare.com/ko-kr/learning/security/threats/buffer-overflow/
- ์คํ ์ค๋ฒํ๋ก ๊ณต๊ฒฉ - ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ์ ํ์ ๋ฒํผ ์ค๋ฒํ๋ก ๊ณต๊ฒฉ์ผ๋ก, ํธ์ถ ์คํ*์ ๋ฒํผ๋ฅผ ์ค๋ฒํ๋ก์ํค๋ ๊ณต๊ฒฉ์ ๋๋ค.
- ํ ์ค๋ฒํ๋ก ๊ณต๊ฒฉ - ์ด ์ ํ์ ๊ณต๊ฒฉ์ ํ*์ผ๋ก ์๋ ค์ง ๊ฐ๋ฐฉํ ๋ฉ๋ชจ๋ฆฌ ํ์ ๋ฐ์ดํฐ๋ฅผ ๋์์ผ๋ก ํฉ๋๋ค.
- ์ ์ ์ค๋ฒํ๋ก ๊ณต๊ฒฉ - ์ ์ ์ค๋ฒํ๋ก์ ๊ฒฝ์ฐ์๋ ์ฐ์ ์ฐ์ฐ์ผ๋ก ์ธํด ์ ์ฅํ๋ ค๋ ์ ์ ์ ํ์ ๋นํด ๋๋ฌด ํฐ ์ ์๊ฐ ์์ฑ๋๋ฉฐ, ์ด๋ก ์ธํด ๋ฒํผ ์ค๋ฒํ๋ก๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
- ์ ๋์ฝ๋ ์ค๋ฒํ๋ก - ์ ๋์ฝ๋ ์ค๋ฒํ๋ก๋ ASCII ๋ฌธ์๋ฅผ ์์ํ๋ ์ ๋ ฅ์ ์ ๋์ฝ๋ ๋ฌธ์๋ฅผ ์ฝ์ ํ์ฌ ๋ฒํผ ์ค๋ฒํ๋ก๋ฅผ ์์ฑํฉ๋๋ค.(ASCII์ ์ ๋์ฝ๋๋ ์ปดํจํฐ๊ฐ ํ ์คํธ๋ฅผ ํํํ ์ ์๋๋ก ํ๋ ์ธ์ฝ๋ฉ ํ์ค์ ๋๋ค.์๋ฅผ ๋ค์ด ๋ฌธ์ 'a'๋ ASCII์์ ์ซ์ 97๋ก ํ์๋ฉ๋๋ค.ASCII ์ฝ๋๋ ์์ ์ธ์ด์ ๋ฌธ์๋ง ์ง์ํ์ง๋ง, ์ ๋์ฝ๋๋ ์ง๊ตฌ์์ ๊ฑฐ์ ๋ชจ๋ ๋ฌธ์ ์ธ์ด์ ๋ฌธ์๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.์ ๋์ฝ๋๋ก ์ฌ์ฉํ ์ ์๋ ๋ฌธ์๊ฐ ํจ์ฌ ๋ ๋ง์ผ๋ฏ๋ก ์ ๋์ฝ๋ ๋ฌธ์๊ฐ ๊ฐ์ฅ ํฐ ASCII ๋ฌธ์๋ณด๋ค ํฐ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค).
์๋ ๋ธ๋ก๊ทธ๋ Garbage ์ปฌ๋ ํฐ ์๋ ์๋ฆฌ๋ฅผ ์ ์ ๋ฆฌํด ๋์ผ์
์ ์คํฌ๋ฉ ํด์์ต๋๋ค.
์ C์ธ์ด๊ฐ ๋ฉ๋ชจ๋ฆฌ ์์ ์ ์ทจ์ฝํ์ง ๋ ๋ง์ ์ ๋ณด๊ฐ ๊ถ๊ธํ์ ๋ถ์ ์๋ ๋ธ๋ก๊ทธ ๊ธ ์ฐธ์กฐ ํด ์ฃผ์ธ์~
'์ด๊ฒ์ ๊ฒ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋๋ ํฌ๋ฃจ๊ฑฐ ํจ๊ณผ(๋ ์์ ์ ์๋ผ) (48) | 2024.11.24 |
---|---|
์ ์์ ๊ฐ์ดํ๊ฒ ๊นจ์ด๋๋ ๋น๋ฒ, '90๋ถ' ๋ฐฐ์๋ก ์๊ธฐ (44) | 2024.11.24 |
์์ฝ๋ฉ, ํ๋์ฝ๋ฉ, ํธ๋์ฝ๋ฉ, ๋ ์ฝ๋ฉ ๋ป (12) | 2024.11.14 |
[์คํฌ๋ฉ] "๋๋ฌด ์๋ฆ ๋๋๋ค" 100๋ ์ ์ ๋ฏธ๋ฆฌ ์๊ฒฌํ ํ์ฌ ๋ชจ์ต (8) | 2024.11.07 |
[์ ๋จธ] ํ์งํ๋ ๋จํธ ์ก๋ ์ฌ์ดํธ๊ฐ ์ธ๊ตญ์์ ๋ฑ์ฅ (3) | 2024.10.29 |