br0nzu

[Heap] tcache ์ •๋ฆฌ

glibc 2.26 ์ดํ›„ tcache๋ผ๋Š” ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์—ˆ๋‹ค. tcache tcache(Tread local Caching)์€ ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ์†๋„๋ฅผ ๋†’์ด๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„ ๊ธฐ์ˆ ์ด๋‹ค. ์ฆ‰, tcache๋Š” ์ž‘์€ ๋‹จ์œ„์˜ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์ด ํ•„์š”ํ•  ๊ฒฝ์šฐ Arena๋ฅผ ์ฐธ์กฐํ•˜์ง€ ์•Š๊ณ  ๋ฐ”๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฐ ์Šค๋ ˆ๋“œ ๋‹น thread cac...

[Heap] glibc 2.23 ์ •๋ฆฌ

ptmalloc2๋Š” ์ฒญํฌ(chunk), bin, tcache, arena๋ฅผ ์ฃผ์š” ๊ฐ์ฒด๋กœ ์‚ฌ์šฉํ•œ๋‹ค. ๊ฐ ๊ฐœ๋…์— ๋Œ€ํ•ด์„œ๋Š” ๋‹ค์Œ ํŽ˜์ด์ง€๋“ค์„ ์ฐธ๊ณ ํ•˜๋ฉด ๋˜๊ณ , ์—ฌ๊ธฐ์„œ๋Š” ๊ฐ„๋žตํ•˜๊ฒŒ ์ •๋ฆฌ๋งŒ ํ•  ๊ฒƒ์ด๋‹ค.(tcache๋Š” glibc 2.26๋ถ€ํ„ฐ ์ถ”๊ฐ€๋œ ๊ฐœ๋…์œผ๋กœ ์ถ”ํ›„์— ๋‹ค๋ฃฐ ์˜ˆ์ •์ด๋‹ค.) Dynamic Allocator Arena Chunk Bin Ar...

[Heap] Bin

ํ”„๋กœ๊ทธ๋žจ์—์„œ๋Š” ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น(malloc) ๋˜๋Š” ํ•ด์ œ(free)๊ฐ€ ๋นˆ๋ฒˆํ•˜๊ฒŒ ๋ฐœ์ƒํ•˜๋Š”๋ฐ, Free(ํ•ด์ œ)๋œ Chunk๋“ค์€ ์ดํ›„ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ์š”์ฒญ์ด ๋“ค์–ด์˜ฌ ๊ฒฝ์šฐ ๋‹ค์‹œ ์žฌํ™œ์šฉ๋˜์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ด€๋ฆฌ๋˜์–ด์•ผ ํ•œ๋‹ค. ๋‹จ์ˆœํ•˜๊ฒŒ ๋ชจ๋“  Chunk๋“ค์„ Linked List๋กœ ๊ด€๋ฆฌํ•˜๋ฉด ํŽธํ• ์ˆ˜ ์žˆ์ง€๋งŒ, ์ด๋Š” mallocํ•  ๊ฒฝ์šฐ Free๋œ Chunk๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด ๋ชจ๋“  Chu...

[Heap] Chunk

Chunk ์ฒญํฌ(Chunk)๋Š” malloc()์— ์˜ํ•ด ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ์š”์ฒญ์ด ๋“ค์–ด์˜จ ๊ฒฝ์šฐ, ์‹ค์ œ๋กœ ํ• ๋‹น ๋ฐ›๋Š” ์˜์—ญ์ด๋‹ค. ์ฒญํฌ๋Š” ํ—ค๋”์™€ ๋ฐ์ดํ„ฐ๋กœ ๊ตฌ์„ฑ๋˜๋Š”๋ฐ, ํ—ค๋”๋Š” ์ฒญํฌ์˜ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๊ณ  ๋ฐ์ดํ„ฐ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋œ๋‹ค. ์ฒญํฌ์˜ ํฌ๊ธฐ๋Š” 32๋น„ํŠธ ํ™˜๊ฒฝ์—์„œ๋Š” 8๋ฐ”์ดํŠธ ๋ฐฐ์ˆ˜๋กœ ํ• ๋‹น๋˜๊ณ , 64๋น„ํŠธ ํ™˜๊ฒฝ์—์„œ๋Š” 16๋ฐ”์ดํŠธ ๋‹จ์œ„๋กœ ํ• ๋‹น๋œ๋‹ค. Chunk S...

[Heap] Arena

ptmalloc2๋Š” ์ฒญํฌ(chunk), bin, tcache, arena๋ฅผ ์ฃผ์š” ๊ฐ์ฒด๋กœ ์‚ฌ์šฉํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ arena์— ๋Œ€ํ•œ ๋‚ด์šฉ์„ ์„ค๋ช…ํ•  ๊ฒƒ์ด๋‹ค. ํ•ด๋‹น ๋‚ด์šฉ์— ๋Œ€ํ•ด์„œ๋Š” ๊ตฌ๊ธ€๋ง๊ณผ ๋งŽ์€ ๋ธ”๋กœ๊ทธ์˜ ๋„์›€์„ ๋ฐ›์•˜์ง€๋งŒ, ์—ฌ๊ธฐ ๋‚ด์šฉ์„ ๋งŽ์ด ์ฐธ๊ณ ํ–ˆ๋‹ค. ptmalloc2์€ dlmalloc์—์„œ ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋”ฉ ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋œ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์ž๋กœ Arena ๊ฐœ๋…์ด ๋„์ž…๋˜์—ˆ๋‹ค. ...

