Unsorted bin이란?
Unsorted bin은 다음에 정리할 small bin과 large bin 크기의 힙 chunk가 해제되면 이후 재할당을 위해 사용되는 bin입니다. tcache와 비교했을 때 비교적 큰 크기가 Unsorted bin에 할당되며, 한 번만 사용할 수 있습니다.
tcache와 비교한 결과를 정리하면 다음과 같습니다.
- 0x410 미만의 크기는 tcache에 할당됨
- 0x410 이상의 크기는 unsorted bin에 할당됨.
공격에 어떻게 활용할 수 있는가?
Unsorted bin은 free되었을 때 fd와 bk에 특정 libc 영역의 주소가 저장되어 있습니다.

이러한 특성을 이용해서 만약 코드에 OOB를 이용한 임의 주소 읽기 취약점이 존재한다면, Libc의 base 주소를 유출시킬 수 있습니다.
그러나, 그냥 무턱대고 큰 크기를 할당한다고 해서 Unsorted bin 이 할당되는 것은 아닙니다.
#include <stdio.h>
#include <stdlib.h>
int main(){
int size;
scanf("%d", &size);
int *arr = (int *)malloc(size);
free(arr);
}
이 코드에서 큰 크기를 할당해주고 free될 때 브레이크 포인트를 걸어보겠습니다.

분명히 free를 시켰음에도 불구하고, unsorted bin이 없는 것을 확인할 수 있습니다. 왜일까요?
그 이유는 unsorted bin이 top chunk와 병합되어서 입니다. 만약, free 시키려는 chunk 뒤에 chunk가 하나 더 존재한다면, 아마 달라질 것입니다.
다음과 같이 수정해보았습니다.
#include <stdio.h>
#include <stdlib.h>
int main(){
int size, size2;
scanf("%d", &size);
scanf("%d", &size2);
int *arr = (int *)malloc(size);
int *arr2 = (int *)malloc(size2);
free(arr);
}
이제 free되는 부분에 브레이크 포인트를 걸고 heap을 살펴보겠습니다.

다음과 같이 정상적으로 unsorted bin이 생성되는 것을 확인할 수 있습니다.
'시스템해킹 > 개념' 카테고리의 다른 글
| puts 함수 분석을 통한 FSOP 공격 기법 분석 (2) | 2025.07.23 |
|---|---|
| Double Free bug와 Fastbin dup 복습 (0) | 2025.06.25 |
| [Dreamhack-system] Background : _IO_FILE (1) | 2024.12.20 |
| [Dreamhack-system] SigReturn-Oriented Programming (3) | 2024.12.18 |
| [Dreamhack-system] Background : _rtld_global (3) | 2024.12.17 |