SlideShare a Scribd company logo
1 of 63
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

UMLๅ…ฅ้–€
UMLๅ…ฅ้–€UMLๅ…ฅ้–€
UMLๅ…ฅ้–€Kuniaki Igarashi
ย 
Linux Binary Exploitation - Return-oritend Programing
Linux Binary Exploitation - Return-oritend ProgramingLinux Binary Exploitation - Return-oritend Programing
Linux Binary Exploitation - Return-oritend ProgramingAngel Boy
ย 
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
ย 
Low Power Design and Verification
Low Power Design and VerificationLow Power Design and Verification
Low Power Design and VerificationDVClub
ย 
Binary exploitation - AIS3
Binary exploitation - AIS3Binary exploitation - AIS3
Binary exploitation - AIS3Angel Boy
ย 
Linux binary Exploitation - Basic knowledge
Linux binary Exploitation - Basic knowledgeLinux binary Exploitation - Basic knowledge
Linux binary Exploitation - Basic knowledgeAngel Boy
ย 
COSCUP2016 - LLVMๆก†ๆžถใ€็”ฑๆทบๅ…ฅๆทบ
COSCUP2016 - LLVMๆก†ๆžถใ€็”ฑๆทบๅ…ฅๆทบCOSCUP2016 - LLVMๆก†ๆžถใ€็”ฑๆทบๅ…ฅๆทบ
COSCUP2016 - LLVMๆก†ๆžถใ€็”ฑๆทบๅ…ฅๆทบhydai
ย 
ROP ่ผ•้ฌ†่ซ‡
ROP ่ผ•้ฌ†่ซ‡ROP ่ผ•้ฌ†่ซ‡
ROP ่ผ•้ฌ†่ซ‡hackstuff
ย 
Inputs of physical design
Inputs of physical designInputs of physical design
Inputs of physical designKishore Sai Addanki
ย 
scryptos onsite(plaid CTF)
scryptos onsite(plaid CTF)scryptos onsite(plaid CTF)
scryptos onsite(plaid CTF)RKX1209
ย 
Python2.x ใฎ input ้–ขๆ•ฐใซ RCE ่„†ๅผฑๆ€งใŒใ‚ใ‚‹่ฉฑ
Python2.x ใฎ input ้–ขๆ•ฐใซRCE ่„†ๅผฑๆ€งใŒใ‚ใ‚‹่ฉฑPython2.x ใฎ input ้–ขๆ•ฐใซRCE ่„†ๅผฑๆ€งใŒใ‚ใ‚‹่ฉฑ
Python2.x ใฎ input ้–ขๆ•ฐใซ RCE ่„†ๅผฑๆ€งใŒใ‚ใ‚‹่ฉฑxryuseix
ย 
CSW2017 Peng qiu+shefang-zhong win32k -dark_composition_finnal_finnal_rm_mark
CSW2017 Peng qiu+shefang-zhong win32k -dark_composition_finnal_finnal_rm_markCSW2017 Peng qiu+shefang-zhong win32k -dark_composition_finnal_finnal_rm_mark
CSW2017 Peng qiu+shefang-zhong win32k -dark_composition_finnal_finnal_rm_markCanSecWest
ย 
Understanding cts log_messages
Understanding cts log_messagesUnderstanding cts log_messages
Understanding cts log_messagesMujahid Mohammed
ย 
ZERO WIRE LOAD MODEL.pptx
ZERO WIRE LOAD MODEL.pptxZERO WIRE LOAD MODEL.pptx
ZERO WIRE LOAD MODEL.pptxVishalYadav29718
ย 
Pwning in c++ (basic)
Pwning in c++ (basic)Pwning in c++ (basic)
Pwning in c++ (basic)Angel Boy
ย 
Linux Binary Exploitation - Heap Exploitation
Linux Binary Exploitation - Heap Exploitation Linux Binary Exploitation - Heap Exploitation
Linux Binary Exploitation - Heap Exploitation Angel Boy
ย 
Flip Chip technology
Flip Chip technologyFlip Chip technology
Flip Chip technologyMantra VLSI
ย 
Floor planning
Floor planningFloor planning
Floor planningshaik sharief
ย 
Cadence P-cell tutorial
Cadence P-cell tutorial Cadence P-cell tutorial
Cadence P-cell tutorial Michael Lee
ย 
Vivado hlsๅ‹‰ๅผทไผš3๏ผˆaxi4 lite slave๏ผ‰
Vivado hlsๅ‹‰ๅผทไผš3๏ผˆaxi4 lite slave๏ผ‰Vivado hlsๅ‹‰ๅผทไผš3๏ผˆaxi4 lite slave๏ผ‰
Vivado hlsๅ‹‰ๅผทไผš3๏ผˆaxi4 lite slave๏ผ‰marsee101
ย 

What's hot (20)

