Reverse Engineering

Reverse Engineering software ๋ฅผ ๋ถ„์„ํ•˜์—ฌ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์—ญ์œผ๋กœ ์ƒ์„ฑ ํ•ด ๋‚ด๋Š” ๊ธฐ๋ฒ• software ๋ถ„์„ ๋ฐฉ๋ฒ• Static analysis ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰์‹œํ‚ค์ง€ ์•Š๊ณ  ์ˆ˜ํ–‰ํ•˜๋Š” ๋ถ„์„์ด๋‹ค. ํ”„๋กœ๊ทธ๋žจ์˜ ์ „์ฒด ๊ตฌ์กฐ๋ฅผ ํŒŒ์•…ํ•˜๊ธฐ ์‰ฌ์šฐ๋ฉฐ, ํ™˜๊ฒฝ์  ์ œ์•ฝ ์‚ฌํ•ญ์— ์ž์œ ๋กญ๊ณ , ์•…์„ฑ ์ฝ”๋“œ์˜ ์œ„ํ˜‘์œผ๋กœ๋ถ€ํ„ฐ ์•ˆ์ „ํ•˜๋‹ค. ๋‚œ๋…ํ™” ์ ์šฉ์‹œ ๋ถ„์„์ด ์–ด๋ ค์›Œ ์ง„๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค. ์ •์ ๋ถ„์„์— ์‚ฌ์šฉ๋˜๋Š” ํˆด๋กœ๋Š” IDA ๊ฐ€ ์žˆ๋‹ค. IDA ๋Š” ํ”„๋ฆฌ์›จ์–ด๋กœ https://hex-rays.com/ida-free/ ์—์„œ ๋‹ค์šด ๊ฐ€๋Šฅํ•˜๋‹ค. Dynamic analysis ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰์‹œํ‚ค๋ฉฐ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ถ„์„์ด๋‹ค. ํ”„๋กœ๊ทธ๋žจ์˜ ๊ฐœ๋žต์ ์ธ ๋™์ž‘์„ ๋น ๋ฅด๊ฒŒ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ •์  ๋ถ„์„๊ณผ ๋ฐ˜๋Œ€๋กœ ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰์— ํ•„์š”ํ•œ ํ™˜๊ฒฝ ๊ตฌ์„ฑ์ด ์–ด๋ ค์šธ ์ˆ˜ ์žˆ๋‹ค. ์•ˆํ‹ฐ ๋””๋ฒ„๊น… ๊ธฐ๋ฒ• ์ ์šฉ๋œ ํ”„๋กœ๊ทธ๋žจ์€ ๋””๋ฒ„๊น…์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. IDA ๋ฆฌ๋ฒ„์Šค ์—”์ง€๋‹ˆ์–ด๋ง ํˆด ๋‹จ์ถ•์–ด shift + F12 ๋ฌธ์ž์—ด ๊ฒ€์ƒ‰, String ํƒญ์œผ๋กœ ์ด๋™ x ์ƒํ˜ธ์ฐธ์กฐ ํ™•์ธ, ๋ณ€์ˆ˜ ๋˜๋Š” ํ•จ์ˆ˜๊ฐ€ ์‚ฌ์šฉ๋˜๋Š” ๊ณณ์˜ ์œ„์น˜๋ฅผ ํ™•์ธ F5 ์–ด์…ˆ๋ธ”๋ฆฌ๋ฅผ C ์–ธ์–ด ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜ g ํŠน์ • ์ฃผ์†Œ ํ˜น์€ ๋ผ์ธ์œผ๋กœ ์ด๋™ ๋””์ปดํŒŒ์ผ ๋œ ํ•จ์ˆ˜ ์ด๋ฆ„ ์œ„์— ์ปค์„œ๋ฅผ ๋†“๊ณ  g ๋ฅผ ๋ˆ„๋ฅด๋ฉด ์–ด์…ˆ๋ธ”๋ฆฌ ์ƒ ํ•จ์ˆ˜ ๋ผ์ธ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•จ์ˆ˜ ์ด๋ฆ„์„ ์ ์–ด๋„ ํ•จ์ˆ˜ ์œ„์น˜๋กœ ์ด๋™๋œ๋‹ค. ESC ์ด์ „ ์ปค์„œ ์œ„์น˜๋กœ ์ด๋™ Ctrl + Enter ๋‹ค์Œ ์ปค์„œ ์œ„์น˜๋กœ ์ด๋™ n ๋ณ€์ˆ˜ ์ด๋ฆ„ ๋ฐ”๊พธ๊ธฐ Y ๋ณ€์ˆ˜ ํƒ€์ž… ์„ค์ • ํ•จ์ˆ˜ ๋งค๊ฐœ๋ณ€์ˆ˜ ๋ณ€๊ฒฝ, ํ•จ์ˆ˜ ๋งค๊ฐœ๋ณ€์ˆ˜ ํƒ€์ž… ๋ณ€๊ฒฝ F2 ์–ด์…ˆ๋ธ”๋ฆฌ ํ˜น์€ C ์–ธ์–ด ๋ผ์ธ์—์„œ๋Š” break point(์ค‘๋‹จ์ ) ์„ค์ • stack ๋˜๋Š” hex View ์—์„œ๋Š” ๊ฐ’ ๋ณ€๊ฒฝ F9 ์‹คํ–‰ (run) ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰์‹œ์ผœ ๋™์  ๋ถ„์„์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. F8 ํ•œ ๋‹จ๊ณ„ ์‹คํ–‰ (next) F7 ํ•จ์ˆ˜ ๋‚ด๋ถ€๋กœ ์ง„์ž… (step int) Ctrl + F2 ๋””๋ฒ„๊น… ์ค‘๋‹จ r hex ๋ฐ์ดํ„ฐ๋ฅผ ๋ฌธ์ž๋กœ ๋ณ€ํ™˜ Shift + E ์„ ํƒํ•œ ๊ฐ’์„ ์›ํ•˜๋Š” ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ถ”์ถœ(export) hex ๋ฐ์ดํ„ฐ๋ฅผ ๋ฌธ์ž์—ด๋กœ ์ถ”์ถœํ•  ๋•Œ ์œ ์šฉํ•˜๋‹ค. ํ™”๋ฉด IDA View ...

