首页 | 本学科首页   官方微博 | 高级检索  
相似文献
 共查询到17条相似文献,搜索用时 140 毫秒
1.
控制流完整性(CFI)是一种在程序中通过保护间接转移有效减少代码注入和代码重用攻击等威胁的技术。由于二进制程序缺少源代码级别的语义, CFI策略的设定需要很谨慎。现有的面向二进制的CFI解决方案,如BinCFI和CCFIR,虽然能够提供对二进制程序的防护能力,但它们应用的策略过于宽松,依然会受到复杂的代码重用攻击。本文提出一种新的面向二进制的CFI保护方案,称为BinCC。它可以通过静态二进制重写为x86下的二进制程序提供细粒度保护。通过代码复制和静态分析,我们把二进制代码分成几个互斥代码块。再进一步将代码中的每个间接转移块归类为块间转移或块内转移,并分别应用严格CFI策略来限制这些转移。为了评估BinCC,我们引入新的指标来评估每种间接转移中合法目标的平均数量,以及利用call-precededgadgets产生ROP漏洞利用的难度。实验结果表明与BinCFI比较, BinCC显著地将合法转移目标降低了81.34%,并显著增加了攻击者绕过CFI限制实施复杂的ROP攻击的难度。另外,与BinCC可以降低大约14%的空间开销,而只提升了4%的运行开销。  相似文献   

2.
代伟  刘智  刘益和 《计算机应用》2015,35(2):424-429
针对传统函数指针攻击检测技术无法检测面向返回编程(ROP)攻击的问题,提出了一种基于跳转地址完整性检查的新方法,在二进制代码层面能够检测多种类型的函数指针攻击。首先,通过静态分析得到函数地址信息,然后动态检查跳转目标地址是否位于合法函数区间。分析了非入口点跳转,提出一种动静结合方法检测ROP攻击。基于二进制代码插桩工具实现原型系统fpcheck,对真实攻击和正常程序进行了测试。实验结果表明fpcheck能够检测包括ROP在内的多种函数指针攻击,通过准确的检测策略,误报率显著下降,性能损失相比原始插桩仅升高10%~20%。  相似文献   

3.
尽管现有多种防御方法和技术,但是针对软件系统和网络的攻击仍然是难以防范的威胁.在引入只读/写和地址空间随机化排列方法后,现代操作系统能有效地应对恶意代码注入类型的攻击.但是攻击者可以利用程序中已经存在的代码,将其组装成具有图灵完全计算功能的连续的代码块,用以绕过已有的防御机制.针对代码复用类攻击防御方法的局限性,提出了一种利用返回地址实时保护机制的防御方法,以有效防御代码复用类攻击,特别是ROP攻击.在程序运行时,通过对其栈中返回地址值的加密保护和实时检测,防止所有的以0xC3字符(即ret指令)结尾的短序列代码段的连续执行.该方法不需要源代码和调试信息,能完全防御ROP攻击,并且其性能开销也具有明显的优势.  相似文献   

4.
袁平海  曾庆凯 《软件学报》2017,28(10):2583-2598
返回导向编程(return-oriented programming,简称ROP)被广泛用于软件漏洞利用攻击中,用来构造攻击代码.通过更新ROP构造技术,证实了图灵完备的纯ROP攻击代码在软件模块中是普遍可实现的.ROP构造功能代码的难点是实现条件转移逻辑.通过深入分析条件转移机器指令的执行上下文发现,对这些指令的传统认知存在一定的局限性.事实上,在已有代码中存在少量的条件转移指令,它们的两个分支的开始部分都是可复用的代码片段(称为gadgets),而且这两个gadgets会从不同的内存单元中取得下一个gadget的地址,因此,以这些条件转移指令开始的代码片段可以帮助ROP实现条件转移逻辑.把这种代码片段称为if-gadget.在Linux和Windows系统上的实验结果表明,if-gadget普遍存在,即使在代码量很小的日常可执行程序中也存在.在Binutils程序集上的实验结果表明,引入if-gadget后,构造图灵完备的ROP代码要比用传统方法容易得多.在Ubuntu这样的主流操作系统上,由于可执行程序上默认没有实施防御ROP攻击的保护机制,因此,攻击者可以在这些软件模块中构造纯ROP攻击代码来发动攻击.由此可见,ROP对系统安全的威胁比原来认为的严重得多.  相似文献   

