728x90
  • 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

+ Recent posts