论文摘要
缓冲区溢出漏洞是常见的软件安全漏洞,恶意用户可利用程序中的溢出漏洞攻击目标主机系统,窃取或破坏重要数据,甚至控制该系统攻击其它主机。在每年近十万次网络漏洞攻击中,近50%与缓冲区溢出相关,造成的经济损失超过百亿美元。缓冲区溢出漏洞已成为一种最危险、最常见的软件安全漏洞。现有缓冲区溢出漏洞检测方法分静态和动态两类。静态检测方法对源代码检测,速度快检出率高,但结果中存在较多误报;动态检测方法运行时监控程序行为,误报率较低且检测精度较高。但现有动态方法也存在明显的不足:1.未完全摆脱源代码;2.只能针对应用程序检测,对操作系统无能为力;3.发现溢出现象却难以确定漏洞位置;4.对测试输入依赖较高,代码覆盖率难以保证。本文以现有缓冲区溢出漏洞检测方法中存在的问题和不足为切入点,在充分研究、分析和比较现有动态方法的基础上,提出了一种面向可执行代码,利用全系统模拟器作为执行环境,通过动态路径追踪方法检测溢出漏洞的有效方法。主要工作和创新包括:1)针对当前动态方法执行环境控制力较弱,信息获取不充分的问题,提出了基于全系统模拟器的动态检测环境构建方法,并重点研究了模拟器的控制技术。该技术使目标程序完全受控地运行在环境内,可随时获取包括硬件状态在内的各层次系统信息,为漏洞检测提供了良好的基础平台。2)针对可执行代码抽象难读的问题以及动态追踪对指令分析的需求,提出了指令的动态解释方法。该方法将可执行代码动态转换成形式统一、便于分析追踪的元指令表示形式。该方法不仅改善了后端路径追踪逻辑的目标指令系统,同时也便于前端执行环境向多平台扩展。3)针对当前动态方法在漏洞定位与代码覆盖率问题上存在的不足,提出了基于动态污点传播思想的动态路径追踪方法。该方法分析并构造了溢出漏洞的判定规则,回溯确定漏洞位置,归纳溢出形成条件,并结合系统状态回退完成多路径漏洞搜索,提高代码检测覆盖率。4)在上述研究成果基础上,基于Simics全系统模拟器设计并实现了缓冲区溢出漏洞动态检测系统原型系统SimDDBO。5)对SimDDBO系统进行基准测试和实例测试,验证了系统的有效性,初步尝试了新漏洞挖掘,发现Baidu Hi中两个新漏洞并获得BugTraq确认。