편집 요약 없음 |
편집 요약 없음 |
||
25번째 줄: | 25번째 줄: | ||
|- | |- | ||
| rowspan="3" |One-time-allocator | | rowspan="3" |One-time-allocator | ||
|FFmalloc | |[[Preventing Use-After-Free Attacks with Fast Forward Allocation|FFmalloc]] | ||
|230% | |230% | ||
|2.3% | |2.3% | ||
| | |High | ||
| | |Preventor | ||
| | |Yes | ||
|- | |- | ||
|OSCAR | |[[Oscar: A Practical Page-Permissions-Based Scheme for Thwarting Dangling Pointers|OSCAR]] | ||
| | |60% | ||
|40% | |40% | ||
| | |None | ||
| | |Detector | ||
| | |No-COW | ||
|- | |- | ||
|DangZero | |[[DangZero: Efficient Use-After-Free Detection via Direct Page Table Access|DangZero]] | ||
| | |25% | ||
| | |30% | ||
| | |None | ||
| | |Detector | ||
| | |No | ||
|- | |- | ||
| rowspan="3" |Garbage collection | | rowspan="3" |Garbage collection | ||
|MarkUS | |[[MarkUs: Drop-in use-after-free prevention for low-level languages|MarkUS]] | ||
| | |27% | ||
| | |14% | ||
| | |Low | ||
|Preventor | |Preventor | ||
| | |Yes | ||
|- | |- | ||
|Minesweeper | |[[MineSweeper: A “Clean Sweep” for Drop-In Use-After-Free Prevention|Minesweeper]] | ||
| | |22.3% | ||
| | |10% | ||
| | |None | ||
|Preventor | |Preventor | ||
| | |No-fork | ||
|- | |- | ||
|CRCount | |CRCount | ||
| | |18% | ||
|22% | |22% | ||
| | |High | ||
|Preventor | |Preventor | ||
| | |Yes | ||
|- | |- | ||
| rowspan="4" |Randomization | | rowspan="4" |Randomization |
2024년 2월 19일 (월) 11:45 판
개요
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