본문 바로가기

시스템 해킹/HEAP9

how2heap-fastbin_dup_into_stack This file extends on fastbin_dup.c by tricking malloc intoreturning a pointer to a controlled location (in this case, the stack).The address we want malloc() to return is 0x7fff16112800.Allocating 3 buffers.1st malloc(8): 0x12d80102nd malloc(8): 0x12d80303rd malloc(8): 0x12d8050Freeing the first one...If we free 0x12d8010 again, things will crash because 0x12d8010 is at the top of the free list... 2018. 2. 18.
Double Free BUG unlink Double Free Bug는 free()함수가 수행되는 과정 중 unlink라는 매크로 에 의해 발생한다! 32비트FD+12->BK BK+8->FD 64비트FD+24->BKBK+16->FD unlink가 이루어지는 경우 1) free된 chunk가 다시 malloc되는 경우! bin리스트는 double linked list로 관리되는데(fast bin은 single linked list) double linked list중 중간에 있는 chunk가 나가게 되면 그 앞과 뒤를 다시 연결해주는 작업이 필요하다! 2) chunk의 사이즈가 증가하여 다른 bin리스트로 이동하는 경우! 어떤 chunk가 free되었을 때, 연속된 위치의 다른 chunk가 free되어 있다면 두 chunk를 합병하여 하나로 만들.. 2018. 2. 17.
Heap Overflow Heap Overflow 버퍼 오버플로우의 힙 버전 힙 카나리(canary)는 존재하지 않음-보호해야할 리턴 주소가 없음 -객체나 구조체 데이터가 heap 영역에 존재하는 경우: 해당 영역을 컨트롤할 수 있고 이후에 해당 영역을 사용한다면 괜찮은 취약점 -함수포인터가 존재하는 구조체 데이터가 heap 영역에 존재하는 경우: 해당 포인터까지 덮어쓰는게 가능하고 이후에 이를 호출할 수 있다면 좋은 취약점 -Chunk header를 덮어쓸 수 있는 경우: unlink 과정에서 arbitrary write primitive 사용가능 -> 현재는 죽음 2018. 2. 17.
Use After Free UAF Heap 영역에서 해제(free)된 영역을 재사용(reuse)하면서 발생하는 취약점 Heap 영역의 데이터를 가리키는 포인터가 해제되었지만 해당 영역을 가리키는 포인터(dangling pointer)가 재사용되는 취약점 웹 브라우저에서 많이 터짐 Dangling Pointer: A left over pointer in your code that references free'd data and is prone to be re-used 해제된 영역을 가리키고 있는 포인터! free된 메모리 영역은 bin에 들어감 First bin은 Unsorted Chunk List 형태로 cache 형태로 동작함 비슷한 크기의 할당(malloc)요청이 들어오면 bin에 있는거 재사용! Deferred Coalesc.. 2018. 2. 16.
malloc free 실습 fastbin unsortbin 정리! Bin1: Unsorted bin FIFOBin2~Bin63: Small bin =512바이트 : 특정 bin에 존재하는 chunk들의 사이즈가 다름! Double Linked List fastbin: bins for size 2018. 2. 16.
Fast bin Fast bin 크기가 16~80 바이트인 chunk를 fast chunk라고 한다. fast chunk들을 담고 있는 bin이 fast bin->single linked list 해제된 chunk가 인접해도 병합되지 않는다! LIFO형태로 동작 모든 bin중에서 할당/해제 속도가 제일 빠르다 갯수:10개 chunk size: 8바이트 간격(16,24,32,....80) 2018. 2. 16.
Top Chunk Top Chunk 각 arena에서 최상위 경계에 존재하는 chunk 어떠한 bin에도 속하지 않고, heap영역의 마지막에 속함 다른 freed chunk들이 메모리 할당 요청을 만족하지 못할 경우에만 top chunk를 분할하여 요청을 처리함. 이때 2개로 나뉨 -User chunk(요청한 크기만큼), Remainder chunk(할당하고 남은 크기)->top chunk가 됨 현재 top chunk 크기로도 처리할 수 없는 경우 sbrk(main arena) 혹은 mmap(thread arena)함수를 통해 heap영역을 확장하여 top chunk크기를 늘린 후 처리함 2018. 2. 16.
Unsorted bin Unsorted Bin 모든 chunk들은 free되면 처음엔 unsorted bin에 추가됨 최근에 free된 chunk들을 재사용할 수 있도록 하기 위함(cache같은거) FIFO 형태로 동작하며 검색된 chunk는 바로 재할당되거나 원래의 bin으로 돌아가게 됨단 한번의 재사용 기회가 주어짐 double linked list이로써 메모리 할당/해제 과정에서 속도를 조금이나마 향상시킴 개수 1개chunk size: 크기 제한 없음, 어느 크기의 chunk든지 가능 2018. 2. 16.
참고자료https://sploitfun.wordpress.com/2015/02/10/understanding-glibc-malloc/https://bpsecblog.wordpress.com/2016/10/06/heap_vuln/http://tribal1012.tistory.com/78 HEAP이란 무엇일까? 스택 메모리는 함수 내에 선언된 지역 변수, 필요한 공간의 크기를 컴파일 시에 확정한다.함수 호출시 그에 해당하는 지역변수를 위한 공간을 확보하며 함수의 실행이 끝나게 되면 지역변수의 공간을 자동으로 해제하게 된다! 힙메모리의 경우 프로그램 실행 중 필요에 의한 동적 메모리 할당을 위한 공간 힙 영역은 컴파일러가 예측할 수 없는 프로그래머가 관리하는 영역! memory allocator에는 여러 종류.. 2018. 2. 15.