多重循环程序内存访问越界增量检测方法

多重循环程序内存访问越界增量检测方法

论文摘要

在严重威胁软件系统可靠性和安全性的多类软件缺陷中,内存访问越界属于危害性很强且广泛存在的一类缺陷,可被黑客利用并转变成多种拒绝服务漏洞和著名的缓冲区溢出等高危险性的安全漏洞。现有的内存访问越界缺陷检测方法,对现实程序中内含复杂条件分支的多重循环,无法有效分析其内部频繁的指针运算和内存操作,因此检测效果不佳。特别是,循环执行次数无法预知而由外部输入动态确定、内存操作受循环内条件分支影响而动态变化等常见情况,对当前热门的符号执行类精确检测方法构成巨大挑战,导致该类方法在遍历程序路径实施检测时,会遇到严重的路径组合爆炸问题,即使消耗非常多时间,也常常无法正常终止。另外,现有方法被设计成对完整的程序代码实施全面检测,但现实软件系统常常会由于各种原因被更新和升级,若每次软件更新后都进行全面检测,代价过高。而且,现有方法也没有针对软件更新时容易引入新缺陷的代码区域进行专门检测,因此大部分检测时间被花费在无意义的重复检测之中。经分析,其问题根源是:现有符号执行类方法单纯追求代码覆盖率而缺陷针对性不强。因此,提出了一种面向多重循环程序的内存访问越界缺陷增量检测方法。针对内存访问越界缺陷与循环归纳变量运算紧密关联的特点,首次将递推链扩展代数与符号执行类缺陷检测方法相结合,设计了面向多重循环的缺陷检测指导信息,同时利用软件更新影响的局部性特点,实现了基于路径指导的定向检测和基于更新影响的增量检测。其主要算法如下:1)根据软件更新对源代码的文本修改,结合控制与数据依赖分析,识别受软件更新实际影响的语义变化区域。有针对性地在该区域中分析多重循环中指针运算和内存读写模式,初步识别出内存访问越界疑似缺陷,再根据控制与数据依赖关系标记出疑似缺陷所依赖的语句和变量,作为缺陷依赖区域,构造能充分检测软件更新引入缺陷的相关执行要素最小集合——精简检测流图,及早排除与缺陷检测无关的语句。2)基于精简检测流图进行多重循环分析,跟踪和分析多重循环中缺陷依赖变量的递推关系,将其统一表示为递推链扩展代数的形式,再根据该代数规则进行符号操作,从而推导出缺陷依赖变量的值或上下界的闭形式函数,构建循环摘要和函数摘要。接着,根据内存范围等安全性限制条件,利用循环摘要和函数摘要,构造缺陷触发条件并求解,从而判断缺陷触发的可能性,及时排除疑似缺陷集合中的误报,还可推断出用于预测和选取缺陷关联路径的缺陷检测指导信息。3)根据路径选取方向性、条件分支检测优先级、各个循环的有效迭代次数范围等缺陷检测指导信息,有指导地以按需符号执行方式实施路径敏感和位运算级精度的缺陷定向检测。每次经过疑似缺陷点时,主动检测缺陷触发条件,并结合在检测路径上收集的路径分支条件进行约束求解,通过判断触发路径的条件可满足性来进一步避免缺陷误报。而每次在路径分叉点,按需克隆执行环境以避免相同路径前缀的重复执行,并立即求解所选取分支的路径条件集,以及时剪除不可行的路径分支。最后,生成无误报的缺陷集合、能真实触发这些缺陷的程序输入集合以及相应的触发路径集合,作为缺陷并非误报的验证信息。基于上述算法,设计和实现了能面向多重循环程序实施内存访问越界缺陷增量检测的原型系统,并在国内首次将微软主流编译器的下一代工业级编译平台Phoenix用于软件缺陷检测,作为该系统的基础支撑环境。该系统已检测Filezilla Server、SpamAssassin、WGet和OpenSSL等多个知名开源软件,找到了真实的代码缺陷。实验结果表明,利用递推链扩展代数进行多重循环分析,有指导地以符号执行方式实施定向检测,能够克服多重循环程序对现有符号执行类方法造成的困难,包括循环次数由输入确定、内存操作受循环内条件分支影响等难题,既避免了盲目路径遍历,又保持了路径敏感和位运算级的检测精度,提高了检测效率和准确性。同时,利用软件更新影响的局部性特点,实现缺陷增量检测,提高了检测时效性和针对性。另外,该方法能够在检测和定位内存访问越界缺陷同时,生成相应的程序输入和触发路径等验证信息,这在软件安全性测试和信息对抗等领域有很大的应用价值。