5.
通用平台目标二进制代码运行时控制流的提取主要依赖于处理器硬件特性,或其动态二进制插桩工具,该平台的控制流完整性验证方法无法直接移植到进阶精简指令集机器( ARM)架构中。为此,基于控制流完整性验证技术,设计一种用于ARM架构,利用缓冲溢出漏洞检测控制流劫持攻击的方法。该方法在程序加载时、执行前动态构建合法跳转地址白名单,在目标二进制代码动态执行过程中完成控制流完整性验证,从而检测非法控制流转移,并对非法跳转地址进行分析,实现漏洞的检测和诊断。在ARM-Linux系统的动态二进制分析平台上实施测试,结果表明,该方法能够检测出漏洞,并精确定位攻击矢量。  相似文献   

6.
陈志锋  李清宝  张平  王烨 《软件学报》2017,28(7):1732-1745
近年来,代码复用攻击与防御成为安全领域研究的热点.内核级代码复用攻击使用内核自身代码绕过传统的防御机制.现有的代码复用攻击检测与防御方法多面向应用层代码复用攻击,忽略了内核级代码复用攻击.为有效检测内核级代码复用攻击,提出了一种基于细粒度控制流完整性(CFI)的检测方法.首先根据代码复用攻击原理和正常程序控制流构建CFI约束规则,然后提出了基于状态机和CFI约束规则的检测模型.在此基础上,基于编译器辅助实现CFI标签指令插桩,并在Hypervisor中实现CFI约束规则验证,提高了检测方法的安全性.实验结果表明该方法能够有效检测内核级代码复用攻击,并且性能开销不超过60%.  相似文献   

7.
控制流完整性保护技术(control flow integrity,简称CFI)是防御面向返回编程攻击(return-oriented programming,简称ROP)的一种有效途径.针对现有CFI中存在的四大问题:性能开销大、依赖程序代码信息、容易遭受历史刷新攻击以及规避攻击,提出了基于硬件分支信息的ROP攻击检测方法——MIBChecker (mispredicted indirect branch checker).该方法实时地利用硬件性能管理单元(performance monitor unit,简称PMU)的事件触发机制,针对每个预测失败的间接分支进行ROP攻击检测,规避了历史刷新攻击的可能,同时提出基于敏感系统调用参数的新型检测方法来检测短攻击链(称为gadgets-chain) ROP攻击.实验结果表明,MIBChecker能够不受历史刷新攻击的影响进行ROP短指令片段(称为gadget)检测,可有效地检测出常规ROP攻击和规避攻击,并仅引入5.7%的性能开销.  相似文献   

8.
操作系统是整个计算机系统的基础,只有保证操作系统的安全性,才能确保上层软件的安全性。本文采用保护内核控制流的方法提高操作系统安全性,提出一种基于编译器插件的轻量级内核重构加固方法。该方法是在相关转移指令前动态插入控制流断言,确保执行路径在有效的内核边界内,保护程序、指令运行的位置和顺序被修改。它能有效加强用户地址空间与内核地址空间的隔离,对内核起到有效加固的作用,同时可以防止通过篡改内核关键数据结构而引发权限提升类漏洞的攻击。实验结果证明,该方法是轻量级的内核加固方法,能够防止空指针引用漏洞及相关内核权限提升类漏洞攻击。  相似文献   

9.
软件防反汇编技术研究*   总被引:1,自引:1,他引:0  
尚涛  谷大武 《计算机应用研究》2009,26(12):4553-4557
为了保护软件所有权,根据一般的反汇编算法的特征,提出代码重叠、跳转地址重定向和控制流混淆等几种代码混淆技术。这些技术能使反汇编结果出现混淆,误导攻击者对程序理解,从而提高软件防反汇编的能力,有效地阻止对软件的逆向分析,保护了软件的知识产权。  相似文献   

