4.2指令随机化方法
指令随机化(instruction set randomization)基本出发点是阻止恶意代码顺利完成
攻击。在编译时对可执行程序的机器码进行加密操作,在指令执行前,再对每条加
密过的指令进行解密。通过这个过程,使得攻击者植入的攻击代码不能完成预期的
功能。
指令随机化的工作主要以Elena Gabriela Barrantes和Gaurav S.Kc的工作为主。
其中Elena Gabriela Barrantesl47】提出了一种用于抵御基于二进制的代码注入式攻击
的随机化方法,以虚拟机Bochs为依托,在编译时对可执行程序的机器码进行XOR
操作,并且以特别的寄存器来存储加密时使用的随机化的key,在程序解释指令的
时候再对机器码进行XOR解密,通过这个加解密过程来阻止恶意代码的执行,最
后利用Val西nd工具实现了一个名为RISE的系统。Gaurav S.Kct48】的工作原理与
Elena Gabriela Barrantes的类似。
指令随机化方法对于代码注入式攻击有很好的防御效果,但是由于使用虚拟机
导致负荷过重,另外对数据流攻击无能为力(数据流攻击对象是并没有加密的数据),
所以又有了数据随机化方法的诞生。
4.3数据随机化方法
数据随机化(dam randomization)基本出发点是控制可执行程序内的所有数据结
构,进行加解密操作,使得任意的数据结构在未被引用时都是加密状态,其中包括
控制程序跳转的控制流数据,使得攻击者覆盖的地址值也是一个密文,并不能顺利
指向攻击代码,攻击不成功。数据随机化可以抵御现有出现的所有类型攻击,包括
代码注入式攻击和数据流攻击。
最早的数据随机化方案是Jun xu[62】提出的控制流数据随机化,主要防御缓冲区
溢出攻击。控制流数据是指用于控制程序跳转的数据结构,主要包括两种:(1)Efi数
返回地址;(2)函数指针。控制流数据随机化以异或加密的方法对程序内的控制流数
据进行保护,使得在内存中存储的控制流数据都是密文,当缓冲区溢出攻击发生时,
覆盖的地址也是一个密文,并不能顺利指向攻击代码的首地址。但这种方案太过于
依赖加密算法的安全,简单的加密算法防护强度不高。
全面的数据随机化工作主要以Sande印Bhatkar和Cristian Cadar等人的工作为
袁赋超:缓冲区溢出攻击防御技术的研究27
主。Sandeep Bhatkar[49】提出了一种对所有数据进行随机化的方案用以抵御所有类型
的攻击,在程序初始化时,先分析程序内所有存在的数据类型,并通过一个唯一的
随机数对所有的数据进行XOR加密,只有在数据被引用时才进行解密,所有在程
序内进行运算或者其他操作时,数据都处在加密状态,而当溢出发生时,所溢出后
获取的是加密后的地址,而不是所预想的攻击代码的地址,能够有效抵御现有所有
类型的攻击。Cristian Cadar等人的工作原理与Sandeep Bhatkar的类似。
数据随机化针对代码注入式攻击和数据流攻击都有很好的防护效果,但是由于
当前32位系统的限制导致随机数最大只能是一个32位的二进制数,所以暴力破解
的攻击仍然存在,不过被攻击概率极低,仅有2啦的概率。
4.4针对随机化方法的攻击分析
目前针对以上三类随机化方法的攻击主要有三种:return.into—lib(c)、暴力破解
和猜测密钥攻击。这三种攻击中,前两种主要是针对ASR的,由于早期ASR和一
些实用ASR技术使用的随机化比较简单,可能只是对基地址随机化了,很容易受
到攻击;最后一种是针对ISR的攻击,通过猜测密钥还原系统指令,由于针对的是
16位的随机数key,所以猜测的强度并不大;现有的攻击中还没有出现针对DSR
的攻击。
4.4.1 retum-into‘lib(c)
.return-into—lib(c)方法就是利用C语言的共享库的基地址来触发攻击,通过各种
不同的方式获得共享库加载的基地址,然后通过覆盖共享库基地址,指向攻击代码,
攻击就能顺利发生。
Tyler Durden实现了一种针对PaX的return.into.1ib(c)攻击方法,因为PaX只对
主程序代码地址中12.27位进行了随机修改,所以代码段中特定代码的页内地址与
没有采用Pax的系统中的页内地址相同,可以覆盖存在溢出漏洞的函数的返回地址
的最后一个字节(页内地址的低8位),使其跳转到本页内call或者printf之类的指令,
再通过格式化字符串攻击的方法,逐步获取共享库加载的基地址,从而实现
retum.into.1ib(c)攻击。
这种攻击方法利用了Pax只修改了基地址而没有修改主程序代码中语句的相
对地址的漏洞,虽然只能在很特别的环境下才能实现,但是确实表明了在实用ASR
技术中存在漏洞。
4.4.2暴力破解(brute force)
扬州大学硕士学位论文
暴力破解主要还是针对初期和实用ASR技术,采用暴力猜测的方式将程序内
部随机化的距离找出,或者联合return-into.1ib(c)攻击一起,先猜测共享库加载基地
址,然后找出正确的地址再实现return-into.1ib(c)攻击。
H.Shacham采用了暴力猜测Pax中共享库的加载基地址的方法进行攻击,只要
获得了该基地址,就可以由相对地址计算得到所有被加载的动态链接库中的函数的
地址。因为PaX只对该基地址进行了16位的随机化,所以最多存在65536种可能,
平均进行32768次猜测就可以猜出该地址,H.Shacham通过实验,用平均216秒的
时间就实现了rgturn.into.1ib(c)攻击,得出以下结论:(1)32位系统下PaX中的ASR
技术只能降低蠕虫的传播速度,不能有效地抵御暴力破解,64位系统下该技术才可
以使暴力破解变得几乎不可能;(2)猜测共享库中单目标函数地址时,实现再随机化
最多使猜测时间增加一倍;(3)与运行时再随机化相比,在编译期间对共享库进行更
细粒度的随机化更加有效,但是实现难度很大;(4)在某些重要的服务器系统中,即
使检测到类似这种暴力攻击,也没有好的方法解决。
这种攻击具有普遍意义,对于只需要事先确定单一目标地址的攻击,只有用增
大随机空间的方法来解决,但是对于需要确定多个目标地址的攻击,在猜测的过程
中如果进行再随机化,这种攻击将很难实现。另一方面,如果被攻击系统具有有效
的攻击检测和处理机制,这种攻击就很容易被检测到,因为每次失败的猜测都将使
程序跳转到不可预测的位置,而这可能会引起进程崩溃。
4.4.3猜测密钥攻击
猜测密钥攻击主要是针对指令随机化技术,采用大量猜测的方式对机器码加密
所用到的密钥进行攻击,由于指令随机化时,特殊寄存器内存放的随机化key是个
16位的二进制数,所以进行猜测的强度并不是很大,猜测成功后就能还原源程序的
机器码,完成攻击。这方面的代表是Ana Nora Sovarel|50J篚j-r作,主要攻击的指令
随机化系统是Elena Gabriela Barrantes实现的RISE系统,并且攻击成功。
4.5随机化方法实用性分析
根据本章对现有的随机化技术和已知的一些攻击方法的研究,对随机化方法的
实用性进行以下分析:
(1)目前的一些地址空间随机化技术优点就在于系统开销小,实现难度不是很
大,并且部分地址空间随机化已经应用于目前的一些主流系统,能够有效地降低攻
击成功的概率。但是由于随机化空间不够大、随机化粒度不够细的原因,还存在暴
力破解和基于相对地址攻击的可能性,而细粒度的地址空间随机化又对程序内部结
袁赋超:缓冲区溢出攻击防御技术的研究29
构修改太多,导致兼容性差不能得到广泛应用,所以如何实现平衡的问题至关重要,
最好的方法就是利用其他防护技术与地址空间随机技术相结合的方式提高安全强
度,能够有效抵御暴力破解和基于相对地址的攻击。
(2)指令随机化技术已经能够有效抵御代码注入式攻击,但是由于作为密钥的随
机数范围太小,导致存在密钥猜测攻击的可能,而要加强安全强度,只能从加密算
法角度考虑,安全性更好的加密算法在增加安全性的同时,也加大了时间消耗和系
统开销,所以根据具体不同的应用,可以采用不同的加密算法,进一步做到安全性
与系统开销之间的平衡。
(3)数据随机化技术是随机化技术中防护效果最好的一种,可以有效抵御现有的
所有类型攻击,时间消耗和系统开销也比指令随机化要少,但是由于32位系统的
原因,唯一的攻击方式就是暴力破解,如果采用64位系统,安全度能进一步提高,
而在还采用32位系统的情况下,可以适当加强加密算法的强度,在牺牲一些时间
消耗和系统开销的情况下来加强防护效果。
通过以上分析,我们知道要实现可用的随机化技术还是要通过两方面的结合,
一个是防护的强度方面,一个是系统的开销方面。要在具体系统中实现随机化技术
首先要考虑系统开销问题,而在本文中提到的三类随机化技术中,相比其他两类随
机化技术,ASR带来的系统开销最小,并且已经在一些系统中使用,可行性最好,
针对防护强度方面,目前是DSR方法强度最大,但是需要对运行程序源代码进行
转换,实用性并不高,所以综合来考虑的话,还是使用ASR技术能够实现高效可
用的系统,但是需要进一步改进,针对现有的攻击,需要加大随机化的粒度,只随
机化各个模块加载的基地址并不够,还需要对模块内部各元素之间的相对地址进行
细化的随机化,但是得充分考虑兼容性问题,同时在随机化位数方面也得加强,PaX
中的16位随机化和现在Vista系统中的8位随机化都不能完全抵御暴力猜测的攻击,
所以更多位数的随机化势在必行。
4.6小结
本章介绍了各种已有的随机化方法,对这些方法的研究现状和针对这些方法的
攻击进行了分析,主要从实用性方面着手,指出实现能够有效抵御各种针对内存攻
击的随机化系统需要注意的问题。通过对防护强度和系统开销这两个角度的考虑,
改进的ASR技术更适合于现有的系统体系,从更细粒度的实现和与更高强度的随机
化保护出发,以降低针对ASR的攻击方法成功的概率,而这些ASR方法可能会是未
来的随机化技术研究的重点。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课