论文部分内容阅读
本文的项目背景基于华为公司的C代码静态分析漏洞检测项目。该项目要求设计一种针对C代码的安全规范检测机制,本文C程序静态安全检测就是建立在安全规范之上的。该项目旨在为C编码人员引入定制化的代码检测方法,协助编码人员检测软件安全漏洞,以确保软件产品的安全度。本文设计了定制化工具安全检查模块,检查的主要过程是通过遍历源程序中各条路径的信息来完成的,对源程序的安全漏洞检测是通过遍历路径上与源程序相关信息,以及安全规则文本中指定安全规则能否进行匹配来决定的。本工具检测的第一步为将外部安全规则输入到安全分析器中来进行相应的分析。安全规则是存储于程序数据结构中。然后,对于任意一条路径,基于数据流分析,用存储在控制流结点上的源程序与安全规则来进行相应的匹配,安全检测信息会在对应到安全规则中的不合法转移时发出提示。本文首先对定制化规则模式的文法进行了相应的设计,令定制化规则源程序模式能够符合C中大部分结构。然后设计并且实现了模式与源程序的相关匹配算法。其过程是以抽象语法树形式来对应安全规则中的模式来完成树同构判定的相关匹配。简而言之就是安全分析器读入外界用户制定的安全规则,与源代码相匹配用以进行安全分析检测,最后查找出安全漏洞。项目关键技术第一点是抽象语法树的建立以及在抽象语法树里增加语义动作来进行代码植入和操作。第二点关键技术是利用安全规则在抽象语法树工具提供的遍历器里增加语义动作来进行模式匹配。根据与源代码的匹配程度,检测代码中的漏洞。第三点是当模式匹配完成状态转移控制的设计与实现。本文最后进行了对安全分析工具进行了测试分析,通过编写安全规则对用例进行检测,得出了比较满意的漏洞提示,实现了安全分析工具的功能。最后进行了工具的性能测试,验证了基于定制化规则的安全分析工具的有效性及性能。并且认识到很多不足的地方需要提高。