Use After Free
UAF (Use After Free)
- 메모리 해제 후, 초기화되지 않은 free chunk를 재사용할 때 생기는 취약점
Dangling Pointer
- 할당이 해제되어 유효하지 않은 메모리를 가리키는 포인터
공격 기법 실습
- 바이너리 파일 정보 수집

2. 바이너리 파일 실행

3. 정적 분석



4. 공격 시나리오

5. Exploit

Double Free Bug
DFB (Double Free Bug)
- 이미 해제된 chunk인 free chunk를 다시 해제할 수 있을 때 발생하는 버그
glibc 버전 별 DFB 검증
- glibc 버전 별로 DFB를 검증하는 방식에 있어 차이가 존재
- DFB 활용 시, glibc 버전을 먼저 확인하고 공격 시나리오를 작성하는 것이 중요
_int_free()
- chunk가 해제되었을 때 호출되는 함수
- glibc 2.24 _int_free()

Fastbin Dup (glibc ver. < 2.26)
- 동일 크기 (fastbin size)의 chunk들을 교차해 free 시켜 double free bug 탐지를 우회하는 공격
- 공격을 위해 원하는 특정 영역에 공격 코드나 값을 덮어 씌우는 것이 가능
Tcache Dup
- e → key를 다른 값으로 덮어씌워 DFB 탐지 로직을 우회하는 공격 기법
- free chunk가 되어 tcache bin에 추가될 경우, e → key에넌 tcache 포인터가 저장된 상태
Unsorted Bin Attack
Unsorted Bin Attack
- Unsorted Bin의 free chunk 재할당 시, list에서 제거할 때 발생하는 취약점을 이용한 공격 기법
- main_arena 영역의 주소를 임의의 메모리에 덮어씌워 저장하는 것이 가능
Unsorted Bin Attack 공격 조건
- Fake chunk 생성 후 bk 포인터 조작
- bk 포인터가 조작된 free chunk를 unsorted bin list 에서 해제
Unsorted Bin into Stack
- Stack 영역에 생성한 fake chunk를 Unsorted Bin에 연결시킴
Unsafe Unlink
Unlink
- 병합 시, 연결되어 있던 bin list에서 chunk를 제거할 때 사용하는 개념
- chunk가 빠져나오면서, 앞 뒤로 인접했던 chunk들의 bk, fd 포인터를 정리해 재연결하는 과정


_int_free()
- chunk가 해제되었을 때 호출되는 함수
- 인접 free chunk와 병합 가능한 상황일 경우, unlink() 호출
unlink()
- Bin에서 free chunk를 제거할 때 호출되는 함수
Unsafe Unlink
- Unlink 기능을 활용해 공격자가 원하는 주소에 악의적인 코드나 값을 쓰는 공격 기법
- unlink()에 존재하는 2개의 조건문을 우회할 수 있는 fake chunk 생성
Unsafe Unlinke 공격 조건
- 전역 변수에 heap pointer가 선언
- 할당된 chunk인 in-use-chunk 2개 필요
- Fake chunk 생성이 가능
- Fake chunk와 인접한 chunk의 header 조작 가능
Advanced Heap Exploitation
House Series
House of Force : Top chunk의 size를 조작해 임의의 주소에 chunk를 할당할 수 있게 하는 공격
House of Spirit : Fake fastbin chunk 재할당 시 임의의 포인터를 반환하게 해 원하는 주소에 값을 쓰는 공격
House of Botcake : tcache DFB 검증에 쓰이는 e→key의 조작 없이, DFB를 발생시키는 공격
House of Lore : Small bin에서 bck→fd를 조작해서 임의의 주소에 chunk를 할당할 수 있는 공격
House of Einherjar : _int_free()가 chunk를 top chunk에 등록하는 과정을 악용하는 공격
House of Orange : _int_malloc() 내부의 메모리 손상 시 출력하는 error 대신, 원하는 함수를 실행하는 공격
'Pwnable' 카테고리의 다른 글
| Heap Basic (0) | 2025.11.19 |
|---|---|
| Integer Overflow (0) | 2025.11.19 |
| Format String Bug (0) | 2025.11.19 |
| Buffer Overflow (0) | 2025.11.19 |
| Pwnable Tools (0) | 2025.11.19 |