Libc Protections

Tip

AWS ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ:HackTricks Training AWS Red Team Expert (ARTE)
GCP ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training GCP Red Team Expert (GRTE) Azure ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks ์ง€์›ํ•˜๊ธฐ

Chunk Alignment Enforcement

Malloc๋Š” 8๋ฐ”์ดํŠธ(32๋น„ํŠธ) ๋˜๋Š” 16๋ฐ”์ดํŠธ(64๋น„ํŠธ) ๊ทธ๋ฃน์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” 32๋น„ํŠธ ์‹œ์Šคํ…œ์—์„œ ์ฒญํฌ์˜ ๋์ด 0x8๊ณผ ์ •๋ ฌ๋˜์–ด์•ผ ํ•˜๋ฉฐ, 64๋น„ํŠธ ์‹œ์Šคํ…œ์—์„œ๋Š” 0x0๊ณผ ์ •๋ ฌ๋˜์–ด์•ผ ํ•จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋ณด์•ˆ ๊ธฐ๋Šฅ์€ ๊ฐ ์ฒญํฌ๊ฐ€ ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ์ด๋Ÿฌํ•œ ํŠน์ • ์œ„์น˜์—์„œ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ •๋ ฌ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

Security Benefits

64๋น„ํŠธ ์‹œ์Šคํ…œ์—์„œ ์ฒญํฌ ์ •๋ ฌ์˜ ์‹œํ–‰์€ Malloc์˜ ๋ณด์•ˆ์„ ํฌ๊ฒŒ ํ–ฅ์ƒ์‹œ์ผœ ๊ฐ€์งœ ์ฒญํฌ์˜ ๋ฐฐ์น˜๋ฅผ 16๊ฐœ ์ฃผ์†Œ ์ค‘ 1๊ฐœ๋กœ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅ ๊ฐ’์— ๋Œ€ํ•œ ์ œ์–ด๊ฐ€ ์ œํ•œ๋œ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ๊ณต๊ฒฉ์„ ๋” ๋ณต์žกํ•˜๊ณ  ์„ฑ๊ณต์ ์œผ๋กœ ์‹คํ–‰ํ•˜๊ธฐ ์–ด๋ ต๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

  • Fastbin Attack on __malloc_hook

Malloc์˜ ์ƒˆ๋กœ์šด ์ •๋ ฌ ๊ทœ์น™์€ __malloc_hook๊ณผ ๊ด€๋ จ๋œ ๊ณ ์ „์ ์ธ ๊ณต๊ฒฉ์„ ์ €์ง€ํ•ฉ๋‹ˆ๋‹ค. ์ด์ „์—๋Š” ๊ณต๊ฒฉ์ž๊ฐ€ ์ฒญํฌ ํฌ๊ธฐ๋ฅผ ์กฐ์ž‘ํ•˜์—ฌ ์ด ํ•จ์ˆ˜ ํฌ์ธํ„ฐ๋ฅผ ๋ฎ์–ด์“ฐ๊ณ  ์ฝ”๋“œ ์‹คํ–‰์„ ์–ป์„ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ์—„๊ฒฉํ•œ ์ •๋ ฌ ์š”๊ตฌ ์‚ฌํ•ญ์€ ์ด๋Ÿฌํ•œ ์กฐ์ž‘์ด ๋” ์ด์ƒ ์œ ํšจํ•˜์ง€ ์•Š๋„๋ก ํ•˜์—ฌ ์ผ๋ฐ˜์ ์ธ ๊ณต๊ฒฉ ๊ฒฝ๋กœ๋ฅผ ์ฐจ๋‹จํ•˜๊ณ  ์ „๋ฐ˜์ ์ธ ๋ณด์•ˆ์„ ๊ฐ•ํ™”ํ•ฉ๋‹ˆ๋‹ค.

Pointer Mangling on fastbins and tcache

