论文部分内容阅读
如何自动化地挖掘二进制程序漏洞并生成漏洞利用代码是当前软件安全领域研究的一个热点。目前的漏洞自动化利用方案都还处于较为初期的阶段,存在漏洞利用类型简单、对生成的Exploit没有进一步验证等问题。因此提出基于二进制程序的自动化漏洞利用方法,该方法希望能进一步完善目前的自动化漏洞利用技术。基于二进制程序的自动化漏洞利用方法分为三个模块:动态符号化执行模块、验证模块和Exploit校正模块。动态符号化执行模块负责探索出有漏洞的路径,结合漏洞现场分析其类型,然后判断是否满足利用约束,满足则添加该约束生成Exploit。可利用的漏洞类型有栈溢出和函数指针覆盖两类,利用方案有代码注入和代码复用两类具体四种利用方案。验证模块负责将产生的Exploit提供给程序实际执行,判断Exploit是否有效。若在验证中发生了崩溃,则将Exploit交给Exploit校正模块。Exploit校正模块负责使用动态污点跟踪的方法在汇编指令级跟踪Exploit在程序运行中的传播过程,确定崩溃是由Exploit中的哪些字节导致的,然后对该字节进行变异、再验证,如此反复直至Exploit可用。根据以上提出的方法,实现了基于二进制程序的自动化漏洞利用的原型系统:以符号化执行引擎Angr为平台进行动态符号化执行分析二进制程序,完成漏洞挖掘和利用的步骤;以Pin为二进制插桩平台,在汇编指令级进行污点传播指令插桩,进行动态污点跟踪分析,完成自动化校正Exploit的步骤。经过对11个CTF题目样本的测试,原型系统能够对微小型程序全自动地完成漏洞挖掘、利用和自动化校正Exploit的工作,证明使用动态污点跟踪方法完成对Exploit的校正是有效可行的。