在信息安全的江湖,始终存在着两个派系:攻击方和防守方。攻击方总想尝尽一切办法去突破防守方的防线,防守方则始终严防死守、做好安全防御、力保防线不失。而攻防博弈的过程是不对等的,攻击方一旦发现安全漏洞,便可以穿越防线、发起攻击;而防守方需做好全面防线的安全,当遗漏或者被“隐蔽者”欺骗进入都可能被攻破。
诸如ROP攻击,几乎90%的基于漏洞利用的软件攻击在攻击链中使用恶意该技术,同缓冲区代码执行、格式化字符串漏洞攻击不同,它利用了代码复用技术,是一种全新的攻击方式。那么,对它如何破呢?
ROP攻击被利用缘由
面向返回编程(Return Oriented Programming, ROP)是在利用由内存损坏问题引起的安全漏洞时经常使用的一种技术。它允许攻击者在存在安全防御(如可执行空间保护和代码签名)的情况下执行代码。ROP可用于规避地址空间布局随机化(ASLR)和DEP。当使用ROP时,攻击者在函数返回之前使用它对堆栈的控制来将代码执行到程序中的其他位置。除了在非常坚固的二进制文件上,攻击者可以很容易地找到位于固定位置(绕过ASLR)和可执行(绕过DEP)的部分代码。此外,将几个有效负载链接起来以实现(几乎)任意代码执行是相对简单的。ROP已成为利用内存破坏型漏洞的一种更常用的技术。
在这种技术中,攻击者获得对调用堆栈的控制来劫持程序控制流,然后执行精心选择的机器指令序列,这些指令序列已经存在于机器的内存中,称为“gadget”。每个小工具(一系列以跳转指令结尾的汇编代码)通常以返回指令结束,并位于现有程序和/或共享库代码中的子例程中。这些小工具连接在一起,使攻击者能够对使用防御系统的机器执行任意操作,从而挫败更简单的攻击。
ROP攻击流程
前面我们讲到,ROP是利用内存破坏型漏洞的一种常用技术,“不知攻焉知防”,了解ROP攻击流程才能更针对性的提出解决措施。
图1 ROP攻击流程
如图1所示,攻击者利用特定程序与内存相关的漏洞(例如,缓冲区溢出)并将堆栈指针(ESP)移动到第一个返回地址。在步骤2中,通过从堆栈中弹出返回地址1。将执行重定向到第一个小工具。该gadget被另一个返回指令终止,该指令从堆栈中弹出返回地址2(步骤3),并将执行重定向到下一个小工具(步骤4)。每个小工具都以这种方式逐个执行,直到攻击者达到他的目标。
ROP攻击的防范
由于rop攻击的程序主要使用栈溢出的攻击方法,实现程序控制流的劫持。因此栈溢出漏洞的防护是阻挡ROP攻击最根源性的方法。如果解决了栈溢出问题,ROP攻击将会在很大程度上受到抑制。内存保护技术可以第一时间发现并防御此类缓冲区溢出漏洞的攻击,更好的解决ROP攻击问题。
基于内存保护技术,安芯网盾研发设计了智能内存保护系统,使用创新的硬件虚拟化技术、内存行为分析技术,把安全产品的防护能力从应用层、系统层下沉到硬件虚拟化层,通过细粒度的监控内存读、写、执行行为,可实时检测内存中存在的堆喷射、堆栈溢出、内存数据覆盖、shellcode执行等异常行为,防止高级的堆栈溢出攻击,防止攻击者从已有的库或可执行文件中提取指令片段,攻击恶意代码。一旦检测这类异常行为,实时拦截并阻断漏洞利用过程,即使不安装补丁依然可以起到防护作用,从而解决系统本身脆弱性问题。
网络攻击时刻在变化,针对此类威胁,应及时做好安全防御!