Pointer Mangling์€ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ์ž‘์—…์—์„œ fastbin ๋ฐ tcache Fd ํฌ์ธํ„ฐ๋ฅผ ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ๋ณด์•ˆ ๊ฐ•ํ™” ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค. ์ด ๊ธฐ์ˆ ์€ ๋ˆ„์ถœ๋œ ๋ฉ”๋ชจ๋ฆฌ ์ •๋ณด๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ์•Œ๋ ค์ง„ ์œ„์น˜์— ์ƒ๋Œ€์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ ์œ„์น˜๋ฅผ ์ง์ ‘ ์กฐ์ž‘ํ•˜๋Š” ํŠน์ • ์œ ํ˜•์˜ ๋ฉ”๋ชจ๋ฆฌ ์ต์Šคํ”Œ๋กœ์ž‡ ์ „์ˆ ์„ ๋ฐฉ์ง€ํ•˜๋Š” ๋ฐ ๋„์›€์„ ์ค๋‹ˆ๋‹ค(์ƒ๋Œ€์  ๋ฎ์–ด์“ฐ๊ธฐ).

์ด ๊ธฐ์ˆ ์˜ ํ•ต์‹ฌ์€ ๋‚œ๋…ํ™” ๊ณต์‹์ž…๋‹ˆ๋‹ค:

New_Ptr = (L >> 12) XOR P

  • L์€ ํฌ์ธํ„ฐ์˜ ์ €์žฅ ์œ„์น˜์ž…๋‹ˆ๋‹ค.
  • P๋Š” ์‹ค์ œ fastbin/tcache Fd ํฌ์ธํ„ฐ์ž…๋‹ˆ๋‹ค.

์ €์žฅ ์œ„์น˜(L)๋ฅผ ์˜ค๋ฅธ์ชฝ์œผ๋กœ 12๋น„ํŠธ ๋น„ํŠธ ์‹œํ”„ํŠธํ•œ ํ›„ XOR ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ด์œ ๋Š” ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด ์กฐ์ž‘์€ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ์˜ ๊ฐ€์žฅ ๋‚ฎ์€ 12๋น„ํŠธ์˜ ๊ฒฐ์ •๋ก ์  ํŠน์„ฑ์— ๋‚ด์žฌ๋œ ์ทจ์•ฝ์ ์„ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ์ด ๋น„ํŠธ๋Š” ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜ ์ œ์•ฝ์œผ๋กœ ์ธํ•ด ์ผ๋ฐ˜์ ์œผ๋กœ ์˜ˆ์ธก ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๋น„ํŠธ๋ฅผ ์ด๋™์‹œํ‚ด์œผ๋กœ์จ ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ๋ถ€๋ถ„์ด ๋ฐฉ์ •์‹์—์„œ ์ œ๊ฑฐ๋˜์–ด ์ƒˆ๋กœ์šด, ๋ณ€ํ˜•๋œ ํฌ์ธํ„ฐ์˜ ๋ฌด์ž‘์œ„์„ฑ์ด ํ–ฅ์ƒ๋˜๊ณ , ์ด๋Ÿฌํ•œ ๋น„ํŠธ์˜ ์˜ˆ์ธก ๊ฐ€๋Šฅ์„ฑ์— ์˜์กดํ•˜๋Š” ์ต์Šคํ”Œ๋กœ์ž‡์œผ๋กœ๋ถ€ํ„ฐ ๋ณดํ˜ธ๋ฉ๋‹ˆ๋‹ค.

์ด ๋ณ€ํ˜•๋œ ํฌ์ธํ„ฐ๋Š” ํ”„๋กœ๊ทธ๋žจ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์ฃผ์†Œ๋ฅผ ๋ฌด์ž‘์œ„ํ™”ํ•˜์—ฌ ๊ณต๊ฒฉ์ž๊ฐ€ ํ”„๋กœ์„ธ์Šค์˜ ๋ฉ”๋ชจ๋ฆฌ ๋ ˆ์ด์•„์›ƒ์„ ์˜ˆ์ธกํ•˜๊ธฐ ์–ด๋ ต๊ฒŒ ๋งŒ๋“œ๋Š” **์ฃผ์†Œ ๊ณต๊ฐ„ ๋ ˆ์ด์•„์›ƒ ๋ฌด์ž‘์œ„ํ™”(ASLR)**์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ธฐ์กด์˜ ๋ฌด์ž‘์œ„์„ฑ์„ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค.