UMLๅ…ฅ้–€
UMLๅ…ฅ้–€UMLๅ…ฅ้–€
UMLๅ…ฅ้–€
ย 
Linux Binary Exploitation - Return-oritend Programing
Linux Binary Exploitation - Return-oritend ProgramingLinux Binary Exploitation - Return-oritend Programing
Linux Binary Exploitation - Return-oritend Programing
ย 
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"
ย 
Low Power Design and Verification
Low Power Design and VerificationLow Power Design and Verification
Low Power Design and Verification
ย 
Binary exploitation - AIS3
Binary exploitation - AIS3Binary exploitation - AIS3
Binary exploitation - AIS3
ย 
Linux binary Exploitation - Basic knowledge
Linux binary Exploitation - Basic knowledgeLinux binary Exploitation - Basic knowledge
Linux binary Exploitation - Basic knowledge
ย 
COSCUP2016 - LLVMๆก†ๆžถใ€็”ฑๆทบๅ…ฅๆทบ
COSCUP2016 - LLVMๆก†ๆžถใ€็”ฑๆทบๅ…ฅๆทบCOSCUP2016 - LLVMๆก†ๆžถใ€็”ฑๆทบๅ…ฅๆทบ
COSCUP2016 - LLVMๆก†ๆžถใ€็”ฑๆทบๅ…ฅๆทบ
ย 
ROP ่ผ•้ฌ†่ซ‡
ROP ่ผ•้ฌ†่ซ‡ROP ่ผ•้ฌ†่ซ‡
ROP ่ผ•้ฌ†่ซ‡
ย 
Inputs of physical design
Inputs of physical designInputs of physical design
Inputs of physical design
ย 
scryptos onsite(plaid CTF)
scryptos onsite(plaid CTF)scryptos onsite(plaid CTF)
scryptos onsite(plaid CTF)
ย 
Python2.x ใฎ input ้–ขๆ•ฐใซ RCE ่„†ๅผฑๆ€งใŒใ‚ใ‚‹่ฉฑ
Python2.x ใฎ input ้–ขๆ•ฐใซRCE ่„†ๅผฑๆ€งใŒใ‚ใ‚‹่ฉฑPython2.x ใฎ input ้–ขๆ•ฐใซRCE ่„†ๅผฑๆ€งใŒใ‚ใ‚‹่ฉฑ
Python2.x ใฎ input ้–ขๆ•ฐใซ RCE ่„†ๅผฑๆ€งใŒใ‚ใ‚‹่ฉฑ
ย 
CSW2017 Peng qiu+shefang-zhong win32k -dark_composition_finnal_finnal_rm_mark
CSW2017 Peng qiu+shefang-zhong win32k -dark_composition_finnal_finnal_rm_markCSW2017 Peng qiu+shefang-zhong win32k -dark_composition_finnal_finnal_rm_mark
CSW2017 Peng qiu+shefang-zhong win32k -dark_composition_finnal_finnal_rm_mark
ย 
Understanding cts log_messages
Understanding cts log_messagesUnderstanding cts log_messages
Understanding cts log_messages
ย 
ZERO WIRE LOAD MODEL.pptx
ZERO WIRE LOAD MODEL.pptxZERO WIRE LOAD MODEL.pptx
ZERO WIRE LOAD MODEL.pptx
ย 
Pwning in c++ (basic)
Pwning in c++ (basic)Pwning in c++ (basic)
Pwning in c++ (basic)
ย 
Linux Binary Exploitation - Heap Exploitation
Linux Binary Exploitation - Heap Exploitation Linux Binary Exploitation - Heap Exploitation
Linux Binary Exploitation - Heap Exploitation
ย 
Flip Chip technology
Flip Chip technologyFlip Chip technology
Flip Chip technology
ย 
Floor planning
Floor planningFloor planning
Floor planning
ย 
Cadence P-cell tutorial
Cadence P-cell tutorial Cadence P-cell tutorial
Cadence P-cell tutorial
ย 
Vivado hlsๅ‹‰ๅผทไผš3๏ผˆaxi4 lite slave๏ผ‰
Vivado hlsๅ‹‰ๅผทไผš3๏ผˆaxi4 lite slave๏ผ‰Vivado hlsๅ‹‰ๅผทไผš3๏ผˆaxi4 lite slave๏ผ‰
Vivado hlsๅ‹‰ๅผทไผš3๏ผˆaxi4 lite slave๏ผ‰
ย 

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++0xSang Yeon Jeon
ย 
๊ฐ•์˜์ž๋ฃŒ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. ํ•˜ ์ง€๊ธˆ๊นŒ์ง€ ์—ด์‹ฌํžˆ ์ž˜ ๋“ค์–ด์ฃผ์…จ๋Š”๋ฐ์š” ๋งˆ์ง€๋ง‰์œผ๋กœ ์ •๋ฆฌ ํ•˜๊ณ  ๋๋‚ด๊ฒ ์Šต๋Š๋””ใ….