ii4gsp

[Heap] Use After Free 본문

시스템 해킹/Technique

[Heap] Use After Free

ii4gsp 2020. 1. 20. 20:46

Use After Free

Use After Free 줄여서 UAF라고 부른다.

Heap은 동적으로 메모리가 할당되고 수동으로 해제를 해줘야한다.

할당할 때는 malloc(), calloc() 등의 함수를 사용하고 해제할 때는 free() 함수를 사용한다.

동적할당된 Heap을 free하고 다시 재사용 할 때에 취약점이 발생한다.

 

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int *a;
    int *b;
    int *c;

    a = (int*)malloc(256);
    *a = 0x41414141;

    printf("a = %p, %x\n", a, *a);

    free(a);

    b = (int*)malloc(256);
    printf("b = %p, %x\n", b, *b);

    free(b);

    c = (int*)malloc(256);
    printf("c = %p, %x\n", c, *c);
    
    free(c);

    return 0;
}

256만큼 heap을 할당하고 free하고 3번을 반복하였다.

a에 256만큼 heap을 할당하고 0x41414141값을 넣어주고 free 된 후 똑같은 크기의 b를 할당하고 다시 free하고

똑같은 크기의 c를 다시 할당하고 free하였다.

 

 

결과는 모두 같은 주소에 같은 값이 들어있다.

이유는 malloc() 함수에는 caching 기능이 있는데, 그 중 Deferred Coalescing(병합 지연) 속성이 있는데,

이 기능은 heap을 병합하거나 분할하는 시간을 절약하기 위해 해제된 chunk를 같은 크기의 chunk 를 재할당하기 위한

다른 요청을 대비해 현재의 크기에 해제된 chunk를 놔두고 reuse 할 때 free 된 영역을 재사용한다.

같은 크기의 할당 요청이 들어오면 이전 영역을 재사용하기 때문에 원하지 않는 값을 참조할 수 있다.

'시스템 해킹 > Technique' 카테고리의 다른 글

FPO (Frame Pointer Overflow) 기법  (0) 2020.01.21
[Heap] Double Free Bug  (0) 2020.01.20
[Heap] Buffer Overflow  (3) 2020.01.19
SEH Overwrite 기법  (0) 2020.01.15
구조적 예외 처리 SEH (Structured Exception Handler)  (0) 2020.01.15
Comments