Demangling ํฌ์ธํ„ฐ๋Š” ์›๋ž˜ ์ฃผ์†Œ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ธฐ ์œ„ํ•ด ๋™์ผํ•œ XOR ์—ฐ์‚ฐ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ๋ณ€ํ˜•๋œ ํฌ์ธํ„ฐ๋Š” ๊ณต์‹์—์„œ P๋กœ ์ทจ๊ธ‰๋˜๋ฉฐ, ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์€ ์ €์žฅ ์œ„์น˜(L)์™€ XOR ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋ฉด ์›๋ž˜ ํฌ์ธํ„ฐ๊ฐ€ ๋“œ๋Ÿฌ๋‚ฉ๋‹ˆ๋‹ค. ๋ณ€ํ˜•๊ณผ ๋ณต์› ๊ฐ„์˜ ์ด ๋Œ€์นญ์„ฑ์€ ์‹œ์Šคํ…œ์ด ์ƒ๋‹นํ•œ ์˜ค๋ฒ„ํ—ค๋“œ ์—†์ด ํฌ์ธํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ธ์ฝ”๋”ฉํ•˜๊ณ  ๋””์ฝ”๋”ฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋ฉฐ, ๋ฉ”๋ชจ๋ฆฌ ํฌ์ธํ„ฐ๋ฅผ ์กฐ์ž‘ํ•˜๋Š” ๊ณต๊ฒฉ์— ๋Œ€ํ•œ ๋ณด์•ˆ์„ ํฌ๊ฒŒ ๊ฐ•ํ™”ํ•ฉ๋‹ˆ๋‹ค.

Security Benefits

