BOF์ ๋ํ ๋ด์ฉ์ ์ ๋ฆฌํ๊ธฐ์ ์์, ์ทจ์ฝ์ (Vulnerability)๊ณผ ๊ด๋ จ๋ ์ฉ์ด์ ๋ํด ์์๋ณด์
๐ Vulnerability
์ํํธ์จ์ด์์ ๋ก๊ทธ์ธ ์์ด ์ก์ธ์ค๋ฅผ ํ์ฑํํ๊ฑฐ๋ ํ๊ฐ๋์ง ์์ ์ฝ๋๋ฅผ ์คํํ๊ฑฐ๋ ์ปดํจํฐ๋ฅผ ์์์ํค๋ ๋ฑ ๊ณต๊ฒฉ ์ ์๊ธฐ์น ์์ ์ปดํจํฐ ๋์์ ๋ฐ์์ํค๋ Bug ์ด๋ค.
๐ Exploit
ํ๋ก๊ทธ๋จ์ ์กด์ฌํ๋ Bug๋ฅผ ์
์ฉํ๋ input์ด๋ค.
- Exploitable: Bug๋ฅผ ์ด์ฉํด์ ์ํํธ์จ์ด๋ฅผ ์ฑ๊ณต์ ์ผ๋ก ์ฅ์
ํ ์ ์๋ค. (๊ณต๊ฒฉํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ค๋ฉด 'exploitable ํ์ง ์๋ค'๊ณ ํ๋ค.)
๐ Threat
์ปดํจํฐ ๋ณด์์์ Threat์ ์ทจ์ฝ์ฑ์ ์
์ฉํ์ฌ ๋ณด์์ ์๋ฐํจ์ผ๋ก์จ ํผํด๋ฅผ ์
ํ ๊ฐ๋ฅ์ฑ์ด ์๋ ์ํ์ด๋ค.
์ทจ์ฝ์ ๊ณต๊ฒฉ์ ์ข
๋ฅ๋ ๊ทธ ๊ตฌ๋ถ ๋ฐฉ๋ฒ์ ๋ฐ๋ผ ์ฌ๋ฌ ๊ฐ์ง๋ก ๋๋ ์ ์์ผ๋ฉฐ, ๊ทธ ์ค ํ๋๊ฐ BOF ์ทจ์ฝ์ ๊ณต๊ฒฉ ์ด๋ค.
๊ทธ๋ ๋ค๋ฉด, BOF ์ทจ์ฝ์ ๊ณต๊ฒฉ์ ๋ฌด์์ธ๊ฐ?
๐ Buffer
๋ฐ์ดํฐ๋ฅผ ํ ๊ณณ์์ ๋ค๋ฅธ ํ ๊ณณ์ผ๋ก ์ ์กํ๋ ๋์ ์ผ์์ ์ผ๋ก ๊ทธ ๋ฐ์ดํฐ๋ฅผ ๋ณด๊ดํ๋ ๋ฉ๋ชจ๋ฆฌ์ ์์ญ์ ์๋ฏธํ๋ค.
๐ Overflow
์ฌ์ ์ ์ผ๋ก '์ฉ๋์ ์ด๊ณผํ์ฌ ๋์ณ ํ๋ฅธ๋ค'๋ ๋ป์ ์ฉ์ด๋ก, ํ์ ๋ ๋ฉ๋ชจ๋ฆฌ ์ฉ๋์ ๋์ด๊ฐ๋ ๊ฐ์ด ๋ค์ด๊ฐ ๋ ๋ฐ์ํ๋ ์ค๋ฅ๋ฅผ ์๋ฏธํ๋ค.
๐ก Buffer Overflow (BOF)
Buffer๊ฐ ํ๋ฌ๋์ณ ๋ฐ์ํ๋ ๊ฒ์ผ๋ก, ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ ๋ ํ๋ก๊ทธ๋๋จธ๊ฐ ์ง์ ํ ๋ฉ๋ชจ๋ฆฌ ๋ฐ๊นฅ์ชฝ์ ์ ์ฅํ๋ ๊ฒ์ด๋ค.
๋ฒ์ด๋ ๋ฐ์ดํฐ๋ ๊ฐ๊น์ด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ฎ์ด์ฐ๊ฒ ๋๋๋ฐ, ํด๋น ๋ฉ๋ชจ๋ฆฌ์ ๋ค๋ฅธ ๋ฐ์ดํฐ๊ฐ ํฌํจ๋์ด์์ ๊ฐ๋ฅ์ฑ์ด ์๋ค.
C ๋ฐ C++์ ๋ณ์์ ๋ฒ์๋ฅผ ๊ฒ์ฌํ์ง ์์ ํนํ Buffer Overflow์ ์ทจ์ฝํ๋ค. (๊ฐ์ด Buffer๋ฅผ ์ด๊ณผํ๋๋ผ๋ ์ ๊ฒฝ์ฐ์ง ์๊ณ ์ ์ฅํ๋ค.)
๐ซ๋จ์ํ ๋ฐ์ดํฐ๊ฐ ๋ฐ๋๋ ๊ฒ์ ๊ทธ์น์ง ์๊ณ ํดํน์ ์ฌ์ฉ๋๋ค๋ฉด?๐ซ
์
์์ ์ธ ๊ณต๊ฒฉ์๋ ์์ ๊ฐ์ ์ทจ์ฝ์ ์ ์๊ณ ๋ฐ์ดํฐ์ ๊ธธ์ด์ ๋ด์ฉ์ ์ ์ ํ ์กฐ์ ํ์ฌ ์๋์ ์ผ๋ก Buffer Overflow๋ฅผ ์ผ์ผ์ผ์ ํน์ ์ฝ๋๋ฅผ ์คํ์ํค๋๋ก ํ๋ค.
๐ก BOF ์ข
๋ฅ
Stack์ ์กด์ฌํ๋ Buffer์ ๋ํ ๊ณต๊ฒฉ์ด๋ Heap์ ์กด์ฌํ๋ Buffer์ ๋ํ ๊ณต๊ฒฉ์ด๋์ ๋ฐ๋ผ Stack BOF์ Heap BOF๋ก ๊ตฌ๋ถ๋๋ค.
- Stack BOF
Stack (ํจ์ ์ฒ๋ฆฌ๋ฅผ ์ํด ์ง์ญ ๋ฐ ๋งค๊ฐ๋ณ์๊ฐ ์์นํ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ) ๊ตฌ์กฐ ์, ํ ๋น๋ Buffer๊ฐ ์ ์๋ Buffer ํ๊ณ์น๋ฅผ ๋๋ ๊ฒฝ์ฐ ๋ณต๊ท ์ฃผ์๋ฅผ ๋ณ๊ฒฝํ์ฌ ๊ณต๊ฒฉ์๊ฐ ์์ ์ฝ๋๋ฅผ ์ํ
- Heap BOF
Heap (malloc()๋ฑ์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ํจ์๋ก ์ฌ์ฉ์๊ฐ ๋์ ์ผ๋ก ํ ๋นํ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ) ๊ตฌ์กฐ ์, ์ต์ด ์ ์๋ Heap์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ด์ฆ๋ฅผ ์ด๊ณผํ๋ ๋ฌธ์์ด๋ค์ด Heap์ Buffer์ ํ ๋น๋ ์, ๊ณต๊ฒฉ์๊ฐ ๋ฐ์ดํฐ ๋ณ๊ฒฝ ๋ฐ ํจ์ ์ฃผ์ ๋ณ๊ฒฝ์ผ๋ก ์์ ์ฝ๋๋ฅผ ์ํ
โก ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ
-
Stack
- ํ๋ก๊ทธ๋จ์ด ์๋์ผ๋ก ์ฌ์ฉํ๋ ์์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ผ๋ก, ์ง์ญ๋ณ์, ๋งค๊ฐ๋ณ์, ๋ฆฌํด ๊ฐ ๋ฑ์ด ์ ์ ์ฌ์ฉ๋์๋ค๊ฐ ์ฌ๋ผ์ง๋ ์์์ ์ธ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ์์ญ
- ํจ์ ํธ์ถ ์ ์์ฑ๋๊ณ ํจ์๊ฐ ๋๋๋ฉด ๋ฐํ
- Stack์ ์ฌ์ด์ฆ๋ ๊ฐ ํ๋ก์ธ์ค๋ง๋ค ํ ๋น๋์ง๋ง, ํ๋ก์ธ์ค๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋๋ ๋ Stack ์ฌ์ด์ฆ๊ฐ ๊ณ ์ ๋์ด ์์ด ๋ฐํ์์ ์ฌ์ด์ฆ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅ
- ๋ฉ๋ชจ๋ฆฌ์ ๋์ ์ฃผ์์์ ๋ฎ์ ์ฃผ์์ ๋ฐฉํฅ์ผ๋ก ์ ์ฅ
-
Heap
- ํ์์ ์ํด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋์ ํ ๋นํ๊ณ ์ ํ ๋ ์ฌ์ฉํ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ผ๋ก, ๋์ ๋ฐ์ดํฐ ์์ญ
- ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๊ฐ์ ์ํด์๋ง ์ฐธ์กฐ๋๊ณ ์ฌ์ฉ
- ์ด ์์ญ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ์ํด C์์ malloc()ํจ์๋ฅผ ์ฌ์ฉ
- ๋ฉ๋ชจ๋ฆฌ์ ๋ฎ์ ์ฃผ์์์ ๋์ ์ฃผ์์ ๋ฐฉํฅ์ผ๋ก ํ ๋น
โก Stack BOF
-
๊ณต๊ฒฉ์๋ SFP ์์ญ๊น์ง ๊ฐ์ ๋์น๊ฒ ๋ฎ์ด ์ด ํ, RET ์์ญ๊น์ง ๋๋ฌ, RET ์์ญ์ ์ฃผ์๋ฅผ ์
์ฑ ์ฝ๋์ ์ฃผ์๋ก ๋ณ๊ฒฝํ์ฌ ์คํ๋๋๋ก ์ ๋ํ๋ ํํ๋ก Stack BOF๋ฅผ ์ํ
-
์
์ฑ ์ฝ๋ ๋ด setuid๋ฅผ ์ค์ ํ์ฌ root ๊ถํ์ผ๋ก์ ๊ถํ ์์น ๋ฑ ๋ค์ํ ๊ณต๊ฒฉ์ ์ด์ฉ ๊ฐ๋ฅ
โก Heap BOF
- Heap ์์ญ์ ๋ฎ์ ์ฃผ์์ ์๋ ๋ฒํผ๊ฐ ๋์ณ์ ๋ค๋ฅธ ๋ฒํผ๋ฅผ ์นจ๋ฒํ์ฌ ๋ฐ์
- ๋์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ์ฐ๊ฒฐ(malloc ์์ ์์ค ๋ฐ์ดํฐ)์ ๋ฎ์ด ์์ผ๋ก์จ ํ๋ก๊ทธ๋จ์ ํจ์ ํฌ์ธํฐ๋ฅผ ์กฐ์
- Stack BOF ๋งํผ ํํ ์ฌ์ฉ ๊ฐ๋ฅํ ๊ณต๊ฒฉ์ ์๋๋ค.
โก C ์ธ์ด BOF ์ฃผ์ ํจ์
- strcpy(char dst, const char src)
- src ๋ฌธ์์ด์ dst ๋ฒํผ์ ์ ์ฅ
- src ๋ฌธ์์ด ๊ธธ์ด๋ฅผ ์ฒดํฌํ์ง ์์, dst ๋ฒํผ๋ฅผ ์ด๊ณผํ๋ BOF ๊ฐ๋ฅ
- strncpy(char dst, const char src, size_t len)
- src ๋ฌธ์์ด์ len ๋งํผ์ dst ๋ฒํผ์ ์ ์ฅ
- src ๋ฌธ์์ด ๊ธธ์ด๋ฅผ ์ ํํ์ฌ BOF ๋ฐฉ์ง ๊ฐ๋ฅ
- size_t strlen(const char *str)
- ๋ฌธ์์ด(str)์ null ๋ฌธ์๋ฅผ ์ ์ธํ ๋ฐ์ดํธ ์๋ฅผ ๋ฐํ
- sizeof(ํผ์ฐ์ฐ์)
- ํผ์ฐ์ฐ์์ ํฌ๊ธฐ๋ฅผ ๋ฐํ
โก Buffer Overflow ๋ฐฉ์ง๋ฒ
- BOF๋ฅผ ์ผ์ผํฌ ์ฌ์ง๊ฐ ์๋ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํจ์๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค.
- ์
๋ ฅ ๊ฐ ๊ฒ์ฌ๋ฅผ ํ๋ค. ๋ชจ๋ ์
๋ ฅ์ ๋ฐ์๋ค์ด๊ณ ํน์ ์
๋ ฅ์ ์ฐจ๋จํ๋ ๋ฐฉ์์์ ํน์ ์
๋ ฅ๋ง ๋ฐ์๋ค์ด๊ณ , ๋๋จธ์ง๋ฅผ ์ฐจ๋จํ๋ ๋ฐฉ์์ ๊ณ ๋ คํด์ผ ํ๋ค.
- ํ๋ก๊ทธ๋๋ฐ ์ ๋ฒํผ ๊ฒฝ๊ณ ๊ฒ์ฌ๋ฅผ ํ๋ค.
- BOF์ ์์ ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ค.
- ๊ฐ์ข
BOF ๋์ ๊ธฐ์ ์ ์ฌ์ฉํ๋ค.
- BOF ์ ์ ๋ถ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ค. ๋ง์ ๋ถ์๋๊ตฌ๊ฐ BOF ๊ฒฐํจ์ ํ์งํด๋ผ ์ ์๋ค.
- BOF๋ฅผ ๋ฐฉ์งํ ์ ์๋ค๋ ์ฃผ์ฅ๋ ์๋ค.
โก BOF ๋์ ๊ธฐ์
- Stack Guard (Canary Word Method)
๋ฉ๋ชจ๋ฆฌ ์ ํ๋ก๊ทธ๋จ ๋ณต๊ท ์ฃผ์์ ๋ณ์ ์ฌ์ด์ ํน์ ๊ฐ(Canary Word)๋ฅผ ์ ์ฅ, ๊ทธ ๊ฐ์ด ๋ณ๊ฒฝ๋์์ ๊ฒฝ์ฐ BOF๋ก ๊ฐ์ฃผํ๊ณ ํ๋ก๊ทธ๋จ ์ค๋จ
- Stack Shield
๋ณต๊ท ์ฃผ์๋ฅผ Global RET๋ผ๋ ํน์ Stack์ ์ ์ฅ ํ, ํจ์ ์ข
๋ฃ ์์ ์ ์ฅ๋ ๊ฐ๊ณผ RET ๊ฐ์ ๋น๊ตํ์ฌ ๋ค๋ฅผ ์, BOF๋ก ๊ฐ์ฃผํ๊ณ ํ๋ก๊ทธ๋จ ์ค๋จ
- ASLR (Address Space Layout Randomization)
ํ๋ก๊ทธ๋จ ์คํ ์ ๋ง๋ค ๋ฉ๋ชจ๋ฆฌ ์ฃผ์ ๊ณต๊ฐ์ ๋์ํ ํ์ฌ ํน์ ์ฃผ์ ํธ์ถ ๋ฐฉ์ง
ํด์ปค๊ฐ BOF์ ์ฌ์ฉํ ์ฌ๋ฌ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ค์ ์ฐพ๊ธฐ ์ด๋ ต๊ฒ ๋ง๋๋ ๊ฒ
์ ๊ธฐ์ ๋ค์ ํ์ฌ OS์ ๊ธฐ๋ณธ์ผ๋ก ๋ฐ์๋์ด์๋ค.
โก ์ค์ ์ฌ๋ก
- Heartbleed
- Ariane 5 ๋ก์ผ ํญํ ์ฌ๊ณ
- ์๋์ฐ XP
9999๋
12์ 31์ผ ์คํ 11์ 59๋ถ 59์ด์์ 1์ดํ์ธ 10000๋
์ด ๋๋ฉด, CPU์ ์ ์ ์จ์ด ๊ธ์์นํ๋ ์ค๋ฅ
์ดํ์๋ BOF ์ทจ์ฝ์ ํดํน ์ค์ต์ ๋ํด ๋ค๋ค๋ณด๋๋ก ํ๊ฒ ๋ค.
Reference