基于xml中间模型安全检测规则库的建立方法

文档序号:6429174阅读:174来源:国知局
专利名称:基于xml中间模型安全检测规则库的建立方法
技术领域
本发明属于软件测试技术领域,涉及到基于XML中间模型的安全检测规则库的建
立方法。
背景技术
信息系统与网络的迅速发展使得软件的安全性成为一个备受关注的焦点。无论是在商业软件中还是开源软件中,软件的漏洞随处可见。软件的漏洞通常是在软件开发的过程中产生的。C++语言是一种功能强大、具有较高执行效率的程序语言,但它同时也是一种语言复杂、类型约束和安全控制机制宽松、编程风格自由的程序语言。软件安全测试是修复安全威胁,保证软件能够安全使用的最重要的手段。目前主要安全测试方法有静态的代码安全测试和动态的渗透测试。静态代码测试适用于早期的代码开发阶段,本发明是属于静态代码测试的范畴。源代码分析技术由来已久,随着计算机语言的不断演进,源代码分析的技术也在日趋完善,出现了很多源代码分析工具。评价静态分析工具好坏有两个指标漏报率和误报率。如何降低静态分析工具的漏报率和误报率成为软件缺陷分析中的一个热点问题。健壮的规则库的设计是保证静态检测工具高效性和准确性的前提。

发明内容
本发明要解决的技术问题是设计一种基于XML中间模型的安全检测规则库。把安全子集中的每一条规则抽象为缺陷模式,使用XQuery查询语句将缺陷模式转换成XQuery 表达式,针对C++语言源代码存在的安全漏洞,查询C++源代码对应的XML中间模型,定位与缺陷模式匹配的XML节点,通过缺陷重定向机制完成缺陷从XML中间模型到源文件中的精确定位。本发明的技术方案如下为确定XML中间模型中需要记录和描述的数据信息,按照安全子集MISRA中规则所涉及的C++语言语法对象及检查对象的不同,将规则分为以下几类变量声明/定义类对于C++语言中使用的结构体、联合体、枚举类型、类类型和 typedef的使用,MISRAC++均做了使用限制。因此中间模型需记录所有变量的声明和定义 信息。程序风格类为了保证程序的可读性和易维护性,防止因程序员的失误而引入软件安全缺陷等制定的一些规则。所以中间模型需要记录源代码中语句结构信息。宏指令类C++语言对宏指令的使用非常灵活,这种灵活隐藏着安全隐患。 MISRAC++制定了严格的宏指令使用和书写方面的规则,因此中间模型需要记录代码的文本 信息。数据操作类C++语言在数据操作上的定义并不完整。MISRA针对这种安全隐患, 制定了相关规则,XML中间模型中需要记录所有变量的使用信息。
过程类c++语言中函数的使用和声明不当会产生大量安全隐患,安全子集 MISRAC++制定了大量的规则来规范函数的声明、定义和使用。所以XML中需要记录所有函数声明、定义和使用的信息。1、XML中间模型制定通过对MISRA C++的分析确定了 XML中间模型的结构和应记录的数据信息语句结构信息和标识符信息,二者分别对应XML中间模型中的语句结构模型和标识符模型。语句结构信息以C++语言语句为单位,能够体现源文件中每一行代码的具体含义及其所在行的上下文环境信息。源文件中的每一条语句在XML中间模型中都对应一个C0DELINE节点。 每一个信息单元需要包含语句类型、语句内容、行号及可选的子语句信息。无论是基本语句还是复合语句,在XML中间模型中均映射为一个CODELINEf 点。复合语句的C0DELINE节点包含2个属性节点和两个子节点,分别是属性C0DETYPE和 LINENUMBER,子节点 TEXT 和 SUBLINES,如图 2 所示。XML中间模型中的标识符信息模型描述了源文件中标识符的信息。代码文件中定义的每个标识符在XML中间模型中均对应标识符的名字、类型、赋值记录、引用记录等信息。标识符模型的结构如图3所示。每一份待检测的源文件均有其对应的XML中间模型,可以将XML中间模型看做一个树结构,有唯一的根节点S0URCEFILE,其属性节点FILENAME用以记录文件名,FILETYPE 用以区分文件类型。两个子节点C0DELINES和IDENTIFIERS对应语句结构模型和标识符信息模型。2、MISRA C++规则的缺陷模式将MISRAC++规则中每一条抽象为缺陷模式。在静态分析工具中,缺陷模式决定着系统检测的缺陷类型,规则的状态以及启动的条件等。由四部分组成,分别为描述项、状态项、使用的对象和约束,即VP— {DES, STA, OBJ, CON}其中VP 缺陷模式;DES 描述安全规则的一些基本信息,通常包括两部分统一编号和规则信息,即DES— (ID, INFO), ID 规则在安全子集中的编号;INFO 规则的文字描述信息。STA 标记安全规则所处的状态,取值为真或假,代表规则启用或禁用。即STA e {TRUE, FALSE};其中TRUE代表启用,FALSE代表禁用。0BJ:安全规则使用的对象。根据安全规则的不同,对象可能是一类语句乂3切!^壯, 如宏指令;可能是一种数据类型DataType^ 指针等。CON 匹配缺陷模式的一组约束条件(Pl,P2,P3,…)及约束条件之间的运算关系{AND,OR, NOT}。形式为(条件1,条件 2, …)关系。3,MISRA C++规则的缺陷模式表达式XQuery作为当前对XML查询支持最为完善的查询语言,在缺陷模式的基础上,利用XQuery语言为每一条安全规则设计其XQuery表达式,并存储在安全知识库中。安全知识库基于XML设计,如图4所示,每一条安全规则在安全知识库中是一个Rule节点,含有四个子节点ID、STATE、ERR0RINF0和XQUERY。ID是规则中的关键节点,能唯一的标识出规则库中每一条规则。STATE对应于缺陷模式中的STA。ERR0RINF0对应于缺陷模式中的INF0, 向用户提供出错信息。XQUERY对应缺陷模式中的OBJ核C0N,根据缺陷模式中定义的检测对象、约束条件以及约束条件之间的关系,构建XQuery表达式。依据安全知识库中的安全规则执行XQuery表达式,返回违反安全规则的节点的LINENUMBER属性,将规则缺陷重定向到源代码文件中。本发明的有益效果在于通过对C++语言进行XML中间建模,构建XQuery表达式精确地查询违反安全规则的节点,从而重定向到源代码中,降低漏报率和误报率,可灵活的进行规则的配置。