<span title='2024-05-12 14:42:07 +0900 KST'>May 12, 2024</span>&nbsp;ยท&nbsp;5 min&nbsp;ยท&nbsp;AswinBlue

Exploit

Exploit pwntool์˜ checksec ๋ช…๋ น์–ด๋กœ ์–ด๋–ค ๋ณด์•ˆ์ด ์ ์šฉ๋˜์—ˆ๋Š”์ง€ ํ™•์ธ ๊ฐ€๋Šฅํ•˜๋‹ค. Shell Code exploit์€ ํŒŒ์ผ ์ฝ๊ณ  ์“ฐ๊ธฐ(open-read-write, orw), ์…ธ ๋ช…๋ น ์‹คํ–‰(execve) ๊ถŒํ•œ์„ ์ทจ๋“ํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•œ๋‹ค. Shell ๊ถŒํ•œ์„ ํš๋“ํ•˜๊ธฐ ์œ„ํ•œ ์–ด์…ˆ๋ธ”๋ฆฌ ์ฝ”๋“œ๋“ค์˜ ๋ชจ์Œ์„ โ€˜Shell Codeโ€™ ๋ผ ์นญํ•œ๋‹ค. ํ™˜๊ฒฝ์„ธํŒ… pwntools checksec shellcraft ROPgadget one_gadget patchelf ์ทจ์•ฝ์  ๊ณต๊ฒฉ ์ˆœ์„œ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ๋ถ„์„ํ•˜์—ฌ ๋ณดํ˜ธ๊ธฐ๋ฒ•์„ ํ™•์ธํ•œ๋‹ค. checksec ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ”์ด๋„ˆ๋ฆฌ์— ์ ์šฉ๋œ ๋ณดํ˜ธ๊ธฐ๋ฒ•์„ ํ™•์ธํ•˜๊ณ , ์ ์šฉ ๋ถˆ๊ฐ€๋Šฅํ•œ exploit ๊ธฐ๋ฒ•์„ ์ถ”๋ ค๋‚ธ๋‹ค. checksec ์ฐธ์กฐ ldd ๋ช…๋ น์„ ํ™œ์šฉํ•˜์—ฌ ์˜์กด์„ฑ ๊ด€๊ณ„๋ฅผ ํ™•์ธํ•œ๋‹ค. ldd ๋ช…๋ น ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•˜์—ฌ ์ทจ์•ฝ์  ๋ฐ ๊ตฌ์กฐ(stack ํ˜•ํƒœ)์„ ํŒŒ์•…ํ•œ๋‹ค stack์€ ํ•จ์ˆ˜์—์„œ ์„ ์–ธ๋œ ์ˆœ์„œ๋Œ€๋กœ ํ• ๋‹น๋˜์ง€ ์•Š์Œ์— ์ฃผ์˜ํ•˜๋ฉฐ, ๋ฌด์กฐ๊ฑด assembly์–ด๋ฅผ ํ†ตํ•ด stack ์ฃผ์†Œ์—์„œ ํŠน์ • ๋ณ€์ˆ˜์˜ ์œ„์น˜๋ฅผ ํ™•์ธํ•˜๋„๋ก ํ•œ๋‹ค. ...