ํฌ์ธํ„ฐ ๋ณ€ํ˜•์€ ํž™ ๊ด€๋ฆฌ์—์„œ ๋ถ€๋ถ„ ๋ฐ ์ „์ฒด ํฌ์ธํ„ฐ ๋ฎ์–ด์“ฐ๊ธฐ๋ฅผ ๋ฐฉ์ง€ํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•˜๋ฉฐ, ์ด๋Š” ๋ณด์•ˆ์—์„œ ์ค‘์š”ํ•œ ํ–ฅ์ƒ์ž…๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์€ ์—ฌ๋Ÿฌ ๋ฐฉ์‹์œผ๋กœ ์ต์Šคํ”Œ๋กœ์ž‡ ๊ธฐ์ˆ ์— ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค:

  1. ๋ฐ”์ดํŠธ ์ƒ๋Œ€ ๋ฎ์–ด์“ฐ๊ธฐ ๋ฐฉ์ง€: ์ด์ „์—๋Š” ๊ณต๊ฒฉ์ž๊ฐ€ ํฌ์ธํ„ฐ์˜ ์ผ๋ถ€๋ฅผ ๋ณ€๊ฒฝํ•˜์—ฌ ์ •ํ™•ํ•œ ์ฃผ์†Œ๋ฅผ ์•Œ์ง€ ๋ชปํ•œ ์ฑ„ ํž™ ์ฒญํฌ๋ฅผ ๋‹ค๋ฅธ ์œ„์น˜๋กœ ๋ฆฌ๋””๋ ‰์…˜ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋ˆ„์ถœ ์—†๋Š” House of Roman ์ต์Šคํ”Œ๋กœ์ž‡์—์„œ ๋ถ„๋ช…ํžˆ ๋‚˜ํƒ€๋‚˜๋Š” ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค. ํฌ์ธํ„ฐ ๋ณ€ํ˜•์„ ํ†ตํ•ด ์ด๋Ÿฌํ•œ ์ƒ๋Œ€์  ๋ฎ์–ด์“ฐ๊ธฐ๋Š” ํž™ ๋ˆ„์ถœ ์—†์ด ์ด์ œ๋Š” ๋ฌด์ฐจ๋ณ„ ๋Œ€์ž…์„ ์š”๊ตฌํ•˜๋ฉฐ, ์„ฑ๊ณต ๊ฐ€๋Šฅ์„ฑ์„ ํฌ๊ฒŒ ์ค„์ž…๋‹ˆ๋‹ค.
  2. Tcache Bin/Fastbin ๊ณต๊ฒฉ์˜ ๋‚œ์ด๋„ ์ฆ๊ฐ€: ํ•จ์ˆ˜ ํฌ์ธํ„ฐ(์˜ˆ: __malloc_hook)๋ฅผ ๋ฎ์–ด์“ฐ๋Š” ์ผ๋ฐ˜์ ์ธ ๊ณต๊ฒฉ์€ fastbin ๋˜๋Š” tcache ํ•ญ๋ชฉ์„ ์กฐ์ž‘ํ•˜์—ฌ ๋ฐฉํ•ด๋ฐ›์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๊ณต๊ฒฉ์€ LibC ์ฃผ์†Œ๋ฅผ ๋ˆ„์ถœํ•˜๊ณ , ์ฒญํฌ๋ฅผ tcache bin์— ํ•ด์ œํ•œ ๋‹ค์Œ, Fd ํฌ์ธํ„ฐ๋ฅผ ๋ฎ์–ด์จ์„œ __malloc_hook๋กœ ๋ฆฌ๋””๋ ‰์…˜ํ•˜์—ฌ ์ž„์˜ ์ฝ”๋“œ ์‹คํ–‰์„ ์‹œ๋„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํฌ์ธํ„ฐ ๋ณ€ํ˜•์„ ํ†ตํ•ด ์ด๋Ÿฌํ•œ ํฌ์ธํ„ฐ๋Š” ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋ณ€ํ˜•๋˜์–ด์•ผ ํ•˜๋ฉฐ, ์ •ํ™•ํ•œ ์กฐ์ž‘์„ ์œ„ํ•ด ํž™ ๋ˆ„์ถœ์ด ํ•„์š”ํ•˜๋ฏ€๋กœ ์ต์Šคํ”Œ๋กœ์ž‡ ์žฅ๋ฒฝ์ด ๋†’์•„์ง‘๋‹ˆ๋‹ค.
  3. ๋น„ํž™ ์œ„์น˜์—์„œ ํž™ ๋ˆ„์ถœ ์š”๊ตฌ: ๋น„ํž™ ์˜์—ญ(์˜ˆ: ์Šคํƒ, .bss ์„น์…˜ ๋˜๋Š” PLT/GOT)์—์„œ ๊ฐ€์งœ ์ฒญํฌ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ๋„ ์ด์ œ ํž™ ๋ˆ„์ถœ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ด๋Ÿฌํ•œ ์˜์—ญ์„ ์ต์Šคํ”Œ๋กœ์ž‡ํ•˜๋Š” ๋ณต์žก์„ฑ์„ ํ™•์žฅํ•˜๋ฉฐ, LibC ์ฃผ์†Œ๋ฅผ ์กฐ์ž‘ํ•˜๋Š” ์š”๊ตฌ์™€ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค.
  4. ํž™ ์ฃผ์†Œ ๋ˆ„์ถœ์ด ๋” ์–ด๋ ค์›Œ์ง: ํฌ์ธํ„ฐ ๋ณ€ํ˜•์€ fastbin ๋ฐ tcache bin์—์„œ Fd ํฌ์ธํ„ฐ์˜ ์œ ์šฉ์„ฑ์„ ์ œํ•œํ•˜์—ฌ ํž™ ์ฃผ์†Œ ๋ˆ„์ถœ์˜ ์ถœ์ฒ˜๋กœ์„œ์˜ ์—ญํ• ์„ ๊ฐ์†Œ์‹œํ‚ต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ •๋ ฌ๋˜์ง€ ์•Š์€, ์ž‘์€ ๋ฐ ํฐ bin์˜ ํฌ์ธํ„ฐ๋Š” ์—ฌ์ „ํžˆ ๋ณ€ํ˜•๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ฃผ์†Œ ๋ˆ„์ถœ์— ์—ฌ์ „ํžˆ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ณ€ํ™”๋Š” ๊ณต๊ฒฉ์ž๊ฐ€ ์ต์Šคํ”Œ๋กœ์ž‡ ๊ฐ€๋Šฅํ•œ ์ •๋ณด๋ฅผ ์œ„ํ•ด ์ด๋Ÿฌํ•œ bin์„ ํƒ์ƒ‰ํ•˜๋„๋ก ์œ ๋„ํ•˜์ง€๋งŒ, ์ผ๋ถ€ ๊ธฐ์ˆ ์€ ์—ฌ์ „ํžˆ ๋ˆ„์ถœ ์ „์— ํฌ์ธํ„ฐ๋ฅผ ๋ณต์›ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ—ˆ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Demangling Pointers with a Heap Leak

