CN102243608A - 基于全局数据结构描述的软件安全测试方法 - Google Patents

基于全局数据结构描述的软件安全测试方法 Download PDF

Info

Publication number
CN102243608A
CN102243608A CN2010101767648A CN201010176764A CN102243608A CN 102243608 A CN102243608 A CN 102243608A CN 2010101767648 A CN2010101767648 A CN 2010101767648A CN 201010176764 A CN201010176764 A CN 201010176764A CN 102243608 A CN102243608 A CN 102243608A
Authority
CN
China
Prior art keywords
record
data
test
field
testing
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN2010101767648A
Other languages
English (en)
Other versions
CN102243608B (zh
Inventor
方兴
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Zhejiang Tmall Technology Co Ltd
Original Assignee
方兴
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 方兴 filed Critical 方兴
Priority to CN201010176764.8A priority Critical patent/CN102243608B/zh
Publication of CN102243608A publication Critical patent/CN102243608A/zh
Application granted granted Critical
Publication of CN102243608B publication Critical patent/CN102243608B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Abstract

本发明公开了基于全局数据结构描述的软件安全测试方法(100)。所述软件安全测试方法(100)包括下列步骤:基于所测试软件的数据结构和规则的描述文档,按照数据结构统一描述规则来书写所测试软件的数据结构描述文件(102);使用数据结构描述文件来获取基础样本的全局数据视图(104);从测试点开始逐步解析基础样本,生成局部数据视图,根据全局数据视图和局部数据视图,依照测试策略由基础样本生成测试样本组(106);以及使用测试样本组对所测试软件进行安全测试(108)。所述软件安全测试方法(100)的覆盖率更高,测试样本更精准,测试结果更可数据指标量化。

Description

基于全局数据结构描述的软件安全测试方法
技术领域
本发明涉及软件安全测试,尤其涉及基于全局数据结构描述的软件安全测试方法。
背景技术
软件的安全漏洞目前已成为其受到安全威胁的最主要的基本因素。通过挖掘安全漏洞来进行安全测试的现有技术主要包括黑盒模糊(FUZZ)测试技术、白盒源代码审计技术、以及灰盒路径测试技术。
黑盒模糊测试技术通过按一定策略对给定数据样本进行变形生成大量新的测试样本,然后启动被测试应用处理这些测试样本,检测应用是否出现异常。该技术的优点在于,门槛低,无需源代码和相关技术信息,只需要有应用和对应的数据样本就可以实现。但是该技术的缺陷在于,只能挖掘出浅层次的安全漏洞,无法理解数据真实的含义,更多深层次的漏洞难以发现,而且分析出来的信息还需要做二次分析,同时作为安全测试方法,无法准确描述其安全测试的覆盖率,测试效果依赖于样本的覆盖空间。
白盒源代码审计技术是在源代码级检测软件的安全漏洞的技术。白盒源代码审计技术的优点在于,对于已被总结出特定特征的安全漏洞可以做全路径的覆盖,无需做二次分析。但是该技术的缺点在于,第一是需要源代码,然而在很多情况下源代码是很难获取的。第二是只能针对比较简单的具有一定特征的安全漏洞形式,对于很多复杂的安全漏洞形式难以描述从而也就难以检测。第三是只能针对源代码,对于在编译过程中由于编译优化等因素而导致的安全漏洞就无法查找。
灰盒路径测试技术先把二进制程序转换成中间语言,然后使用动态流程分析跟踪数据流进行分析。该技术一直是国内外研究的焦点,但是目前很难实用化,其存在的问题是:应用很复杂,大量的执行路径需要覆盖,难以分析。另外就是动态执行的时候,只能根据已知样本的路径来分析,难以发现和追踪分支路径,反向构造样本也是困难点。
当前,在黑盒模糊测试技术的基础上,出现了基于简单的数据结构实施半透明测试的技术,其代表技术是PEACH。PEACH在传统的模糊测试之上,增加了用户可以用一个特定脚本来描述相关文件数据结构的能力,使得测试策略可以依据这个脚本描述的数据结构来实现。但是PEACH具有以下缺点:
1)描述能力和规则简单,无法描述复杂的文件结构
PEACH只简单实现了结构(其在PEACH内部被称为块)与字段这两层的结构关系。然而,文件结构通常是非常复杂的,很多文件在自身的格式和规则之外,还允许包含另一种文件格式和规则,这被称为容器。这样的结构方式,两层结构根本无法描述。
同时,结构之间的逻辑关系和物理关系是有一定区别的。例如,对于微软公司OFFICE的EXCEL的XLS文件结构,在物理上,每个记录都需要在0x8020字节之内,如果一个记录大于0x8020字节,则要分割成两个物理记录,但是在数据结构逻辑视图中,这两个物理记录属于一个记录,需要先进行物理合并,再使用数据结构逻辑视图来处理,这样的规则,PEACH根本无法描述。
2)描述规则和测试无法针对网络报文
很多网络应用协议是负载在低层另一个协议之上的,使用完全不同的规则,情况和上文提到的文件的容器概念是一致的。同时,大量的网络协议都有封包和解包的概念,与上文提到的文件结构之间的逻辑关系和物理关系是一致的。因此PEACH也难以描述这些规则和方法。
3)无法描述复杂的字段关系,只能针对简单的长度关系来进行描述
PEACH对字段关系只支持简单的长度关系描述,即B字段的长度是A字段,但是字段之间更复杂的关系就难以描述,例如B字段的长度是A字段*C字段的情况。同时,字段之间还有很多其他的计算关系能影响到安全问题。
4)无法实现整体数据视图,也没有针对整体数据视图的测试策略
由于PEACH只能简单地描述结构,所以无法形成整体数据视图,也无法在数据整体的高度上进行更高级的测试,因而无法突破传统模糊测试只能针对字段来测试的局限。
5)依赖于原始样本覆盖的数据区域,无法突破
由于PEACH缺乏新记录或记录内部其他选择分支生成能力,所以也和传统模糊测试一样,PEACH依赖于原始样本覆盖的数据区域。
发明内容
针对上文提到的现有技术的种种缺点,本发明所要解决的技术问题是提供一种能够实现覆盖率更高、测试样本更精准、测试结果更可数据指标量化的软件安全测试方法。
为此,根据本发明的实施例,提供一种基于全局数据结构描述的软件安全测试方法。所述软件安全测试方法包括下列步骤:基于所测试软件的数据结构和规则的描述文档,按照数据结构统一描述规则来书写所测试软件的数据结构描述文件;使用数据结构描述文件来获取基础样本的全局数据视图;从测试点开始逐步解析基础样本,生成局部数据视图,根据全局数据视图和局部数据视图,依照测试策略由基础样本生成测试样本组;以及使用测试样本组对所测试软件进行安全测试。所述数据结构统一描述规则定义了五层数据结构,即容器、记录、结构、数组、字段。容器是一组拥有相同封装规则、实现特定功能的记录的集合。记录是遵循容器封装规则、实现一个特定功能的数据体。结构是一组有内在逻辑关联的、独立可复用的数据体。数组是一组拥有相同子结构或字段类型的数据组合。字段是数据处理具备最小完整逻辑含义的叶子节点单位。
附图说明
通过结合附图来阅读后面的具体实施方式,可以更好地理解本发明的特征和优点,其中在附图中用相同的附图标记表示相同或相似的元素。在附图中:
图1是示出根据本发明一个实施例的基于全局数据结构描述的软件安全测试方法的流程图;
图2是示出根据本发明一个实施例的在初始样本的基础上生成基础样本的方法的流程图;以及
图3是示出根据本发明另一实施例的在初始样本的基础上生成基础样本的方法的流程图。
具体实施方式
下面将结合附图详细说明本发明的各个实施例。请注意,在整个说明书和权利要求书中,软件既包括系统软件,也包括应用软件。而且,“应用”与“应用程序”表示相同的含义,都是作为软件的例子而给出的,并且能够互换地进行使用。
参考图1,其中示出根据本发明一个实施例的基于全局数据结构描述的软件安全测试方法100的流程图。
在步骤102中,基于所测试软件的数据结构和规则的描述文档,按照数据结构统一描述规则来书写所测试软件的数据结构描述文件。所测试软件的数据结构和规则的描述文档的来源可能是:
a)所测试软件的厂商对外公布的技术开发文档。例如微软公司为应对欧盟的反垄断诉讼,就公开了WINDOWS系统使用的重要网络协议、WINDOWS系统使用的OLE文件数据格式、OFFICE文档使用的数据结构格式等多种文档。
b)所测试软件的厂商为了配合测试而主动提供的在软件开发过程中产生的开发设计文档,包括但不限于详细设计文档,特别是包含系统数据流和数据结构格式与含义的文档。
c)研究社区或测试机构通过逆向分析所获取的针对所测试软件的数据结构分析文档。
上述文档大多是以自然语言或图形的方式进行描述的。在本实施例中,按照数据结构统一描述规则将所测试软件的上述文档书写成数据结构描述文件。
数据结构统一描述规则是由本发明提出的一种通用的能够描述各种复杂的数据结构以及数据之间的关系的规范。在所述数据结构统一描述规则中,定义了五层数据结构来描述复杂的数据结构关系。所述五层数据结构可以通过嵌套关系形成更复杂的树状逻辑体系。五层数据结构是最大的框架形式,一些简单的所测试软件的数据结构只需使用其中的二、三层就可以实现对其的描述。
所述五层数据结构包括五个层次,即容器、记录、结构、数组、字段。优选地,在五层数据结构中,一个容器可以被包含到上级容器的记录中,从而允许多层次容器嵌套。这就使得具有复杂物理结构的文件格式或者网络协议都可以被处理。下面对这五个层次进行详细说明。
(一)容器
容器是一组拥有相同封装规则、实现特定功能的记录的集合。一个容器包含一条或多条记录。
所测试软件通常使用的数据传递载体主要包括文件、网络报文、消息、调用接口、IO,其中文件和网络报文是最复杂的载体形式。网络报文通常会定义多层次的协议,每一层次的协议都可以由多种不同的下层协议进行负载。例如,一个SMB协议可以使用TCP协议负载,也可以使用UDP协议负载,甚至还可以使用IPX协议负载。
文件特别是WINDOWS体系下的文件又引入流的概念,一个物理文件可以由多个流组合而成,每个流都是具备完整独立逻辑功能的单元,流之下又可以嵌入多种OLE定义的数据结构。例如,一个XLS文件可以由WORKBOOT流、OBJCOMP流组成,WORKBOOK流又可以包含各种OLE规范的对象,比如WMF图片、VBA工程、外部控件等。
单独从一个测试样本来看,这些独立的逻辑单元形成了一种非常复杂的包含和封装规则的关系,但是从多个被测试软件的角度来看,它们具备复用性。例如,WMF文件的数据结构描述既可以直接用于WMF文件,也可以用于WORD、EXCEL、POWERPOINT等多种应用程序的数据结构描述中。但是实际上,后一种情况下的应用程序在处理WMF文件时,是直接使用WMF相关的系统库来处理的,而并不是应用程序自身处理的。所以区分这部分逻辑单元的关系,既可以使测试的复用性提高,编写大量的已经形成标准的协议/文件的规范的数据结构描述文件,能极大地降低被测试软件的相关工作量,也能区分测试出的安全问题是属于被测试软件自身,还是来自于操作系统或者其他第三方组件。
下面给出容器划分的例子:
a)文件类:OFFICE PPT文件
物理文件是最底层的容器。根据微软公司COM流规范,物理文件容器包含多个子容器(流),其中PowerPoint Document流遵循微软公司的PPT文件规范对PowerPoint Document子容器的定义。如果PowerPoint Document容器里包含有微软公司ODRAW规范定义的ODRAW对象记录,则PowerPoint Document子容器又包含有ODRAW子容器。如果ODRAW子容器里又包含有微软公司WMF文件规范定义的WMF图片对象,则ODRAW子容器里又包含有WMF子容器。
b)网络报文类:WINDOWS SMB网络协议
如果SMB使用NETBIOS协议负载,NETBIOS协议使用TCP协议负载,则以太网络规范是最底层的容器,其上包含一个IP网络协议子容器,IP网络协议上面包含TCP网络协议子容器,TCP网络协议上面包含NETBIOS网络协议子容器,NETBIOS网络协议之上是SMB协议。SMB容器数据里如果包含了MSRPC协议定义的数据,则其上还可以包含MSRPC子容器。
(二)记录
记录是遵循容器封装规则、实现一个特定功能的数据体。容器定义的是一组符合规范的功能集合,记录则是遵循其封装规范的特定功能的实现。一条记录由结构、数组、字段、子容器中的一个或多个组成。例如,WMF容器定义了一个WMF图片可以由多种资源(点、线、框、圆、字符)组成,那么针对每种资源的具体描述结构定义(比如点、线)就是记录。
下面结合容器给出记录划分的例子:
a)文件类:OFFICE XLS文件
微软公司的XLS文件格式规范里定义了MsoDrawing记录。MsoDrawing记录允许包含一个ODRAW子容器。ODRAW子容器又定义了一个EmfContent记录,允许描述一个EMF图片。
按照XLS容器的定义,其封装规则是:
偏移0    记录标记        2字节
偏移2    记录内容长度    2字节
偏移4    记录内容。
然而,如果记录大于0x2020字节,则必须把记录分解为主记录或多个continue记录组装的形式。
按照ODRAW容器的定义,其封装规则是:
偏移0    版本号      4比特
偏移0    实例号      12比特
偏移2    记录标记    2字节
偏移4    记录长度    4字节。
如果基础样本里EmfContent记录的长度只有100字节,通过测试策略进行扩展后,EmfContent记录里包含的数据长度达0x6970字节,则其先按ODRAW容器封装,修改记录长度字段,封装成为0x6978字节长度,再按XLS规范封装,由于超过了0x2020字节长度,所以必须封装成如下形式:
主记录
记录号:MsoDrawing
记录长度:0x2020
记录内容:ODRAW子容器内容的前0x2020字节
第一个continue记录
记录号:continue
记录长度:0x2020
记录内容:ODRAW子容器内容的第0x2021-0x4040字节
第二个continue记录
记录号:continue
记录长度:0x2020
记录内容:ODRAW子容器内容的第0x4041-0x6060字节
第三个continue记录
记录号:continue
记录长度:0x918
记录内容:ODRAW子容器内容的第0x6061-0x6978字节
b)网络报文类:通过SMB协议读取一个文件
SMB协议读取一个文件。客户端通过SMB协议发送请求功能号为0x2e的报文记录给服务器端,服务器端返回应答功能号为0x2e的报文记录给客户端,其中包含有读取文件的返回值和文件大小、内容。但是按照NETBIOS的协议规则,每个NETBIOS的记录大小不超过0x5b4。如果读取的文件大小超过0x5b4大小,则服务器端返回应答功能号为0x2e的SMB报文记录需要封装成多个NETBIOS报文进行返回。每个NETBIOS报文又要按照下层的TCP协议、IP协议、以太协议再进行封装。
(三)结构
结构是一组有内在逻辑关联的、独立可复用的数据体。一个结构由数组、字段、子容器、子结构中的一个或多个组成。而且,结构是可以复用的内容,即在多条不同的记录中可以使用同一个结构。例如,微软公司OFFICE的EXCEL的XLS的WORKBOOK容器中的多条记录都包含一个Ref8结构。该Ref8结构由4个2字节的字段组成,分别描述XLS里面开始行、结束行、开始列、结束列的信息,用于定位记录表达的数据在XLS表格里的区域范围。
(四)数组
数组是一组拥有相同子结构或字段类型的数据组合。数据具有两种形式:子结构数组和字段数组。子结构数组由多个固定长度或可变长度的子结构组成,比如多个UNICODE结构表达形式的结构。字段数组由多个固定类型的字段组成。
举例来说,在微软公司的DOC文件格式规范中,STSH记录由一个lpstshi结构和一个rglpstd数组组成。rglpstd数组由可变数目的LPStd结构组成。每个LPStd结构用于描述DOC文档里的段落或区域、分割符的信息。
(五)字段
字段是数据处理具备最小完整逻辑含义的叶子节点单位,用于表达最具体含义的一个数据。字段的类型包括比特、单字节、有符号或无符号双字节、四字节整数、八字节整数、浮点数、单字节字符串、双字节字符串、二进制数据等。
举例来说,GIF文件格式规范里定义了一个ColorR结构,用于描述图片使用的颜色信息。ColorR结构由以下3个字段组成:
RED字段      长度:1字节    用途:标记图片颜色中红色颜色值
GREEN字段    长度:1字节    用途:标记图片颜色中绿色颜色值
BLUE字段     长度:1字节    用途:标记图片颜色中蓝色颜色值。
在上述通用的描述规范中,还必须考虑对数据之间的关系的描述。通常,数据之间的关系是非常复杂和多样的,甚至难以用自然语言表达清楚,并且还涉及到跨域问题和命名问题。这导致了两个极端。一个极端是认为通用描述方法不可行,最后放弃采用脚本技术来实现,例如微软公司的内部项目组。另一个极端只使用最简单的长度关系描述机制,例如PEACH。
本发明的发明人认为,通过数据结构描述语言来实现100%的关系描述确实是不可能的。但是,一个安全测试工具只需要关注与安全测试有关联的关系。根据这一思想,能够大大降低对各种关系描述的需求。
根据安全测试的需要,本发明的数据结构统一描述规则实现了以下关系描述:
1)字段取值范围和固定值描述
固定值和取值范围可以帮助测试程序更好地决定测试样本的边界等价类。
本发明通过利用表达式来支持固定值描述、单值描述、取值区间描述,从而实现对上述关系的描述。
2)数据内部指针(偏移量)描述
很多数据结构中包含着对数据内部指针(偏移量)的描述。如果一个数据结构因为测试需求增加或减短了长度,则指针(偏移量)的值描述应该产生对应的变化,否则会产生失效。同时指针(偏移量)与实际不一致也是导致很多安全问题的因素。
本发明通过支持全局指针(偏移量)的定义,并针对全局指针(偏移量)进行全局记录,然后根据测试中产生的变化,实际更新其值,从而保证测试的完整性。
3)上级数据结构完整性关系描述
安全测试程序在修改了某级数据结构以后,如果对应的上级数据结构对应的描述字段未改变则可能导致测试失效,比如上级字段里描述某级数据结构的长度、偏移、结构(数组)个数、记录类型等等。
本发明通过对上级的相关字段进行关联描述,从而实现上级数据结构中的关联字段得以更新以保证测试的完整性。
4)跨记录和跨容器域字段引用和状态关联关系
在很多程序中,需要使用跨域的引用来决定数据结构选择的分支或状态。为了保证性能的可行性,大多数情况下,全局数据视图主要通过保存当前记录视图和全局变量来实现的。不包含所有的记录数据视图(这对大数据文件不可能完成),就难以实现跨记录域字段引用和状态关联关系。一种方法是把跨记录域字段转化为全局变量,这样在读引用的时候不会产生问题,但是在测试中需要同期更新该字段时则引起问题。
本发明引入了全局字段的概念,允许一个记录里的字段标记为全局字段,即使在该记录处理完毕后也不销毁,保证在后面的另外的记录域字段引用和更新。
5)字段长度关系描述
这是最常见的,也是PEACH所能覆盖到的,但是PEACH只能使用简单等价描述,而实际中,字段长度关系是可能有复杂运算表达方式的,比如在UNICODE STRING中,字段1的值应该是字段2的字节个数/2,在数组或表格字段中,字段2的字节个数应该是字段1的值*字段3的值,字段2的字节改变必须符合字段1和字段3的规则。
本发明通过引入表达式来支持以上所有更加复杂的关系描述。具体而言,对字段长度关系的描述,有明确计算约束的是通过表达式来实现的,无明确计算约束而依赖解析条件满足的,是通过运行时的局部变量计算符合满足条件表达式来实现的。
6)数组个数关系描述
一个数组可能包含多个结构或者字段,其包含的个数往往使用另一字段表示,该字段的值需要和实际数组存在关联关系。但其值并不是准确的可依据数组长度来计算。比如一个字符串数组,有3个字符串,1个长12字节,1个长3字节,1个长6字节,但是数组个数是3。这种关系难以用表达式来描述。
本发明引入ADDCOUNT、COUNT内部变量,按照实际数组结构规则解析数组个数以及增加的个数,以增加对数组个数关系的描述和处理。以上例子中,在按字符串规则中,处理分析了字符串后COUNT=3,如果测试中需要增加一个数组,则COUNT=4,ADDCOUNT=1。
7)字段与字段的同一计算关系描述
很多安全漏洞是由数据结构中存在同一计算关系的两个或更多个字段导致的。在实现中一个计算或比较条件依赖于字段1,而其他的计算或比较条件字段2。如果字段1和字段2不一致,则导致其计算结果矛盾,并且最后导致安全问题。例如,按字段1来分配数据内存,按字段2来操作拷贝,则最后导致内存溢出漏洞。
本发明通过允许标记同一关系来有针对性地对多缺陷进行安全测试。
8)字段与字段的逻辑依赖关系描述
此类类似于字段与字段同一计算关系描述,其差别在于,不是直接的计算关系导致,而是逻辑不一致导致。例如,某字段描述中有2比特的FLAG,1标记要使用全局组,2标记是否使用局部组,那么就可能存在矛盾冲突的地方,程序按照FLAG标记又按全局组处理又按局部组处理,最后导致逻辑冲突或者竞争条件等一些未知的安全问题。
本发明自动分析同一记录中具有一定逻辑依赖关系的字段,例如比特(FLAG)字段、整数值字段、导致数据分支选择的字段等,对它们进行重点的逻辑关系不一致测试。
9)记录关系描述
在记录中可能需要有一定的顺序关系或包含关系,比如A、B、C记录需要按次序出现,或者AB记录里中间必须是某一类的记录,如果出现问题会导致程序不处理(测试样本无效),或者导致逻辑问题(发现安全问题)
本发明通过全局变量来实现对记录关系(顺序和/或包含关系)的描述,从而实现更高层的记录级别的安全测试。
继续参考图1,在步骤104中,使用数据结构描述文件来获取基础样本的全局数据视图。所述基础样本可以是测试者操作所测试软件的界面功能所构造的初始样本,也可以是在初始样本的基础上,根据后面的图2和图3的流程图生成的包含初始样本中所不包含的记录选择分支和记录的新样本。
现有技术中的黑盒模糊测试、局部数据结构测试、二进制数据流污染测试由于无法理解样本的数据结构和全局数据关系,所以测试效果都依赖于样本。样本未覆盖到的数据结构无法进行测试。由于所测试软件往往非常复杂,所以通过普通的操作是很难构造出包含一些功能不被经常使用的数据结构的样本来的。基于源代码的测试技术虽然不依赖于样本,但是只能覆盖有限的路径分析,所以找到的安全漏洞都只能说是疑似的。要确认安全漏洞还是需要构造样本。但是由于对全局数据结构无法理解,反向构造样本进行确认也是源代码测试中的一个技术难题。对于本发明的基于全局数据结构描述的软件安全测试,由于全部数据之间的关系是已知的,所以在理论上可以自我构造出各种样本。但是这种做法具有一定复杂性,因为需要从二进制的物理层就开始描述其容器的逻辑顺序关系。因此在本实施例中,测试者操作所测试软件的界面功能构造初始样本。可选择地,测试者还可以在这个初始样本的基础上,利用后面的图2和/或图3的流程图再生成包含一些功能不被经常使用的数据结构的新样本。这样做的好处是:由于生成的初始样本已经包含被测试容器下层封装容器逻辑顺序,所以可以缩减处理的范围和复杂性,因为只用考虑被测试容器级和之上的容器的记录逻辑顺序关系以及全局数据关系。
在本发明的该实施例中,数据之间的关系被称为数据视图。全局数据视图是指非包含关系的不同容器之间、以及一个容器内的不同记录之间的数据关系。局部数据视图是指包含关系的不同容器之间、或者在同一记录之内的数据关系。
下面举例说明局部数据视图和全局数据视图。
容器A
    记录AR1
    记录AR2
        字段AR2F1
        容器B1
            记录B1R1
            记录B1R2
                结构B1R2S1
                    字段B1R2S1F1
                字段B1R2F1
                字段B1R2F2
            记录B1R3
                结构B1R3S1
                    字段B1R3S1F1
                字段B1R3F1
                容器C1
                    记录C1R1
    记录AR3
        容器B2
            记录B2R1
                字段B2R1F1
