SlideShare a Scribd company logo
2016๋…„ 8์›” 14์ผ
How2Heap
Buffer overflow in heap
2
๋ฐœํ‘œ์ž ์†Œ๊ฐœ
๏‚ง ์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต 2ํ•™๋…„ ์žฌํ•™ ์ค‘
๏‚ง ์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต ์ •๋ณด๋ณดํ˜ธ ๋™์•„๋ฆฌ HIT ํšŒ์žฅ
๏‚ง Best of the Best 4๊ธฐ ์ทจ์•ฝ์  ๋ถ„์„ํŠธ๋ž™ ์ˆ˜๋ฃŒ
2016-08-
15
์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
3
๋ชฉ์ฐจ
๏‚ง What is Heap?
๏‚ง Why Heap?
๏‚ง Who Controls Heap?
๏‚ง How2heap?
๏‚ง ์ •๋ฆฌ
2016-08-
15
์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
4
What is Heap?
๏‚ง ํž™ ๋ฉ”๋ชจ๋ฆฌ๋ž€?
๏‚ง ํ”„๋กœ๊ทธ๋žจ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ž์œ  ๋ฉ”๋ชจ๋ฆฌ. ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์‹œ์— ํ•จ์ˆ˜๋กœ ๋ณด
๋‚ด๋Š” ๋ฐ์ดํ„ฐ ๋“ฑ์„ ์ผ์‹œ์ ์œผ๋กœ ๋ณด๊ด€ํ•ด ๋‘๋Š” ์†Œ๋Ÿ‰์˜ ๋ฉ”๋ชจ๋ฆฌ์™€ ํ•„์š”์‹œ ์–ธ์ œ
๋‚˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋Œ€๋Ÿ‰์˜ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์žˆ๋‹ค. ์ด๋•Œ, ์†Œ๋Ÿ‰์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ โ€˜์Šคํƒโ€™์ด
๋ผ ํ•˜๊ณ  ๋Œ€๋Ÿ‰์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ โ€˜ํž™โ€™์ด๋ผ ํ•œ๋‹ค.
๋„ค์ด๋ฒ„ ์šฉ์–ด์‚ฌ์ „ -http://terms.naver.com/entry.nhn?docId=863311&cid=50371&categoryId=50371
๏‚ง malloc์„ ํ†ตํ•ด ๋™์  ํ• ๋‹นํ•œ ๋ฉ”๋ชจ๋ฆฌ๋“ค.
์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
5
What is Heap?
๏‚ง ํž™ ๋ฉ”๋ชจ๋ฆฌ๋ž€?
์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
6
Why Heap?
์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
Stack Overflow๋Š” ์ ์  ์ค„๋‹ค๊ฐ€ 2014๋…„์— ๋ฐœ๊ฒฌ๋˜์ง€ ์•Š์Œ.
2014๋…„ 80%๊ฐ€ ๋„˜๋Š” ์ทจ์•ฝ์ ์ด Heap ๊ด€๋ จ ์ทจ์•ฝ์  ( UAF, Heap corruption )
7
Who Controls Heap?
Memory Allocator๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ํž™ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ด€๋ฆฌํ•จ
๊ฐ์ž ์ž์‹ ๋“ค๋งŒ์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ฐ€์ง€๊ณ  ์ตœ๋Œ€ํ•œ ์ข‹์€ memory allocator ๋ฅผ ๊ตฌํ˜„
ํ•จ.
๏‚ง dlmalloc โ€“ General purpose allocator
๏‚ง ptmalloc2 โ€“ glibc
๏‚ง Jemalloc โ€“ FreeBSD and Firefox
๏‚ง tcmalloc โ€“ Google
๏‚ง libumem โ€“ Solaris
๏‚ง MemGC โ€“ Edge Browser
2016-08-
15
์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
8
Who Controls Heap?
๏‚ง ์ƒ๊ฐ๋ณด๋‹ค malloc์€ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•  ๊ฒƒ๋“ค์ด ๋งŽ์Œ.
๏‚ง ๋‹จํŽธํ™” (Fragmentation)
๏‚ง Thread Safety
๏‚ง ์„ฑ๋Šฅ ํ–ฅ์ƒ
- Byte Align ๋“ฑ๋“ฑ.
2016-08-
15
์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
9
Who Controls Heap?
Glibc2.23 , malloc.c 45th line (http://ftp.kaist.ac.kr/gnu/gnu/libc/)
2016-08-
15
์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
10
Who Controls Heap?
Malloc ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์ž๋ฃŒ ๊ตฌ์กฐ
Heap --- ํฐ ๋ฉ”๋ชจ๋ฆฌ ๋ฉ์–ด๋ฆฌ๋“ค์„ ์ง€์นญ
Chunk --- ๊ฐ๊ฐ malloc ๋œ ์กฐ๊ฐ๋“ค์„ ์ง€์นญ
OS์—์„œ Heap์ด๋ผ๋Š” ๋ฉ์–ด๋ฆฌ๋ฅผ ๊ฐ€์ ธ๋‹ค ์กฐ๊ธˆ์”ฉ ๋‚˜๋ˆ ์ฃผ๋Š” ๊ฒƒ์„ ๊ตฌํ˜„ํ•œ ์ฝ”๋“œ
P.S ) ์ดํ•ด๋ฅผ ๋•๊ธฐ ์œ„ํ•ด ์•ž์œผ๋กœ ๋‚˜์˜ค๋Š” ๊ตฌ์กฐ์ฒด๋Š” ์‹ค์ œ ๊ตฌํ˜„๋œ ๊ฒƒ๊ณผ๋Š” ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ
๋‹ค. ๊ฐœ๋…์„ ์„ค๋ช…ํ•˜๋Š”๋ฐ ์ค‘์ ์„ ๋‘์—ˆ๊ณ , x86 ๊ธฐ์ค€ ์ž…๋‹ˆ๋‹ค.
2016-08-
15
์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
11
Malloc_chunk
์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์š”์ฒญํ•œ ํฌ๊ธฐ๋ณด๋‹ค
์กฐ๊ธˆ ํฌ๊ฒŒ ํ• ๋‹น ๋จ
This Chunk Size
์‹ค์ œ๋กœ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ
์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์— ์ค„ ๋•Œ๋Š”
User data ์ชฝ์„ ๋Œ๋ ค์คŒ
12
Malloc ์˜ ์žฌ์‚ฌ์šฉ์„ฑ
a = malloc(512)
Free(a);
์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
13
Malloc ์˜ ์žฌ์‚ฌ์šฉ์„ฑ
b = malloc(500)
์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
14
Malloc ์˜ ์žฌ์‚ฌ์šฉ์„ฑ
b = malloc(500)
์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
15
Bins ( 126 ๊ฐœ )
๏‚ง Free ๋œ ๊ฒƒ์„ ์žฌ์‚ฌ์šฉ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋ชจ์•„๋‘๋Š” ๊ณณ
๋น„์Šทํ•œ ํฌ๊ธฐ๋ผ๋ฆฌ ๋ชจ์•„ ๋ฒˆํ˜ธ๋ฅผ ๋ถ™์—ฌ์„œ ๊ด€๋ฆฌํ•จ
๋ฉ”๋ชจ๋ฆฌ ๋‹จํŽธํ™”๋ฅผ ๋ง‰๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉ ๋จ
๏‚ง Fast bin (exact fit)
๏‚ง Unsorted bin (Bin 1)
๏‚ง Small bin (Bin 2 to Bin 63, exact fit)
๏‚ง Large bin (Bin 64 to Bin 126)
Free๋œ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ
์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
16
Malloc_chunk
์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
์›๋ž˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋˜ ๋ถ€๋ถ„์—
fd, bk ๋ผ๋Š” ๋‚ด๋ถ€ ์ •๋ณด๋ฅผ ์ €์žฅ ํ•ด๋‘ 
๋‚˜์ค‘์— ๋‹ค์‹œ ์“ฐ๊ธฐ ์œ„ํ•ด์„œ
๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ ํ˜•ํƒœ๋กœ ์ €์žฅํ•จ
17
Malloc_chunk
์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
This Chunk Size์˜ N , M , P
PREV_INUSE (P)
๋ฐ”๋กœ ์ด์ „ ์ฒญํฌ๊ฐ€ ํ• ๋‹น๋œ ๊ฒฝ์šฐ
IS_MMAPPED (M)
ํ˜„์žฌ ์ฒญํฌ๊ฐ€ mmap์„ ํ†ตํ•ด
ํ• ๋‹น๋œ ๊ฒฝ์šฐ
NON_MAIN_ARENA (N)
18
Malloc_chunk
์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
Prev_size:
๋ฐ”๋กœ ์ง์ „์˜ ์ฒญํฌ์˜ ์‚ฌ์ด์ฆˆ๋ฅผ ์ €์žฅ
( P = 0, ์ฆ‰ ์ด์ „ ์ฒญํฌ๊ฐ€ ํ•ด์ œ ๋˜์—ˆ์„
๋•Œ์—๋งŒ ์œ ์šฉํ•จ )
19
Top Chunk?
Chunk Size
( 1000 )
User Data
(Top Chunk)
์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
malloc(22);
20
Top Chunk?
Chunk Size
( 1000 )
User Data
(Top Chunk)
Chunk Size
( 30 )
User Data
Chunk Size
( 970 )
User Data
(Top Chunk)
์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
21
Who Controls Heap?
malloc ๋™์ž‘ ๋ฐฉ์‹ ์š”์•ฝ
๏‚ง 1. free๋œ ๋ชฉ๋ก์— ๋น„์Šทํ•œ ํฌ๊ธฐ๊ฐ€ ์žˆ์œผ๋ฉด ๊ทธ๊ฒƒ์„ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—๊ฒŒ ์คŒ
๏‚ง 2. ์žฌ์‚ฌ์šฉ ํ•  ๊ฒƒ์ด ์—†์œผ๋ฉด Top ์ฒญํฌ๋ฅผ ๋‘ ๊ฐœ๋กœ ๋‚˜๋ˆ ์„œ ํ•˜๋‚˜๋ฅผ ํ”„๋กœ๊ทธ๋žจ์—
์ฃผ๊ณ  ๋‚˜๋จธ์ง€๋ฅผ ๋‹ค์‹œ Top ์ฒญํฌ๋กœ ๊ด€๋ฆฌํ•จ.
์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
22
How2Heap?
๏‚ง https://github.com/shellphish/how2heap
2016-08-
15
์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
23
How2Heap Contents
Git clone https://github.com/shellphish/how2heap
Cd how2heap && make
./house_of_force
์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
24
Heap Exploit Techniques.
๏‚ง Use After Free
๏‚ง Double free bug ( ๋ง‰ํž˜ )
๏‚ง Fastbin_dup
๏‚ง House of force
๏‚ง House of spirit
๏‚ง House of lore
๏‚ง Poison Null Byte
๏‚ง ๋“ฑ๋“ฑโ€ฆ
์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
25
๏‚ง Fastbin_dup
a = 1000, b = 2000 ์ผ ๋•Œ
๋ชฉํ‘œ : malloc(8) ์„ ํ†ตํ•ด 123456XX๋ฒˆ์ง€ ๋ฐ›๊ธฐ
Fastbin_dup
์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
26
Fastbin_dup
๏‚ง ์›๋ž˜ ์ •์ƒ์ ์ธ ๋ฐฉ์‹
๏‚ง free(a); free(b); free(c); free(d);
๏‚ง malloc() , malloc(), malloc() , malloc()
๏‚ง ์ˆœ์„œ๋Œ€๋กœ d, c, b, a๋ฅผ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์— ํ• ๋‹น
์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
27
Fastbin_dup
๏‚ง ์ค‘๋ณต FREE๋ฅผ ํ•  ๊ฒฝ์šฐ
๏‚ง Free(a); free(b); free(a);
๏‚ง Malloc() , malloc(), malloc()
๏‚ง ์ˆœ์„œ๋Œ€๋กœ a, b, a๋ฅผ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์— ํ• ๋‹น
์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
28
Fastbin_dup
๏‚ง Fastbin_dup
๏‚ง Free(a);
๋‹ค์Œ์— ๋ฐ˜ํ™˜ํ•  ์ฃผ์†Œ
A
Fd = null
1000
Size
Fd
Bk
Unused
Size
User
Data
์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
29
Fastbin_dup
๏‚ง Fastbin_dup
๏‚ง free(a); free(b);
B
Fd = 1000
2000
Size
Fd
Bk
Unused
Size
User
Data
A
Fd = null
์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
30
Fastbin_dup
๏‚ง Fastbin_dup
๏‚ง free(a); free(b); free(a);
A
Fd = 2000
1000
Size
Fd
Bk
Unused
Size
User
Data
B
Fd = 1000
A
Fd = null
์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
31
Fastbin_dup
๏‚ง Fastbin_dup
๏‚ง free(a); free(b); free(a);
A
Fd = 2000
1000
Size
Fd
Bk
Unused
Size
User
Data
B
Fd = 1000
A
Fd = 2000
์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
32
Fastbin_dup
๏‚ง Fastbin_dup
๏‚ง free(a); free(b); free(a);
๏‚ง int *c = malloc(8);
A
Fd = 2000
1000
Size
Fd
Bk
Unused
Size
User
Data
B
Fd = 1000
A
Fd = 2000
์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
33
Fastbin_dup
๏‚ง Fastbin_dup
๏‚ง free(a); free(b); free(a);
๏‚ง int *c = malloc(8); // ๊ฒฐ๊ณผ๊ฐ’ 1000
2000
Size
Fd
Bk
Unused
Size
User
Data
B
Fd = 1000
A
Fd = 2000
์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
34
Fastbin_dup
๏‚ง Fastbin_dup
๏‚ง free(a); free(b); free(a);
๏‚ง int *c = malloc(8); // ๊ฒฐ๊ณผ๊ฐ’ 1000
๏‚ง *c = 0x12345678
2000
Size
Fd
Bk
Unused
Size
User
Data
B
Fd = 1000
A , C
Fd = 2000
์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
35
Fastbin_dup
๏‚ง Fastbin_dup
๏‚ง free(a); free(b); free(a);
๏‚ง int *c = malloc(8); // ๊ฒฐ๊ณผ๊ฐ’ 1000
๏‚ง *c = 0x12345678;
2000
Size
Fd
Bk
Unused
Size
User
Data
B
Fd = 1000
A , C
Fd = 12345678
์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
36
Fastbin_dup
๏‚ง Fastbin_dup
๏‚ง free(a); free(b); free(a);
๏‚ง int *c = malloc(8); // ๊ฒฐ๊ณผ๊ฐ’ 1000
๏‚ง *c = 0x12345678;
๏‚ง Malloc(8); // 2000
๏‚ง Malloc(8); // 1000
๏‚ง Malloc(8); // 12345678
2000
Size
Fd
Bk
Unused
Size
User
Data
B
Fd = 1000
A , C
Fd = 12345678
์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
37
Fastbin_dup
๏‚ง Fastbin_dup ์ •๋ฆฌ
๏‚ง A ๋„ 1000๋ฒˆ์ง€, C ๋„ 1000๋ฒˆ์ง€
๏‚ง ๋˜‘๊ฐ™์€ ์œ„์น˜๋ฅผ A, C ๋‘ ๊ฐœ๊ฐ€ ๊ฐ€๋ฆฌ์ผœ์„œ ์ƒ๊น€
๏‚ง C์—๋Š” ์‚ฌ์šฉ์ž์˜ ๋ฐ์ดํ„ฐ๊ฐ€, A์—๋Š” free list ๊ด€๋ จ ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌ.
๏‚ง ์š”๊ตฌ ์กฐ๊ฑด :
๋”๋ธ” ํ”„๋ฆฌ๊ฐ€ ์ผ์–ด ๋‚˜์•ผ ํ•จ ( a, b, a ์ฒ˜๋Ÿผ ํ•˜๋‚˜ ๊ฑด๋„ˆ์„œ )
( 12345678 ๋ฒˆ์ง€์— ์žˆ๋Š” Size ์˜์—ญ์„ ๋งž์ถฐ์ค˜์•ผ ํ•จ )
( ํฌ๊ธฐ๊ฐ€ ์ž‘์€ ์ฒญํฌ๋“ค ์—๋งŒ ์ ์šฉ์ด ๊ฐ€๋Šฅ ํ•จ )
Size
Fd
Bk
Unused
Size
User
Data
์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
38
House of force
๏‚ง top chunk size ์กฐ์ž‘์„ ํ†ตํ•ด์„œ ์›ํ•˜๋Š” ์œ„์น˜์— malloc์„ ํ•  ์ˆ˜ ์žˆ์Œ
๏‚ง ํž™์—์„œ์˜ Buffer Overflow ์ทจ์•ฝ์ ์ด ์„ ํ–‰ ๋˜์–ด์•ผ ํ•จ.
char * string = ( char *) malloc( 10 );
strcpy( a, argv[1] );
๏‚ง Write โ€“ What โ€“ Where ๊ฐ€๋Šฅ
์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
39
House of force
Chunk Size
( 1000 )
User Data
(Top Chunk)
์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
Malloc Size
1000 ์ดํ•˜ :
Top ์ฒญํฌ๊ฐ€ ๋‘˜๋กœ ๋‚˜๋‰จ
1000 ์ด์ƒ :
์ƒˆ๋กœ์šด ๋ฉ”๋ชจ๋ฆฌ ๋ฉ์–ด๋ฆฌ๋ฅผ OS์— ์š”
์ฒญ
40
House of force
Chunk Size
( 1000 )
User Data
(Top Chunk)
Chunk Size
( 30 )
User Data
Chunk Size
( 970 )
User Data
(Top Chunk)
Malloc(22);
์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
41
House of force
Chunk Size
( 970 )
User Data
(Top Chunk)
Chunk Size
( 30 )
AAAAAAAAA
AAAAAAAAA
AAAAAAAAA
AAAAAAAAA
AAAAAAAAA
Buffer Overflow
์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
42
House of force
Chunk Size
( 970 )
User Data
(Top Chunk)
Chunk Size
( 30 )
AAAAAAAAA
AAAAAAAAA
Chunk Size
( 41414141 )
User Data
(Top Chunk)
Buffer Overflow
์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
Chunk Size
( 30 )
AAAAAAAAA
AAAAAAAAA
AAAAAAAAA
AAAAAAAAA
AAAAAAAAA
43
House of force
Chunk Size
( 40000000 )
User Data
Chunk Size
( 1414141 )
User Data
(Top Chunk)
Malloc(40000000);
์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
Chunk Size
( 41414141 )
User Data
(Top Chunk)
Chunk Size
( 30 )
User Data
44
House of force
Malloc(100);
Chunk Size
( 100 )
User Data
Chunk Size
( 1414041 )
User Data
(Top Chunk)
Chunk Size
( 40000000 )
User Data
Chunk Size
( 1414141 )
User Data
(Top Chunk)
์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
45
House of force
Chunk Size
( 100 )
User Data
์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
๏‚ง ์ด๋ ‡๊ฒŒ ๋งŒ๋“ค์–ด์ง„ ์ฒญํฌ๋Š” ๊ธฐ์กด์˜ ํž™ ๋ณด๋‹ค 40000000๋งŒํผ ๋–จ์–ด์ง„ ๊ณณ์— ์œ„์น˜
๏‚ง 40000000์„ ์กฐ์ž‘ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์›ํ•˜๋Š” ์œ„์น˜์— malloc์ด ๊ฐ€๋Šฅํ•จ
โ€ป realloc ๋“ฑ์˜ ํ•จ์ˆ˜๋Š” size_t ํ˜•ํƒœ๋ผ์„œ ์Œ์ˆ˜๋ฅผ ๋„ฃ์„ ๊ฒฝ์šฐ ์œ„์˜ ์กฐ์ž‘์ด ๊ฐ€๋Šฅํ•จ
46
House of force
๏‚ง 1. top chunk size ์กฐ์ž‘ ( ์ตœ๋Œ€ํ•œ ํฌ๊ฒŒ )
๏‚ง 2. (๋‹ค์Œ์— ํ• ๋‹น ๋ฐ›๊ณ  ์‹ถ์€ ์ฃผ์†Œ โ€“ ํ˜„์žฌ Top chunk ์ฃผ์†Œ) ๋งŒํผ ์ƒˆ๋กœ malloc
ํ• ๋‹น
๏‚ง 3. ๋‹ค์Œ malloc์„ ํ†ตํ•ด์„œ ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ์— ์›ํ•˜๋Š” ๊ฐ’ ๋ณต์‚ฌ
๏‚ง ์š”๊ตฌ ์‚ฌํ•ญ
ํ˜„์žฌ Top Chunk ์ฃผ์†Œ๋ฅผ ์•Œ์•„๋‚ด์•ผ ํ•จ.
Buffer Overflow ๋ฒ„๊ทธ๋กœ Top Chunk Size๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•จ.
์›ํ•˜๋Š” ๋งŒํผ malloc ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•จ
์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
47
Poison Null Byte
This Chunk Size์˜ N , M , P
PREV_INUSE (P)
๋ฐ”๋กœ ์ด์ „ ์ฒญํฌ๊ฐ€ ํ• ๋‹น๋œ ๊ฒฝ์šฐ
IS_MMAPPED (M)
ํ˜„์žฌ ์ฒญํฌ๊ฐ€ mmap์„ ํ†ตํ•ด
ํ• ๋‹น๋œ ๊ฒฝ์šฐ
NON_MAIN_ARENA (N)
์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
48
Poison Null Byte
๋ฐ”๋กœ ์ง์ „์˜ ์ฒญํฌ์˜ ์‚ฌ์ด์ฆˆ๋ฅผ ์ €์žฅ
( P = 0, ์ฆ‰ ์ด์ „ ์ฒญํฌ๊ฐ€ ํ•ด์ œ ๋˜์—ˆ์„
๋•Œ์—๋งŒ ์œ ์šฉํ•จ )
์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
49
Poison Null Byte
Prev | 101
User
Data
Line 2:
P = 0
Prev | 101
User
Data
Prev | 101
Fd
Bk
100 | 100
User
Data
Prev | 201
Fd
Bk
์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
Line 3: Line 4:
(Merged)
50
Poison Null Byte
์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
๏‚ง ์กฐ๊ฑด :
๋„ ๋ฐ”์ดํŠธ ํ•˜๋‚˜ Overwrite์™€, malloc, free ๋ฅผ ์›ํ•˜๋Š” ๋Œ€๋กœ ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•จ.
๏‚ง ๋‹ค๋ฅธ ์ทจ์•ฝ์ ์— ๋น„ํ•ด์„œ๋Š” ์š”๊ตฌ ์กฐ๊ฑด์ด ์ ๊ณ  ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์„ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Œ
๋ฌธ์ž์—ด์˜ ๋์„ ์ฒ˜๋ฆฌํ•˜๋‹ค๊ฐ€ 00์„ ๋์— Overwrite ํ•˜๋Š” ๋“ฑ..
๏‚ง ๊ฒฐ๊ณผ : ๋‘ ๊ฐœ์˜ ์ฒญํฌ๊ฐ€ Overlapp ๋˜๋Š” ๊ฒƒ
๏‚ง A : 1000~2000๋ฒˆ์ง€ ์‚ฌ์šฉ
๏‚ง B : 1500~1600๋ฒˆ์ง€ ์‚ฌ์šฉ
51
Poison Null Byte
์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
Prev | 0x41
A
Prev | 0x171
B
Prev | 0x101
C
A = malloc ( 0x38 ); // chunk size 0x40
B = malloc ( 0x168 ); // chunk size 0x170
C = malloc ( 0x98 ); // chunk size 0x100
โ€ป ํ•œ ์ฒญํฌ์˜ Size
Data + sizeof(Prev) + sizeof(Size)
52
Poison Null Byte
์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
Prev | 41
A
Prev | 171
B
Prev | 101
C
free(B)
53
Poison Null Byte
์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
A[0x38] = 0;
/*
[0 ~ 0x37] ๊นŒ์ง€๊ฐ€ ๋ฒ”์œ„
Off by One Null Overwrite
Prev | 41
A
Prev | 171
B
freed
170 | 100
C
54
Poison Null Byte
์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
Size๊ฐ€ 170 -> 100์œผ๋กœ ์ค„์–ด๋“ฌ
D = malloc(0x38);
Prev | 100
B
freed
170 | 100
C
Prev | 41
A
55
Poison Null Byte
์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
Prev | C1
B
Freed
C0 | .
170 | 100
C
Chunk ์˜ ์‚ฌ์ด์ฆˆ๊ฐ€ ์ค„์–ด๋ฒ„๋ ค์„œ
C์˜ Prev๋ฅผ ์—…๋ฐ์ดํŠธ ํ•˜์ง€ ๋ชปํ•จ
E = malloc( 0x38 );
Prev | 41
D
Prev | 41
A
56
Poison Null Byte
์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
Prev | 81
B
170 | 100
C
Free(D);
Prev | 41
D
Prev | 41
E
Prev | 41
A
57
Poison Null Byte
์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
Prev | 81
B
170 | 100
C
Free(C); << Merge
Prev | 41
D
40 | 41
E
Prev | 41
A
58
Poison Null Byte
์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
Prev | 81
B
170 | 100
C
F = Malloc(0x268);
Prev | 271
40 | 41
E
Prev | 41
A
59
Poison Null Byte
์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
Prev | 81
B
170 | 100
C
F = Malloc(0x268);
Prev | 271
F
Prev | 41
E
Prev | 41
A
60
Poison Null Byte
์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
๏‚ง ์ •๋ฆฌ
๏‚ง A, B, C ๋ฅผ ๋งŒ๋“ค๊ณ , B๋ฅผ ํ•ด์ œ
๏‚ง A๋ฅผ Overflow ํ•ด์„œ ํ•ด์ œ๋œ B์˜ ์‚ฌ์ด์ฆˆ๋ฅผ ์ค„์—ฌ๋ฒ„๋ฆผ
๏‚ง B๋ฅผ ์ชผ๊ฐœ์„œ D์™€ E๋ฅผ ๋งŒ๋“ฌ
๏‚ง D๋ฅผ Free ( E ๋งŒ ์ค‘๊ฐ„์— ํ• ๋‹น ๋˜์–ด ์žˆ์Œ )
๏‚ง C๋ฅผ Free ํ•˜๋ฉด์„œ ๋งจ ์ฒ˜์Œ์˜ B~C๋ฅผ ํ•ฉ๋ณ‘ํ•˜๊ฒŒ ๋จ >> Overlap
61
์ด ์ •๋ฆฌ
๊ฐœ๋ฐœ์ž ์ž…์žฅ์—์„œ (์ ์–ด๋„ Heap์— ๋Œ€ํ•ด ) ์•ˆ์ „ํ•œ ํ”„๋กœ๊ทธ๋žจ ์„ ๋งŒ๋“œ๋ ค๋ฉด
1. Double-Free ์™€ ๊ฐ™์€ ์ทจ์•ฝ์ ์„ ๋ฐœ์ƒ์‹œํ‚ค์ง€ ์•Š๋Š” ๊ฒƒ.
2. Heap์ƒ์—์„œ buffer overflow๊ฐ€ ๋‚˜์ง€ ์•Š๋„๋ก ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ.
๋„ ๋ฐ”์ดํŠธ ํ•˜๋‚˜๋„ ํ—ˆ์šฉ ํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค.
๊ณต๊ฒฉ์ž ์ž…์žฅ์—์„œ Heap์„ Exploit ํ•˜๋ ค๋ฉด
1. ์œ„์— ์–ธ๊ธ‰ํ•œ ์ทจ์•ฝ์ ์„ ์ฐพ์„ ์ˆ˜ ์žˆ์–ด์•ผ ํ•˜๊ณ  ( ๋„ ๋ฐ”์ดํŠธ ํ•˜๋‚˜๋ผ๋„ ์†Œ์ค‘
ํžˆ! )
2. Heap ๊ทผ์ฒ˜์— ์œ„์น˜ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ์— ๋Œ€ํ•ด์„œ ์ž˜ ์•Œ๊ณ  ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
2016-08-15 ๋™์•„๋ฆฌ์ด๋ฆ„
63
Reference
๏‚ง Exploitation Trends: From Potential Risk to Actual Risk โ€“
RSAConference2015,
https://www.rsaconference.com/writable/presentations/file_upload/br-t07-
exploitation-trends-from-potential-risk-to-actual-risk.pdf
๏‚ง Understanding glibc malloc
https://sploitfun.wordpress.com/2015/02/10/understanding-glibc-malloc/
๏‚ง Understanding Heap by breaking it
https://www.blackhat.com/presentations/bh-usa-
07/Ferguson/Whitepaper/bh-usa-07-ferguson-WP.pdf
๏‚ง Slideshare โ€“ AngelBoy, Heap Exploitation
http://www.slideshare.net/AngelBoy1?utm_campaign=profiletracking&ut
m_medium=sssite&utm_source=ssslideview
2016-08-
15
์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T

More Related Content

What's hot

Linux Directory Structure
Linux Directory StructureLinux Directory Structure
Linux Directory Structure
Kevin OBrien
ย 
Multi core processor
Multi core processorMulti core processor
Multi core processor
Muhammad Ishaq
ย 
Process' Virtual Address Space in GNU/Linux
Process' Virtual Address Space in GNU/LinuxProcess' Virtual Address Space in GNU/Linux
Process' Virtual Address Space in GNU/Linux
Varun Mahajan
ย 
Intro to assembly language
Intro to assembly languageIntro to assembly language
Intro to assembly language
United International University
ย 
Linux Memory Management
Linux Memory ManagementLinux Memory Management
Linux Memory Management
Suvendu Kumar Dash
ย 
You didnt see itโ€™s coming? "Dawn of hardened Windows Kernel"
You didnt see itโ€™s coming? "Dawn of hardened Windows Kernel" You didnt see itโ€™s coming? "Dawn of hardened Windows Kernel"
You didnt see itโ€™s coming? "Dawn of hardened Windows Kernel"
Peter Hlavaty
ย 
Thread model of java
Thread model of javaThread model of java
Thread model of java
myrajendra
ย 
Pwning in c++ (basic)
Pwning in c++ (basic)Pwning in c++ (basic)
Pwning in c++ (basic)
Angel Boy
ย 
6 multiprogramming & time sharing
6 multiprogramming & time sharing6 multiprogramming & time sharing
6 multiprogramming & time sharing
myrajendra
ย 
Memory management in linux
Memory management in linuxMemory management in linux
Memory management in linux
Dr. C.V. Suresh Babu
ย 
Memory organization
Memory organizationMemory organization
Memory organization
AL- AMIN
ย 
Windows 10 Nt Heap Exploitation (Chinese version)
Windows 10 Nt Heap Exploitation (Chinese version)Windows 10 Nt Heap Exploitation (Chinese version)
Windows 10 Nt Heap Exploitation (Chinese version)
Angel Boy
ย 
Linux Internals - Kernel/Core
Linux Internals - Kernel/CoreLinux Internals - Kernel/Core
Linux Internals - Kernel/Core
Shay Cohen
ย 
Memory management Assignment Help
Memory management Assignment HelpMemory management Assignment Help
Memory management Assignment Help
JosephErin
ย 
Linux Memory Management
Linux Memory ManagementLinux Memory Management
Linux Memory Management
Anil Kumar Pugalia
ย 
COSCUP 2020 RISC-V 32 bit linux highmem porting
COSCUP 2020 RISC-V 32 bit linux highmem portingCOSCUP 2020 RISC-V 32 bit linux highmem porting
COSCUP 2020 RISC-V 32 bit linux highmem porting
Eric Lin
ย 
Chapter 3.pptx
Chapter 3.pptxChapter 3.pptx
Chapter 3.pptx
RanjanaShevkar
ย 
Linux Memory Management with CMA (Contiguous Memory Allocator)
Linux Memory Management with CMA (Contiguous Memory Allocator)Linux Memory Management with CMA (Contiguous Memory Allocator)
Linux Memory Management with CMA (Contiguous Memory Allocator)
Pankaj Suryawanshi
ย 
Timer
TimerTimer
Linux kernel debugging
Linux kernel debuggingLinux kernel debugging
Linux kernel debugging
Hao-Ran Liu
ย 

What's hot (20)

Linux Directory Structure
Linux Directory StructureLinux Directory Structure
Linux Directory Structure
ย 
Multi core processor
Multi core processorMulti core processor
Multi core processor
ย 
Process' Virtual Address Space in GNU/Linux
Process' Virtual Address Space in GNU/LinuxProcess' Virtual Address Space in GNU/Linux
Process' Virtual Address Space in GNU/Linux
ย 
Intro to assembly language
Intro to assembly languageIntro to assembly language
Intro to assembly language
ย 
Linux Memory Management
Linux Memory ManagementLinux Memory Management
Linux Memory Management
ย 
You didnt see itโ€™s coming? "Dawn of hardened Windows Kernel"
You didnt see itโ€™s coming? "Dawn of hardened Windows Kernel" You didnt see itโ€™s coming? "Dawn of hardened Windows Kernel"
You didnt see itโ€™s coming? "Dawn of hardened Windows Kernel"
ย 
Thread model of java
Thread model of javaThread model of java
Thread model of java
ย 
Pwning in c++ (basic)
Pwning in c++ (basic)Pwning in c++ (basic)
Pwning in c++ (basic)
ย 
6 multiprogramming & time sharing
6 multiprogramming & time sharing6 multiprogramming & time sharing
6 multiprogramming & time sharing
ย 
Memory management in linux
Memory management in linuxMemory management in linux
Memory management in linux
ย 
Memory organization
Memory organizationMemory organization
Memory organization
ย 
Windows 10 Nt Heap Exploitation (Chinese version)
Windows 10 Nt Heap Exploitation (Chinese version)Windows 10 Nt Heap Exploitation (Chinese version)
Windows 10 Nt Heap Exploitation (Chinese version)
ย 
Linux Internals - Kernel/Core
Linux Internals - Kernel/CoreLinux Internals - Kernel/Core
Linux Internals - Kernel/Core
ย 
Memory management Assignment Help
Memory management Assignment HelpMemory management Assignment Help
Memory management Assignment Help
ย 
Linux Memory Management
Linux Memory ManagementLinux Memory Management
Linux Memory Management
ย 
COSCUP 2020 RISC-V 32 bit linux highmem porting
COSCUP 2020 RISC-V 32 bit linux highmem portingCOSCUP 2020 RISC-V 32 bit linux highmem porting
COSCUP 2020 RISC-V 32 bit linux highmem porting
ย 
Chapter 3.pptx
Chapter 3.pptxChapter 3.pptx
Chapter 3.pptx
ย 
Linux Memory Management with CMA (Contiguous Memory Allocator)
Linux Memory Management with CMA (Contiguous Memory Allocator)Linux Memory Management with CMA (Contiguous Memory Allocator)
Linux Memory Management with CMA (Contiguous Memory Allocator)
ย 
Timer
TimerTimer
Timer
ย 
Linux kernel debugging
Linux kernel debuggingLinux kernel debugging
Linux kernel debugging
ย 

Similar to How2heap

[SOPT] ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ๋ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์Šคํ„ฐ๋”” - #02 : ์Šคํƒ, ํ, ์ˆ˜์‹ ์—ฐ์‚ฐ
[SOPT] ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ๋ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์Šคํ„ฐ๋”” - #02 : ์Šคํƒ, ํ, ์ˆ˜์‹ ์—ฐ์‚ฐ[SOPT] ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ๋ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์Šคํ„ฐ๋”” - #02 : ์Šคํƒ, ํ, ์ˆ˜์‹ ์—ฐ์‚ฐ
[SOPT] ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ๋ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์Šคํ„ฐ๋”” - #02 : ์Šคํƒ, ํ, ์ˆ˜์‹ ์—ฐ์‚ฐ
S.O.P.T - Shout Our Passion Together
ย 
C++ 11 ์— ๋Œ€ํ•ด์„œ ์‰ฝ๊ฒŒ ์•Œ์•„๋ด…์‹œ๋‹ค 1๋ถ€
C++ 11 ์— ๋Œ€ํ•ด์„œ ์‰ฝ๊ฒŒ ์•Œ์•„๋ด…์‹œ๋‹ค 1๋ถ€C++ 11 ์— ๋Œ€ํ•ด์„œ ์‰ฝ๊ฒŒ ์•Œ์•„๋ด…์‹œ๋‹ค 1๋ถ€
C++ 11 ์— ๋Œ€ํ•ด์„œ ์‰ฝ๊ฒŒ ์•Œ์•„๋ด…์‹œ๋‹ค 1๋ถ€
Gwangwhi Mah
ย 
Ai C#์„ธ๋ฏธ๋‚˜
Ai C#์„ธ๋ฏธ๋‚˜Ai C#์„ธ๋ฏธ๋‚˜
Ai C#์„ธ๋ฏธ๋‚˜
Astin Choi
ย 
Changes in c++0x
Changes in c++0xChanges in c++0x
Changes in c++0x
4002 JOF
ย 
๊ฐ•์˜์ž๋ฃŒ4
๊ฐ•์˜์ž๋ฃŒ4๊ฐ•์˜์ž๋ฃŒ4
๊ฐ•์˜์ž๋ฃŒ4Young Wook Kim
ย 

Similar to How2heap (6)

[SOPT] ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ๋ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์Šคํ„ฐ๋”” - #02 : ์Šคํƒ, ํ, ์ˆ˜์‹ ์—ฐ์‚ฐ
[SOPT] ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ๋ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์Šคํ„ฐ๋”” - #02 : ์Šคํƒ, ํ, ์ˆ˜์‹ ์—ฐ์‚ฐ[SOPT] ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ๋ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์Šคํ„ฐ๋”” - #02 : ์Šคํƒ, ํ, ์ˆ˜์‹ ์—ฐ์‚ฐ
[SOPT] ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ๋ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์Šคํ„ฐ๋”” - #02 : ์Šคํƒ, ํ, ์ˆ˜์‹ ์—ฐ์‚ฐ
ย 
12 2. dynamic allocation
12 2. dynamic allocation12 2. dynamic allocation
12 2. dynamic allocation
ย 
C++ 11 ์— ๋Œ€ํ•ด์„œ ์‰ฝ๊ฒŒ ์•Œ์•„๋ด…์‹œ๋‹ค 1๋ถ€
C++ 11 ์— ๋Œ€ํ•ด์„œ ์‰ฝ๊ฒŒ ์•Œ์•„๋ด…์‹œ๋‹ค 1๋ถ€C++ 11 ์— ๋Œ€ํ•ด์„œ ์‰ฝ๊ฒŒ ์•Œ์•„๋ด…์‹œ๋‹ค 1๋ถ€
C++ 11 ์— ๋Œ€ํ•ด์„œ ์‰ฝ๊ฒŒ ์•Œ์•„๋ด…์‹œ๋‹ค 1๋ถ€
ย 
Ai C#์„ธ๋ฏธ๋‚˜
Ai C#์„ธ๋ฏธ๋‚˜Ai C#์„ธ๋ฏธ๋‚˜
Ai C#์„ธ๋ฏธ๋‚˜
ย 
Changes in c++0x
Changes in c++0xChanges in c++0x
Changes in c++0x
ย 
๊ฐ•์˜์ž๋ฃŒ4
๊ฐ•์˜์ž๋ฃŒ4๊ฐ•์˜์ž๋ฃŒ4
๊ฐ•์˜์ž๋ฃŒ4
ย 

How2heap

  • 2. 2 ๋ฐœํ‘œ์ž ์†Œ๊ฐœ ๏‚ง ์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต 2ํ•™๋…„ ์žฌํ•™ ์ค‘ ๏‚ง ์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต ์ •๋ณด๋ณดํ˜ธ ๋™์•„๋ฆฌ HIT ํšŒ์žฅ ๏‚ง Best of the Best 4๊ธฐ ์ทจ์•ฝ์  ๋ถ„์„ํŠธ๋ž™ ์ˆ˜๋ฃŒ 2016-08- 15 ์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
  • 3. 3 ๋ชฉ์ฐจ ๏‚ง What is Heap? ๏‚ง Why Heap? ๏‚ง Who Controls Heap? ๏‚ง How2heap? ๏‚ง ์ •๋ฆฌ 2016-08- 15 ์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
  • 4. 4 What is Heap? ๏‚ง ํž™ ๋ฉ”๋ชจ๋ฆฌ๋ž€? ๏‚ง ํ”„๋กœ๊ทธ๋žจ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ž์œ  ๋ฉ”๋ชจ๋ฆฌ. ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์‹œ์— ํ•จ์ˆ˜๋กœ ๋ณด ๋‚ด๋Š” ๋ฐ์ดํ„ฐ ๋“ฑ์„ ์ผ์‹œ์ ์œผ๋กœ ๋ณด๊ด€ํ•ด ๋‘๋Š” ์†Œ๋Ÿ‰์˜ ๋ฉ”๋ชจ๋ฆฌ์™€ ํ•„์š”์‹œ ์–ธ์ œ ๋‚˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋Œ€๋Ÿ‰์˜ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์žˆ๋‹ค. ์ด๋•Œ, ์†Œ๋Ÿ‰์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ โ€˜์Šคํƒโ€™์ด ๋ผ ํ•˜๊ณ  ๋Œ€๋Ÿ‰์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ โ€˜ํž™โ€™์ด๋ผ ํ•œ๋‹ค. ๋„ค์ด๋ฒ„ ์šฉ์–ด์‚ฌ์ „ -http://terms.naver.com/entry.nhn?docId=863311&cid=50371&categoryId=50371 ๏‚ง malloc์„ ํ†ตํ•ด ๋™์  ํ• ๋‹นํ•œ ๋ฉ”๋ชจ๋ฆฌ๋“ค. ์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
  • 5. 5 What is Heap? ๏‚ง ํž™ ๋ฉ”๋ชจ๋ฆฌ๋ž€? ์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
  • 6. 6 Why Heap? ์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T Stack Overflow๋Š” ์ ์  ์ค„๋‹ค๊ฐ€ 2014๋…„์— ๋ฐœ๊ฒฌ๋˜์ง€ ์•Š์Œ. 2014๋…„ 80%๊ฐ€ ๋„˜๋Š” ์ทจ์•ฝ์ ์ด Heap ๊ด€๋ จ ์ทจ์•ฝ์  ( UAF, Heap corruption )
  • 7. 7 Who Controls Heap? Memory Allocator๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ํž™ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ด€๋ฆฌํ•จ ๊ฐ์ž ์ž์‹ ๋“ค๋งŒ์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ฐ€์ง€๊ณ  ์ตœ๋Œ€ํ•œ ์ข‹์€ memory allocator ๋ฅผ ๊ตฌํ˜„ ํ•จ. ๏‚ง dlmalloc โ€“ General purpose allocator ๏‚ง ptmalloc2 โ€“ glibc ๏‚ง Jemalloc โ€“ FreeBSD and Firefox ๏‚ง tcmalloc โ€“ Google ๏‚ง libumem โ€“ Solaris ๏‚ง MemGC โ€“ Edge Browser 2016-08- 15 ์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
  • 8. 8 Who Controls Heap? ๏‚ง ์ƒ๊ฐ๋ณด๋‹ค malloc์€ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•  ๊ฒƒ๋“ค์ด ๋งŽ์Œ. ๏‚ง ๋‹จํŽธํ™” (Fragmentation) ๏‚ง Thread Safety ๏‚ง ์„ฑ๋Šฅ ํ–ฅ์ƒ - Byte Align ๋“ฑ๋“ฑ. 2016-08- 15 ์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
  • 9. 9 Who Controls Heap? Glibc2.23 , malloc.c 45th line (http://ftp.kaist.ac.kr/gnu/gnu/libc/) 2016-08- 15 ์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
  • 10. 10 Who Controls Heap? Malloc ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์ž๋ฃŒ ๊ตฌ์กฐ Heap --- ํฐ ๋ฉ”๋ชจ๋ฆฌ ๋ฉ์–ด๋ฆฌ๋“ค์„ ์ง€์นญ Chunk --- ๊ฐ๊ฐ malloc ๋œ ์กฐ๊ฐ๋“ค์„ ์ง€์นญ OS์—์„œ Heap์ด๋ผ๋Š” ๋ฉ์–ด๋ฆฌ๋ฅผ ๊ฐ€์ ธ๋‹ค ์กฐ๊ธˆ์”ฉ ๋‚˜๋ˆ ์ฃผ๋Š” ๊ฒƒ์„ ๊ตฌํ˜„ํ•œ ์ฝ”๋“œ P.S ) ์ดํ•ด๋ฅผ ๋•๊ธฐ ์œ„ํ•ด ์•ž์œผ๋กœ ๋‚˜์˜ค๋Š” ๊ตฌ์กฐ์ฒด๋Š” ์‹ค์ œ ๊ตฌํ˜„๋œ ๊ฒƒ๊ณผ๋Š” ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ ๋‹ค. ๊ฐœ๋…์„ ์„ค๋ช…ํ•˜๋Š”๋ฐ ์ค‘์ ์„ ๋‘์—ˆ๊ณ , x86 ๊ธฐ์ค€ ์ž…๋‹ˆ๋‹ค. 2016-08- 15 ์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
  • 11. 11 Malloc_chunk ์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์š”์ฒญํ•œ ํฌ๊ธฐ๋ณด๋‹ค ์กฐ๊ธˆ ํฌ๊ฒŒ ํ• ๋‹น ๋จ This Chunk Size ์‹ค์ œ๋กœ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์— ์ค„ ๋•Œ๋Š” User data ์ชฝ์„ ๋Œ๋ ค์คŒ
  • 12. 12 Malloc ์˜ ์žฌ์‚ฌ์šฉ์„ฑ a = malloc(512) Free(a); ์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
  • 13. 13 Malloc ์˜ ์žฌ์‚ฌ์šฉ์„ฑ b = malloc(500) ์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
  • 14. 14 Malloc ์˜ ์žฌ์‚ฌ์šฉ์„ฑ b = malloc(500) ์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
  • 15. 15 Bins ( 126 ๊ฐœ ) ๏‚ง Free ๋œ ๊ฒƒ์„ ์žฌ์‚ฌ์šฉ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋ชจ์•„๋‘๋Š” ๊ณณ ๋น„์Šทํ•œ ํฌ๊ธฐ๋ผ๋ฆฌ ๋ชจ์•„ ๋ฒˆํ˜ธ๋ฅผ ๋ถ™์—ฌ์„œ ๊ด€๋ฆฌํ•จ ๋ฉ”๋ชจ๋ฆฌ ๋‹จํŽธํ™”๋ฅผ ๋ง‰๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉ ๋จ ๏‚ง Fast bin (exact fit) ๏‚ง Unsorted bin (Bin 1) ๏‚ง Small bin (Bin 2 to Bin 63, exact fit) ๏‚ง Large bin (Bin 64 to Bin 126) Free๋œ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ ์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
  • 16. 16 Malloc_chunk ์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T ์›๋ž˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋˜ ๋ถ€๋ถ„์— fd, bk ๋ผ๋Š” ๋‚ด๋ถ€ ์ •๋ณด๋ฅผ ์ €์žฅ ํ•ด๋‘  ๋‚˜์ค‘์— ๋‹ค์‹œ ์“ฐ๊ธฐ ์œ„ํ•ด์„œ ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ ํ˜•ํƒœ๋กœ ์ €์žฅํ•จ
  • 17. 17 Malloc_chunk ์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T This Chunk Size์˜ N , M , P PREV_INUSE (P) ๋ฐ”๋กœ ์ด์ „ ์ฒญํฌ๊ฐ€ ํ• ๋‹น๋œ ๊ฒฝ์šฐ IS_MMAPPED (M) ํ˜„์žฌ ์ฒญํฌ๊ฐ€ mmap์„ ํ†ตํ•ด ํ• ๋‹น๋œ ๊ฒฝ์šฐ NON_MAIN_ARENA (N)
  • 18. 18 Malloc_chunk ์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T Prev_size: ๋ฐ”๋กœ ์ง์ „์˜ ์ฒญํฌ์˜ ์‚ฌ์ด์ฆˆ๋ฅผ ์ €์žฅ ( P = 0, ์ฆ‰ ์ด์ „ ์ฒญํฌ๊ฐ€ ํ•ด์ œ ๋˜์—ˆ์„ ๋•Œ์—๋งŒ ์œ ์šฉํ•จ )
  • 19. 19 Top Chunk? Chunk Size ( 1000 ) User Data (Top Chunk) ์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T malloc(22);
  • 20. 20 Top Chunk? Chunk Size ( 1000 ) User Data (Top Chunk) Chunk Size ( 30 ) User Data Chunk Size ( 970 ) User Data (Top Chunk) ์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
  • 21. 21 Who Controls Heap? malloc ๋™์ž‘ ๋ฐฉ์‹ ์š”์•ฝ ๏‚ง 1. free๋œ ๋ชฉ๋ก์— ๋น„์Šทํ•œ ํฌ๊ธฐ๊ฐ€ ์žˆ์œผ๋ฉด ๊ทธ๊ฒƒ์„ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—๊ฒŒ ์คŒ ๏‚ง 2. ์žฌ์‚ฌ์šฉ ํ•  ๊ฒƒ์ด ์—†์œผ๋ฉด Top ์ฒญํฌ๋ฅผ ๋‘ ๊ฐœ๋กœ ๋‚˜๋ˆ ์„œ ํ•˜๋‚˜๋ฅผ ํ”„๋กœ๊ทธ๋žจ์— ์ฃผ๊ณ  ๋‚˜๋จธ์ง€๋ฅผ ๋‹ค์‹œ Top ์ฒญํฌ๋กœ ๊ด€๋ฆฌํ•จ. ์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
  • 23. 23 How2Heap Contents Git clone https://github.com/shellphish/how2heap Cd how2heap && make ./house_of_force ์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
  • 24. 24 Heap Exploit Techniques. ๏‚ง Use After Free ๏‚ง Double free bug ( ๋ง‰ํž˜ ) ๏‚ง Fastbin_dup ๏‚ง House of force ๏‚ง House of spirit ๏‚ง House of lore ๏‚ง Poison Null Byte ๏‚ง ๋“ฑ๋“ฑโ€ฆ ์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
  • 25. 25 ๏‚ง Fastbin_dup a = 1000, b = 2000 ์ผ ๋•Œ ๋ชฉํ‘œ : malloc(8) ์„ ํ†ตํ•ด 123456XX๋ฒˆ์ง€ ๋ฐ›๊ธฐ Fastbin_dup ์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
  • 26. 26 Fastbin_dup ๏‚ง ์›๋ž˜ ์ •์ƒ์ ์ธ ๋ฐฉ์‹ ๏‚ง free(a); free(b); free(c); free(d); ๏‚ง malloc() , malloc(), malloc() , malloc() ๏‚ง ์ˆœ์„œ๋Œ€๋กœ d, c, b, a๋ฅผ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์— ํ• ๋‹น ์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
  • 27. 27 Fastbin_dup ๏‚ง ์ค‘๋ณต FREE๋ฅผ ํ•  ๊ฒฝ์šฐ ๏‚ง Free(a); free(b); free(a); ๏‚ง Malloc() , malloc(), malloc() ๏‚ง ์ˆœ์„œ๋Œ€๋กœ a, b, a๋ฅผ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์— ํ• ๋‹น ์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
  • 28. 28 Fastbin_dup ๏‚ง Fastbin_dup ๏‚ง Free(a); ๋‹ค์Œ์— ๋ฐ˜ํ™˜ํ•  ์ฃผ์†Œ A Fd = null 1000 Size Fd Bk Unused Size User Data ์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
  • 29. 29 Fastbin_dup ๏‚ง Fastbin_dup ๏‚ง free(a); free(b); B Fd = 1000 2000 Size Fd Bk Unused Size User Data A Fd = null ์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
  • 30. 30 Fastbin_dup ๏‚ง Fastbin_dup ๏‚ง free(a); free(b); free(a); A Fd = 2000 1000 Size Fd Bk Unused Size User Data B Fd = 1000 A Fd = null ์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
  • 31. 31 Fastbin_dup ๏‚ง Fastbin_dup ๏‚ง free(a); free(b); free(a); A Fd = 2000 1000 Size Fd Bk Unused Size User Data B Fd = 1000 A Fd = 2000 ์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
  • 32. 32 Fastbin_dup ๏‚ง Fastbin_dup ๏‚ง free(a); free(b); free(a); ๏‚ง int *c = malloc(8); A Fd = 2000 1000 Size Fd Bk Unused Size User Data B Fd = 1000 A Fd = 2000 ์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
  • 33. 33 Fastbin_dup ๏‚ง Fastbin_dup ๏‚ง free(a); free(b); free(a); ๏‚ง int *c = malloc(8); // ๊ฒฐ๊ณผ๊ฐ’ 1000 2000 Size Fd Bk Unused Size User Data B Fd = 1000 A Fd = 2000 ์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
  • 34. 34 Fastbin_dup ๏‚ง Fastbin_dup ๏‚ง free(a); free(b); free(a); ๏‚ง int *c = malloc(8); // ๊ฒฐ๊ณผ๊ฐ’ 1000 ๏‚ง *c = 0x12345678 2000 Size Fd Bk Unused Size User Data B Fd = 1000 A , C Fd = 2000 ์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
  • 35. 35 Fastbin_dup ๏‚ง Fastbin_dup ๏‚ง free(a); free(b); free(a); ๏‚ง int *c = malloc(8); // ๊ฒฐ๊ณผ๊ฐ’ 1000 ๏‚ง *c = 0x12345678; 2000 Size Fd Bk Unused Size User Data B Fd = 1000 A , C Fd = 12345678 ์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
  • 36. 36 Fastbin_dup ๏‚ง Fastbin_dup ๏‚ง free(a); free(b); free(a); ๏‚ง int *c = malloc(8); // ๊ฒฐ๊ณผ๊ฐ’ 1000 ๏‚ง *c = 0x12345678; ๏‚ง Malloc(8); // 2000 ๏‚ง Malloc(8); // 1000 ๏‚ง Malloc(8); // 12345678 2000 Size Fd Bk Unused Size User Data B Fd = 1000 A , C Fd = 12345678 ์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
  • 37. 37 Fastbin_dup ๏‚ง Fastbin_dup ์ •๋ฆฌ ๏‚ง A ๋„ 1000๋ฒˆ์ง€, C ๋„ 1000๋ฒˆ์ง€ ๏‚ง ๋˜‘๊ฐ™์€ ์œ„์น˜๋ฅผ A, C ๋‘ ๊ฐœ๊ฐ€ ๊ฐ€๋ฆฌ์ผœ์„œ ์ƒ๊น€ ๏‚ง C์—๋Š” ์‚ฌ์šฉ์ž์˜ ๋ฐ์ดํ„ฐ๊ฐ€, A์—๋Š” free list ๊ด€๋ จ ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌ. ๏‚ง ์š”๊ตฌ ์กฐ๊ฑด : ๋”๋ธ” ํ”„๋ฆฌ๊ฐ€ ์ผ์–ด ๋‚˜์•ผ ํ•จ ( a, b, a ์ฒ˜๋Ÿผ ํ•˜๋‚˜ ๊ฑด๋„ˆ์„œ ) ( 12345678 ๋ฒˆ์ง€์— ์žˆ๋Š” Size ์˜์—ญ์„ ๋งž์ถฐ์ค˜์•ผ ํ•จ ) ( ํฌ๊ธฐ๊ฐ€ ์ž‘์€ ์ฒญํฌ๋“ค ์—๋งŒ ์ ์šฉ์ด ๊ฐ€๋Šฅ ํ•จ ) Size Fd Bk Unused Size User Data ์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
  • 38. 38 House of force ๏‚ง top chunk size ์กฐ์ž‘์„ ํ†ตํ•ด์„œ ์›ํ•˜๋Š” ์œ„์น˜์— malloc์„ ํ•  ์ˆ˜ ์žˆ์Œ ๏‚ง ํž™์—์„œ์˜ Buffer Overflow ์ทจ์•ฝ์ ์ด ์„ ํ–‰ ๋˜์–ด์•ผ ํ•จ. char * string = ( char *) malloc( 10 ); strcpy( a, argv[1] ); ๏‚ง Write โ€“ What โ€“ Where ๊ฐ€๋Šฅ ์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
  • 39. 39 House of force Chunk Size ( 1000 ) User Data (Top Chunk) ์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T Malloc Size 1000 ์ดํ•˜ : Top ์ฒญํฌ๊ฐ€ ๋‘˜๋กœ ๋‚˜๋‰จ 1000 ์ด์ƒ : ์ƒˆ๋กœ์šด ๋ฉ”๋ชจ๋ฆฌ ๋ฉ์–ด๋ฆฌ๋ฅผ OS์— ์š” ์ฒญ
  • 40. 40 House of force Chunk Size ( 1000 ) User Data (Top Chunk) Chunk Size ( 30 ) User Data Chunk Size ( 970 ) User Data (Top Chunk) Malloc(22); ์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
  • 41. 41 House of force Chunk Size ( 970 ) User Data (Top Chunk) Chunk Size ( 30 ) AAAAAAAAA AAAAAAAAA AAAAAAAAA AAAAAAAAA AAAAAAAAA Buffer Overflow ์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
  • 42. 42 House of force Chunk Size ( 970 ) User Data (Top Chunk) Chunk Size ( 30 ) AAAAAAAAA AAAAAAAAA Chunk Size ( 41414141 ) User Data (Top Chunk) Buffer Overflow ์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T Chunk Size ( 30 ) AAAAAAAAA AAAAAAAAA AAAAAAAAA AAAAAAAAA AAAAAAAAA
  • 43. 43 House of force Chunk Size ( 40000000 ) User Data Chunk Size ( 1414141 ) User Data (Top Chunk) Malloc(40000000); ์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T Chunk Size ( 41414141 ) User Data (Top Chunk) Chunk Size ( 30 ) User Data
  • 44. 44 House of force Malloc(100); Chunk Size ( 100 ) User Data Chunk Size ( 1414041 ) User Data (Top Chunk) Chunk Size ( 40000000 ) User Data Chunk Size ( 1414141 ) User Data (Top Chunk) ์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
  • 45. 45 House of force Chunk Size ( 100 ) User Data ์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T ๏‚ง ์ด๋ ‡๊ฒŒ ๋งŒ๋“ค์–ด์ง„ ์ฒญํฌ๋Š” ๊ธฐ์กด์˜ ํž™ ๋ณด๋‹ค 40000000๋งŒํผ ๋–จ์–ด์ง„ ๊ณณ์— ์œ„์น˜ ๏‚ง 40000000์„ ์กฐ์ž‘ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์›ํ•˜๋Š” ์œ„์น˜์— malloc์ด ๊ฐ€๋Šฅํ•จ โ€ป realloc ๋“ฑ์˜ ํ•จ์ˆ˜๋Š” size_t ํ˜•ํƒœ๋ผ์„œ ์Œ์ˆ˜๋ฅผ ๋„ฃ์„ ๊ฒฝ์šฐ ์œ„์˜ ์กฐ์ž‘์ด ๊ฐ€๋Šฅํ•จ
  • 46. 46 House of force ๏‚ง 1. top chunk size ์กฐ์ž‘ ( ์ตœ๋Œ€ํ•œ ํฌ๊ฒŒ ) ๏‚ง 2. (๋‹ค์Œ์— ํ• ๋‹น ๋ฐ›๊ณ  ์‹ถ์€ ์ฃผ์†Œ โ€“ ํ˜„์žฌ Top chunk ์ฃผ์†Œ) ๋งŒํผ ์ƒˆ๋กœ malloc ํ• ๋‹น ๏‚ง 3. ๋‹ค์Œ malloc์„ ํ†ตํ•ด์„œ ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ์— ์›ํ•˜๋Š” ๊ฐ’ ๋ณต์‚ฌ ๏‚ง ์š”๊ตฌ ์‚ฌํ•ญ ํ˜„์žฌ Top Chunk ์ฃผ์†Œ๋ฅผ ์•Œ์•„๋‚ด์•ผ ํ•จ. Buffer Overflow ๋ฒ„๊ทธ๋กœ Top Chunk Size๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•จ. ์›ํ•˜๋Š” ๋งŒํผ malloc ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•จ ์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
  • 47. 47 Poison Null Byte This Chunk Size์˜ N , M , P PREV_INUSE (P) ๋ฐ”๋กœ ์ด์ „ ์ฒญํฌ๊ฐ€ ํ• ๋‹น๋œ ๊ฒฝ์šฐ IS_MMAPPED (M) ํ˜„์žฌ ์ฒญํฌ๊ฐ€ mmap์„ ํ†ตํ•ด ํ• ๋‹น๋œ ๊ฒฝ์šฐ NON_MAIN_ARENA (N) ์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
  • 48. 48 Poison Null Byte ๋ฐ”๋กœ ์ง์ „์˜ ์ฒญํฌ์˜ ์‚ฌ์ด์ฆˆ๋ฅผ ์ €์žฅ ( P = 0, ์ฆ‰ ์ด์ „ ์ฒญํฌ๊ฐ€ ํ•ด์ œ ๋˜์—ˆ์„ ๋•Œ์—๋งŒ ์œ ์šฉํ•จ ) ์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
  • 49. 49 Poison Null Byte Prev | 101 User Data Line 2: P = 0 Prev | 101 User Data Prev | 101 Fd Bk 100 | 100 User Data Prev | 201 Fd Bk ์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T Line 3: Line 4: (Merged)
  • 50. 50 Poison Null Byte ์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T ๏‚ง ์กฐ๊ฑด : ๋„ ๋ฐ”์ดํŠธ ํ•˜๋‚˜ Overwrite์™€, malloc, free ๋ฅผ ์›ํ•˜๋Š” ๋Œ€๋กœ ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•จ. ๏‚ง ๋‹ค๋ฅธ ์ทจ์•ฝ์ ์— ๋น„ํ•ด์„œ๋Š” ์š”๊ตฌ ์กฐ๊ฑด์ด ์ ๊ณ  ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์„ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Œ ๋ฌธ์ž์—ด์˜ ๋์„ ์ฒ˜๋ฆฌํ•˜๋‹ค๊ฐ€ 00์„ ๋์— Overwrite ํ•˜๋Š” ๋“ฑ.. ๏‚ง ๊ฒฐ๊ณผ : ๋‘ ๊ฐœ์˜ ์ฒญํฌ๊ฐ€ Overlapp ๋˜๋Š” ๊ฒƒ ๏‚ง A : 1000~2000๋ฒˆ์ง€ ์‚ฌ์šฉ ๏‚ง B : 1500~1600๋ฒˆ์ง€ ์‚ฌ์šฉ
  • 51. 51 Poison Null Byte ์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T Prev | 0x41 A Prev | 0x171 B Prev | 0x101 C A = malloc ( 0x38 ); // chunk size 0x40 B = malloc ( 0x168 ); // chunk size 0x170 C = malloc ( 0x98 ); // chunk size 0x100 โ€ป ํ•œ ์ฒญํฌ์˜ Size Data + sizeof(Prev) + sizeof(Size)
  • 52. 52 Poison Null Byte ์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T Prev | 41 A Prev | 171 B Prev | 101 C free(B)
  • 53. 53 Poison Null Byte ์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T A[0x38] = 0; /* [0 ~ 0x37] ๊นŒ์ง€๊ฐ€ ๋ฒ”์œ„ Off by One Null Overwrite Prev | 41 A Prev | 171 B freed 170 | 100 C
  • 54. 54 Poison Null Byte ์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T Size๊ฐ€ 170 -> 100์œผ๋กœ ์ค„์–ด๋“ฌ D = malloc(0x38); Prev | 100 B freed 170 | 100 C Prev | 41 A
  • 55. 55 Poison Null Byte ์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T Prev | C1 B Freed C0 | . 170 | 100 C Chunk ์˜ ์‚ฌ์ด์ฆˆ๊ฐ€ ์ค„์–ด๋ฒ„๋ ค์„œ C์˜ Prev๋ฅผ ์—…๋ฐ์ดํŠธ ํ•˜์ง€ ๋ชปํ•จ E = malloc( 0x38 ); Prev | 41 D Prev | 41 A
  • 56. 56 Poison Null Byte ์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T Prev | 81 B 170 | 100 C Free(D); Prev | 41 D Prev | 41 E Prev | 41 A
  • 57. 57 Poison Null Byte ์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T Prev | 81 B 170 | 100 C Free(C); << Merge Prev | 41 D 40 | 41 E Prev | 41 A
  • 58. 58 Poison Null Byte ์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T Prev | 81 B 170 | 100 C F = Malloc(0x268); Prev | 271 40 | 41 E Prev | 41 A
  • 59. 59 Poison Null Byte ์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T Prev | 81 B 170 | 100 C F = Malloc(0x268); Prev | 271 F Prev | 41 E Prev | 41 A
  • 60. 60 Poison Null Byte ์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T ๏‚ง ์ •๋ฆฌ ๏‚ง A, B, C ๋ฅผ ๋งŒ๋“ค๊ณ , B๋ฅผ ํ•ด์ œ ๏‚ง A๋ฅผ Overflow ํ•ด์„œ ํ•ด์ œ๋œ B์˜ ์‚ฌ์ด์ฆˆ๋ฅผ ์ค„์—ฌ๋ฒ„๋ฆผ ๏‚ง B๋ฅผ ์ชผ๊ฐœ์„œ D์™€ E๋ฅผ ๋งŒ๋“ฌ ๏‚ง D๋ฅผ Free ( E ๋งŒ ์ค‘๊ฐ„์— ํ• ๋‹น ๋˜์–ด ์žˆ์Œ ) ๏‚ง C๋ฅผ Free ํ•˜๋ฉด์„œ ๋งจ ์ฒ˜์Œ์˜ B~C๋ฅผ ํ•ฉ๋ณ‘ํ•˜๊ฒŒ ๋จ >> Overlap
  • 61. 61 ์ด ์ •๋ฆฌ ๊ฐœ๋ฐœ์ž ์ž…์žฅ์—์„œ (์ ์–ด๋„ Heap์— ๋Œ€ํ•ด ) ์•ˆ์ „ํ•œ ํ”„๋กœ๊ทธ๋žจ ์„ ๋งŒ๋“œ๋ ค๋ฉด 1. Double-Free ์™€ ๊ฐ™์€ ์ทจ์•ฝ์ ์„ ๋ฐœ์ƒ์‹œํ‚ค์ง€ ์•Š๋Š” ๊ฒƒ. 2. Heap์ƒ์—์„œ buffer overflow๊ฐ€ ๋‚˜์ง€ ์•Š๋„๋ก ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ. ๋„ ๋ฐ”์ดํŠธ ํ•˜๋‚˜๋„ ํ—ˆ์šฉ ํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค. ๊ณต๊ฒฉ์ž ์ž…์žฅ์—์„œ Heap์„ Exploit ํ•˜๋ ค๋ฉด 1. ์œ„์— ์–ธ๊ธ‰ํ•œ ์ทจ์•ฝ์ ์„ ์ฐพ์„ ์ˆ˜ ์žˆ์–ด์•ผ ํ•˜๊ณ  ( ๋„ ๋ฐ”์ดํŠธ ํ•˜๋‚˜๋ผ๋„ ์†Œ์ค‘ ํžˆ! ) 2. Heap ๊ทผ์ฒ˜์— ์œ„์น˜ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ์— ๋Œ€ํ•ด์„œ ์ž˜ ์•Œ๊ณ  ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T
  • 63. 63 Reference ๏‚ง Exploitation Trends: From Potential Risk to Actual Risk โ€“ RSAConference2015, https://www.rsaconference.com/writable/presentations/file_upload/br-t07- exploitation-trends-from-potential-risk-to-actual-risk.pdf ๏‚ง Understanding glibc malloc https://sploitfun.wordpress.com/2015/02/10/understanding-glibc-malloc/ ๏‚ง Understanding Heap by breaking it https://www.blackhat.com/presentations/bh-usa- 07/Ferguson/Whitepaper/bh-usa-07-ferguson-WP.pdf ๏‚ง Slideshare โ€“ AngelBoy, Heap Exploitation http://www.slideshare.net/AngelBoy1?utm_campaign=profiletracking&ut m_medium=sssite&utm_source=ssslideview 2016-08- 15 ์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต H.I.T

Editor's Notes

  1. ํž™์—์„œ์˜ ๋ฒ„ํผ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๋ฅผ ์–ด๋–ป๊ฒŒ ์ต์Šคํ”Œ๋กœ์ž‡ ํ•  ์ˆ˜ ์žˆ์„ ์ง€์— ๋Œ€ํ•ด์„œ ๋ช‡๊ฐ€์ง€ ๋ฐฉ๋ฒ•๋“ค์„ ๋‹ค๋ค„ ๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๊ธฐ ์œ„ํ•ด์„œ ํž™์ด ๊ฐ–๊ณ  ์žˆ๋Š” ์ž๋ฃŒ ๊ตฌ์กฐ์— ๋Œ€ํ•ด์„œ ์„ค๋ช… ํ•˜๊ณ  ์ด๊ฒƒ์„ ์•…์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•˜๋Š” ๊ฒƒ์ด ์ฃผ์š” ๋‚ด์šฉ์ด ๋  ๊ฑฐ ๊ฐ™์Šต๋‹ˆ๋‹ค.
  2. C์–ธ์–ด๋ฅผ ๋ชจ๋ฅด์‹œ๊ฑฐ๋‚˜ ํฌ์ธํ„ฐ์— ๋Œ€ํ•œ ๊ฐœ๋…์ด ์•ฝํ•˜์‹  ๋ถ„๋“ค์€ ๋”ฐ๋ผ์˜ค์‹œ๊ธฐ ํž˜๋“ค ์ˆ˜ ์žˆ๋Š”๋ฐ์š”, ๋‚˜์ค‘์— ์ข€ ๋” ๋ฐฐ์šฐ๊ณ  ๋‚˜์…”์„œ ๋ณด์‹œ๋ฉด ๋” ์ž˜ ์ดํ•ด๊ฐ€ ๋˜์‹ค ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
  3. ๋˜‘๊ฐ™์€ ํ—ฌ๋กœ ์›”๋“œ๋ฅผ ์ง€์—ญ๋ณ€์ˆ˜์ธ ์Šคํƒ๊ณผ ๋™์  ํ• ๋‹น์ธ ํž™์— ๋”ฐ๋กœ๋”ฐ๋กœ ๋งŒ๋“ค์–ด์„œ ํ”„๋ฆฐํŠธ์—ํ”„๋ฅผ ํ•˜๋Š” ์˜ˆ์ œ์ž…๋‹ˆ๋‹ค. ์•„๋ž˜๋Š” ์‹ค์ œ๋กœ ํ•ด๋‹น ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์–ด๋Š ์œ„์น˜์ธ์ง€ ์ฐ์–ด๋ณธ ๊ฒฐ๊ณผ์ธ๋ฐ. ์™ผ์ชฝ์€ ์Šคํƒ์˜์—ญ์œผ๋กœ ๊ต‰์žฅํžˆ ํฐ ์ˆซ์ž์ธ๊ฑธ ์•Œ ์ˆ˜ ์žˆ๊ณ  ์˜ค๋ฅธ์ชฝ์€ ํž™ ์˜์—ญ์œผ๋กœ ์ƒ๋Œ€์ ์œผ๋กœ ์ž‘์€ ์ฃผ์†Œ๋ฅผ ๊ฐ–๋Š” ๊ณณ์— ์œ„์น˜ํ•˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฑด ๋ฉ”๋ชจ๋ฆฌ์˜ ํšจ์œจ์„ฑ์„ ์œ„ํ•ด ์Šคํƒ์€ ํฐ ์ฃผ์†Œ์—์„œ, ํž™์€ ์ž‘์€ ์ฃผ์†Œ์—์„œ ์„œ๋กœ ๋งˆ์ฃผ๋ณด๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ์ฆ๊ฐ€ํ•˜๋„๋ก ๋งŒ๋“ค์–ด์ ธ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
  4. RSA 2015์—์„œ ๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ๊ฐ€ ๋ฐœํ‘œํ•œ ๋‚ด์šฉ 2006 ~ 2014 ๋…„ ์Šคํƒ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ ์ค„์–ด๋“ค๊ณ  ํž™ ๊ด€๋ จ ์ทจ์•ฝ์ ์ธ ํž™ ์˜ค๋ฒ„ํ”Œ๋กœ์™€ ์œ ์ฆˆ์—ํ”„ํ„ฐํ”„๋ฆฌ๊ฐ€ ๊ฑฐ์˜ 80%๋ฅผ ๋„˜๋Š” ๋น„์ค‘์„ ๋ณด์ด๋Š” ๊ฑธ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์‹ค ์ด๋ ‡๊ฒŒ ์ค‘์š”ํ•˜๊ฒŒ ์ƒ๊ฐ๋˜๋Š”๋ฐ๋„, ์‹ค์ œ๋กœ ํ•œ๊ตญ์–ด๋กœ ๋œ ํž™ ์ทจ์•ฝ์  ์ต์Šค ์ž๋ฃŒ๋“ค์ด ๋งŽ์ด ์—†์Šต๋‹ˆ๋‹ค. ์ œ๊ฐ€ ์ด ์กฐ๊ธˆ ๋”ฑ๋”ฑํ•œ ์ฃผ์ œ๋ฅผ ๋ฐœํ‘œ ์ฃผ์ œ๋กœ ์žก๊ฒŒ ๋œ ๊ฒƒ๋„ ํ•œ๊ตญ์–ด๋กœ ์ž๋ฃŒ๋ฅผ ํ•˜๋‚˜๋ฅผ ๋” ๋งŒ๋“ค๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์•„์„œ ์˜€์Šต๋‹ˆ๋‹ค.
  5. Doug lea ๊ฐ€ ๋งŒ๋“  dlmalloc ์˜ค๋ž˜๋˜๊ธฐ๋„ ํ–ˆ๊ณ  ๊ณ ์ „์  Ptmalloc2 โ€“ dlmalloc + thread ์ง€์›, ํ˜„์žฌ glibc Jemalloc โ€“ ๊ฐ™์€ ํฌ๊ธฐ์˜ ์—ฌ๋Ÿฌ ๊ฐœ๋ฅผ Arrayํ˜•์‹์œผ๋กœ ๊ด€๋ฆฌํ•ด์„œ ํšจ์œจ์„ฑ์„ ๋†’์ž„ ๋“ฑ๋“ฑโ€ฆ MemGC โ€“ Use-After-Free ๋ฅ˜์˜ ๊ณต๊ฒฉ์„ ๋ฐฉ์–ดํ•˜๋Š”๋ฐ ๋„์›€์ด ๋˜๋Š” ํž™ ๊ด€๋ฆฌ์ž.
  6. ๊ทธ์ค‘์— ์„œ๋ฌธ์— ํ•ด๋‹น๋˜๋Š” ๋ถ€๋ถ„์„ ๊ฐ€์ ธ์™€ ๋ดค์Šต๋‹ˆ๋‹ค. ์†๋„๊ฐ€ ๋น ๋ฅด์ง€๋„, ๊ณต๊ฐ„ํ™œ์šฉ์„ฑ์ด ์ข‹์ง€๋„, ์ด์‹์„ฑ์ด ๊ฐ€์žฅ ์ข‹์ง€๋„ ์•Š๋‹ค.
  7. ์‹ค์ œ๋กœ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์— ์–ผ๋ก์„ ํ–ˆ์„ ๋•Œ ํ•˜๋‚˜์˜ ์ฒญํฌ๋ฅผ ํ”„๋กœ๊ทธ๋žจ์— ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค. ์š”์ฒญํ•œ ํฌ๊ธฐ๋ณด๋‹ค ์กฐ๊ธˆ ํฌ๊ฒŒ ํ• ๋‹น๋˜๋Š”๋ฐ ๊ทธ ์ด์œ ๋Š” ๋Œ€์ƒ ์ฒญํฌ์˜ ํฌ๊ธฐ๋ฅผ ๋‹ด๋Š” ํ•„๋“œ๊ฐ€ ์ถ”๊ฐ€๋˜์–ด์„œ ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ฒญํฌ์—๋Š” ์‚ฌ์ด์ฆˆ์™€ ์—ฌ๋Ÿฌ ์ •๋ณด๋“ค์ด ๋‹ด๊ฒจ์žˆ์ง€๋งŒ ์‹ค์ œ๋กœ ํ”„๋กœ๊ทธ๋žจ์— ๋Œ๋ ค์ฃผ๋Š” ๊ฒƒ์€ UserData๊ฐ€ ๋“ค์–ด๊ฐ€๋Š” ์˜†์˜ ๊ทธ๋ฆผ์—์„œ์˜ mem ์œ„์น˜์˜ ํฌ์ธํ„ฐ ์ž…๋‹ˆ๋‹ค.
  8. Malloc ์˜ ์žฌ์‚ฌ์šฉ์„ฑ์— ๊ด€ํ•œ ์ด์•ผ๊ธฐ์ธ๋ฐ ์™ผ์ชฝ์˜ ๋ฝ‘๊ธฐ๊ธฐ๊ณ„๋กœ ๋น„์œ ๋ฅผ ํ•ด๋ณด๋ฉด ๋นจ๊ฐ„ ๊ณต์„ ๋ฝ‘๋Š” ๊ฒƒ์„ A๋ฉ”๋ชจ๋ฆฌ๋ฅผ 512๋งŒํผ ์‚ฌ์ด์ฆˆ๋กœ ํ• ๋‹น ๋ฐ›๋Š” ๊ฒƒ์ด๋ผ ํ•˜๊ณ , ๋นจ๊ฐ„๊ณต์„ ๋‹ค์‹œ ์ง‘์–ด ๋„ฃ๋Š” ๊ฒƒ์„ A ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ”„๋ฆฌํ•˜๋Š” ๊ฒƒ์ด๋ผ๊ณ  ๋น„์œ ๋ฅผ ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค
  9. ์ด ์งํ›„์— ๋˜ ๋‹ค๋ฅธ ๊ณต์„ ๋ฝ‘๊ฒŒ ๋˜๋ฉด ๋ณดํ†ต์˜ ๋ฝ‘๊ธฐ ๊ธฐ๊ณ„์—์„œ๋Š” ์›๋ž˜ ๋‹ค๋ฅธ ๋žœ๋คํ•œ ๊ณต์„ ๋Œ๋ ค์ฃผ๊ฒŒ ๋˜๊ฒ ์ง€๋งŒ Malloc์˜ ๊ฒฝ์šฐ์—๋Š” ์•„๊นŒ ๋„ฃ์—ˆ๋˜ A๊ฐ€ ๋ฐ”๋กœ ๋Œ์•„์˜ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค ์ด๊ฑธ malloc์ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์žฌํ™œ์šฉ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ธ๋ฐ์š”.
  10. ๋นˆ์Šค๋Š” ํ”„๋ฆฌ๋œ ๊ฒƒ๋“ค์„ ์žฌ์‚ฌ์šฉ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋ชจ์•„๋‘๋Š” ๊ณณ์ธ๋ฐ์š”. ๋น„์Šทํ•œ ํฌ๊ธฐ๋ผ๋ฆฌ ๋ชจ์•„์„œ ๋ฒˆํ˜ธ๋ฅผ ๋ถ™์—ฌ์„œ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค ์˜†์— ์žˆ๋Š” ๊ตด๋น„์ฒ˜๋Ÿผ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ฐ˜ํ™˜์ด ๋  ๋•Œ๋งˆ๋‹ค ํ•˜๋‚˜ ํ•˜๋‚˜ ์ค„์ง€์–ด ๋†“๊ณ , ํ•„์š”ํ• ๋•Œ ๊ทธ ์ค„์ง€์–ด ์žˆ๋Š” ๊ฒƒ์—์„œ ํ•˜๋‚˜์”ฉ ๊บผ๋‚ด์„œ ํ• ๋‹น์„ ํ•ด์ฃผ๋Š” ๊ฒƒ์ด์ฃ  ์ด๋Ÿฐ ๋ฐฉ์‹์„ ํƒํ•œ ์ด์œ ๋กœ๋Š”, ์–ด๋Š ํŠน์ • ํฌ๊ธฐ, ์˜ˆ๋ฅผ ๋“ค๋ฉด 30์งœ๋ฆฌ๋ฅผ ๋ง๋ก์„ ํ–ˆ๋‹ค๊ฐ€ ํ”„๋ฆฌํ•œ ํ”„๋กœ๊ทธ๋žจ์—์„œ๋Š” ๋‹ค์‹œ 30์„ ํ• ๋‹นํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๋‹ค. ๋ผ๋Š” ์ „์ œํ•˜์— ๊ทธ ํฌ๊ธฐ๊ฐ€ ๋‹ค์‹œ ์‚ฌ์šฉ๋  ๊ฒƒ์„ ๊ธฐ๋Œ€ํ•˜๊ณ  ์žฌ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋ชจ์•„๋‘๋„๋ก ํ•œ ๊ฒƒ ์ž…๋‹ˆ๋‹ค.
  11. ์ด๋ ‡๊ฒŒ ์žฌ์‚ฌ์šฉ์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ FREE ๊ฐ€ ๋œ ์ฒญํฌ์—๋Š” fd, ์™€ bk๋ผ๋Š” ์ •๋ณด๊ฐ€ ์ €์žฅ๋˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ์˜ ํ˜•ํƒœ๋กœ ์•„๊นŒ ๊ทธ ๊ตด๋น„ ๋ชจ์–‘ ์ฒ˜๋Ÿผ ์ €์žฅ์„ ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ ์›๋ž˜ ์œ ์ €์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋˜ ๊ณณ์ด์ง€๋งŒ, free ๋œ ๋’ค์—๋Š” ์‚ฌ์šฉ
  12. ์ด๋ ‡๊ฒŒ ์žฌ์‚ฌ์šฉ์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ FREE ๊ฐ€ ๋œ ์ฒญํฌ์—๋Š” fd, ์™€ bk๋ผ๋Š” ์ •๋ณด๊ฐ€ ์ €์žฅ๋˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ์˜ ํ˜•ํƒœ๋กœ ์•„๊นŒ ๊ทธ ๊ตด๋น„ ๋ชจ์–‘ ์ฒ˜๋Ÿผ ์ €์žฅ์„ ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ ์›๋ž˜ ์œ ์ €์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋˜ ๊ณณ์ด์ง€๋งŒ, free ๋œ ๋’ค์—๋Š” ์‚ฌ์šฉ
  13. ์ด๋ ‡๊ฒŒ ์žฌ์‚ฌ์šฉ์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ FREE ๊ฐ€ ๋œ ์ฒญํฌ์—๋Š” fd, ์™€ bk๋ผ๋Š” ์ •๋ณด๊ฐ€ ์ €์žฅ๋˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ์˜ ํ˜•ํƒœ๋กœ ์•„๊นŒ ๊ทธ ๊ตด๋น„ ๋ชจ์–‘ ์ฒ˜๋Ÿผ ์ €์žฅ์„ ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ ์›๋ž˜ ์œ ์ €์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋˜ ๊ณณ์ด์ง€๋งŒ, free ๋œ ๋’ค์—๋Š” ์‚ฌ์šฉ
  14. ๊ทธ ๋‹ค์Œ์€ ํƒ‘ ์ฒญํฌ์— ๋Œ€ํ•œ ๋‚ด์šฉ์ธ๋ฐ์š” ์•„๊นŒ ์–ด๋–ค ํž™ ์„ ํ• ๋‹นํ•ด์„œ ๊ทธ๊ฒƒ์„ ๋‚˜๋ˆ„์–ด ์ฃผ๋Š” ๊ฒƒ์„ ํ•˜๋Š” ๊ฒƒ์ด ์— ์–ผ๋ก์˜ ์—ญํ• ์ด๋ผ๊ณ  ํ–ˆ๋Š”๋ฐ ๊ทธ ๋‚˜๋ˆ„๋Š” ๋ฐ”ํƒ•์ด ๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํƒ‘ ์ฒญํฌ๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํƒ‘ ์ฒญํฌ์˜ size๊ฐ€ 1000์ธ ์ƒํƒœ์—์„œ 26๋งŒํผ์˜ ์— ์–ผ๋ก์„ ์‹œ๋„ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณ€ํ™” ํ•ฉ๋‹ˆ๋‹ค
  15. 26์„ ๋‹ด๊ธฐ์œ„ํ•œ 30 ํฌ๊ธฐ์˜ ์ฒญํฌ๊ฐ€ ์ƒ์„ฑ๋˜๊ณ , ๋‹ค์‹œ ๋‚˜๋จธ์ง€ 970๋งŒํผ์˜ ๋ฉ”๋ชจ๋ฆฌ ์—ฌ์œ ๋ธ์„ ํƒ‘ ์ฒญํฌ๋กœ ๊ด€๋ฆฌํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
  16. ์š”์•ฝ์„ ํ•ด๋ณด๋ฉด,
  17. How2heap ์ด๋ผ๋Š” ์ œ๋ชฉ์€ ์‚ฌ์‹ค shellphish๋ผ๋Š” ํŒ€์—์„œ ๊ด€๋ฆฌํ•˜๊ณ  ์žˆ๋Š” ๊ธฐํŠธํ—ˆ๋ธŒ ๋ ˆํฌ์ง€ํ„ฐ๋ฆฌ์—์„œ ๋”ฐ์˜จ ์ œ๋ชฉ์ž…๋‹ˆ๋‹ค. ShellphishํŒ€์€ angr์ด๋ผ๋Š” ๋ฐ”์ด๋„ˆ๋ฆฌ ์ž๋™ํ™” ๋ถ„์„ ํˆด์„ ๋งŒ๋“  ๊ฒƒ์œผ๋กœ ์œ ๋ช…ํ•œ ํŒ€์ด๊ธฐ๋„ ํ•œ๋ฐ, ์ž์‹ ๋“ค์˜ ๊ธฐ์ˆ ์„ ๋ฐœ์ „์‹œํ‚ค๋Š”๊ฑฐ์— ๋ชป์ง€ ์•Š๊ฒŒ, ์ด๋ ‡๊ฒŒ ๊ต์œก์„ ์œ„ํ•ด์„œ ๋ ˆํฌ์ง€ํ„ฐ๋ฆฌ๋ฅผ ์šด์˜ ํ•˜๋Š” ๊ฒƒ์„ ๋ณด๊ณ  ๋ฐฐ์›Œ์•ผ ํ•  ์ ์ด ์ฐธ ๋งŽ๋‹ค๊ณ  ๋Š๊ผˆ์Šต๋‹ˆ๋‹ค. ์•„๋ฌดํŠผ ์ด How2heap์ด๋ผ๋Š” ๋ ˆํผ์ง€ํ„ฐ๋ฆฌ์—๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€ ํž™ ์ต์Šคํ”Œ๋กœ์ž‡ ๊ธฐ์ˆ ๋“ค์„ ๋ณด์—ฌ์ฃผ๊ณ  ์žˆ๋Š”๋ฐ์š”
  18. ์•„๋ž˜ ์จ์žˆ๋“ฏ์ด git clone, make, ๊ทธ๋ฆฌ๊ณ  ์‹คํ–‰ ๋งŒ ํ•˜๋ฉด ์˜์–ด๊ธด ํ•˜์ง€๋งŒ ํ•ด๋‹น ์ทจ์•ฝ์  ์ต์Šคํ”Œ๋กœ์ž‡ ๊ธฐ์ˆ ์— ๋Œ€ํ•ด์„œ ์ƒ์„ธํ•˜๊ฒŒ ์„ค๋ช…์„ ํ•ด์ฃผ๋Š” ์˜ˆ์‹œ๋ฅผ ๋ณด์—ฌ์ฃผ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค
  19. ์ด ๊ณณ์—์„œ ๋‹ค๋ฅด๋ˆˆ ์ทจ์•ฝ์ ๋“ค์—๋Š” ์œ ์ฆˆ์• ํ”„ํ„ฐ ํ”„๋ฆฌ, ๋”๋ธ” ํ”„๋ฆฌ ๋ฒ„๊ทธ, ํŒจ์ŠคํŠธ ๋นˆ ์ค‘๋ณต ํ•ด์ œ, ํ•˜์šฐ์Šค์˜ค๋ธŒ ํฌ์Šค ํ•˜์šฐ์Šค์˜ค๋ธŒ ์Šคํ”ผ๋ฆฟ ๋“ฑ๋“ฑ์˜ ๊ธฐ๋ฒ•๋“ค์„ ์†Œ๊ฐœํ•˜๊ณ  ์žˆ๋Š”๋ฐ์š”. ์ €๋Š” ์ด ๋ฐœํ‘œ์—์„œ fastbin_dup์™€ ํ•˜์šฐ์Šค ์˜ค๋ธŒ ํฌ์Šค, ํฌ์ด์ฆŒ ๋„ ๋ฐ”์ดํŠธ 3๊ฐ€์ง€์˜ ๋ฐฉ์‹์„ ์„ค๋ช…ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
  20. ์ฒ˜์Œ์œผ๋กœ ๋‹ค๋ฃฐ ๋ฐฉ์‹์€ fastbin_dup ์ž…๋‹ˆ๋‹ค. ํ•ด์„ํ•˜๋ฉด fastbin ์ด๋ผ๋Š” ๊ตฌ์กฐ์ฒด๋ฅผ ์ค‘๋ณต์‹œ์ผœ์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ธ๋ฐ์š”. ์—์ œ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋จผ์ € ์ฝ์–ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
  21. ํ•ฉ๋ณ‘์ด ์ผ์–ด๋‚จ, P = 0 ์ธ ๊ฒƒ๊ณผ, Prev Size๋ฅผ ์•Œ๊ณ  ์žˆ์œผ๋‹ˆ๊นŒ ์ด์ „ ํ”„๋ฆฌ๋œ ์ฒญํฌ์™€ ํ•ฉ๋ณ‘์ด ๊ฐ€๋Šฅํ•จ. ํ•˜์ง€๋งŒ Prev Size๋งŒ ๊ฐ–๊ณ  ์žˆ์ง€ Next Size๋ฅผ ๊ฐ–๊ณ  ์žˆ์ง€๋Š” ์•Š์œผ๋‹ˆ free(b) free(a) ์ˆœ์˜ ๊ฒฝ์šฐ์—๋Š” ํ•ฉ๋ณ‘์ด ์ผ์–ด๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  22. ํ•˜ ์ง€๊ธˆ๊นŒ์ง€ ์—ด์‹ฌํžˆ ์ž˜ ๋“ค์–ด์ฃผ์…จ๋Š”๋ฐ์š” ๋งˆ์ง€๋ง‰์œผ๋กœ ์ •๋ฆฌ ํ•˜๊ณ  ๋๋‚ด๊ฒ ์Šต๋Š๋””ใ….