A study of Binary Instrumentation techniques
A study of Binary Instrumentation techniques
复制标题
二进制仪器技术的研究
DOI:
--
复制
发表时间:
2019
期刊:
影响因子:
--
通讯作者:
S. Priyadarshan
中科院分区:
文献类型:
--
作者:
S. Priyadarshan
Low-level vulnerabilities have remained an important source of compromise in computer systems. Despite the deployment of various protection mechanisms at the OS level/hardware level, attackers have been able to exploit memory corruption vulnerabilities to compromise a program execution. Many compiler or source code based solutions have been proposed to check memory corruption, control flow diversion, etc. However, the unavailability of source code limits the large scale deployment of such solutions. Binary instrumentation can play an important role in enforcing low-level security policies such as CFI (Control flow integrity), SFI (Software fault isolation) and code randomization. Binary instrumentation is the process of introducing new code into a program without changing its overall behavior. Binary instrumentation can be done either at the runtime (Dynamic binary instrumentation) or offline (Static binary instrumentation). Static binary instrumentation (SBI) results in efficient instrumented binaries with less performance overhead. However, SBI is challenging because of data embedded within code and indirect branches. To enforce DEP (Data execution prevention) fully, modern compilers have started to separate data from code by assigning different sections to code and data. Also, to employ ASLR (Address space layout randomization), x86-64 bit programs are being compiled as position independent executable. All the commonly used binaries on most of the x86-64 LINUX distributions are PIE. PIE executables have relocation information which can be exploited to recover indirect branch targets. Exploiting these factors can help SBI become robust, complete and accurate. This report presents a survey of various static and dynamic binary instrumentation techniques and security policies such as CFI and code randomization that are enforced using binary instrumentation. At the end of this report, we introduce our fine-grained code randomization approach for x86-64 PIE bi-naries. We exploit the relocation information of the PIE binaries to achieve complete and correct disassembly. This helps us in achieving fine-grained code randomization at the basic block level, without using any symbol or debugging information.