论文部分内容阅读
最近,程序多样性技术作为增加系统安全性的一类方法得到了广泛的发展。通过它,一次开发形成的系统可以在程序特征的多个层次上呈现出多样化的表现。一方面,这样的系统给攻击者带来了诸多的麻烦,因为多样性让攻击者无法通过观察本地系统特征来获知目标系统的上下文,稍有偏差就可能造成攻击的失败。另一方面,这样的系统也给逆向工程破解者带来了很多的阻力,因为程序真实的语义被隐藏在了众多迷惑的信息之后。本文围绕着如何通过程序多样性技术来增强程序的可靠性和隐蔽性的角度展开研究。本文的研究内容主要有三个,首先是结构体多样化技术在内核Rootkit方面的应用,通过自动地对操作系统内核中的结构体做出多种变化,使其在不知道众多结构体组成的情况下加载失败。其次,研究了结构体多样化技术在扰乱程序内存签名方面的应用,经过转化的程序在内存分布上呈现出多样性,能够避开程序内存签名工具的识别,对恶意代码尤其有用。最后还对系统调用多样化技术进行了研究,通过变化代表程序核心语义的系统调用间依赖关系实现对软件胎记匹配的干扰。具体来说研究内容如下:·内核Rootkit对于操作系统来说是个严重的威胁。入侵者通过植入内核Rootkit,修改一些关键的内核数据结构,实现恶意进程隐藏、日志文件删除、私密信息窃取等恶意行为。由于Rootkit主要通过篡改内核结构体对象来实现控制流截取,本文试图通过随机化这些结构体来防御这些入侵。在本文中,提出了一种基于编译器的自动结构体随机化技术,解决了包括结构体的可随机化性识别、随机化语义不变保护以及自动随机化等多个挑战,最终利用随机环境下攻击者无法预知结构体域排列的特点,实现对内核Rootkit的防御。在实验环节,在被随机化的Linux系统中测试了已知的五种不同原理的八个真实的Rootkit,结果展示了本文所提方法以几乎零负荷的代价防御了全部的Rootkit加载。·众多针对程序指令的传统混淆技术已经被广泛地用于干扰逆向工程技术。然而,新的基于运行时内存数据结构分布的逆向分析系统仍然可以让这些混淆技术失效。这样的内存分布逆向分析系统采用贝叶斯非监督学习技术,能够将具有相似内存数据排列的程序归结为一类,对恶意程序变种之间的归类特别有效。为此,本文开发了一种新的程序混淆技术,能够自动地混淆程序数据结构,抹去被混淆的代码之间的相似性,干扰内存分布逆向系统的归类。本文设计并实现了自动的结构体混淆技术,该实现作为GCC编译器的一个插件,能够自动分辨结构体的可混淆性。在测试了14个真实的恶意代码以后,本文所展示的系统能够成功地混淆结构体并躲过内存逆向分析系统的识别。·软件胎记利用特定的程序特征来验证程序的唯一性,因此它可以被用于检测软件之间的拷贝关系。当前,一种最为先进的软件胎记技术采用了系统调用之间的依赖关系作为程序的唯一特征,这种特征不能被之前的混淆技术所变化,并且对无用的系统调用插入免疫。本文分析了它的缺点,并且构造了如何用语义相等的、高频系统调用依赖关系替换已有依赖关系的混淆技术。结果显示这种新的替代混淆技术能够有效地干扰原有的软件胎记技术。