上述中的字段AR2F1标记容器B1内容的长度大小,字段B2R1F1是容器B1内容的CRC校验信息。字段B1R2F2是一个可变长度的字符串。字段B1R2F1是字段B1R2F2的长度
由于字段B2R1F1是在与容器B1并列的容器B2中,所以字段B2R1F1和容器B1之间的关系是一个全局数据视图。字段AR2F1与容器B1处于同一个记录AR2中,字段B1R2F1与字段B1R2F2处于同一个记录B1R2中,所以这些是局部数据视图。
注意,在步骤104中仅获得全局数据视图而没有获得局部数据视图是基于以下考虑。首先,全局数据视图随全局数据的修改而改变,而局部数据视图只随局部数据的修改而改变。全局数据视图的数据量相对要小,而所有的局部数据视图则非常庞大。考虑到性能以及局部数据视图只随局部数据的修改而改变,所以如果在处理时只保存和处理相关的局部数据视图,则能化复杂为简单,因此就需要首先获取全局数据视图。其次是为了应对数据压缩、加密的处理。在每段压缩或加密的数据被解压或解密后,由于其关系的变化都会影响整个视图关系而需要重新计算,所以现在就把局部数据视图包含进行,工作量过大。最后,局部数据视图由于只影响局部数据关系,所以其实是可以随处理记录区域变化而随时丢弃的信息,只在运行周期生效。因此,无论是从性能考虑还是从分析的灵活性考虑,此阶段只获取全局数据视图都是优选的。
优选地,本实施例支持对常见压缩算法(例如ZIP算法、哈夫曼算法、重复替代压缩算法等)的描述和解压处理。优选地,本实施例支持对常见加密数据的方法(例如XOR加密方法、RC4加密方法等)的描述和解密处理。优选地,本发明还支持对CRC校验的描述。
在步骤104中,使用在步骤102中生成的所测试软件的数据结构描述文件来匹配分析基础样本,找出其中具有全局数据关系的字段和关联关系,将其地址、关系类型、影响范围记录到全局关系视图文件中,以供在后续步骤中使用。
举例来说,微软公司的DOC文档规范定义了WORD DOCUMENT流容器和TABLE流容器。WORD DOCUMENT容器包含一个FIB记录和数据。FIB记录定义了所有TABLE流记录使用的偏移指针。这些都是跨容器的全局数据关系。TABLE里记录的长度发生改变,对应的WORDDOCUMENT容器里的FIB记录里相关的指针值也需要发生相应的变动以满足其一致性。同时,TABLE流里包含的一些记录又有指向WORDDOCUMENT流容器后续内容的指针。它们也是全局数据关系。
为了获取全局数据视图,首先要解析WORD DOCUMENT流的FIB记录,获得对应TABLE流容器相关记录的信息。根据这些信息,可以解析TABLE流容器对应的记录,从而获得TABLE流容器记录内包含WORD DOCUMENT流剩余数据内容的信息,反复多次才能获取全部的全局数据视图,并且进行了保存。当再次处理这个样本数据时,就可以直接读取这些全局数据视图来解析样本数据,而无需再反复这一过程,提高了效率。
继续参考图1,在步骤106中,从测试点开始逐步解析基础样本的需要测试的容器、记录、结构、数组、字段的关系,针对这些关系生成局部数据视图,根据全局数据视图和局部数据视图,依照测试策略由基础样本生成测试样本组。
测试点是指一个样本按照数据结构解析依次被测试的地址。假如一个样本由A、B、C三个记录组成。当对记录A进行测试时,记录A所处的样本的物理地址就是测试点。在测试完记录A之后再测试记录B时,则记录B所处的样本的物理地址就是测试点。这样的构造允许同时针对记录A、记录B、记录C生成不同的样本,以便进行分布式测试和调度,提高效率,同时也允许实施断点继续测试,从而在一个任务中断后,再次启动中断的测试点开始测试,以提供更方便的测试。
针对前面在说明局部数据视图和全局数据视图时给出的例子,如果从记录AR2的容器B1的记录B1R2开始解析,则生成针对记录AR2的局部数据视图以及针对记录B1R2的局部数据视图。如果字段B 1R2F2发生长度变化,则根据记录B1R2更新字段B1R2F1,同时递归处理到上层容器中,根据记录AR2的局部数据视图更新字段AR2F1。最后根据全局数据视图计算和更新字段B2R1F1。
当解析完记录B1R2的所有内容并且继续解析记录B1R3时,丢弃记录B1R2的局部数据视图,生成针对记录B1R3的局部数据视图。当处理完记录AR2并且继续解析记录AR3时,丢弃记录AR2的局部数据视图,生成针对记录AR3的局部数据视图。以此类推。以这种方式,既能保证所有的数据更新都符合数据之间的关系描述,又不会因为维持一个庞大的数据视图而影响性能和增加复杂性。
在步骤106的解析过程中每当生成局部数据视图时,就根据全局数据视图和当前局部数据视图,依照测试策略由基础样本生成测试样本组。
所述测试策略是根据所测试软件的实际运行环境而由测试者自行设定的一些基础测试策略。例如,记录重合度达到阈值后是否继续测试这一类记录,测试是否关注不是由所测试软件自身定义的子容器(比如WMF图片、WAV声音,因为大部分是调用系统的库来处理的),是直接测试模式还是样本批量生成模式等等。根据这些策略,可以更灵活地实施测试。
生成测试样本组的过程包括以下操作:
a)修改基础样本
根据基础样本,按照一定策略生成新的更容易触发安全问题的测试样本组,主要修改依据包括:
i)字段级
1)字段的数据类型
根据字段的数据类型容易引发的常见安全问题进行有目的的字段值修改。例如针对长整型数据,修改其值为0xffffffff可以辅助发现整型溢出漏洞;针对字符串类数据,修改其长度可以辅助发现缓冲区溢出漏洞。本发明的数据结构统一描述规则支持对字段级别的数据描述的数据类型,主要包括但不限于:无符号/有符号长/短整数(4字节和2字节)、单字节字符、比特、64位整数、浮点数、日期、ASC字符串、双字节字符串、二进制串、XML标签字符串(包括单双字节)、XML数据块(包括BASE64和HEX16编码方式),这些字段形式可以组合成更复杂的数据结构。
2)字段的取值范围
根据字段的取值范围,结合测试理论中的有效等价值,可以更有效地生成测试样本组以发现边界值处理相关的安全问题。本发明的数据结构统一描述规则支持对字段的取值范围约束进行描述,许可用户通过枚举、规定范围的方式,描述字段许可的取值范围。
3)字段的语义
很多安全问题是和语义相关的。比如一个路径字符串,如果是规定返回一个固定路径的文件内容,则必须检测通过../..是否能绕过规定的路径读用户无权读写的文件。又如微软公司的ONENOTE应用程序许可用户把一个自定义的字符串放在系统警报框的文字段开头里,如果没有过滤换行回车,攻击者就可以让系统后面的信息无法展示给正常用户看到,这样用户就会把攻击者的信息当成是系统提示的可信信息,从而欺骗用户实施操作。
本发明的数据结构统一描述规则支持对数据语义的描述,许可用户描述其常见的表达形式和含义。这类描述特别适合描述字符串形式的数据,包括XML标签许可的属性、属性的取值形式等信息。通过语义和传递的取值模糊表达式,可以取更多符合语义测试的样本。
4)字段之间的非确定性关联关系
很多数据结构规定了相互有关联或冲突但非强制性规则的字段。例如,字段A代表是否删除对象,字段B代表是否移动对象。如果字段A、B都被设置为“是”逻辑,则可能出现安全问题。
根据本发明的实施例,在一个记录内,把具备同样类型的字段作为一个非确定关联组,把一个显式有标记的字段(数据结构统一描述规则支持)作为一个非确定关联组,把所有有意义的比特是否逻辑作为一个非确定关联组,然后针对这些关系组,同时修改这些属于同一组的字段,但是修改数据方式不一致(例如一个数据+1,一个数据-1,以此类推),这样可以测试关联性错误和多缺陷错误。
5)字段之间的确定性关联关系
用于在字段值修改之后辅助处理其关联的字段以保持其关系一致性。避免出现不一致而导致测试无效。例如,如果对数据存在有CRC校验,则在修改了数据以后必须重新计算CRC并填写到CRC字段里。又如,如果修改了字符串的长度,则在前面有一个整型字段标记其长度的情况下,应该把新长度更新到这个字段里。同时还可以故意生成关系不一致的样本发现关系一致性处理的安全问题。
ii)数组级
1)数组的类型:用于生成新的数组成员。
2)数组的区域:用于删除数组(0数组)、整体替换数组测试。
3)数组的个数和单个数组位置:用于数组增长(大量重复相同数组)测试、数组位置颠倒测试(如果数组内部有顺序逻辑关系,则可能引发一些逻辑安全问题)。
iii)记录级
记录的区域:用于删除记录测试、修改上下记录异常测试、重复记录测试、记录整体替换测试。
b)测试样本组的局部数据视图更新
根据局部数据视图和数据修改情况来进行局部数据视图更新。例如,长度修改需要更新与长度相关的字段,内容修改需要更新与CRC相关的字段等。
c)测试样本组的容器封装
在当前容器的局部数据视图更新后,按照当前容器的封装规则进行封装。如果上层还有容器,则循环b)、c)的操作直至处理到根容器。
d)测试样本组的全局数据视图更新
最后,根据全局数据视图和数据修改情况来进行全局数据视图更新。例如,长度修改需要更新与长度相关的全局字段以及与指针相关的全局字段,内容修改需要更新与CRC相关的字段等。
通过步骤106可以生成多个测试样本组。例如,针对字段的数据类型、字段的取值范围、字段的语义、以及字段之间的确定性关联关系进行修改,可以生成关联字段正常组1。针对字段之间的非确定性关联关系进行修改,可以生成关联字段异常组2和多缺陷不一致组3。针对数组级进行修改,可以生成数组测试组4。针对记录级进行修改,可以生成记录测试组5。另外,针对关联字段正常组1,可以有意生成其中对应的关系(特别是最近的局部相关关系字段)不再保持一致的测试样本组,这属于关联字段异常组2。
继续参考图1,在步骤108中,使用在步骤106中生成的测试样本组对所测试软件进行安全测试。具体而言,这一步骤包括:启动所测试软件;将测试样本组传递给所测试软件;监控所测试软件是否产生异常;如果产生异常,则记录异常并保存触发异常的样本。
优选地,在本实施例中,对测试样本组所使用的容器的记录种类和内部选择分支进行统计分析。当某种同容器同记录和同内部选择分支测试记录达到一定阈值时,可以降低其测试的样本生成方式,从而有效降低重复的测试样本。同时统计未被覆盖到的记录或记录选择分支,以提供给根据图2和/或图3的流程图来生成新选择分支和/或新记录。这些统计数据同时是提供可覆盖性和估量安全测试的关键指标。
本发明的上述基于全局数据结构描述的软件安全测试方法是一种核心技术跨平台的安全测试技术。目前主流的几种技术都难以做到跨平台。例如,源代码扫描技术与语言种类和编译器直接相关,针对不同的语言和编译平台,其核心技术都得重新开发。又如,基于二进制数据流分析的技术与CPU体系结构和操作系统直接相关,针对不同的CPU体系结构和操作系统,其核心技术也得重新开发。而对于本发明的基于全局数据结构描述的安全测试技术,其识别分析数据并根据规则生成高覆盖的测试样本是跨平台的,唯一需要做的是针对不同平台上实施自动化测试的过程编程。而这一类过程编程,其技术难度是非常低的,属于基础编程类的。
下面给出针对不同平台的安全测试示例:
a)本地文件应用(例如WORD等)测试
生成的测试样本组最后直接以对应的文件保存,测试引擎依次按测试样本启动被测试应用,并把要处理的测试样本信息通过参数传递给被测试应用,通过监控被测试应用进程的异常(如崩溃、跳出异常框、异常终止,针对WINDOWS和LINUX等系统本发明还提供了以HOOK异常处理机制的方式获取异常)来发现安全问题。
b)本地消息、内核调用、IPC(进程间通信)等应用的测试
生成测试样本组,测试引擎依据测试配置获得的信息,通过相应的机制传递到被测试系统上,例如WINDOWS的内核调用测试,通过配置文件测试引擎打开对应的设备文件,然后通过对应功能号的IO调用将测试数据传递给被测试的驱动程序。通过监控被测试应用进程的异常(同a))来发现安全问题。但是针对驱动的测试,本发明还额外提供了驱动级的一些检测和记录方法,以保证驱动漏洞导致整个测试系统崩溃而来不及记录的情况。
c)本地网络客户端等应用的测试(例如测试游戏客户端)
测试引擎根据测试配置获得的信息,建立一个虚拟服务器,然后通过启动被测试系统,并根据对应的配置行为描述方法,模拟人为操作被测试系统的,使其完成与虚拟服务器链接并启动需要测试的功能。虚拟服务器接收到客户端请求后,按照测试样本的报文区分方式依次发回给客户端,同时测试引擎,通过监控被测试应用进程的异常(同a))来发现安全问题。
d)远程可编程接口开放的本地应用测试(例如测试智能手机上的图片浏览应用)
需要在被测试平台上开发一个简单的代理(虽然这部分不是跨平台的,但是这部分相对于把整个复杂的测试工作都依赖与平台工作量和难度要小很多,如源代码测试对所有的不同语言和编译环境都得研究。针对C和GCC的都得重新开发并了解整个编译器机制,二进制得对所有不同平台和操作系统低层机制和CPU体系结构都得研究),而本发明的基于全局数据结构描述的安全测试只是在被测试平台上开发简单的代理实现和测试控制端的通信以及启动被测试应用和发现异常。测试引擎负责将要测试的样本发送到共享空间(文件性测试)或者发送给远程代理,远程代理负责启动被测试应用使用测试样本数据,然后检测被测试应用是否产生异常,并将测试结果发送会测试引擎,测试引擎记录测试结果和保存导致异常的测试样本。
e)远程可编程接口开放的网络客户端应用测试(例如测试智能手机的浏览器应用)
测试引擎首先在本地建立一个虚拟服务器,并把测试样本组发送给虚拟服务器,然后通过远程代理启动远程被测试应用连接虚拟服务器并发送对应功能的请求,虚拟服务器将测试样本组发送给被测试应用,远程代理检测被测试应用是否产生异常,并将测试结果发送会测试引擎,测试引擎记录测试结果和保存导致异常的测试样本。
f)远程可编程接口开放服务器端测试(例如测试WINDOWS 2003SERVER的RPC服务)
在远程服务器上开发一个代理,负责启动服务,检测服务测试后是否异常以及重启服务。测试引擎首先通过远程代理确保服务被启动,然后按照定义的通信规则连接远程服务器对应的端口,然后模拟客户端将测试样本数据发送给远程服务器,远程代理检测被测试服务是否产生异常并负责异常恢复,并将测试结果发送会测试引擎,测试引擎记录测试结果和保存导致异常的测试样本。
g)远程可编程接口不开放的本地应用(主要是文件类型应用,例如IPTV终端设备的本地文件播放功能)测试
在本地测试机器上开发对应的测试启动(根据被测试硬件操作接口,如IPTV的红外操作接口)和异常检测(检测远程设备的通连性和操作接口可操作性),测试引擎将测试样本组发送给远程设备可共享的空间,然后利用测试启动操作模块操作远程被测试应用打开对应的文件,然后利用远程设备是否连通和相关功能的操作接口是否可操作来判断是否产生异常,返回给测试引擎记录测试结果和保存导致异常的测试样本。
h)远程可编程接口不开放的网络客户端应用(例如IPTV终端设备的网络电视点播功能)测试
测试引擎先在本地测试机器上建立一个虚拟服务器,并将测试样本数据发送给虚拟服务器。在本地测试机器上开发对应的测试启动(根据被测试硬件操作接口,如IPTV的红外操作接口)和异常检测(检测远程设备的通连性和操作接口可操作性),然后利用测试启动操作模块操作远程被测试应用并且连接虚拟服务器发送对应功能请求,虚拟服务器发送相关的测试样本数据给远程设备应用,然后利用远程设备是否连通和相关功能的操作接口是否可操作来判断是否产生异常,返回给测试引擎记录测试结果和保存导致异常的测试样本。
i)远程可编程接口不开放的网络服务器应用测试(例如测试网络防火墙、入侵检测设备等)
在本地测试机器上开发对应的测试重新启动(如果操作接口不支持,则无需开发,检测到异常后报警等待人工重启设备)和异常检测(检测远程设备的通连性和操作接口可操作性,如果操作接口不支持,则无需开发,只依靠连通性来做检测),然后测试引擎对相应的远程服务发起请求并将测试样本数据发送给远程服务器,通过异常检测发现远程服务器是否异常并记录和保存异常样本,如果支持操作接口则重启服务,如果不支持操作接口则报警进行人工干预重启设备。
在图1所示的方法的步骤104中,可以简单地选取初始样本作为基础样本。然而,为了提高安全测试的覆盖性,还可以根据数据结构描述文件所描述的数据关系,针对初始样本没有覆盖到的地方,构造全新记录或者在原有记录中构造新选择分支,从而产生新样本作为基础样本。下面结合图2和图3来详细说明这种基础样本的生成过程。
图2是示出根据本发明一个实施例的在初始样本的基础上生成初始样本中所不包含的记录选择分支的基础样本的方法的流程图200。
在同一记录中或相关结构中往往存在这样的情况,依据某一字段或者某一条件的不同,整个记录或结构的数据内容或者含义不同。例如,XLS 2007二进制格式定义的XLSB容器中的BrtBeginPCDSRange记录中存在一个fname字段,占一个比特。如果该字段为0,则代表其后是一个UncheckedRfx结构。如果该字段为1,则代表其后是一个XLNameWideString结构。如果初始样本只包含该字段为0的情况,则无法构造出该字段为1时其后的XLNameWideString数据进行测试以测试该记录对XLNameWideString结构处理的情况。然而,利用本发明的数据视图就可以分析出此种情况,并根据数据结构描述文件生成符合其数据规范的新样本,对这样选择分支的数据进行测试,从而满足安全测试的覆盖性。
参考图2,在步骤202中,获取初始样本的全局数据视图。步骤202与图1中的步骤104类似,也就是,使用所测试软件的数据结构描述文件来匹配分析初始样本,找出其中具有全局数据关系的字段和关联关系,将其地址、关系类型、影响范围记录到全局关系视图文件中,以供在后续步骤中使用。
在步骤204中,生成初始样本的已有记录未曾覆盖的新选择分支。具体而言,例如,首先将数据结构描述文件中所描述的所有记录的所有选择分支路径形成一个路径图,然后用初始样本中每条记录的每个选择分支路径对该路径图的对应路径进行染色。当初始样本中所有记录的所有选择分支路径都被处理完毕时,则未被染色的路径的集合就是需要生成的新选择分支的集合。接着针对每一个需要生成的新选择分支,根据数据结构描述文件中对应记录的描述,依据选择分支匹配条件对比,寻找符合其选择分支路径的相关结构、数组、字段,并按其信息和取值信息,生成新选择分支数据。
在步骤206中,根据数据结构描述文件,找到初始样本中对应的已有记录并解析到对应记录以生成各层级的局部数据视图,并且用包含新选择分支的记录来替换对应的已有记录。
在步骤208中,进行局部数据视图和全局数据视图更新,从而生成新样本以作为图1的步骤104中的基础样本。由于该新样本包含了初始样本的记录中未包含的新选择分支,所以使用该新样本作为基础样本进行测试就可以覆盖到使用初始样本作为基础样本进行测试所不曾覆盖到的测试域。
优选地,如果已经使用初始样本作为基础样本完成了对所测试软件的安全测试,则针对上述新样本,可以只测试包含新选择分支的记录以及整体记录顺序,而对其他记录内部不再进行测试以减少重复测试,从而提高测试效率。
图3是示出根据本发明另一实施例的在初始样本的基础上生成初始样本中所不包含的记录的基础样本的方法的流程图300。
通常,靠人工操作所构造的初始样本很难包含一些特殊功能记录,而这些特殊功能记录往往是依赖于样本的软件安全测试的盲点。图3的流程图所示出的方法即可解决这一问题。
参考图3,在步骤302中,获取初始样本的全局数据视图。步骤302与图1中的步骤104类似,也就是,使用所测试软件的数据结构描述文件来匹配分析初始样本,找出其中具有全局数据关系的字段和关联关系,将其地址、关系类型、影响范围记录到全局关系视图文件中,以供在后续步骤中使用。
在步骤304中生成初始样本未包含的新记录。数据结构描述文件是根据接口文档生成的描述文件,其内部已经包含了对各种可能的记录的汇总情况。统计初始样本中覆盖到的记录,对比数据结构描述文件中的所有记录,寻找未包含在初始样本中的记录。然后针对每一条需要生成的新记录,根据数据结构描述文件中对应记录的描述,依据默认选择分支匹配条件对比,寻找符合其选择分支的相关结构、数组、字段,并按其信息和取值信息,生成新记录数据。
如果新记录包含多个选择分支,则可以只按默认选择分支生成记录。然后在按照图3的流程图生成新样本之后,再把该新样本作为图2的流程图所使用的初始样本进行输入,以构造其他选择分支的情况。
生成新记录还必须考虑关联记录。根据数据结构描述文件中所描述的该新记录的外部关联关系和顺序关系,补充生成关联记录。例如,XLSB格式要求,_BrtBookView记录必须在BrtBeginBookViews记录和BrtEndBookViews记录之间。因此,要生成全新的_BrtBookView记录进行测试,就必须在其前后附加上BrtBeginBookViews记录和BrtEndBookViews记录。根据本发明的数据结构统一描述规则使用定义的标签支持对这样的关联记录的描述。在解析样本时如果遇到这种情况,会自动分析和处理关联记录,按照同样的规则生成关联记录的数据,并最后一起组合成一个符号规定定义的记录组数据。
在步骤306中,根据数据结构描述文件,找到初始样本中适合插入新记录的位置(例如XLS的WORKBOOK流中的InterfaceHdr记录必须紧接在BOF记录之后)并针对插入位置生成各层级的局部数据视图,并且在插入位置将新记录插入。
在步骤308中,进行局部数据视图和全局数据视图更新,从而生成新样本以作为图1的步骤104中的基础样本。由于该新样本包含了初始样本的记录中未包含的新记录,所以使用该新样本作为基础样本进行测试可以覆盖到使用初始样本作为基础样本进行测试所不曾覆盖到的测试域。
优选地,如果已经使用初始样本作为基础样本完成了对所测试软件的安全测试,则针对上述新样本,可以只测试新记录与关联记录以及整体记录顺序,而对其他记录内部不再进行测试以减少重复测试,从而提高测试效率。
优选地,如果把该新样本作为图2的流程图所使用的初始样本进行输入,则可以只针对新记录进行图2的流程图的处理,从而生成新记录的其他选择分支,这样在测试时就能覆盖到更多的测试域。
下面再简单讨论一下本发明的要点。首先,本发明提出了一种通用的数据结构统一描述规则,从而使得各种复杂的文件格式或网络协议都得以被描述。本发明的数据结构统一描述规则采用了五层数据结构,即容器、记录、结构、数组、字段。当然,也可以采用两层、三层、四层、六层或更多层的数据结构,并且不同层采取不同的命名方式。然而,只要其他分层方法的实质与本发明的五层相同或类似,则其仍在本发明的范围之内。例如,把数组归和成字段,在字段里分类处理,表面上是缩减为四层,但实际上还是本发明的五层划分方法。
其次,针对数据之间的关系,本发明引入了取值范围、表达式、全局变量、局部变量、全局字段、全局指针(偏移量)描述字段、内建长度、数组个数字段等技术,完成通用的具备一定复杂度描述并以此来生成全局和局部数据视图,以便于测试样本生成决策以及保证样本生成符合解析规则以保证测试的有效性。
再者,在获取了全局数据视图之后,本发明脱离开以前只能在字段级做测试的束缚,现在可以在数组、结构、记录级别做更高层次的测试。这样能扩大更多的测试范围,发现以前传统工具无法发现和覆盖的逻辑实现层面的安全漏洞。本发明在数组和结构级别可以实现数组缺失、大重复数组、数组与个数字段不一致、结构内部选择分支不一致等多方面的测试。本发明在在记录级别可以实现记录缺失、大重复记录、记录顺序改变、关联记录生成、包含记录改变、关联记录描述字段不一致等多方面的测试。
又有,本发明具有可扩展的样本自生成能力。本发明支持完整的新增记录生成方式。根据数据结构描述文件,本发明可以生成一个全新的记录并插入到样本中,同时支持将其关联的记录(如必须要顺序出现的记录或者前后包含的记录)同期生成,以保证测试记录的完整性和正确性。同时,本发明自动根据已有记录和数据结构描述文件,生成完全覆盖数据结构描述文件的新选择分支的数据结构。因此,利用上述样本自生成能力,就可以扩展出符合应用处理和检测规则、几乎覆盖所有数据结构的样本,而无须依赖原始样本的覆盖区域。
还有,在本发明中,因为具备所有完整的数据结构和分支的知识,所以对于测试结果的覆盖率等数据指标,本发明可以实现相关的量化计算,例如总数据记录个数、数据记录分支个数、测试覆盖记录个数、测试覆盖记录分支个数等等。这对于软件公司把漏洞挖掘工具转化为专业的安全测试流程和管理非常重要。
以上参考附图示出并描述了本发明的实施例,但是本发明不限于此。显然,本领域的技术人员可以对本发明进行各种修改、变型和替换而不脱离本发明的精神范围。因此,只要本发明的这些修改、变型和替换属于本发明的权利要求书及其等同技术方案的范围之内,则本发明也意图包含这些修改、变型和替换。