图1是本发明安全检测规则库的使用流程图。 图2是XML中间模型结构示意图。
图3是标识符模型结构示意图。 图4是安全知识库基于XML设计结构示意图。
具体实施例方式以下结合技术方案和附图,详细说明本发明的具体实施例。以MISRAC++中的一条规则为例说明。Rule 逗号运算符、与运算符(&&)和或运算符(| )不可被重载。Aoperator&&(A&a){//一些操作}该规则对应的缺陷模式为VP — {DES,STA, OBJ, CON},其中各部分的取值为DES — (ID, INFO) = (52B0,“逗号运算符、与运算符(&&)和或运算符()不可被重载“);STA = TRUE ;表示启用该规则;OBJ —〈Statement 0PERAT0R_FUN_DEC | 0PERAT0R_FUN_DECF> ;表示该安全规则适用的对象是运算符重载函数。规则要求不可重载逗号运算符、与运算符和或运算符,所以三个约束条件是Pl 重载的运算符是逗号;P2 重载的运算符是与运算符;P3 重载的运算符是或运算符。三个约束条件之间的关系是P1、P2、P3相或。即CON— (Pl,P2,P3)0R综上所述,该安全规则对应的缺陷模式为=VP52bci — {(52B0,“逗号运算符、与运算符(&&)和或运算符(I I)不可被重载“),TRUE,〈Statement :0PERAT0R_FUN_DEC | OPERATOR, FUN_DECF>, (Pl,P2,P3)0R},其中Pl,P2,P3为上文描述的三个约束条件。1.缺陷模式的XQuery表达方式XQuery作为当前对XML查询支持最为完善的查询语言,在缺陷模式的基础上,利用XQuery语言为每一条安全规则设计其XQuery表达式,并存储在安全知识库中。安全知识库基于XML设计,每一条安全规则在安全知识库中是一个Rule节点,含有四个子节点ID、STATE,ERR0RINF0和XQUERY。ID是规则中的关键节点,能唯一的标识出规则库中每一条规则。STATE对应于缺陷模式中的STA。ERR0RINF0对应于缺陷模式中的INF0,向用户提供出错信息。XQUERY对应缺陷模式中的OBJ和C0N,根据缺陷模式中定义的检测对象、约束条件以及约束条件之间的关系,构建XQuery表达式。依据安全知识库中的安全规则执行XQuery表达式,返回违反安全规则的节点的LINENUMBER属性,将软件缺陷重定向到源代码文件中。根据上节对Rule逗号运算符、与运算符(&&)和或运算符(| )不可被重载缺陷模式的分析,该规则的XQuery实现算法如下所示
权利要求
1. 一种基于XML中间模型安全检测规则库的建立方法,其特征在于如下步骤,(I)XML 中间模型制定无论是基本语句还是复合语句,在XML中间模型中均映射为一个CODELINEfA ; 复合语句的C0DELINE节点包含2个属性节点和两个子节点,分别是属性C0DETYPE和 LINENUMBER,子节点 TEXT 和 SUBLINES ;每一份待检测的源文件均有其对应的XML中间模型,将XML中间模型看做一个树结构, 有唯一的根节点S0URCEFILE,其属性节点FILENAME用以记录文件名,FILETYPE用以区分文件类型;两个子节点C0DELINES和IDENTIFIERS对应语句结构模型和标识符信息模型;(2)MISRAC++规则的缺陷模式将MISRA C++规则中每一条抽象为缺陷模式;由四部分组成,分别为描述项、状态项、 使用的对象和约束,即=VP — {DES,STA, OBJ, CON}其中=VP 缺陷模式;DES 描述安全规则的一些基本信息,包括两部分统一编号和规则信息,即=DES- (ID, INFO), ID 规则在安全子集中的编号;INFO 规则的文字描述信息;STA 标记安全规则所处的状态,取值为真或假,代表规则启用或禁用;即STA e {TRUE, FALSE};其中TRUE代表启用,FALSE代表禁用; OBJ 安全规则使用的对象;根据安全规则的不同,对象是一类语句Matement或一种数据类型DataType ;CON 匹配缺陷模式的一组约束条件(Pl,P2,P3,…)及约束条件之间的运算关系{AND, OR, NOT};形式为(条件1,条件2,…)关系;(3)MISRAC++规则的缺陷模式表达式XQuery作为当前对XML查询支持最为完善的查询语言,在缺陷模式的基础上,利用 XQuery语言为每一条安全规则设计其XQuery表达式,并存储在安全知识库中;安全知识库基于XML设计,如下表所示,每一条安全规则在安全知识库中是一个Rule节点,含有四个子节点ID、STATE、ERR0RINF0和XQUERY ;ID是规则中的关键节点,能唯一的标识出规则库中每一条规则;STATE对应于缺陷模式中的STA ;ERR0RINF0对应于缺陷模式中的INF0,向用户提供出错信息;XQUERY对应缺陷模式中的OBJ核C0N,根据缺陷模式中定义的检测对象、 约束条件以及约束条件之间的关系,构建XQuery表达式;依据安全知识库中的安全规则执行XQuery表达式,返回违反安全规则的节点的LINENUMBER属性,将规则缺陷重定向到源代码文件中。
全文摘要
本发明公开了一种基于XML中间模型的安全检测规则库的设计,属于软件测试领域。在XML中间模型的基础上,把MISRAC++中的每一条规则抽象为缺陷模式。XML中间模型存储了C++源代码的语句结构信息和标识符信息。使用XQuery查询语句将缺陷模式转换成XQuery表达式,针对C++语言源代码存在的安全漏洞,查询C++源代码对应的XML中间模型,定位与缺陷模式匹配的XML节点,通过缺陷重定向机制完成缺陷从XML中间模型到源文件中的精确定位。所有的XQuery表达式存储在系统安全知识库中,并在系统外围单独维护,可有效地实现规则配置与扩展。
文档编号G06F11/36GK102279792SQ201110207528
公开日2011年12月14日 申请日期2011年7月25日 优先权日2011年7月25日
发明者周宽久, 姚艳双, 崔凯, 杨广, 王洁, 简道红, 赖晓晨 申请人:大连理工大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1