Caution

ํ”„๋กœ์„ธ์Šค์— ๋Œ€ํ•œ ๋” ๋‚˜์€ ์„ค๋ช…์€ ์—ฌ๊ธฐ์„œ ์›๋ณธ ๊ฒŒ์‹œ๋ฌผ์„ ํ™•์ธํ•˜์„ธ์š”.

Algorithm Overview

ํฌ์ธํ„ฐ๋ฅผ ๋ณ€ํ˜•ํ•˜๊ณ  ๋ณต์›ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๊ณต์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

New_Ptr = (L >> 12) XOR P

์—ฌ๊ธฐ์„œ L์€ ์ €์žฅ ์œ„์น˜์ด๊ณ  P๋Š” Fd ํฌ์ธํ„ฐ์ž…๋‹ˆ๋‹ค. L์ด 12๋น„ํŠธ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ด๋™ํ•˜๋ฉด XOR์˜ ํŠน์„ฑ์œผ๋กœ ์ธํ•ด P์˜ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๋น„ํŠธ๊ฐ€ ๋…ธ์ถœ๋ฉ๋‹ˆ๋‹ค. XOR๋Š” ์ž์‹ ๊ณผ XOR ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•  ๋•Œ 0์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

Algorithm์˜ ์ฃผ์š” ๋‹จ๊ณ„:

  1. ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๋น„ํŠธ์˜ ์ดˆ๊ธฐ ๋ˆ„์ถœ: ์‹œํ”„ํŠธ๋œ L๊ณผ P๋ฅผ XORํ•˜์—ฌ P์˜ ์ƒ์œ„ 12๋น„ํŠธ๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ์–ป์Šต๋‹ˆ๋‹ค. ์‹œํ”„ํŠธ๋œ L์˜ ๋ถ€๋ถ„์€ 0์ด ๋˜์–ด P์˜ ํ•ด๋‹น ๋น„ํŠธ๋Š” ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  2. ํฌ์ธํ„ฐ ๋น„ํŠธ ๋ณต๊ตฌ: XOR๋Š” ๊ฐ€์—ญ์ ์ด๋ฏ€๋กœ ๊ฒฐ๊ณผ์™€ ํ”ผ์—ฐ์‚ฐ์ž ์ค‘ ํ•˜๋‚˜๋ฅผ ์•Œ๋ฉด ๋‹ค๋ฅธ ํ”ผ์—ฐ์‚ฐ์ž๋ฅผ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์†์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ€ํ˜•๋œ ํฌ์ธํ„ฐ์˜ ๋ถ€๋ถ„๊ณผ ์•Œ๋ ค์ง„ ๋น„ํŠธ ์ง‘ํ•ฉ์„ ์ˆœ์ฐจ์ ์œผ๋กœ XORํ•˜์—ฌ P์˜ ์ „์ฒด ๋น„ํŠธ ์ง‘ํ•ฉ์„ ์œ ๋„ํ•ฉ๋‹ˆ๋‹ค.
  3. ๋ฐ˜๋ณต์  ๋ณต์›: ์ด ๊ณผ์ •์€ ๋ฐ˜๋ณต๋˜๋ฉฐ, ๋งค๋ฒˆ ์ด์ „ ๋‹จ๊ณ„์—์„œ ๋ฐœ๊ฒฌ๋œ P์˜ ์ƒˆ ๋น„ํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ€ํ˜•๋œ ํฌ์ธํ„ฐ์˜ ๋‹ค์Œ ์„ธ๊ทธ๋จผํŠธ๋ฅผ ๋””์ฝ”๋”ฉํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ๋น„ํŠธ๊ฐ€ ๋ณต๊ตฌ๋  ๋•Œ๊นŒ์ง€ ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค.
  4. ๊ฒฐ์ •๋ก ์  ๋น„ํŠธ ์ฒ˜๋ฆฌ: L์˜ ๋งˆ์ง€๋ง‰ 12๋น„ํŠธ๋Š” ์‹œํ”„ํŠธ๋กœ ์ธํ•ด ์†์‹ค๋˜์ง€๋งŒ, ์ด๋“ค์€ ๊ฒฐ์ •๋ก ์ ์ด๋ฉฐ ํ›„์ฒ˜๋ฆฌ ํ›„ ์žฌ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๊ตฌํ˜„์„ ์—ฌ๊ธฐ์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค: https://github.com/mdulin2/mangle