Claims (16)

1.一种基于全局数据结构描述的软件安全测试方法(100),其特征在于包括以下步骤:
基于所测试软件的数据结构和规则的描述文档,按照数据结构统一描述规则来书写所测试软件的数据结构描述文件(102);
使用数据结构描述文件来获取基础样本的全局数据视图(104);
从测试点开始逐步解析基础样本,生成局部数据视图,根据全局数据视图和局部数据视图,依照测试策略由基础样本生成测试样本组(106);以及
使用测试样本组对所测试软件进行安全测试(108);
其中所述数据结构统一描述规则定义了五层数据结构,即容器、记录、结构、数组、字段,
容器是一组拥有相同封装规则、实现特定功能的记录的集合,
记录是遵循容器封装规则、实现一个特定功能的数据体,
结构是一组有内在逻辑关联的、独立可复用的数据体,
数组是一组拥有相同子结构或字段类型的数据组合,
字段是数据处理具备最小完整逻辑含义的叶子节点单位。
2.根据权利要求1所述的软件安全测试方法,其特征在于,所测试软件的数据结构和规则的描述文档来自于下述中的一个或多个:
所测试软件的厂商对外公布的技术开发文档,
所测试软件的厂商提供的开发设计文档,
通过逆向分析所获取的针对所测试软件的数据结构分析文档。
3.根据权利要求1所述的软件安全测试方法,其特征在于,所述五层数据结构允许多层次容器嵌套。
4.根据权利要求1所述的软件安全测试方法,其特征在于,所述数据结构统一描述规则包括对下列中的一项或多项的描述:
字段取值范围和固定值、数据内部指针、上级数据结构完整性关系、跨记录和跨容器域字段引用和状态关联关系、字段长度关系、数组个数关系、字段与字段的同一计算关系、字段与字段的逻辑依赖关系、记录关系。
5.根据权利要求4所述的软件安全测试方法,其特征在于,对字段取值范围和固定值的描述是通过表达式来实现的。
6.根据权利要求4所述的软件安全测试方法,其特征在于,对数据内部指针的描述是通过全局指针来实现的。
7.根据权利要求4所述的软件安全测试方法,其特征在于,对上级数据结构完整性关系的描述是通过上级相关字段的关联描述来实现的。
8.根据权利要求4所述的软件安全测试方法,其特征在于,对跨记录和跨容器域字段引用和状态关联关系的描述是通过全局字段来实现的。
9.根据权利要求4所述的软件安全测试方法,其特征在于,对记录关系的描述是通过全局变量来实现的。
10.根据权利要求1所述的软件安全测试方法,其特征在于,所述基础样本是通过下列步骤得到的:
操作所测试软件的界面功能来构造初始样本以作为基础样本。
11.根据权利要求1所述的软件安全测试方法,其特征在于,所述基础样本是通过下列步骤得到的:
操作所测试软件的界面功能来构造初始样本;
获取初始样本的全局数据视图(202);
生成初始样本的已有记录未曾覆盖的新选择分支(204);
根据数据结构描述文件,找到初始样本中对应的已有记录并解析到对应记录以生成各层级的局部数据视图,并且用包含新选择分支的记录来替换对应的已有记录(206);
进行局部数据视图和全局数据视图更新,从而生成新样本以作为基础样本(208)。
12.根据权利要求11所述的软件安全测试方法,其特征在于,如果已经使用初始样本作为基础样本完成了对所测试软件的安全测试,则针对所述新样本,只测试包含新选择分支的记录以及整体记录顺序。
13.根据权利要求1所述的软件安全测试方法,其特征在于,所述基础样本是通过下列步骤得到的:
操作所测试软件的界面功能来构造初始样本;
获取初始样本的全局数据视图(302);
生成初始样本未包含的新记录(304);
根据数据结构描述文件,找到初始样本中适合插入新记录的位置并针对插入位置生成各层级的局部数据视图,并且在插入位置将新记录插入(306);
进行局部数据视图和全局数据视图更新,从而生成新样本以作为基础样本(308)。
14.根据权利要求13所述的软件安全测试方法,其特征在于,如果已经使用初始样本作为基础样本完成了对所测试软件的安全测试,则针对所述新样本,只测试新记录与关联记录以及整体记录顺序。
15.根据权利要求13所述的软件安全测试方法,其特征在于,把权利要求13中所述的新样本作为权利要求11中所述的初始样本来执行权利要求11中所述的各步骤,从而使得权利要求11中所生成的新样本包含新选择分支的新记录,并且针对所生成的新样本,只测试包含新选择分支的新记录以及整体记录顺序。
16.根据权利要求1所述的软件安全测试方法,其特征在于,所述软件安全测试方法是跨平台的。
CN201010176764.8A 2010-05-13 2010-05-13 基于全局数据结构描述的软件安全测试方法 Active CN102243608B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201010176764.8A CN102243608B (zh) 2010-05-13 2010-05-13 基于全局数据结构描述的软件安全测试方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201010176764.8A CN102243608B (zh) 2010-05-13 2010-05-13 基于全局数据结构描述的软件安全测试方法