10.
返回导向编程攻击,通过将程序中现有的二进制代码片段进行有机的组合,能有效地生成恶意代码攻击程序,而现有的攻击检测技术不能很好地对这类攻击进行检测。介绍返回导向编程攻击,分析并指出返回栈的成功构造是使得这种攻击成功的关键事实。基于这个事实,设计并实现了一个返回导向编程攻击的检测系统B re。tB ret的检测原理和攻击者利用的代码片段是正交的,从而可以很好地防御基于"更新-加载-跳转"指令序列的返回导向编程攻击。在对B ret的攻击检测能力和性能评测中,B ret展示了高效的检测能力,几乎不产生误报和漏报,同时,使用B ret保护的程序产生了非常小的性能开销。  相似文献   

11.
即时编译机制(just-in-time compilation)改善了网页浏览器执行JavaScript脚本的性能,同时也为攻击者向浏览器进程注入恶意代码提供了便利.借助即时编译器,攻击者可以将脚本中的整型常数放置到动态代码缓存区,以便注入二进制恶意代码片段(称为gadget).通过常数致盲等去毒化处理,基于常数的注入已经得到有效遏制.证实了不使用常数转而通过填充脚本代码块也能实施gadget注入,并实现图灵完备的计算功能.在编译一段给定的脚本代码时,即时编译器生成的动态代码中通常存在着一些固定的机器指令序列.这些指令序列的存在性不受常数致盲和地址空间布局随机化等安全机制的影响,同时,这些指令序列中可能蕴涵着攻击者期望的gadget.在实施攻击时,攻击者可以汇集特定的脚本代码块来构造一个攻击脚本,再借助即时编译器来注入gadget.在x86-64架构上评估了这种注入攻击在SpiderMonkey和GoogleV8这两个开源即时编译引擎上的可行性.通过给这两个引擎输入大量的JavaScript脚本,可以得到较为丰富的动态代码块.在这些动态代码块上的统计分析结果表明,这两个引擎生成的动态代码中都存在图灵完备的gadget集合.在实际攻击场景中,攻击者可以利用的脚本集合完全包含且远远多于实验用的脚本.因此,攻击者可以采用该方法注入需要的gadget,以便构造出实现任意功能的ROP(return-orientedprogramming)代码.  相似文献   

12.
一个基于硬件虚拟化的内核完整性监控方法   总被引:2,自引:0,他引:2  
李殉  黄皓 《计算机科学》2011,38(12):68-72
对操作系统内核的攻击就是通过篡改关键数据和改变控制流来危及操作系统的安全。已有的一些方法通过保护代码完整性或控制流完整性来抵御这些攻击,但是这往往只关注于某一个方面而没有给出一个完整的监控方法。通过对内核完整性概念的分析,得出了在实际系统中保证内核完整性需要的条件:保障数据完整性,影响系统功能的关键数据对象只能由指定的代码在特定情况下修改;保障控制流完整性,保护和监控影响代码执行序列改变的所有因素。并采用硬件虚拟化的Xen虚拟机监控器实现对Linux内核的保护和监控。实验结果证明,该方法能够阻止外来攻击和本身漏洞对内核的破坏。  相似文献   

13.
ROPDetector:一种基于硬件性能计数器的ROP攻击实时检测方法   总被引:1,自引:0,他引:1  
面向返回编程(Return-Oriented Programming,ROP)是针对软件漏洞利用最广泛的攻击技术之一,能够绕过数据执行保护、地址空间布局随机化等防御机制.本文提出了一种基于硬件的ROP攻击实时检测方法,在不需要任何边缘信息(如源代码、编译器支持)和二进制重写的情况下,利用现代CPU中的硬件性能计数器监控目标程序执行过程,提取ROP攻击发生时底层硬件事件特征来实时检测ROP攻击.然后,在32位Linux实验环境下实现了原型系统ROPDetector,使用真实的ROP攻击与漏洞进行实验,并与同类方法进行了对比实验,最后评估了系统的性能消耗.实验结果表明,该方法能有效地检测真实的ROP攻击,在分别以6次和9次错误预测返回指令为检测周期时,系统性能消耗仅有5.05%和5.25%,磁盘I/O性能消耗仅有0.94%和2%,网络I/O性能消耗仅有0.06%和0.78%.  相似文献   

