论文部分内容阅读
随着网络的普及,信息的安全性遭到了很大的威胁。通过利用软件漏洞,攻击者可以获取用户存放在手机、电脑、网站上的各种信息。攻击者和防御者都在寻找软件中的漏洞,前者希望通过利用漏洞攻击系统,后者希望能够修复漏洞和防御攻击。为了证明一个漏洞是高危的,最可靠的方法是为它构造一个漏洞利用。因此,无论是攻击者还是防御者都非常关注漏洞利用相关的研究。手工的漏洞利用构造过程需要非常丰富的底层知识,包括汇编语言、操作系统、CPU架构等,对操作者的水平有很高的要求,也非常消耗精力和时间。随着软件规模的增加,软件在运行过程中进行了复杂的运算,拥有数目众多的路径分支。而漏洞利用的过程中需要对软件的控制流和数据流进行分析。手工完成这些任务无疑是困难的。本文提出了一种漏洞利用自动生成算法。对于给定的二进制可执行代码,算法自动发现程序中存在的漏洞,对漏洞进行分析并创建一个精心构造的输入。使用该输入驱动程序,将触发程序中的漏洞,劫持程序的控制流并执行恶意代码。在本文的算法中,采用模糊测试技术实现了漏洞的自动发现,并将导致程序崩溃的输入记录下来,从而能够分析每一个崩溃对应的漏洞路径。在随后的分析过程中,采用污点分析的方法获取程序的控制流和数据流信息,对受到输入影响的内存布局进行记录。通过分析程序运行中与输入相关的控制流约束,保证程序使用新构造的漏洞利用运行依然能到达漏洞所在地点。通过将跳转指令和shellcode布置到内存中,保证程序能够跳转到恶意代码。为了能够分析动态生成和下载的代码,算法使用动态二进制插桩框架实现上述过程。算法采用了多种shellcode和跳转指令的组合,增加更多的跳转指令分析,一方面增加了构造出漏洞利用的概率,另一方面也预防针对某种跳转指令的检查。理论分析与实验结果表明:本文所提出的漏洞利用自动生成算法是有效的。