温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,汇文网负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
网站客服:3074922707
基于
二进制
重写
软件
多样化
方法
2023 年 4 月 Chinese Journal of Network and Information Security April 2023 第 9 卷第 2 期 网络与信息安全学报 Vol.9 No.2 基于二进制重写的软件多样化方法 何本伟,郭云飞,王亚文,王庆丰,扈红超(信息工程大学,河南 郑州 450001)摘 要:软件多样化是应对代码重用攻击的有效方法,但现有软件多样化技术大多基于源代码实现,相比二进制文件,程序源代码并不容易获得。二进制文件难以做到精准拆卸、区分代码指针和数据常量,使得对二进制文件的多样化转换有限,难以产生足够高的随机化熵,容易被攻击者暴力破解。针对此问题,提出一种面向二进制文件的软件多样化方法,指令偏移随机化,该方法基于静态二进制重写技术在程序指令前以一定概率插入不同字节长度的无操作(NOP)指令,不仅能够减少程序中非预期的 gadget 数量,还使原指令地址发生随机偏移,打乱程序原有的内存布局,增加了代码重用攻击的成本。同时,针对所提方法设计了基于“热”代码的优化策略,通过动态插桩获得二进制文件中基本块的执行次数,以此调整每个基本块中 NOP 指令的插入概率,在执行频率更高的基本块中插入更少的 NOP 指令,可以保证较低性能开销的同时产生更高的随机化熵。实验部分使用 SPEC 基准测试程序,从性能开销、gadget 存活率、文件大小等角度对优化后的方法进行实例测试,结果表明:当插入概率为 15%时效果最好,程序中 gadget 平均存活率趋于稳定且小于1.49%,增加攻击者重复利用相同gadget攻击链攻击难度的同时,该安全性下仅额外增加了4.1%的运行开销和 7.7%的文件膨胀率。关键词:软件多样化;二进制重写;NOP 指令插入;代码重用攻击 中图分类号:TP311.5 文献标志码:A DOI:10.11959/j.issn.2096109x.2023024 Software diversification method based on binary rewriting HE Benwei,GUO Yunfei,WANG Yawen,WANG Qingfeng,HU Hongchao Information Engineering University,Zhengzhou 450001,China Abstract:Software diversity is an effective defense against code-reuse attacks,but most existing software diversification technologies are based on source code.Obtaining program source code may be difficult,while binary files are challenging to disassemble accurately and distinguish between code pointers and data constants.This makes binary file diversification difficult to generate high levels of randomization entropy,and easily compromised by attackers.To overcome these challenges,a binary file oriented software diversification method was proposed based 收稿日期:20220531;修回日期:20230302 通信作者:何本伟,he_ 基金项目:国家重点研发计划(2021YFB1006200,2021YFB1006201);国家自然科学基金(62072467)Foundation Items:The National Key R&D Program of China(2021YFB1006200,2021YFB1006201),The National NaturalScience Foundation of China(62072467)引用格式:何本伟,郭云飞,王亚文,等.基于二进制重写的软件多样化方法J.网络与信息安全学报,2023,9(2):94-103.Citation Format:HE B W,GUO Y F,WANG Y W,et al.Software diversification method based on binary rewritingJ.ChineseJournal of Network and Information Security,2023,9(2):94-103.第 2 期 何本伟等:基于二进制重写的软件多样化方法 95 on static binary rewriting technology,namely instruction offset randomization.This method inserted NOP instructions of varying byte lengths before program instructions with a certain probability,reducing the number of unintended gadgets in the program and randomly offsetting the original instruction address.This disrupts the programs original memory layout and increases the cost of code-reuse attacks.At the same time,an optimization strategy based on hot code was designed for this method.The execution times of basic blocks in binary files were obtained by dynamic pile insertion,so as to adjust the NOP instruction insertion probability in each basic block.The higher the execution frequency,the fewer NOP instructions were inserted into the basic block,which can ensure lower performance overhead and produce higher randomization entropy.In the experimental part,the SPEC benchmark program was used to test the optimized method from the aspects of performance overhead,gadget survival rate and file size.The results show that a 15%insertion probability achieves the best effect,with an average gadget survival rate of less than 1.49%,increasing attackers difficulty in reusing the same gadget attack chain.Furthermore,only a 4.1%operation overhead and 7.7%space overhead are added,maintaining high levels of security.Keywords:software diversity,binary rewriting,NOP insertion,code-reuse attack 0 引言 当今信息技术飞速发展,计算机软件已渗透到人们生活的各个领域,不断地推动着社会的进步发展。然而,由于软件开发与分发机制中的“单一文化主义”1-2,相同的程序运行在数百万甚至数亿台计算机上,软件中的一个漏洞就可能导致运行相同漏洞软件的所有计算机受到攻击,导致大规模的攻击发生,给系统安全、数据安全和隐私保护等带来了极大的威胁,甚至造成严重的损失。为了解决同质软件带来的安全性问题,Cohen3在 1993 年提出了软件多样化概念,将一个软件程序多样化为多个不同的实例,每个实例与源程序的功能相同但内在布局和结构不同,其目的是迫使攻击者为每个软件实例构造特定的攻击矢量,提高其攻击成本。随后,研究人员提出地址空间布局随机化(ASLR)4技术,在每次执行时随机化堆、栈和共享库等的基地址,广泛部署到 Windows、Linux 和 iOS 等现代主流的操作系统中,以防御代码重用攻击。近年来,研究人员基于编译器在源代码级别上实现了多种软件多样化方法5,可以在不同生命周期以及不同粒度上对软件进行多样化处理。文献6重新分配 32 位 x86 ELF 文件中每个指令在地址空间的位置,并生成一组重写规则,这些规则描述了如何继续执行新位置的指令,每条指令在地址空间的位置随机,具有很高的随机化熵,然而该方法的平均运行开销为 13%,难以运用到实际。文献7基于编译器实现了函数重排序、指令替换和控制流平坦等 6 种软件多样化技术,并通过内存中可跳转指令片段(gadget)的存活率来比较这些多样化技术对代码重用攻击的防御效果。文献8实现了一种在加载时对函数进行重排序的方法,源代码经过编译和链接后,在执行前会由新的加载器加载到内存,同时打乱函数的排列顺序,使程序在每次运行时有不同的内存映象。相关的开源集成工具很成熟,如 Obfuscator-LLVM9、Tigress10。然而,现阶段的软件多样化技术大多针对源代码实现,在实际软件项目中,软件的源代码并不总是容易获得,且二进制文件难以做到精准拆卸、区分代码指针和数据常量等反汇编11,因此,如何在不依赖源代码情况下实现二进制级别的软件多样化,是现阶段研究的重点难题。本文实现了一种面向二进制文件的细粒度多样化方法,指令偏移随机化,旨在为无法获得源代码的二进制文件提供随机化保护。具体方法是先通过二进制插桩技术获得基本块的执行次数,以此区分出程序中的“冷”“热”代码块12;再利用二进制重写器对软件进行静态解析,获得函数、基本块和指令等要素的关键信息,如地址和相互关系;然后在“冷”“热”代码块12-14中的指令之间以不同概率随机插入一些垃圾代码,如96 网络与信息安全学报 第 9 卷 NOP 等非语义指令,不影响程序的最终执行结果,从而随机化偏移程序原指令地址;最后调整程序内存布局,生成新的二进制文件。本文的主要贡献如下。1)提出了一种面向二进制文件的指令偏移随机化方法,在指令级别实现了细粒度的软件多样化。2)设计了基于基本块执行频率的指令偏移策略,不仅降低了转换的性能开销,还增加了随机化熵。3)对所提方法在安全性和运行开销方面进行了评估,实验结果表明,当插入概率约为 15%时,效果最好,gadget 平均存活率趋于稳定且小于 1.49%,仅增加了 4.1%的运行开销和 7.7%的文件膨胀率。1 相关技术 1.1 代码重用攻击 随着 DEP、NX(no-execute)、不可执行栈、等内存不可执行技术的广泛部署,攻击者以缓冲区溢出等形式向程序中注入的恶意代码不再被允许执行,很大程度上抑制了代码注入攻击。因此,攻击者提出了新的攻击方式代码重用攻击,与注入式攻击不同,代码重用攻击不需要引入恶意代码,而是利用程序或