[发明专利]基于XML中间模型以及缺陷模式匹配的静态检测系统有效
申请号: | 201110208958.6 | 申请日: | 2011-07-25 |
公开(公告)号: | CN102339252A | 公开(公告)日: | 2012-02-01 |
发明(设计)人: | 周宽久;赖晓晨;王洁;闫旭;袁柱;王喆;汤乐敏 | 申请(专利权)人: | 大连理工大学 |
主分类号: | G06F11/36 | 分类号: | G06F11/36 |
代理公司: | 大连理工大学专利中心 21200 | 代理人: | 梅洪玉 |
地址: | 116100*** | 国省代码: | 辽宁;21 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | 本发明属于软件安全技术领域,涉及一种基于XML中间模型以及缺陷模式匹配的软件静态检测方法。其特征在于构造基于关系存储模式的关系语法树,以及基于XML格式的中间数据存储模型,经过预处理、词法分析、语法分析模块对待检测的源代码文件进行解析,提取出程序代码的所有安全关键属性信息,利用XML生成模块存储在XML中间文件中,由漏洞检测模块根据规则配置文件,提取规则库中相应规则,对前端生成的XML中间文件执行规则检测。 | ||
搜索关键词: | 基于 xml 中间 模型 以及 缺陷 模式 匹配 静态 检测 系统 | ||
【主权项】:
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标签划分嵌套子语句;标识符信息模型记录文件中定义的标识符信息,包括所有变量、函数名、类名及标号,每个标识符生成一个相应的ID子节点;2)语句结构模型的XML Schema结构如下:A.语句类型(CODETYPE):XML中间模型将C++语句类型划分为76类,使C++语言中的所有语句均有一个唯一的名称;B.行号(LINENUMBER):系统在检测出违反安全规则的软件缺陷后,需要向用户提供源代码中违反规则的缺陷所在行号;C.语句文本(CODETEXT):某些规则的实现需要通过正则表达式分析语句文本,XML中间模型用专门节点标记语句文本;D.子语句(SUBLINES):SUBLINES通常含有大量CODELINE子节点,代表复合语句中的子语句;3)标识符信息模型用WSDL表示如下:A.标识符类型(IDTYPE):可取值包括、量、函数定义、类、类模板共35种类型;B.行号(LINENUMBER):ID的属性节点,记录标识符第一次出现的位置;ID含有许多子节点,均作为可选项,是否使用由IDTYPE以及标识符在源代码中的上下文环境而定;C.名字(NAME):记录标识符的名称;D.类型(TYPE):可选子节点TYPE根据IDTYPE的取值不同具有不同的含义,可以使变量声明的数据类型、函数返回类型或结构类型等;E.存储类型标识(STORETYPE):该节点只应用在变量和函数中,用于记录变量和函数在声明时的存储类别;F.赋值记录(ASSIGNMENT):记录变量初始化值以及初始化后的再赋值,记录项之间使用分号隔开;G.常量(CONST):用于记录类的成员函数是否是被const修饰的常量成员函数,写在函数的最后来修饰;XML中间模型中,CONST节点不用于指示普通常量;H.访问标号(ACCESS):记录类、结构体和联合体成员的访问标号;ACCESS有private、public、protected三个取值;I.所属结构(OWNER):记录类、结构体、联合体和命名空间成员的所在类、结构体、联合体或命名空间的名称;J.虚函数标记(VIRTUAL):用于指示类成员函数是否是虚函数;K.运算符重载(OPERATE):用于记录C++中可重载的42种重载操作符;L.参数(PARAMETER):记录函数定义和声明的参数信息;函数参数列表的每个参数项都被映射为PARAMETER节点下的一个ID子节点,按参数顺序存放;M.域(FIELD):复合语句中定义的变量是局部变量,XML中间模型中使用FIELD记录这些变量,变量的可见域不超过所属FIELD块的作用域;N.基类(PARENT):记录派生类继承自哪些基类;PARENT节点有一个用于记录类派生列表中派生类对每个基类的继承权限的属性节点;O.模板(TEMPLATE):记录模板定义和声明的模板参数信息;模板参数列表的每个参数项都被映射为TEMPLATE节点下的一个ID子节点,按参数顺序存放。
下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于大连理工大学,未经大连理工大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/patent/201110208958.6/,转载请声明来源钻瓜专利网。