<span title='2024-03-11 20:46:33 +0900 KST'>March 11, 2024</span>&nbsp;ยท&nbsp;67 min&nbsp;ยท&nbsp;AswinBlue

GDB

GDB GNU Debugger์˜ ์•ฝ์ž ์œ ๋‹‰์Šค์˜ ๋””๋ฒ„๊ฑฐ๋Š” ์˜คํ”ˆ์†Œ์Šค๊ฐ€ ์•„๋‹ˆ๋ผ GNU์—์„œ ์ƒˆ๋กœ ๊ฐœ๋ฐœํ•œ ๋””๋ฒ„๊ฑฐ ๋””๋ฒ„๊น…์„ ์œ„ํ•ด์„œ๋Š” register(๋ ˆ์ง€์Šคํ„ฐ ๊ฐ’), disassem(rip ๋ถ€๊ทผ ์ฃผ์†Œ๋ฅผ ๋””์Šค์–ด์…ˆ ํ•œ ๊ฐ’), stack(์Šคํƒ์˜ ๊ฐ’), backtrace(ํ˜„์žฌ rip์— ๋„๋‹ฌ ํ•  ๋•Œ ๊นŒ์ง€ ๊ฑฐ์ณ๊ฐ„ ํ•จ์ˆ˜๋“ค) ์„ ํŒŒ์•…ํ•ด์•ผ ํ•˜๋ฉฐ, ์ด๋ฅผ context(๋งฅ๋ฝ) ์ด๋ผ ํ•œ๋‹ค. pwndbg ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์„ค์น˜ํ•˜๋ฉด hacking์— ๊ด€๋ จ๋œ ๋‚ด์šฉ์„ ๋””๋ฒ„๊น…ํ•˜๊ธฐ ์šฉ์ดํ•˜๋‹ค. https://github.com/pwndbg/pwndbg ์ฃผ์†Œ์—์„œ git์„ clone ๋ฐ›๊ณ , ./setup.sh๋ฅผ ์‹คํ–‰์‹œํ‚ค๋ฉด ์ดํ›„ gdb ๋ช…๋ น์„ ์น  ๋•Œ ์ž๋™์œผ๋กœ pwndbg ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์ ์šฉ๋œ gdb๊ฐ€ ์‹คํ–‰๋œ๋‹ค. ์ปดํŒŒ์ผ gcc๋กœ ์ปดํŒŒ์ผ์‹œ ์˜ต์…˜์— -g ๋ฅผ ๋ถ™์—ฌ์•ผ ์†Œ์Šค๋ฅผ ๋ณด๋ฉด์„œ ๋””๋ฒ„๊น…์ด ๊ฐ€๋Šฅ ๋ฆฌ๋ˆ…์Šค์—์„œ ์ปดํŒŒ์ผํ•œ ํŒŒ์ผ์€ ELF (Executable and Linkable Format) ์˜ ์‹คํ–‰ ํŒŒ์ผ์ด ๋œ๋‹ค. ELF ํŒŒ์ผ์€ ํŒŒ์ผ ์‹คํ–‰์— ํ•„์š”ํ•œ ์ •๋ณด๊ฐ€ ๋“  ํ—ค๋”์™€ ์—ฌ๋Ÿฌ ์„น์…˜๋“ค๋กœ ๊ตฌ์„ฑ๋œ๋‹ค. ์„น์…˜์—๋Š” ๊ธฐ๊ณ„์–ด ์ฝ”๋“œ ๋“ฑ์˜ ์ •๋ณด๋“ค์ด ๋“ค์–ด์žˆ๋‹ค. readelf -h [ELFํŒŒ์ผ] ๋ช…๋ น์œผ๋กœ ELF ํŒŒ์ผ์˜ ํ—ค๋” ์ •๋ณด๋ฅผ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๋‹ค. gdb ์˜ต์…˜ gdb [ํŒŒ์ผ์ด๋ฆ„] : ํ•ด๋‹น ํŒŒ์ผ์ด๋ฆ„ ๋””๋ฒ„๊น… ์‹คํ–‰ --args [arg1] [arg2] [...] : ํŒŒ์ผ ์‹คํ–‰์— ํ•„์š”ํ•œ argument๋ฅผ ์ „๋‹ฌ ๊ธฐํƒ€ ๋ช…๋ น์–ด ์‹คํ–‰ ์ „ ์„ค์ •์‚ฌํ•ญ coredumb ํŒŒ์ผ ...

<span title='2021-08-23 18:49:15 +0900 KST'>August 23, 2021</span>&nbsp;ยท&nbsp;7 min&nbsp;ยท&nbsp;AswinBlue