基于XML中间模型以及缺陷模式匹配的静态检测系统技术方案

技术编号:7100273 阅读:409 留言:0更新日期:2012-04-11 18:40
本发明专利技术属于软件安全技术领域,涉及一种基于XML中间模型以及缺陷模式匹配的软件静态检测方法。其特征在于构造基于关系存储模式的关系语法树,以及基于XML格式的中间数据存储模型,经过预处理、词法分析、语法分析模块对待检测的源代码文件进行解析,提取出程序代码的所有安全关键属性信息,利用XML生成模块存储在XML中间文件中,由漏洞检测模块根据规则配置文件,提取规则库中相应规则,对前端生成的XML中间文件执行规则检测。

【技术实现步骤摘要】

本专利技术属于软件检测
,涉及一种基于XML中间模型以及缺陷模式匹配的静态检测方法。
技术介绍
目前,检测软件安全漏洞的方法主要有动态测试和静态分析。动态测试方法通过软件的实际执行来发现软件中的错误,由于只能对有限的测试用例进行检查,所以不能保证发现软件的所有安全漏洞。静态分析不编译运行程序,而是通过对程序源代码进行分析以发现其中的错误, 能在早期发现30% 70%的逻辑设计和编码缺陷引入的安全漏洞而。静态分析技术通过对源代码进行检查,往往能在开发早期发现软件隐含的安全问题,提高程序的可靠性和健壮性。尽管静态分析方法可能产生一定的漏报(false negatives)或误报(false positives),但仍然是当今最实用、最有效的安全漏洞检测方法之一。在实际使用中,静态测试能快速找到软件安全缺陷,比动态测试更有效率。目前,软件安全静态分析技术主要分为模型检测、词法分析、类型推导、符号执行、定理证明等。其中,模型检测是一种验证有限状态的并发系统的方法,基本思想是对于有限状态的系统构造状态机或者有向图等抽象模型,再对模型进行遍历以验证系统的某一性质。模型检测的难点在于如何避免状态空间爆炸。为此人们提出了多种方法。其中符号化模型检测方法是将抽象模型中的状态转换为逻辑公式,然后判定公式的可满足性。还可将模型转化成自动机,同时将需要检查的公式转换为一个等价的自动机,再将此自动机取补。这两个自动机的积构成了一个新的自动机,则判定模型是否具有某一属性的问题就转换成检查这个新自动机能接受的语言是否为空。
技术实现思路
本专利技术提供了一种基于XML中间模型以及缺陷模式匹配的源代码静态检测方法, 通过构造基于关系存储模式的关系语法树,以及基于XML的中间数据存储模型,将源代码安全属性信息提取并存储到XML中间模型中,以供规则检测器进行规则匹配和缺陷检测。本专利技术的技术方案如下1、静态检测系统的整体架构建立本专利技术整体架构包括系统前端静态信息提取和系统后端漏洞检测两个功能模块。系统前端静态信息提取模块由预处理模块和源代码解析模块组成,负责对待检测代码源文件进行预处理和语法制导的解析,提取所需静态信息(即安全编程规则所涉及的所有代码信息),构建关系语法树,并根据制定的XML中间模型生成XML文件;具体如下1)预处理模块完成对源代码文件的宏替换功能,该功能的实现借用G++的预处理器辅助完成。预处理后将生成.i文件。G++预处理将执行源代码中的所有预处理指令。由于源代码中的所有预处理指令均是规则检测的对象,所以我们需要将所有的预处理指令重新恢复到源代码文件中。同时,由于文件包含指令的执行,使源代码文件中被引入了大量的代码,尤其是引入了大量的C++ 标准库文件,但这是标准库文件中的代码并不是我们检测的对象,需要从将其删除。预处理模块首先将源代码文件读入内存,对源文件中的特殊区域添加标记,标记添加的原则是标记只分为两种,BEGIN与END ;BEGIN与END之间的内容是需要从后续的.i 中恢复的内容;标记之外的内容是源代码中的所有预处理指令。系统通过调用G++-E-C对添加了标记的代码文件进行预处理,生成含有标记信息的.i文件。通过分别从添入标记的源代码文件和带有标记的.i文件中分别提取相应信息, 即可获得符合规定的预处理后的文件。其中,从添入标记的源代码文件中提取出所有预处理指令及它们在源代码文件中的各自的行号,从带有标记信息的.i文件中提取两个标记之间的所有代码。2)源代码解析模块主要完成对源代码文件的转换,即将源代码文件转换成为 XML文件。源代码解析模块按照功能可划分为词法分析模块、语法分析模块和XML生成模块。代码解析器以LEX、YACC描述脚本构造词法分析器和语法分析器,对通过GCC编译生成的.i文件进行解析,从中识别出代码类型、文本、行号以及变量、函数声明等数据信息。这些信息被存储在系统内部临时“数据池”中,经XML生成模块的处理,依据设计的XML中间模型的结构,将解析出的数据信息存储在XML文件中。系统后端漏洞检测模块负责对系统前端生成的特定格式的XML文件执行规则检测。安全规则库中存储着安全规则,针对已经转换为XML中间文件的检测对象,规则以适宜检测XML文件的一种形式存储在安全规则库中。规则配置文件中存储每次规则检测时用户进行的一些系统配置信息。系统后端通过读入XML中间文件、规则配置文件以及安全知识库,输出检测结果。2、基于关系存储模式的关系语法树的构建鉴于GCC编译产生的AST文本中含有大量的静态检测价值极低的冗余信息,因此需要利用Lex、^cc对源代码进行解析,对产生冗余信息的语句进行特殊处理。例如对于源代码文件中的文件包含预处理指令,在关系语法树模型中,该指令对应一个普通节点。节点只记录该语句的文本内容和在源代码文件中出现的位置信息,摒弃其对应的头文件的内容。通过类似的处理,去除绝大多数的冗余信息,继而降低后续信息提取的难度并提高信息检索的精度。编译器以源程序的过程为单位生成抽象语法树,语法树构造算法为过程中每一种语句构造定义相应的运算符,并以运算符作为树的内部节点。对于以关键字开头的构造,使用这个关键字作为对应的运算符。加减乘除等数学算法作为数学子表达式的运算符。关系存储模式根据终结符之间的依存关系建模,内部节点去除数学运算符,增加表达式、标识符等运算符。对于以关键字开头的构造,仍然使用这个关键字作为对应的运算符。表达式语句不以某个关键字开头,故定义一个新运算符expression表示表达式语句, 用叶子节点null表示一个空语句序列。标识符的运算符分为variable、function等。树的节点之间存在父子或兄弟关系,使用相关指针进行链接。根据静态检查需要,分别生成ID 树与STMT树。ID树存放词法单元的属性集,STMT树存放各类语句的语法结构信息。语法树构造算法的基本思想如下给定文法G和Matement (语句)流s,记s = S1S2. · · sn (其中 Si e VT, i = 1,2... η), Si = tnt2i. · · tmi (其中 tki e VT, k = 1,2…m);识别器自左向右扫描s,每扫过一个tki,执行一个状态集Pi (Pi e P),其中每个状态形如 <Α — α . β , Treeid (ti d), Treecode (Sj,h) >,A — α ·β 表示 α 为已分析部分,Treeid (ti; d)表示ID树当前最后加入节点为Treecode(Sj, h)表示STMT树当前最后加入的节点为 Sj,d等于ID树节点当前深度,h值指示STMT树语句块的当前嵌套层次,d-h彡1。其中,VT为非空终结符集合,VN为非终结符的非空集合,VNDVT = 0,厂/为运算符集合,vt”为非运算符集合,Vt’。VT,Vt、VT-,V U Vt” = VT,CFG (上下文无关文法)G =(VN, VT, S,P),S e VN,是文法G的开始符号,P是产生式集合P = {A — α |A e VN,α e (VNUVT)*} (1)设VN中所有的非终结符A都可定义一个CFG GA = (VN, VT, A,P),其中A称为开始符号,本文档来自技高网...

