- Use After Free
0. Use After Free 란?
: 동적할당을 통해 heap에 메모리를 할당하여 사용한 후 Free를 이용하여 해제를 한 뒤 재사용을 할 경우, 전과 같은 크기의 메모리를 동적할당할 경우, 이전에 사용했던 메모리를 할당해주게 되는 것을 말한다.
예를 들어 vuln = malloc(20)으로20byte 동적할당 해준 후 이 영역에 문자열에 아무 문자열을 넣고 free 한 뒤에 다시 vuln2 = malloc(20)으로 새 heap을 할당한 뒤 이 영역의 문자열을 출력하게 되면, 이 전에 입력한 문자열이 출력되게 된다.
이러한 현상을 Use After Free 가 발생했다는 것을 알 수 있는데 이 같은 현상이 일어나는 이유는 무엇일까.
Malloc 함수에는 병합 지연속성에 의해서 free 된 heap이 realloc 될 때에 같은 사이즈로 요청받을 수 있는데, 이때 heap을 병합하거나 분할하는 시간을 절약하기 위해 free된 heap을 남겨 두었다가 재사용을 때에 free된 영역을 그대로 사용하게 하는 방법으로 메모리가 재사용 되었을 때에 처음 heap을 덮을 수 있다는 취약점을 이용한 것을 볼 수 있다.
1. Malloc 함수
: 동적 메모리 할당 함수
vuln = (char*)malloc(20)
vuln2 = (char*)malloc(20)
free(vuln)
free(vuln2)
Size (malloc vuln) |
data (malloc vuln) |
prev_size (sizeof(vuln)) |
size (malloc vuln2) |
data (malloc vuln2) |
prev_size (sizeof(vuln2)) |
: vuln을 malloc(20)로 20바이트 동적 할당하면 위와 같이 vuln의 주소값에 prev_size, size, data 순으로 입력된다.
Heap이 생성될 때, data 영역에 fd와 bk 가 생성되는데, heap은 free될때에 fd, bk를 참고하면서 어느 메모리가 free되어있는데 확인 가능한 구조로 되어있다.
fd는 데이터 영역의 맨 첫 4바이트, bk는 바로 다음 4바이트에 생성된다. (fd : (forward pointer) free된 다음 chunk를 가리킨다.
bk : (backward pointer) free된 이전 chunk를 가리킨다.)
'자기개발 > 포너블' 카테고리의 다른 글
[포너블] OEP 개념 (0) | 2022.02.28 |
---|---|
[2022 CTF ] 포너블 - Day 9 (0) | 2022.02.08 |
[2022 CTF] 포너블 - Day 8 (0) | 2022.02.08 |
[포너블] gdb-pead 개념 및 명령어 정리 (0) | 2022.02.05 |
[포너블] gdb 개념 및 명령어 (0) | 2022.02.04 |