论文摘要
随着计算机技术的快速发展,软件在各行各业得到了广泛应用,它已经成为我们日常生活不可缺少的组成部分。软件经过编译和测试,每千行代码中平均有10-20个缺陷。虽然软件公司通常花费超过80%的开发预算在质量控制上,但缺陷仍然存在,不断发布的补丁就是其表现。计算机软件日益庞大和复杂,使得软件中的漏洞越来越难以发现。在软件生存期中软件测试占有重要地位,是验证软件正确性及检测软件漏洞的重要手段。如何通过软件测试提高软件的质量及安全性是一个需要研究人员及软件公司关注的问题。和传统的采用测试用例的动态软件测试技术相比,静态分析技术不需要实际运行程序,通过分析程序源码或中间代码的方式,检查程序中潜在的错误。静态分析虽然具有优势,但也存在不足之处。现有静态分析工具在检测源码时大都存在误报以及漏报的情况,而且问题比较严重。如何降低静态分析工具在检测错误时的误报率和漏报率,也是研究人员及软件公司关注的问题。本文以软件测试中的静态分析技术为基础,主要研究了C程序中数组越界、未初始化变量和空指针解引用等软件漏洞的检查。通过阅读国内外大量文献,总结出传统软件测试技术的不足。通过对比研究静态分析的各种测试方法,指出现有静态分析工具的局限性。在以上理论知识的基础上,在Linux开发环境下,基于开源工具CallTree的源代码,开发出一种支持用户自定义属性规则的静态分析工具CTCheck,并且定义了一组原语操作便于属性规则文件的编写。开发过程中使用严格的控制流图和函数调用图生成算法,使得CTCheck具有低误报率和低漏报率的特点。最后,本文通过分类测试包含使用未初始化变量、数组越界、空指针解引用等错误的小程序以及综合测试较大系统的源码证明了该工具的有效性。
论文目录
摘要ABSTRACT第一章 引言1.1 研究背景及意义1.2 国内外研究现状1.3 本文主要研究内容1.4 论文组织结构第二章 软件安全静态分析技术2.1 软件测试技术2.1.1 软件测试方法分类2.1.2 常用软件测试工具2.1.3 传统软件测试技术的不足2.2 软件安全漏洞及检测方法2.2.1 使用未初始化变量2.2.2 数组越界2.2.3 空指针解引用2.2.4 软件安全漏洞检测方法2.3 静态分析测试技术2.3.1 静态分析能解决的问题2.3.2 静态分析测试原理2.3.3 现有静态分析的局限性2.4 本章小结Check 分析与设计'>第三章 CTCheck 分析与设计3.1 系统概述Check 系统框架'>3.2 CTCheck 系统框架Check 各模块功能'>3.3 CTCheck 各模块功能3.3.1 文件解析模块3.3.1.1 主要接口和数据结构3.3.1.2 抽象语法树3.3.2 局部分析模块3.3.2.1 主要接口和数据结构3.3.2.2 控制流图3.3.3 全局分析模块3.3.3.1 主要接口和数据结构3.3.3.2 函数调用图3.4 本章小结Check 检测算法'>第四章 CTCheck 检测算法4.1 算法概述4.2 局部分析4.2.1 构造控制流图4.2.2 使用未初始化变量4.2.3 数组越界4.3 全局分析4.3.1 构造函数调用图4.3.2 函数调用图举例4.4 自定义属性规则4.4.1 断言的副作用4.4.2 连续赋值错误4.4.3 锁规则和中断屏蔽4.4.4 空指针解引用4.5 本章小结第五章 实验与测试5.1 测试环境5.2 测试命令5.3 测试结果5.3.1 使用未初始化变量5.3.2 数组越界5.3.3 空指针解引用5.3.4 连续赋值错误5.3.5 综合测试5.4 本章小结第六章 结论6.1 工作总结6.2 今后的研究方向致谢参考文献附录A 控制流图生成算法附录B 函数调用图生成算法攻硕期间取得的研究成果
相关论文文献
标签:静态分析论文; 软件测试论文; 软件安全论文; 软件漏洞论文;