개요

Use after free 버그는 Free된 버그에 Access가 일어나서, 예측하지 못한 행동이 프로그램에 일어나는 버그를 말한다. 간단한 개념에 쉬운 작동방식을 가지고 있지만, UAF버그는 많은 사용 프로그램에서 지속적으로 발생하며, 발생할 경우 치명적인 영향을 프로그램에 미칠수도 있는 버그이다.

실제로 UAF버그는 매우 복잡한 환경에서 일어난다.

  • 많은 경우 Allocation, 메모리 대입, 그리고 Dereference는 다른 함수 혹은 다른 프로그램 모듈, 공유 메모리에서 일어난다.
  • 이러한 버그는 또한 Thread accross하게 일어나는 경우가 많다.
  • Event-driven방식 혹은 Object-oriented programming은 위와 같은 환경을 매우 빈번하게 사용한다.

이러한 이유로 인해서, Chromium browser에서 UAF버그는 2011-2013년에서 680건이나 발생한 것처럼, 매우 Mature한 프로그램에서도 빈번하게 일어나는 버그이다.

UAF Bug Prevention & Detection

UAF버그를 막기 위한 시스템은 크게 Preventor와 Detector로 구분된다. Preventor는 UAF버그를 잡지는 못하지만, malicious한 버그가 일어나는 것을 차단한다. 그에 비해서 Detector는 UAF버그가 발생하자마자, Detector를 한다. Detector가 Preventor를 포함하고 더 유용한 Debugging tool이지만, 구현하기 까다로워 성능상으로는 훨씬 느리다.

기존 UAF 논문들 정리

Category Research Memory Performance Scalability Bug-detect Precision Transparency
One-time-allocator FFmalloc 230% 2.3% High Preventor Yes
OSCAR 60% 40% None Detector No-COW
DangZero 25% 30% None Detector No
Garbage collection MarkUS 27% 14% Low Preventor Yes
Minesweeper 22.3% 10% None Preventor No-fork
CRCount 18% 22% High Preventor Yes
Randomization

& BIBOP Allocator

DieHard 12% Detector
DieHarder 20% Detector
FreeGuard 2% Detector
Cling 11% Detector
Pointer Nullification DangNULL 54%
FreeSentry 45%
DangSan 33%
pSweeper 15%
Dynamic checking CETS 48%
MemSafe 88%

TBD