论文标题

VPS:从低级二进制文件中发掘高级C ++构造以保护动态调度

VPS: Excavating High-Level C++ Constructs from Low-Level Binaries to Protect Dynamic Dispatching

论文作者

Pawlowski, Andre, van der Veen, Victor, Andriesse, Dennis, van der Kouwe, Erik, Holz, Thorsten, Giuffrida, Cristiano, Bos, Herbert

论文摘要

多态性和继承使C ++适合编写复杂的软件,但由于实现依赖于虚拟功能表(VTABLES),因此大大增加了攻击表面。这些VTABLE包含攻击者可能会劫持的功能指针,实际上,VTable劫持是C ++二进制文件最重要的攻击向量之一。 在本文中,我们提出了VTable指针分离(VPS),这是一种实用的二进制级别防御,以防止C ++应用中的VTable劫持。与以前的二进制级防御依赖于不合格的静态分析以将类与虚拟呼叫匹配的二进制级防御不同,VPS通过将虚拟呼叫限制为有效创建的对象来实现更准确的保护。更具体地说,VPS确保虚拟呼叫只能使用在有效的对象构造站点创建的对象,并且只有这些对象可以到达呼叫仪。此外,VPS明确防止误报(错误地识别的虚拟呼叫)破坏二进制文件,现有工作无法正确处理或根本无法处理。我们评估了VPS在一组复杂的,现实世界中的多种应用程序(MongoDB,MySQL Server,Node.js,Spec cpu2017/cpu2006)上的原型实施,表明我们的方法在Spec CPU2006和Spec CPU2006和97.4%中的所有虚拟呼叫中平均保护了97.8%的SPEC CPU2017(Aldermarks cpu201)。间接为11%和9%的土著人。此外,我们的评估揭示了VTV中的86个假否定性,这是一种受欢迎的基于源的防御,是GCC的一部分。

Polymorphism and inheritance make C++ suitable for writing complex software, but significantly increase the attack surface because the implementation relies on virtual function tables (vtables). These vtables contain function pointers that attackers can potentially hijack and in practice, vtable hijacking is one of the most important attack vector for C++ binaries. In this paper, we present VTable Pointer Separation (VPS), a practical binary-level defense against vtable hijacking in C++ applications. Unlike previous binary-level defenses, which rely on unsound static analyses to match classes to virtual callsites, VPS achieves a more accurate protection by restricting virtual callsites to validly created objects. More specifically, VPS ensures that virtual callsites can only use objects created at valid object construction sites, and only if those objects can reach the callsite. Moreover, VPS explicitly prevents false positives (falsely identified virtual callsites) from breaking the binary, an issue existing work does not handle correctly or at all. We evaluate the prototype implementation of VPS on a diverse set of complex, real-world applications (MongoDB, MySQL server, Node.js, SPEC CPU2017/CPU2006), showing that our approach protects on average 97.8% of all virtual callsites in SPEC CPU2006 and 97.4% in SPEC CPU2017 (all C++ benchmarks), with a moderate performance overhead of 11% and 9% geomean, respectively. Furthermore, our evaluation reveals 86 false negatives in VTV, a popular source-based defense which is part of GCC.

扫码加入交流群

加入微信交流群

微信交流群二维码

扫码加入学术交流群,获取更多资源