CRMar 10, 2020

Devil is Virtual: Reversing Virtual Inheritance in C++ Binaries

arXiv:2003.05039v25 citations
AI Analysis

This addresses a critical gap in binary-level defenses and decompilation tools for C++ programs, where virtual inheritance was previously overlooked, potentially introducing security vulnerabilities.

The paper tackled the problem of recovering virtual inheritance in C++ binaries, showing it is common in real-world programs (over 10% on Linux and 12.5% on Windows) and that ignoring it causes false positives and negatives in inheritance trees, which can compromise security or hinder program understanding. They presented a solution that recovers up to 95% of virtual bases in optimized binaries.

Complexities that arise from implementation of object-oriented concepts in C++ such as virtual dispatch and dynamic type casting have attracted the attention of attackers and defenders alike. Binary-level defenses are dependent on full and precise recovery of class inheritance tree of a given program. While current solutions focus on recovering single and multiple inheritances from the binary, they are oblivious to virtual inheritance. Conventional wisdom among binary-level defenses is that virtual inheritance is uncommon and/or support for single and multiple inheritances provides implicit support for virtual inheritance. In this paper, we show neither to be true. Specifically, (1) we present an efficient technique to detect virtual inheritance in C++ binaries and show through a study that virtual inheritance can be found in non-negligible number (more than 10\% on Linux and 12.5\% on Windows) of real-world C++ programs including Mysql and libstdc++. (2) we show that failure to handle virtual inheritance introduces both false positives and false negatives in the hierarchy tree. These false positves and negatives either introduce attack surface when the hierarchy recovered is used to enforce CFI policies, or make the hierarchy difficult to understand when it is needed for program understanding (e.g., during decompilation). (3) We present a solution to recover virtual inheritance from COTS binaries. We recover a maximum of 95\% and 95.5\% (GCC -O0) and a minimum of 77.5\% and 73.8\% (Clang -O2) of virtual and intermediate bases respectively in the virtual inheritance tree.

Foundations

The foundational work for this paper's niche, ranked by how specifically the neighbourhood builds on it — not by global fame.

Your Notes