Publications (2)

Publication Number Publication Date
CN102243608A true CN102243608A (zh) 2011-11-16
CN102243608B CN102243608B (zh) 2014-01-29

Family

ID=44961675

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201010176764.8A Active CN102243608B (zh) 2010-05-13 2010-05-13 基于全局数据结构描述的软件安全测试方法

Country Status (1)

Country Link
CN (1) CN102243608B (zh)

Cited By (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103346928A (zh) * 2013-07-02 2013-10-09 北京邮电大学 一种支持Peach平台断点续测的方法
CN104063314A (zh) * 2014-05-20 2014-09-24 中国工商银行股份有限公司 一种测试数据自动生成装置及方法
CN104516737A (zh) * 2013-09-30 2015-04-15 国际商业机器公司 用于生成测试串的方法和系统
CN104517056A (zh) * 2014-12-09 2015-04-15 北京邮电大学 一种扩展Peach平台同时测试多个网络报文字段的方法
CN104573523A (zh) * 2013-10-24 2015-04-29 深圳市腾讯计算机系统有限公司 文件漏洞挖掘的实现方法和装置
CN104683327A (zh) * 2015-01-29 2015-06-03 中国科学院信息工程研究所 一种Android软件用户登录界面安全性检测方法
CN106294102A (zh) * 2015-05-20 2017-01-04 腾讯科技(深圳)有限公司 应用程序的测试方法、客户端、服务器及系统
CN106407102A (zh) * 2015-08-03 2017-02-15 腾讯科技(深圳)有限公司 应用程序的模糊测试方法、装置及系统
US9591510B2 (en) 2014-09-22 2017-03-07 Raytheon Company Systems and methods to create message traffic
CN109213671A (zh) * 2017-06-30 2019-01-15 中国航发商用航空发动机有限责任公司 软件测试方法及其平台
CN110336827A (zh) * 2019-07-15 2019-10-15 北京工业大学 一种基于异常字段定位的Modbus TCP协议模糊测试方法
CN110413403A (zh) * 2018-04-28 2019-11-05 武汉斗鱼网络科技有限公司 一种应用服务自主检控方法、存储介质、设备及系统
CN110806979A (zh) * 2019-10-31 2020-02-18 北京东软望海科技有限公司 接口返回值的校验方法、装置、设备及存储介质
CN113535565A (zh) * 2021-07-19 2021-10-22 工银科技有限公司 一种接口用例生成方法、装置、设备、介质和程序产品
CN114048131A (zh) * 2021-11-11 2022-02-15 北京升鑫网络科技有限公司 一种基于fuzzing测试需校验流量的方法、装置及设备
CN115979350A (zh) * 2023-03-20 2023-04-18 北京航天华腾科技有限公司 一种海洋监测设备数据采集系统
CN117331926A (zh) * 2023-12-01 2024-01-02 太平金融科技服务(上海)有限公司 一种数据稽核方法、装置、电子设备和存储介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040015865A1 (en) * 2001-03-19 2004-01-22 Kevin Cirone Component/web service data synthesis
WO2007031415A2 (en) * 2005-09-15 2007-03-22 International Business Machines Corporation Automation structure for software verification testing
CN101042673A (zh) * 2007-04-20 2007-09-26 北京航空航天大学 软件测试系统及测试方法
CN101221503A (zh) * 2008-02-01 2008-07-16 中国建设银行股份有限公司 软件测试方法及装置

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040015865A1 (en) * 2001-03-19 2004-01-22 Kevin Cirone Component/web service data synthesis
WO2007031415A2 (en) * 2005-09-15 2007-03-22 International Business Machines Corporation Automation structure for software verification testing
CN101042673A (zh) * 2007-04-20 2007-09-26 北京航空航天大学 软件测试系统及测试方法
CN101221503A (zh) * 2008-02-01 2008-07-16 中国建设银行股份有限公司 软件测试方法及装置

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
方兴: "分布式计算软件LSF的后期维护与测试", 《中国优秀硕士学位论文全文数据库》, 5 November 2007 (2007-11-05) *
金虎: "自动化软件测试技术研究", 《中国博士学位论文全文数据库》, 16 April 2008 (2008-04-16) *

Cited By (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103346928A (zh) * 2013-07-02 2013-10-09 北京邮电大学 一种支持Peach平台断点续测的方法
CN104516737A (zh) * 2013-09-30 2015-04-15 国际商业机器公司 用于生成测试串的方法和系统
CN104516737B (zh) * 2013-09-30 2018-02-02 格芯公司 用于生成测试串的方法和系统
CN104573523B (zh) * 2013-10-24 2018-06-12 深圳市腾讯计算机系统有限公司 文件漏洞挖掘的实现方法和装置
CN104573523A (zh) * 2013-10-24 2015-04-29 深圳市腾讯计算机系统有限公司 文件漏洞挖掘的实现方法和装置
CN104063314B (zh) * 2014-05-20 2016-10-05 中国工商银行股份有限公司 一种测试数据自动生成装置及方法
CN104063314A (zh) * 2014-05-20 2014-09-24 中国工商银行股份有限公司 一种测试数据自动生成装置及方法
US9591510B2 (en) 2014-09-22 2017-03-07 Raytheon Company Systems and methods to create message traffic
CN104517056A (zh) * 2014-12-09 2015-04-15 北京邮电大学 一种扩展Peach平台同时测试多个网络报文字段的方法
CN104683327B (zh) * 2015-01-29 2018-04-17 中国科学院信息工程研究所 一种Android软件用户登录界面安全性检测方法
CN104683327A (zh) * 2015-01-29 2015-06-03 中国科学院信息工程研究所 一种Android软件用户登录界面安全性检测方法
CN106294102A (zh) * 2015-05-20 2017-01-04 腾讯科技(深圳)有限公司 应用程序的测试方法、客户端、服务器及系统
CN106407102A (zh) * 2015-08-03 2017-02-15 腾讯科技(深圳)有限公司 应用程序的模糊测试方法、装置及系统
CN106407102B (zh) * 2015-08-03 2020-11-20 腾讯科技(深圳)有限公司 应用程序的模糊测试方法、装置及系统
CN109213671A (zh) * 2017-06-30 2019-01-15 中国航发商用航空发动机有限责任公司 软件测试方法及其平台
CN110413403A (zh) * 2018-04-28 2019-11-05 武汉斗鱼网络科技有限公司 一种应用服务自主检控方法、存储介质、设备及系统
CN110336827B (zh) * 2019-07-15 2021-06-18 北京工业大学 一种基于异常字段定位的Modbus TCP协议模糊测试方法
CN110336827A (zh) * 2019-07-15 2019-10-15 北京工业大学 一种基于异常字段定位的Modbus TCP协议模糊测试方法
CN110806979A (zh) * 2019-10-31 2020-02-18 北京东软望海科技有限公司 接口返回值的校验方法、装置、设备及存储介质
CN110806979B (zh) * 2019-10-31 2023-04-07 望海康信(北京)科技股份公司 接口返回值的校验方法、装置、设备及存储介质
CN113535565A (zh) * 2021-07-19 2021-10-22 工银科技有限公司 一种接口用例生成方法、装置、设备、介质和程序产品
CN113535565B (zh) * 2021-07-19 2022-10-04 工银科技有限公司 一种接口用例生成方法、装置、设备和介质
CN114048131A (zh) * 2021-11-11 2022-02-15 北京升鑫网络科技有限公司 一种基于fuzzing测试需校验流量的方法、装置及设备
CN115979350A (zh) * 2023-03-20 2023-04-18 北京航天华腾科技有限公司 一种海洋监测设备数据采集系统
CN117331926A (zh) * 2023-12-01 2024-01-02 太平金融科技服务(上海)有限公司 一种数据稽核方法、装置、电子设备和存储介质
CN117331926B (zh) * 2023-12-01 2024-03-01 太平金融科技服务(上海)有限公司 一种数据稽核方法、装置、电子设备和存储介质

Also Published As

Publication number Publication date
CN102243608B (zh) 2014-01-29

Similar Documents

Publication Publication Date Title
CN102243608B (zh) 基于全局数据结构描述的软件安全测试方法
US11783054B2 (en) System and method for information flow analysis of application code
CN103164249B (zh) 用于脚本语言编译器的扩展机制
CN105550594A (zh) 安卓应用文件的安全性检测方法
CN104156313A (zh) 一种Web服务测试用例自动生成方法
CN102622556A (zh) 基于程序切片技术的Web服务安全分析方法
US20200226232A1 (en) Method of selecting software files
Ahmaro et al. Taxonomy, definition, approaches, benefits, reusability levels, factors and adaption of software reusability: a review of the research literature
CN104899037A (zh) 一种基于模型的侵入式灰盒组装验证方法
CN112363953A (zh) 基于爬虫技术和规则引擎的接口测试用例生成方法及系统
Ajienka et al. An empirical analysis of source code metrics and smart contract resource consumption
Galindo et al. Program slicing of Java programs
Kaposi et al. Shallow embedding of type theory is morally correct
Zhao et al. Pattern-based design evolution using graph transformation
Falleri et al. Incremental inconsistency detection with low memory overhead
Benahmed Daho Crypto-spatial: an open standards smart contracts library for building geospatially enabled decentralized applications on the ethereum blockchain
JP5422589B2 (ja) モジュール解析システム、モジュール解析方法及びモジュール解析プログラム
Melnik et al. Enforcing secure coding rules for the C programming language using the eclipse development environment
Tawhid et al. User-friendly approach for handling performance parameters during predictive software performance engineering
Mane et al. A Domain Specific Language to Provide Middleware for Interoperability among SaaS and DaaS/DBaaS through a Metamodel Approach.
Kpodjedo et al. Studying software evolution of large object‐oriented software systems using an ETGM algorithm
CN107451167A (zh) 站内点击位的点击数据获取方法和系统
Milhem et al. Extraction of architectural patterns from frameworks and modeling their contributions to qualities
CN109299004A (zh) 关键元素差异性分析方法及系统
Abbas et al. Formalizing and verifying UML activity diagrams

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
ASS Succession or assignment of patent right

Owner name: NANJING VULNHUNT INFORMATION TECHNOLOGY CO., LTD.

Free format text: FORMER OWNER: FANG XING

Effective date: 20140901

C41 Transfer of patent application or patent right or utility model
COR Change of bibliographic data

Free format text: CORRECT: ADDRESS; FROM: 102208 CHANGPING, BEIJING TO: 210000 NANJING, JIANGSU PROVINCE

TR01 Transfer of patent right

Effective date of registration: 20140901

Address after: Building No. 20 Yuhuatai Avenue flora read City District of Nanjing City, Jiangsu province 210000 floor

Patentee after: Nanjing Vulnhunt Information Technology Co., Ltd.

Address before: 102208 Beijing Changping District Huilongguan Beijing people's community 32-1-102

Patentee before: Fang Xing

ASS Succession or assignment of patent right

Owner name: ALIBABA GROUP HOLDING LTD.

Free format text: FORMER OWNER: NANJING VULNHUNT INFORMATION TECHNOLOGY CO., LTD.

Effective date: 20150723

C41 Transfer of patent application or patent right or utility model
TR01 Transfer of patent right

Effective date of registration: 20150723

Address after: 310012 G building, 10 floor, A building, Paradise Software Park, 3 West Road, Hangzhou, Xihu District, Zhejiang

Patentee after: Alibaba (China) Co., Ltd.

Address before: Building No. 20 Yuhuatai Avenue flora read City District of Nanjing City, Jiangsu province 210000 floor

Patentee before: Nanjing Vulnhunt Information Technology Co., Ltd.

TR01 Transfer of patent right

Effective date of registration: 20210303

Address after: Room 507, 5 / F, building 3, 969 Wenyi West Road, Wuchang Street, Yuhang District, Hangzhou City, Zhejiang Province, 310023

Patentee after: ZHEJIANG TMALL TECHNOLOGY Co.,Ltd.

Address before: 310012 G Block, 10th Building, Building A, Paradise Software Park, No. 3 Xidoumen Road, Xihu District, Hangzhou City, Zhejiang Province

Patentee before: Alibaba (China) Co.,Ltd.

TR01 Transfer of patent right