CCS 2018 Daiping Liu, Mingwei Zhang, Haining Wang
개요
Pointer nullification알고리즘을 Concurrent하게 수행할 수 있도록 하고, 가능한 Synchronization문제를 load barrier를 통해서 해결하였다.
Design
pSweeper에서 Use after free버그를 막기 위해서, 모든 오브젝트가 Free되며, 모든 Dangling pointer들은 UAF를 막기 위해서 Nullification된다. 이때 기존 방식들은 Application thread에서 Nullification을 시키나, pSweeper는 따로 Concurrent Pointer Sweeping(CPW)스레드가 Nullification을 진행한다.
또한 단순히 Nullification하는 것이 아니라 Original pointer에 대한 정보를 가지고 있도록 Encode된 값으로 Nullification시켜서, 원래 위치를 추적할 수 있도록 하였고, 이를 Object origin infomration (OOT)라고 명명하였다.
- Live pointer 추적
- Pointer 변수를 추적하기 위해서, Static time에 Store operation을 Hooking하여서, 현재 사용되고 있는 포인터의 리스트를 만들었다.
- Concurrent Pointer Sweeping
- Concurrent Pointer Sweeping스레드가 작동하면서, 위의 체크한 Live pointer를 Iteration한다. Iteration하면서, 혹시라도 Free된 포인터를 Live pointer리스트에 있는 오브젝트가 가르키고 있는지를 확인한다. 만약 Pointer가 가르키고 있으면, OOT를 위하여 Coded된 값으로 치환하여, 접근시 UAF버그가 발생하도록 한다.
- Synchronization 문제의 극복
- Dangling pointer가 Nullified된 영역으로 덮여써질 경우, Possible한 Attack point가 될 수도 있다. 이를 위해서 보든 Load operation은 추가적인 Instrumentation을 통해서, 현재 들어오는 값이 Dangling pointer인지 확인하는 Logic이 추가된다. 만약 Dangling pointer라면, 위의 Concurrent marking처럼 Coded된 값으로 치환하여 UAF버그가 발생하도록 한다.
Conclusion
Pointer nullification을 어떻게 구현해야 하는가에 대한 아이디어를 제공하고 있는 논문으로, Concurrent하게 작동하는 Sweeping을 Synchronization을 고려하여 어떻게 해야 하는 가를 고민하였다. Full detection이 되는 기존의 논문들과는 다르게 Prevention이라는 아쉬운 점이 있지만 (짧은 Interval동안만), 성능적인 면에서 강력함으로 효과적이라 할 수 있을것이다.