Heap에서 발생할 수 있는 취약점에 대해 간단하게 내맘대로 정리해보자
1. Heap overflow
- Heap 영역에 할당된 공간보다 큰 사이즈를 입력받아 발생할 수 있음
- 발생 예제
buf = malloc(100)
...
int size;
scanf("%d", &size);
read(0, buf, size);
- 활용방법
다음 chunk의 헤더 부분을 덮을 수 있는 경우, prev, next pointer를 조작해 free 시 임의 메모리 쓰기 발생 시킬 수 있음
(free 메커니즘에 의존, 제한적)
2. Double free
- heap overflow와 나누기 이상하기는 하지만 활용에 있어서 다르기 때문에 나눔
- 기본적으로 heap overflow 취약점을 가져야 함
- 활용방법
Heap chunk 헤더 내의 flag(정확히 표현하면 현재 chunk size의 하위 3비트) 값을 조작함으로써 할당된 chunk를 free된 것으로 인식하게 함
조작된 chunk 이전의 chunk가 free될 시 병합과정에서 위 1.과 유사하게 임의 메모리 쓰기 가능
3. fastbin dup into stack
- 참고(http://www.blackhat.com/presentations/bh-usa-07/Ferguson/Whitepaper/bh-usa-07-ferguson-WP.pdf)
- allocation된 chunk를 free하면 재사용을 위해 free된 chunk를 linked list로 관리하고 이를 bin이라고 함
- chunk의 사이즈가 작을 경우(기본 최대 60바이트, 설정하면 최대 80바이트) fastbin 이라는 free list를 통해 관리되며 다음과 같은 특징을 가짐
sorting이 되지 않음
singly linked list
LIFO
- 아무튼 작은 사이즈의 chunk를 할당하고 free 하는 경우
4. The house of force
- Heap overflow를 이용해 top chunk를 덮음
- 이를 통해 할당할 수 있는 chunk size의 제한이 없어짐
5. Use after free(UAF)
- free된 메모리 공간의 포인터에 접근할 수 있는 경우
나중에 내용 더 추가하자
'Pwnable.kr' 카테고리의 다른 글
pwnable.kr 문제풀이 현황 (0) | 2018.05.12 |
---|