DreamHack: System Hacking/F Stage 11 (3) 썸네일형 리스트형 uaf_overwrite 소스코드 및 보호 기법 // Name: uaf_overwrite.c // Compile: gcc -o uaf_overwrite uaf_overwrite.c #include #include #include #include struct Human { char name[16]; int weight; long age; }; struct Robot { char name[16]; int weight; void (*fptr)(); }; struct Human *human; struct Robot *robot; char *custom[10]; int c_idx; void print_name() { printf("Name: %s\n", robot->name); } void menu() { printf("1. Human\.. Use After Free 개념 설명 1. Dangling Pointer Dangling Pointer는 유효하지 않은 메모리 영역을 가리키는 포인터를 뜻한다. 메모리의 할당 메모리를 동적으로 할당해줄 때 사용하는 malloc()은 특정 크기만큼의 영역을 할당해주고, 그 영역의 주소를 반환해준다. 따라서 우리는 malloc함수를 사용할 때 void *k = malloc(0x40) 와 같이 포인터 변수에 malloc함수가 할당한 메모리의 주소를 저장한다. 메모리의 해제 할당 받았던 메모리를 해제할 때는 free()를 사용한다. free함수는 할당받았던 청크를 다시 ptmalloc에게 반환하는 역할을 한다. free(k) 문제점 그러나 free()를 사용할 때 문제가 발생할 수 있다. 1. free()는 할당되어있던 청크를 ptmalloc에게 .. Background: ptmalloc2 Memory Allocator 동적 메모리의 할당 및 해제를 효율적으로 관리하기 위한 알고리즘 ptmalloc2 개요: 리눅스에서 사용되는 Memory Allocator 알고리즘. ptmalloc2는 어떤 메모리가 해제되면, 해제된 메모리의 특징을 기억하고 있다가 비슷한 메모리의 할당 요청이 발생하면, 그 해제됐던 메모리를 비슷한 callee에게 할당해준다. (구글은 tcmalloc, 페이스북이나 파이어폭스는 jemalloc을 사용) ptmalloc의 역할 1. 메모리 낭비 방지 해제된 메모리 공간 중에서 요청된 크기와 같은 크기의 메모리 공간이 있다면 이를 그대로 재사용하게 한다. and 작은 크기의 할당 요청이 발생했을 때, 해제된 메모리 공간 중 매우 큰 메모리 공간이 있으면 그 영역을 나누어 주기.. 이전 1 다음