[Heap] Dynamic Allocator

Dynamic Memory Allocator ๋™์ ์œผ๋กœ ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ๋Š” ํž™(Heap) ์˜์—ญ์—์„œ ๊ด€๋ฆฌ๋˜๊ณ , ๋™์  ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น๊ธฐ(Dynamic Memory Allocator)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ด€๋ฆฌํ•œ๋‹ค. ๋™์  ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น๊ธฐ์—๋Š” ํฌ๊ฒŒ ๋‘ ์ข…๋ฅ˜๋กœ ๋‚˜๋‰œ๋‹ค. Explicit Allocator: ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์˜ ํ• ๋‹น๊ณผ ํ•ด์ œ๋ฅผ ๊ด€๋ฆฌ ex...

pwndbg, gef ๋””๋ฒ„๊ฑฐ ๋™์‹œ ์„ค์น˜

GDB ํ”Œ๋Ÿฌ๊ทธ์ธ์—๋Š” Peda, Pwndbg, GEF ๋“ฑ์ด ์žˆ๋‹ค. ๋ถ„์„์— ๋”ฐ๋ผ ์‚ฌ์šฉํ•˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ํ•ด๋‹น ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋™์‹œ์— ์„ค์น˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์„ค๋ช…ํ•œ๋‹ค. ๋‹จ, Peda๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ์˜ˆ์ •์ด๋ผ์„œ Pwndbg์™€ GEF์— ๋Œ€ํ•ด์„œ๋งŒ ์„ค๋ช…ํ•  ๊ฒƒ์ด๋‹ค. Install ๋””๋ฒ„๊ฑฐ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์„ค์น˜ํ•  ๋•Œ๋Š” ๋””๋ฒ„๊ฑฐ์˜ ๋ฒ„์ „๊ณผ ํŒŒ์ด...

[Linux] Stack Alignment

๋ฌธ์ œ๋ฅผ ํ’€๋‹ค๊ฐ€ system("/bin/sh")์„ ์ž˜ ํ˜ธ์ถœํ–ˆ๋Š”๋ฐ ์ต์Šค๊ฐ€ ์•ˆ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค. <do_system+115> movaps xmmword ptr [rsp], xmm1 ์—ฌ๊ธฐ์„œ ์ต์Šค๊ฐ€ ์•ˆ๋˜์–ด์„œ ์›์ธ์„ ์ฐพ๋‹ค๋ณด๋‹ˆ Stack Alignment ๋ฌธ์ œ๋ผ๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค. ์ด๋ฏธ [Research] x64 stack alignment...

Frame Pointer Overwrite(One-byte Overflow)

Frame Pointer Overwrite(One-byte Overflow)๋Š” Stack Frame Point์— ์ตœํ•˜์œ„ 1byte ๋ฎ์–ด์จ์„œ ํ”„๋กœ๊ทธ๋žจ์˜ ์‹คํ–‰ ํ๋ฆ„์„ ์ œ์–ดํ•˜๋Š” ๊ฒƒ์ด๋‹ค. FPO ๊ณต๊ฒฉ์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์กฐ๊ฑด์ด ํ•„์š”ํ•˜๋‹ค. ๋ฉ”์ธ ํ•จ์ˆ˜ ์ด์™ธ ์„œ๋ธŒํ•จ์ˆ˜ ํ•„์š” ์„œ๋ธŒํ•จ์ˆ˜์˜ SFP ์˜์—ญ์—์„œ 1byte overfl...

Frame faking(Fake EBP)

Frame faking(Fake EBP) Frame faking์€ ๊ฐ€์งœ ์Šคํƒ ํ”„๋ ˆ์ž„ ํฌ์ธํ„ฐ(Stack Frame Pointer)๋ฅผ ๋งŒ๋“ค์–ด ํ”„๋กœ๊ทธ๋žจ์˜ ์‹คํ–‰ ํ๋ฆ„์„ ์ œ์–ดํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ํ•ด๋‹น ๊ธฐ๋ฒ•์€ RET ์˜์—ญ๊นŒ์ง€๋งŒ ๋ฎ์–ด์“ธ ์ˆ˜ ์žˆ์„ ๋•Œ, RET๋ฅผ ์Šคํƒ ์ฃผ์†Œ๋‚˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ฃผ์†Œ๋กœ ๋ฎ์„ ์ˆ˜ ์—†์„ ๊ฒฝ์šฐ์— ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋ฒ•์ด๋‹ค. ํ•ด๋‹น ๊ณต๊ฒฉ ๊ธฐ๋ฒ•์„ ์•Œ๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ•จ์ˆ˜ ...