基于二进制重写的软件多样化方法_何本伟.pdf
《基于二进制重写的软件多样化方法_何本伟.pdf》由会员分享,可在线阅读,更多相关《基于二进制重写的软件多样化方法_何本伟.pdf(10页珍藏版)》请在咨信网上搜索。
1、2023 年 4 月 Chinese Journal of Network and Information Security April 2023 第 9 卷第 2 期 网络与信息安全学报 Vol.9 No.2 基于二进制重写的软件多样化方法 何本伟,郭云飞,王亚文,王庆丰,扈红超(信息工程大学,河南 郑州 450001)摘 要:软件多样化是应对代码重用攻击的有效方法,但现有软件多样化技术大多基于源代码实现,相比二进制文件,程序源代码并不容易获得。二进制文件难以做到精准拆卸、区分代码指针和数据常量,使得对二进制文件的多样化转换有限,难以产生足够高的随机化熵,容易被攻击者暴力破解。针对此问题,提
2、出一种面向二进制文件的软件多样化方法,指令偏移随机化,该方法基于静态二进制重写技术在程序指令前以一定概率插入不同字节长度的无操作(NOP)指令,不仅能够减少程序中非预期的 gadget 数量,还使原指令地址发生随机偏移,打乱程序原有的内存布局,增加了代码重用攻击的成本。同时,针对所提方法设计了基于“热”代码的优化策略,通过动态插桩获得二进制文件中基本块的执行次数,以此调整每个基本块中 NOP 指令的插入概率,在执行频率更高的基本块中插入更少的 NOP 指令,可以保证较低性能开销的同时产生更高的随机化熵。实验部分使用 SPEC 基准测试程序,从性能开销、gadget 存活率、文件大小等角度对优化
3、后的方法进行实例测试,结果表明:当插入概率为 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 Yaw
4、en,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
5、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 so
6、ftware 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)引用格式
7、:何本伟,郭云飞,王亚文,等.基于二进制重写的软件多样化方法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,
8、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 or
9、iginal 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 probabi
10、lity 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 fro
11、m 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%op
12、eration 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,相同的程序运行在数百万甚至数亿台计算机上,软件中的一个漏洞就可能导致运行相同漏洞软件的所有计算机受到攻击,导致大规模的攻
13、击发生,给系统安全、数据安全和隐私保护等带来了极大的威胁,甚至造成严重的损失。为了解决同质软件带来的安全性问题,Cohen3在 1993 年提出了软件多样化概念,将一个软件程序多样化为多个不同的实例,每个实例与源程序的功能相同但内在布局和结构不同,其目的是迫使攻击者为每个软件实例构造特定的攻击矢量,提高其攻击成本。随后,研究人员提出地址空间布局随机化(ASLR)4技术,在每次执行时随机化堆、栈和共享库等的基地址,广泛部署到 Windows、Linux 和 iOS 等现代主流的操作系统中,以防御代码重用攻击。近年来,研究人员基于编译器在源代码级别上实现了多种软件多样化方法5,可以在不同生命周期以
14、及不同粒度上对软件进行多样化处理。文献6重新分配 32 位 x86 ELF 文件中每个指令在地址空间的位置,并生成一组重写规则,这些规则描述了如何继续执行新位置的指令,每条指令在地址空间的位置随机,具有很高的随机化熵,然而该方法的平均运行开销为 13%,难以运用到实际。文献7基于编译器实现了函数重排序、指令替换和控制流平坦等 6 种软件多样化技术,并通过内存中可跳转指令片段(gadget)的存活率来比较这些多样化技术对代码重用攻击的防御效果。文献8实现了一种在加载时对函数进行重排序的方法,源代码经过编译和链接后,在执行前会由新的加载器加载到内存,同时打乱函数的排列顺序,使程序在每次运行时有不同
15、的内存映象。相关的开源集成工具很成熟,如 Obfuscator-LLVM9、Tigress10。然而,现阶段的软件多样化技术大多针对源代码实现,在实际软件项目中,软件的源代码并不总是容易获得,且二进制文件难以做到精准拆卸、区分代码指针和数据常量等反汇编11,因此,如何在不依赖源代码情况下实现二进制级别的软件多样化,是现阶段研究的重点难题。本文实现了一种面向二进制文件的细粒度多样化方法,指令偏移随机化,旨在为无法获得源代码的二进制文件提供随机化保护。具体方法是先通过二进制插桩技术获得基本块的执行次数,以此区分出程序中的“冷”“热”代码块12;再利用二进制重写器对软件进行静态解析,获得函数、基本块
16、和指令等要素的关键信息,如地址和相互关系;然后在“冷”“热”代码块12-14中的指令之间以不同概率随机插入一些垃圾代码,如96 网络与信息安全学报 第 9 卷 NOP 等非语义指令,不影响程序的最终执行结果,从而随机化偏移程序原指令地址;最后调整程序内存布局,生成新的二进制文件。本文的主要贡献如下。1)提出了一种面向二进制文件的指令偏移随机化方法,在指令级别实现了细粒度的软件多样化。2)设计了基于基本块执行频率的指令偏移策略,不仅降低了转换的性能开销,还增加了随机化熵。3)对所提方法在安全性和运行开销方面进行了评估,实验结果表明,当插入概率约为 15%时,效果最好,gadget 平均存活率趋于
17、稳定且小于 1.49%,仅增加了 4.1%的运行开销和 7.7%的文件膨胀率。1 相关技术 1.1 代码重用攻击 随着 DEP、NX(no-execute)、不可执行栈、等内存不可执行技术的广泛部署,攻击者以缓冲区溢出等形式向程序中注入的恶意代码不再被允许执行,很大程度上抑制了代码注入攻击。因此,攻击者提出了新的攻击方式代码重用攻击,与注入式攻击不同,代码重用攻击不需要引入恶意代码,而是利用程序或库中已有的指令片段构造攻击,以实现恶意代码的功能,从而绕过了现有的安全机制。代码重用攻击的演变主要分为 3 个阶段。第一阶段是函数级别的 Ret2libc 攻击15,通过重写指向程序重要的库函数的指针
18、,如 libc 库中的system()函数,可以重构之前注入的恶意代码的操作,而无须注入任何代码。第二阶段利用以 ret和 jmp 结尾的具有控制流转移功能的代码块,即gadget,可以进行算数运算,进行从内存加载数据、向寄存器赋值等操作,将多条这样的配件串联起来可以形成 gadget 攻击链,这一阶段的代表攻击主要有 ROP 和 JOP 等16-18。第三阶段攻击者提出 JIT-ROP 攻击19-20,由于软件多样化后程序中的 gadget 位置发生改变,ROP 和 JOP 等重用攻击很难发挥作用,而 JIT-ROP 通过程序在运行时泄露的任一内存地址获得所在页的起始地址,反汇编该页找到直接
19、跳转指令,通过直接跳转地址找到其他页地址,递归下去,可动态获得新的内存页并搜索其上的 gadget 构造攻击链。总体来说,代码重用攻击获得内存中足够多gadget 的位置,构造劫持控制流的攻击链,才能通过溢出漏洞将程序的控制流转移到攻击链上,达到攻击目的。1.2 二进制重写 二进制重写技术是在没有源代码的情况下,在二进制文件中添加、删除和替换指令,对其进行转换,并且这种转换可以使二进制文件保持可执行。二进制重写广泛应用于程序性能优化、安全加固和漏洞修复11等。本文通过动态二进制插桩和二进制提升两种重写技术对软件进行分析和转换,具体解释如下。(1)二进制提升 二进制提升是将二进制文件转换成更高级
20、的中间语言表示,如 LLVM IR 和 VEX IR 等,然后通过其对应的开发平台进行分析和转换,最后将修改过的 IR 重编译成新的二进制文件。现有的二进制提升方法依赖于静态反汇编,而静态反汇编从根本上无法准确地建模间接控制流目标,区分代码指针和数据常量,或识别数据字节和指令字节之间的边界,难以对文件进行精确拆卸。本文利用二进制重写工具 Egalito21对位置无关可执行程序(PIE)进行解析,提升到其中间语言表示(EIR),EIR 是低级的 IR,提升结果可预测,与原始输入更接近,避免了反汇编的错误。(2)动态二进制插桩 此方法在运行时对二进制程序进行分析,在保证被测程序原有正常执行的情况下
21、,将程序监控代码插入被测程序中,能在运行过程中获得程序的控制流和函数或基本块的执行信息等。转换过程发生在运行时,与程序运行会频繁切换,造成极大开销。动态二进制重写技术已相当成熟,如广泛应用的动态二进制重写工具 Pin22,具有丰富易用的 API,用户可自定义 Pintool23对程序进行插桩分析,获得程序的运行信息。1.3 软件多样化 软件多样化的主要思想是增加软件的不可知性,使软件在每个计算机系统或每次执行之间实现不同,以此抵御大规模代码重用攻击的发生。第 2 期 何本伟等:基于二进制重写的软件多样化方法 97 在实施软件多样化的过程中,一个重要原则是不能改变软件的语义信息,即相同的输入产生
22、相同的输出24。Cohen3提出程序“进化”这一新的防御策略,程序“进化”成与原始程序不同但语义相同的版本,随后演示了几种不同的多样化技术,如等效指令替换、指令重新排序和垃圾插入。通过添加新指令或改变现有指令来转换程序代码,对程序中指令的位置和顺序造成了巨大影响,增加了程序的随机性。由于代码重用攻击需要知道程序中gadget的具体位置,程序在多样化技术转换后,攻击者很难执行相同的 gadget 攻击链重复进行攻击。如 ASLR技术可以在程序每次加载时,使堆、栈和共享库等基地址随机分布,提高攻击成功难度,攻击者只能不断进行试错攻击。然而,现部署到系统的 ASLR技术是程序级别粗粒度的多样化25,
23、攻击者可以通过地址泄露来推断程序各个段的布局信息。2 指令偏移随机化 2.1 NOP 指令插入策略 本文选用不同字节长度的 NOP 指令及其等价指令作为垃圾代码,插入程序指令之间,使指令位置发生随机化偏移。NOP 是汇编语言的一个指令,除 PC 加 1 外,不执行任何操作,一般用来控制 CPU 的时间周期,达到时钟时延的效果。如表 1 所示,为了增加软件的异构程度,本文构建了一个 NOP 指令池,共有 10 条不同的 NOP指令,分别来自 Inter 架构开发手册26和文献10。插入的 NOP 指令除了需要程序的内存空间外,不会干扰程序的工作集,且具有较小的性能开销。NOP 指令插入会改变程序
24、中原有 gadget 地址,以此防御代码重用攻击。如图 1 所示,插入的 NOP 指令导致后续程序指令移位,随机化原软件中的 gadget 地址。NOP 指令会产生累积效应,造成后续的指令与原指令的偏移量不断增大。另外,由于 x86 架构指令长度是可变的,会产生非预期的 gadget,图 1 中指令call 609的最后一个字节编码FF和指令mov%rax,%rbx前两个字节编码 48 89 会组成新的汇编指令 FF 48 89 C3,由此产生非预期 gadgetsdec%rax,%rbx,ret。NOP 指令插入通过在指令之间插入一条 3 byte NOP 指令nopl(%rax),隔绝了前
25、后指令的联系,来消除这种小配件。通过重写器 Egalito21将函数、基本块和指令等要素的地址抽象为“链接(link)”,这些 link信息存储在 EIR 中。这样指令之间通过 link 相互关联而不是地址,可以在原程序指令之间任意添加和删除指令,而不用担心地址布局引起的错误。在实际插入中,设置 Pnop表示在每个指令前插入NOP 指令的概率,插入的 NOP 指令从 NOP 池中随机选择一条,然后生成该 NOP 指令的 link 信息存储到 EIR 中,当遍历完程序中的所有指令时,将转换后的 EIR 生成新的二进制文件。本文的NOP 指令插入算法具体如下。算法 NOP 指令插入 输入 待转换的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 二进制 重写 软件 多样化 方法
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【自信****多点】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【自信****多点】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。