【技术保护点】
1.一种基于XML中间模型以及缺陷模式匹配的静态检测方法,其特征在于包括以下步骤:(1)静态检测系统的整体架构建立本专利技术整体架构包括系统前端静态信息提取和系统后端漏洞检测两个功能模块;系统前端静态信息提取模块由预处理模块和源代码解析模块组成,具体如下:1)预处理模块:预处理模块首先将源代码文件读入内存,对源文件中的特殊区域添加标记,标记添加的原则是:标记只分为两种,BEGIN与END;BEGIN与END之间的内容是需要从后续的.i中恢复的内容;标记之外的内容是源代码中的所有预处理指令;系统通过调用G++-E-C对添加了标记的代码文件进行预处理,生成含有标记信息的.i文件;通过分别从添入标记的源代码文件和带有标记的.i文件中分别提取相应信息,即可获得符合规定的预处理后的文件;其中,从添入标记的源代码文件中提取出所有预处理指令及它们在源代码文件中的各自的行号,从带有标记信息的.i文件中提取两个标记之间的所有代码;2)源代码解析模块:源代码解析模块按照功能可划分为词法分析模块、语法分析模块和XML生成模块;代码解析器以LEX、YACC描述脚本构造词法分析器和语法分析器,对通过GCC编译生成的.i文件进行解析,从中识别出代码类型、文本、行号以及变量、函数声明;这些信息被存储在系统内部临时“数据池”中,经XML生成模块的处理,依据设计的XML中间模型的结构,将解析出的数据信息存储在XML文件中;系统后端漏洞检测模块:负责对系统前端生成的特定格式的XML文件执行规则检测;安全规则库中存储着安全规则,针对已经转换为XML中间文件的检测对象,规则以适宜检测XML文件的一种形式存储在安全规则库中;规则配置文件中存储每次规则检测时用户进行的一些系统配置信息;系统后端通过读入XML中间文件、规则配置文件以及安全知识库,输出检测结果;(2)基于关系存储模式的关系语法树的构建语法树构造算法如下:给定文法G和Statement(语句)流s,记s=s1s2...sn(其中si∈VT,i=1,2...n),si=t1it2i...tmi(其中tki∈VT,k=1,2...m);识别器自左向右扫描s,每扫过一个tki,执行一个状态集Pi(Pi∈P),其中每个状态形如<A→α·β,Treeid(ti,d),Treecode(sj,h)>,A→α·β表示α为已分析部分,Treeid(ti,d)表示ID树当前最后加入节点为ti,Treecode(sj,h)表示STMT树当前最后加入的节点为sj,d等于ID树节点当前深度,h值指示STMT树语句块的当前嵌套层次,|d-h|≤1;其中,VT为非空终结符集合,VN为非终结符的非空集合,为运算符集合,Vt”为非运算符集合,Vt’∪Vt”=VT,CFG(上下文无关文法)G=(VN,VT,S,P),S∈VN,是文法G的开始符号,P是产生式集合:P={A→α|A∈VN,α∈(VNUVT)*}            (1)设VN中所有的非终结符A都可定义一个CFG GA=(VN,VT,A,P),其中A称为开始符号,GA产生一个上下文无关语言L(GX),则L(GX)中的每个句子w对应一棵派生树,派生树也称生成树、分析树、语法树;设有CFG G=(VN,VT,P,S),G的语法树是满足如下条件的有序树:树的每个节点有一个标记X,且X∈VN∪VT∪{ε},ε表示空;树根的标记为S,S∈Vt’;如果一个非叶子节点v标记为A,v的子节点从左到右依次为v1,v2,...,vn,并且它们分别被标记为X1,X2,...Xn,则A→X1X2...Xn∈P;如果X是一个非叶子节点的标记,则X∈Vt’;如果一个节点v标记为ε,则v是该树的叶子,并且v是其父节点的唯一子节点;(3)XML中间模型的建立1)XML文件模型每个关系语法树在XML中间模型中均对应一个SOURCEFILE节点,SOURCEFILE节点是XML模型的顶层节点,具有两个属性:文件路径(FILEPATH)和文件类型(FILETYPE);XML文件模型下引出四个子模型:头文件引入模型(FILEINCLUDE)、注释信息模型(COMMENTS)、语句结构模型(CODELINES)、标识符信息模型(INDENTIFIERS);头文件引入模型存储关系语法树中文件包含语句的信息,包含文件可能是用户自定义文件或系统文件,通过设定FILEINCLUDE的属性节点TYPE来区分包含文件的不同类型;注释信息模型以语句为单位集中记录所有注释内容,源代码中每行注释都映射为一个CODELINE子节点;语句结构模型以语句为单位结构化地描述代码组织形式,源代码中每条语句映射为一个CODELINE子节点,使用SUBLINE标签划分嵌套子语句;标识符信息模型记录文件中定义的标识符信息,包括所有变量、函数名、类名及标号,...

【技术特征摘要】

【专利技术属性】
技术研发人员:周宽久赖晓晨王洁闫旭袁柱王喆汤乐敏
申请(专利权)人:大连理工大学
类型:发明
国别省市:91

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1