FreeSentry: Protecting Against Use-After-Free Vulnerabilities Due to Dangling Pointers


Yves Younan
Proceedings 2015 Network and Distributed System Security Symposium

개요

Binary Instrumentation을 통해서 Pointer가 Free되는 경우에, Pointer에 해당하는 오브젝트 접근을 Invalidate하도록 하여서, UAF버그를 제거하였다.

Motivation

Use after free 버그는 C나 C++에서 자주 발생하는 버그지만, 그 파급력에 불구하고, Detect하는 것은 매우 어려운 일이다.

Importance

FreeSentry가 출판될 당시에는 Binary Instrumentation을 통한 UAF버그를 막는 기법이, 아직 태동기 였던 것 같다. FreeSentry는 구현과 아이디어의 단순함에도 불구하고 거의 132회의 (2023년 기준) Reference를 보유하고 있다. 같은 년도 같은 학회에 출판된 Preventing Use-after-free with Dangling Pointers Nullification이 192회인것과 비교하여서, 이 당시 UAF를 막는 새로운 기법들이 발표되고 있을 때였다.

Main Idea

Object -> Pointer로 가는 테이블을 가지고 있다가, 만약 Object가 Free되면 연결된 모든 포인터들 (즉, Free된 Object로 향하는) 포인터를 Invalid한 포인터로 만들었다. 이는 Top-bit of pointer를 flip하는 방식으로 하였다. 이를 통해서 DangNull과는 다르게, crash dumps처럼 debugging환경에서 디버깅을 용이하게 하였다.

Design

Data structure
한 오브젝트와 그 오브젝트에 해당하는 포인터를 key로 하며 value값은 해당하는 key를 가르키는 포인터를 저장하는 2개의 Lookup table을 관리하였다.

Conclusion

  • DangNull과 비슷한 시기에 비슷한 방식을 사용해서 Use after free버그를 막은 논문임