14.
随机化技术防御进程控制流劫持攻击, 是建立在攻击者无法了解当前内存地址空间布局的基础之上, 但是, 攻击者可以利用内存信息泄露绕过随机化防御获得 gadget 地址, 向程序注入由 gadget 地址构造的 payload, 继续实施控制流劫持攻击, 窃取敏感数据并夺取或破坏执行软件的系统。目前, 异构冗余执行系统是解决该问题的方法之一, 基本思想是同一程序运行多个多样化进程, 同时处理等效的程序输入。随机化技术使冗余的进程对恶意输入做出不同的输出, 同时正常功能不受影响。近年来,一些符合上述描述的系统已经被提出, 分析进程异构冗余执行系统的表决设计可以发现, 基于 ptrace 的实现方法会引入大量的上下文切换, 影响系统的执行效率。率先直接修改内核设计出一种进程异构冗余执行系统, 表决过程完全在内核中完成, 冗余的进程独立地采用内存地址空间随机化技术, 构建相互异构的内存地址空间布局, 在与内存信息泄露相关的系统调用处进行表决,发现泄露信息不一致, 阻断进程控制流劫持攻击。即使攻击者跳过内存信息泄露进行漏洞利用, 异构内存空间布局也使得注入由 gadget 地址构造的 payload 无法同时在冗余的进程中有效, 阻断进程控制流劫持攻击。实现了原型系统 KMBox, 实验证明该系统能够有效抵御进程控制流劫持攻击, 性能相较于基于 ptrace 的进程异构冗余执行系统有所提高。  相似文献   

15.
The shellcode generation   总被引:2,自引:0,他引:2  
  相似文献   

16.
Code injection attacks are one of the most powerful and important classes of attacks on software. In these attacks, the attacker sends malicious input to a software application, where it is stored in memory. The malicious input is chosen in such a way that its representation in memory is also a valid representation of a machine code program that performs actions chosen by the attacker. The attacker then triggers a bug in the application to divert the control flow to this injected machine code. A typical action of the injected code is to launch a command interpreter shell, and hence the malicious input is often called shellcode. Attacks are usually performed against network facing applications, and such applications often perform validations or encodings on input. Hence, a typical hurdle for attackers, is that the shellcode has to pass one or more filtering methods before it is stored in the vulnerable application??s memory space. Clearly, for a code injection attack to succeed, the malicious input must survive such validations and transformations. Alphanumeric input (consisting only of letters and digits) is typically very robust for this purpose: it passes most filters and is untouched by most transformations. This paper studies the power of alphanumeric shellcode on the ARM architecture. It shows that the subset of ARM machine code programs that (when interpreted as data) consist only of alphanumerical characters is a Turing complete subset. This is a non-trivial result, as the number of instructions that consist only of alphanumeric characters is very limited. To craft useful exploit code (and to achieve Turing completeness), several tricks are needed, including the use of self-modifying code.  相似文献   

17.
Efforts to improve application reliability can be irrelevant if the reliability of the underlying operating system on which the application resides is not seriously considered. An important first step in improving the reliability of an operating system is to gain insights into why and how the bugs originate, contributions of the different modules to the bugs, their distribution across severities, the different ways in which the bugs may be resolved and the impact of bug severities on their resolution times. To acquire this insight, we conducted an extensive analysis of the publicly available bug data on the Linux kernel over a period of seven years. We also justify and explain the statistical bug occurrence trends observed from the data, using the architecture of the Linux kernel as an anchor. The statistical analysis of the Linux bug data suggests that the Linux kernel may draw significant benefits from the continual reliability improvement efforts of its developers. These efforts, however, are disproportionately targeted towards popular configurations and hardware platforms, due to which the reliability of these configurations may be better than those that are not commonly used. Thus, a key finding of our study is that it may be prudent to restrict to using common configurations and platforms when using open source systems such as Linux in applications with stringent reliability expectations. Finally, our study of the architectural properties of the bugs suggests that the dependence among the modules rather than the unreliabilities of the individual modules is the primary cause of the bugs and their impact on system reliability.  相似文献   

设为首页 | 免责声明 | 关于勤云 | 加入收藏

Copyright©北京勤云科技发展有限公司  京ICP备09084417号