论文部分内容阅读
基于内存的安全漏洞一直是计算机主机系统安全的主要原因。在过去的十年中出现了许多用于防御基于内存安全漏洞攻击的技术。主要可以分为两类,一类是针对代码本身的静态方法,主要基于用户代码分析技术;另一类是针对代码运行环境的动态方法,主要有不可执行堆栈技术,栈溢出防护技术,控制流完整性技术等。这些技术或者不具备较好的实用性,或者只能针对某些特定的攻击手段。
地址空间随机化技术解决了这两个问题。首先地址空间随机化是一种动态的防御技术,能够较容易地在现有的系统中实施;其次随机化技术具有广泛的防御类型,对几乎全部的基于内存漏洞的攻击都有防护作用。地址空间随机化技术的思想是基于这样一个现象:基于内存漏洞的攻击普遍依赖一个必要条件,即需要在攻击时确定若干个地址空间对象的地址。地址随机化技术通过将这些地址空间对象随机地排布,增加了攻击者获得其地址的难度,也就增加了攻击成功实施的难度。
由于能够有效地进行安全防御,因此主流的操作系统都应用了地址空间随机化技术。现有的地址空间随机化技术可以随机地排布包括用户栈、堆、代码、静态数据、动态共享库等地址空间对象。但是现有的地址空间随机化技术具有随机化时机固定,抗暴力攻击能力弱的缺点。本文提出的运行时刻再次随机化技术,在运行时刻能够根据需要再次随机化某些特定类型的动态共享库,不但解决了现有随机化技术随机化时机固定的问题,对暴力攻击也具有较好的抵御能力,将攻击难度从D(pT)提高到D(pT2)。
本文实现的运行时刻再次随机化技术主要有两个方面。首先是实现了不绑定的符号解析机制。通过不绑定符号解析的结果,使得每次符号访问都要经过动态连接器代码,这样就为目标对象的随机化创造了条件。其次是实现了运行时刻的再次随机化。即使目标对象中的函数正在被调用,重新排布对象所在的地址空间位置也不会影响函数的正确运行。运行时刻再次随机化技术具有实施简单,应用灵活的特点。运行时刻随机化技术只修改动态连接器,不需要修改诸如内核之类的其它环境,也不需要进行复杂的二进制文件分析;运行时刻随机化技术可以根据使用者的需要灵活配置,在安全性和运行效率之间达到平衡。