论文目录

  • 摘要
  • ABSTRACT
  • 目录
  • 算法
  • 第1章 绪论
  • 1.1 研究意义
  • 1.2 相关研究
  • 1.3 问题描述
  • 1.4 研究内容与贡献
  • 1.5 论文结构
  • 第2章 多重循环程序内存访问越界增量检测方法
  • 2.1 设计思想
  • 2.1.1 多重循环问题的对策
  • 2.1.2 软件更新问题的对策
  • 2.1.3 盲目探测问题的对策
  • 2.2 总体框架与主要流程
  • 2.3 本章小结
  • 第3章 软件更新驱动的缺陷及依赖区域识别
  • 3.1 文本差异驱动的预处理
  • 3.2 软件更新的语义差异分析
  • 3.3 循环相关的内存访问越界疑似缺陷识别
  • 3.4 缺陷依赖区域识别与精简检测流图构造
  • 3.5 本章小结
  • 第4章 基于递推链扩展代数的多重循环分析
  • 4.1 递推链扩展代数基础
  • 4.2 基本循环分析
  • 4.2.1 快速预处理
  • 4.2.2 循环内变量计算的递推关系分析
  • 4.2.3 目标变量递推链形式的构造
  • 4.2.4 目标变量闭形式函数的推导
  • 4.3 检测区域的递归分析和摘要构建
  • 4.3.1 循环摘要构建
  • 4.3.2 函数摘要构建
  • 4.4 本章小结
  • 第5章 缺陷定向检测与验证输入生成
  • 5.1 缺陷可触发性和检测指导信息的推断
  • 5.1.1 缺陷触发条件的关联信息收集
  • 5.1.2 缺陷检测的指导信息推断
  • 5.2 基于路径指导的缺陷定向检测
  • 5.2.1 面向缺陷的路径选取决策
  • 5.2.2 基于按需符号执行的缺陷检测
  • 5.2.3 符号执行效果的函数级缓存
  • 5.2.4 约束求解与输入生成
  • 5.3 本章小结
  • 第6章 原型系统的实现与实验
  • 6.1 原型系统的设计与实现
  • 6.1.1 基础支撑环境
  • 6.1.2 原型系统结构
  • 6.2 实验结果和分析
  • 6.2.1 多重循环程序的缺陷检测实验
  • 6.2.2 实验结果的对比和分析
  • 6.3 本章小结
  • 第7章 结论
  • 7.1 主要工作
  • 7.2 主要贡献与创新点
  • 7.3 应用价值
  • 7.4 未来工作
  • 参考文献
  • 致谢
  • 在读期间发表的学术论文与参加的科研项目
  • 相关论文文献

    • [1].“反思创读、多重循环”在高中英语阅读教学实践中的运用[J]. 中学生英语 2015(30)
    • [2].“反思创读、多重循环”在初中英语阅读教学中的运用[J]. 新课程(下) 2018(04)
    • [3].“反思创读,多重循环”在中学英语教学实践中的运用[J]. 校园英语(教研版) 2012(12)
    • [4].关于多重循环秩集抽样下正确排序的一种秩检验方法(英文)[J]. 中国科学技术大学学报 2012(11)
    • [5].一种多重循环程序内存访问越界检测方法[J]. 中国科学院研究生院学报 2010(01)
    • [6].通过递归解决多重循环问题[J]. 洛阳师范学院学报 2016(11)
    • [7].“反思创读、多重循环”在初中英语阅读教学中的应用[J]. 新课程(中) 2017(10)
    • [8].广义自由积的剩余有限性[J]. 东北师大学报(自然科学版) 2010(03)
    • [9].我国现阶段发展循环经济的对策研究[J]. 湖北经济学院学报(人文社会科学版) 2016(02)
    • [10].论工学结合的教学模式(上)[J]. 宁波职业技术学院学报 2012(06)
    • [11].C语言课堂中游戏化展示初探[J]. 中学时代 2014(10)
    • [12].论工学结合的教学模式(下)[J]. 宁波职业技术学院学报 2013(01)
    • [13].定弧长多重循环无衍射光莫尔条纹计数方法[J]. 湖北工业大学学报 2018(05)
    • [14].两相连续固体床厌氧消化反应器的试验[J]. 农机化研究 2009(02)
    • [15].盈利原理——透视商业的本质[J]. 企业管理 2014(04)
    • [16].面向SLP的多重循环向量化[J]. 软件学报 2012(07)
    • [17].多重循环荷载对斜拉桥高塔的影响[J]. 价值工程 2014(13)

    标签:;  ;  ;  ;  ;  ;  ;  

    多重循环程序内存访问越界增量检测方法
    下载Doc文档

    猜你喜欢