Pointer Guard

Pointer guard๋Š” glibc์—์„œ ์ €์žฅ๋œ ํ•จ์ˆ˜ ํฌ์ธํ„ฐ๋ฅผ ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ์ต์Šคํ”Œ๋กœ์ž‡ ์™„ํ™” ๊ธฐ์ˆ ๋กœ, ํŠนํžˆ atexit()์™€ ๊ฐ™์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ˜ธ์ถœ์— ์˜ํ•ด ๋“ฑ๋ก๋œ ํฌ์ธํ„ฐ์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด ๋ณดํ˜ธ๋Š” ํฌ์ธํ„ฐ๋ฅผ ์Šคํฌ๋žจ๋ธ”ํ•˜์—ฌ ์Šค๋ ˆ๋“œ ๋ฐ์ดํ„ฐ(fs:0x30)์— ์ €์žฅ๋œ ๋น„๋ฐ€๊ณผ XOR ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ๋น„ํŠธ ํšŒ์ „์„ ์ ์šฉํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค. ์ด ๋ฉ”์ปค๋‹ˆ์ฆ˜์€ ๊ณต๊ฒฉ์ž๊ฐ€ ํ•จ์ˆ˜ ํฌ์ธํ„ฐ๋ฅผ ๋ฎ์–ด์จ์„œ ์ œ์–ด ํ๋ฆ„์„ ํƒˆ์ทจํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•ฉ๋‹ˆ๋‹ค.

Bypassing Pointer Guard with a leak

  1. Pointer Guard ์ž‘์—… ์ดํ•ด: ํฌ์ธํ„ฐ์˜ ์Šคํฌ๋žจ๋ธ”(๋ณ€ํ˜•)์€ 64๋น„ํŠธ ๋น„๋ฐ€๊ณผ XOR ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•œ ํ›„ 0x11 ๋น„ํŠธ ์™ผ์ชฝ์œผ๋กœ ํšŒ์ „ํ•˜๋Š” PTR_MANGLE ๋งคํฌ๋กœ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. ์›๋ž˜ ํฌ์ธํ„ฐ๋ฅผ ๋ณต๊ตฌํ•˜๊ธฐ ์œ„ํ•œ ์—ญ ์—ฐ์‚ฐ์€ PTR_DEMANGLE์— ์˜ํ•ด ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค.
  2. ๊ณต๊ฒฉ ์ „๋žต: ๊ณต๊ฒฉ์€ ์•Œ๋ ค์ง„ ํ‰๋ฌธ ์ ‘๊ทผ ๋ฐฉ์‹์— ๊ธฐ๋ฐ˜ํ•˜๋ฉฐ, ๊ณต๊ฒฉ์ž๋Š” ๋ณ€ํ˜•๋œ ํฌ์ธํ„ฐ์™€ ์›๋ž˜ ํฌ์ธํ„ฐ๋ฅผ ๋ชจ๋‘ ์•Œ์•„์•ผ ์Šคํฌ๋žจ๋ธ”์— ์‚ฌ์šฉ๋œ ๋น„๋ฐ€์„ ์œ ์ถ”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. ์•Œ๋ ค์ง„ ํ‰๋ฌธ ํ™œ์šฉ:
  • ๊ณ ์ • ํ•จ์ˆ˜ ํฌ์ธํ„ฐ ์‹๋ณ„: glibc ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๊ฒ€์‚ฌํ•˜๊ฑฐ๋‚˜ ์ดˆ๊ธฐํ™”๋œ ํ•จ์ˆ˜ ํฌ์ธํ„ฐ ํ…Œ์ด๋ธ”(์˜ˆ: __libc_pthread_functions)์„ ํ†ตํ•ด ๊ณต๊ฒฉ์ž๋Š” ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ํ•จ์ˆ˜ ํฌ์ธํ„ฐ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋น„๋ฐ€ ๊ณ„์‚ฐ: __pthread_attr_destroy์™€ ๊ฐ™์€ ์•Œ๋ ค์ง„ ํ•จ์ˆ˜ ํฌ์ธํ„ฐ์™€ ํ•จ์ˆ˜ ํฌ์ธํ„ฐ ํ…Œ์ด๋ธ”์—์„œ์˜ ๋ณ€ํ˜•๋œ ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜์—ฌ, ๋ณ€ํ˜•๋œ ํฌ์ธํ„ฐ๋ฅผ ์—ญํšŒ์ „(์˜ค๋ฅธ์ชฝ ํšŒ์ „)ํ•œ ํ›„ ํ•จ์ˆ˜์˜ ์ฃผ์†Œ์™€ XOR ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜์—ฌ ๋น„๋ฐ€์„ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  1. ๋Œ€์ฒด ํ‰๋ฌธ: ๊ณต๊ฒฉ์ž๋Š” 0 ๋˜๋Š” -1๊ณผ ๊ฐ™์€ ์•Œ๋ ค์ง„ ๊ฐ’์œผ๋กœ ํฌ์ธํ„ฐ๋ฅผ ๋ณ€ํ˜•ํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์‹๋ณ„ ๊ฐ€๋Šฅํ•œ ํŒจํ„ด์„ ์ƒ์„ฑํ•˜๋Š”์ง€ ์‹คํ—˜ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋Ÿฌํ•œ ํŒจํ„ด์ด ๋ฉ”๋ชจ๋ฆฌ ๋คํ”„์—์„œ ๋ฐœ๊ฒฌ๋  ๋•Œ ๋น„๋ฐ€์„ ๋“œ๋Ÿฌ๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. ์‹ค์šฉ์  ์‘์šฉ: ๋น„๋ฐ€์„ ๊ณ„์‚ฐํ•œ ํ›„ ๊ณต๊ฒฉ์ž๋Š” ์ œ์–ด๋œ ๋ฐฉ์‹์œผ๋กœ ํฌ์ธํ„ฐ๋ฅผ ์กฐ์ž‘ํ•˜์—ฌ, libc ๊ธฐ๋ณธ ์ฃผ์†Œ์— ๋Œ€ํ•œ ์ง€์‹๊ณผ ์ž„์˜ ๋ฉ”๋ชจ๋ฆฌ ์œ„์น˜๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๋Šฅ๋ ฅ์„ ํ†ตํ•ด Pointer Guard ๋ณดํ˜ธ๋ฅผ ์šฐํšŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

References

Tip

AWS ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ:HackTricks Training AWS Red Team Expert (ARTE)
GCP ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training GCP Red Team Expert (GRTE) Azure ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks ์ง€์›ํ•˜๊ธฐ