CN103036730A - 一种对协议实现进行安全测试的方法及装置 - Google Patents

一种对协议实现进行安全测试的方法及装置 Download PDF

Info

Publication number
CN103036730A
CN103036730A CN2011102937693A CN201110293769A CN103036730A CN 103036730 A CN103036730 A CN 103036730A CN 2011102937693 A CN2011102937693 A CN 2011102937693A CN 201110293769 A CN201110293769 A CN 201110293769A CN 103036730 A CN103036730 A CN 103036730A
Authority
CN
China
Prior art keywords
message
protocol
model
operator
variation
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
CN2011102937693A
Other languages
English (en)
Other versions
CN103036730B (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.)
Siemens AG
Original Assignee
Siemens AG
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 Siemens AG filed Critical Siemens AG
Priority to CN201110293769.3A priority Critical patent/CN103036730B/zh
Priority to DE201210216841 priority patent/DE102012216841A1/de
Publication of CN103036730A publication Critical patent/CN103036730A/zh
Application granted granted Critical
Publication of CN103036730B publication Critical patent/CN103036730B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3684Test management for test design, e.g. generating new test cases

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer And Data Communications (AREA)

Abstract

本发明提供了一种对协议实现进行安全测试的方法及装置。方法包括:将协议规范映射为第一协议状态模型;向第一协议状态模型引入非法状态形成第二协议状态模型;利用断言来表征第一协议状态模型/第二协议状态模型的测试目标,利用文法约束来表征此模型合法输入报文的文法规则;对第二协议状态模型执行行为变异操作生成变异的协议状态模型并执行模型检测,将得到的违反断言的反例映射为测试序列;对测试序列执行文法变异操作生成包含变异的测试报文的测试序列,将其中包含有效变异报文的作为测试用例;利用测试用例对协议实现进行模糊测试,以检测协议实现中存在的安全漏洞。采用本发明实施例能以高效及低成本实现协议安全测试。

Description

一种对协议实现进行安全测试的方法及装置
技术领域
本发明涉及信息安全(Information Security)技术领域,特别涉及一种对协议实现进行安全测试的方法及装置。
背景技术
计算机信息安全技术是一门由密码应用技术、信息安全技术、数据灾难与数据恢复技术、操作系统维护技术等组成的计算机综合应用学科。其中,信息安全技术主要用于防止系统漏洞、防止外部黑客入侵、防御病毒破坏和对可疑访问进行有效控制等。
随着互联网(Internet)的发展,各种计算机系统中都迫切需要加强其信息安全技术。以信息通信技术(ICT,Information Communication Technology)系统为例。ICT作为一种向客户提供的服务,是信息技术(IT,InformationTechnology)与通信技术(CT,Communication Technology)的结合和交融,通信业、电子信息产业、互联网、传媒业都将融合在ICT的范围内,进而能为客户提供一站式的ICT整体服务,包括:集成服务、外包服务、专业服务、知识服务以及软件开发服务等。但是,随着ICT系统的发展,保护ICT系统的基础结构的要求也在显著提高。比如:不同项目利益相关者(如:合资企业、联盟伙伴、外包服务)之间连接性的提高、智能装置的连接性的提高、外部连接性的增强、快速增长的网络入侵事件以及出现更多的智能黑客和恶意软件等情况,都导致了ICT系统的基础结构遭受攻击以及威胁的可能性的显著提高。因此,就非常有必要加强ICT系统的信息安全技术,以针对安全漏洞和/或自发故障来保证ICT系统的基础结构的通信安全。
在信息安全技术中,很重要的一个课题就是对协议实现所基于的协议进行安全测试。现存的几种协议安全测试方法包括:形式化验证(InformalVerification)、白盒(White-box)测试和黑盒(Black-box)测试等等。其中,由于形式化验证和白盒测试需要作为被测实现系统(IUT,Implementation UnderTest)的计算机程序的源代码(Source Code),因此,此种方法可适用的场景非常有限;而另一方面,黑盒测试基于协议的外部描述,即:协议规范(Specifications),其测试并不依赖于计算机程序的源代码,进而黑盒测试的实现可以与协议实现的计算机程序开发相互独立,其测试结果可以应用于协议规范的所有实现情况,因此,黑盒测试可以广泛应用于各种场景下的安全测试。但是,黑盒测试的实现成本非常高,也非常耗时,且难以优化和改进。
因此,目前在信息安全技术领域中,亟待开发一种协议安全测试技术,其不需要协议实现的计算机程序的源代码,并且具有较高的执行效率以及较低的实现成本。
发明内容
为解决上述技术问题,本发明实施例提出了一种对协议实现进行安全测试方法及装置,其不需要待测的协议实现的计算机程序的源代码即能实现协议的安全测试,且具有较高的执行效率以及较低的实现成本。
本发明实施例提出了一种对协议实现进行安全测试的方法,该方法包括:
将所述协议实现所基于的协议规范映射为第一协议状态模型;
向所述第一协议状态模型引入非法状态以形成第二协议状态模型;其中,所述非法状态与所述协议实现中存在的安全故障相对应;
利用断言来表征所述第一协议状态模型和/或第二协议状态模型的测试目标;
利用文法约束来表征所述第二协议状态模型和/或第一协议状态模型的合法输入报文的文法规则;
对所述第二协议状态模型执行行为变异操作,生成变异的协议状态模型;
根据所述断言对所述变异的协议状态模型执行模型检测,生成一个或多个违反所述断言的反例,将所述反例映射为测试序列;
对所述测试序列执行文法变异操作,生成包含变异报文的变异测试序列,每个测试序列生成包含一个或多个变异报文的变异测试序列;
根据所述文法约束对所述变异测试序列中的变异报文执行文法检测,得到所述变异报文中违反所述文法约束的有效变异报文,将包含所述有效变异报文的变异测试序列作为测试用例;及,
利用所述测试用例对所述协议实现进行模糊测试,以检测所述协议实现中是否存在与所述一个或多个测试用例对应的安全漏洞。
其中,所述第一协议状态模型为参数化扩展有限状态机PEFSM或者输入/输出符号转移系统IOLTS。
其中,所述利用断言来表征所述第一协议状态模型和/或所述第二协议状态模型的测试目标,包括:
基于给定的测试目标来定义的断言;和/或,
根据安全测试领域知识的预定义的断言;和/或,
从所述第一协议状态模型中反射出的断言。
其中,所述利用文法约束是:
根据协议规范来定义的文法约束;和/或,
从所述第一协议状态模型的合法输入报文中反射出的文法约束。
其中,所述对所述第二协议状态模型执行行为变异操作,包括:利用行为变异算子来对所述第二协议状态模型中的转移以及转移中的逻辑运算执行行为变异操作。
其中,所述对所述第二协议状态模型中的转移执行行为变异操作,包括:利用状态陷阱算子和/或输入改变算子对所述转移执行行为变异操作,所述状态陷阱算子用于将转移的后续状态改变为非法状态,所述输入改变算子用于将转移的输入报文改变为其他报文;
其中,所述对所述第二协议状态模型中转移中的逻辑运算执行行为变异操作,包括:
利用表达式否定算子、表达式递增算子、表达式递减算子、保持为0算子、保持为1算子、操作数否定算子、操作数引用算子、范围探测算子和用例注入算子中的任一者或任意组合对所述逻辑运算执行行为变异操作,其中:所述表达式否定算子用于对逻辑运算中的表达式值取反;所述表达式递增算子用于使逻辑运算中表达式的值增加n;所述表达式递减算子用于使逻辑运算中表达式的值减少n;保持为0算子用于使逻辑运算中表达式的取值变为0;保持为1算子用于使逻辑运算中表达式的取值变为1;操作数否定算子对表达式的各个操作数按位取反;操作数引用算子用于将操作数逐一与其后的另一操作数交换,对于最后一个操作数,则将其与第一个操作数交换;范围探测算子对表达式中每个操作数的值进行按位取反,并其将该赋值语句标记为“替换”标识;用例注入算子用于将逻辑运算中可变长度的字段的长度增加或减少n个字节,并将该赋值语句标记为“注入”标识;其中n为正整数。
其中,将模型检测所产生的每一个反例映射为一个测试序列,所述反例对应所述变异的协议状态模型中一条由一个或多个转移构成的转移路径,所述转移路径上存在一个或多个输入报文及其对应的一个或多个输出报文;
则所述将所述反例映射为测试序列包括:将所述反例映射为所述转移路径上存在的所述一个或多个输入报文及其对应的一个或多个输出报文,所得到的报文的序列即为所述测试序列,并且将与违反断言的变异转移所对应的任一报文以及所述报文中被模型检测出的字段标记出。
其中,所述将与违反断言的变异转移所对应的任一报文以及所述报文中被模型检测到的字段标记出包括:
若模型检测能够识别出所述报文的某个字段的变异可以导致该反例,并且所述字段没有其它标记,则将所述字段标记为“模糊测试”,否则,将整个报文标记为“模糊测试”标识;
若模型检测识别出所述报文中的某个字段对应的逻辑运算被标记为“替换”标识,则将报文中的所述字段标记为“替换”标识;及,
若模型检测识别出所述报文中的某个字段对应的逻辑运算被标记为“注入”标识,则将报文中的所述字段标记为“注入”标识。
其中,所述对所述测试序列执行文法变异操作中,对测试序列中标记为“模糊测试”标识的报文或含有标记为“模糊测试”标识的字段的报文利用文法变异算子执行文法变异。
其中,所述文法变异算子包括下列文法变异算子中的任一个或任意组合:
用于将标记为“模糊测试”标识的字段从报文中删除的字段删除算子;
用于将标记为“模糊测试”标识的字段在报文中拷贝多份的字段重复算子;
用于将标记为“模糊测试”标识的字段的位置与其后的字段的位置进行交换的字段交换算子;
用于将标记为“模糊测试”标识的字段的内容增加或减少n个字节的宽度改变算子,n为正整数;
用于将标记为“模糊测试”标识的字段的编码格式变换为另一种的编码改变算子;及,
用于将标记为“模糊测试”标识的字段的取值取反或按位取反的取值否定算子。
其中,所述对所述测试序列执行文法变异操作中,对测试用例中包含标记为“替换”标识的字段的报文,利用预定义的测试值或造成断言违反的非法值替换该报文中所述标记为”替换”标识的字段,得到对应的变异报文;对测试用例中包含标记为“注入”标识的字段的报文,利用任意长度的预定义的测试值或造成断言违反的非法值注入该报文中标记为”注入”标识的字段中,得到对应的变异报文。
其中,该方法进一步包括:将只包括标记为“替换”标识或“注入”标识的字段的测试序列直接作为进行模糊测试的测试用例。
其中,所述利用所述测试用例对所述协议实现进行模糊测试包括:
向所述协议实现依次发送该测试用例中的各个输入报文;及,
接收来自所述协议实现的响应报文,如果所收到的任一响应报文与该测试用例中对应的输出报文不一致,或者,所述协议实现处于非正常状态,则发现了所述协议实现存在与对应的输入报文对应的安全漏洞。
所述的方法进一步包括:在进行文法变异操作之前,对所述一个或多个测试序列进行优化处理,以去除冗余的测试序列。
其中,该第一协议状态模型描述该协议状态和状态转移。
本发明实施例还提出了一种对协议实现进行安全测试的装置,该装置包括:
第一模块(601),用于在对所述协议实现进行安全测试时,将所述协议实现所基于的协议规范映射为第一协议状态模型;
第二模块(602),用于向所述第一模块(601)得到的所述第一协议状态模型引入非法状态以形成第二协议状态模型,其中,所述非法状态对应于所述协议实现存在的安全故障;
第三模块(603),用于利用断言来表征来自所述第二模块(602)的所述第二协议状态模型和/或来自所述第一模块(601)的所述第一协议状态模型的测试目标,利用文法约束来表征所述第二协议状态模型和/或第一协议状态模型的合法输入报文的文法规则;
第四模块(604),用于对来自所述第二模块(602)的所述第二协议状态模型执行行为变异操作,从而生成变异的协议状态模型;
第五模块(605),用于利用所述第三模块(603)得到的断言对所述第四模块(604)生成的所述变异的协议状态模型执行模型检测,以生成一个或多个测试序列,所述一个或多个测试序列由所述变异的协议状态模型中违反所述断言的一个或多个反例映射得到;
第六模块(606),用于对来自所述第五模块(605)的测试序列执行文法变异操作,生成包含变异报文的变异测试序列,其中,一个测试序列可生成包含一个或多个变异的变异测试序列;
第七模块(607),用于利用第三模块(603)得到的文法约束对第六模块(606)生成的变异测试序列执行文法检测,得到所述变异报文中违反所述文法约束的有效变异报文,将包含所述有效变异报文的变异测试序列作为测试用例;及,
第八模块(608),用于利用所述第七模块(607)得到的测试用例对所述协议实现进行模糊测试,以检测所述协议实现中是否存在与所述一个或多个测试用例对应的安全漏洞。
其中,所述第三模块(603)进一步用于优化所述断言,以去除冗余的断言;或者,所述第五模块(605)进一步用于对所述一个或多个测试用例进行优化,以去除冗余的测试用例。
其中,第五模块(605)进一步将只包括标记为”替换”标识或”注入”标识的字段的测试序列直接作为测试用例输出给第八模块(608)执行模糊测试。
其中,该第一协议状态模型描述该协议状态和状态转移。
本发明还提出一种计算机可读介质,其上存储有用于实现所述模糊测试方法的计算机可读代码。
本发明还提出一种计算机程序,其包含用于实现所述模糊测试方法的计算机可读代码。
采用本发明实施例提供的方法及装置能够以较高的执行效率以及较低的实现成本实现协议安全测试,且无需待测的协议实现的源代码。
附图说明
下面将通过参照附图详细描述本发明的示例性实施例,使本领域的普通技术人员更清楚本发明的上述及其它特征和优点,附图中:
图1为依据本发明实施例的方法流程示意图;
图2为本发明方法一具体实例的实现流程示意图;
图3为图2所示实例中的初始协议状态模型示意图;
图4为图3所示初始协议状态模型中引入了非法状态之后的示意图;
图5为对图4所示初始协议状态模型进行变异操作之后所得到的变异的协议状态模型示意图;及,
图6为依据本发明实施例的装置组成结构示意图。
图中:101-将协议实现所基于的协议规范映射为一协议状态模型  102-向此协议状态模型引入非法状态  103-利用断言来表征测试目标,利用文法约束来表征文法规则  104-对引入非法状态的协议状态模型执行行为变异操作,生成变异的协议状态模型  105-对变异的协议状态模型执行模型检测,得到一个或多个测试序列  106-对测试序列执行文法变异操作,生成变异测试序列  107-对变异测试序列执行文法检测,生成包含违反上述文法约束的变异报文的测试用例  108-利用测试用例对此协议实现进行模糊测试,以检测此协议实现中是否存在安全漏洞
201-将IUT所基于的协议规范映射为一PEFSM  202-向此PEFSM引入非法状态  203-利用断言来表征测试目标,利用文法约束来表征文法规则  204-对引入非法状态的PEFSM执行行为变异操作,生成变异的PEFSM  205-对变异的PEFSM执行模型检测,得到一个或多个测试序列  206-对测试序列执行文法变异操作,生成变异测试序列  207-对变异测试序列执行文法检测,生成包含违反上述文法约束的变异报文的测试用例  208-利用测试用例对此IUT进行模糊测试,以检测此IUT中是否存在安全漏洞
601-第一模块  602-第二模块  603-第三模块  604-第四模块  605-第五模块  606-第六模块  607-第七模块  608-第八模块
具体实施方式
以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用于解释本发明,并不用于限定本发明。
本发明实施例提出了一种对协议实现(Protocol Implementation)进行安全测试的方法。当对一协议实现进行测试时,该方法的处理流程如图1所示包括如下步骤:
步骤101:将此协议实现所基于的协议规范映射为第一协议状态模型(也可称为初始协议状态模型)。
步骤1 02:向此第一协议状态模型引入非法状态以形成第二协议状态模型。
步骤103:利用断言来表征此第二协议状态模型和/或第一协议状态模型的测试目标,同时利用文法约束来表征此第二协议状态模型和/或第一协议状态模型的合法输入报文的文法规则。
步骤104:通过对此第二协议状态模型执行行为变异操作(behavior mutationoperation)来向此协议状态模型注入安全故障,以生成变异的协议状态模型。
步骤105:对此变异的协议状态模型执行模型检测,以生成此变异的协议状态模型中违反上述断言的一个或多个反例,此一个或多个反例被映射为一个或多个测试序列。
步骤106,对所述测试序列执行文法变异操作(Syntax mutation operation)来向此测试序列中的报文注入文法故障,以生成包含变异报文的变异测试序列,其中,一个测试序列可以生成一个或多个包含变异报文的变异测试序列。
步骤107,对所述变异测试序列中的变异报文执行文法检测,以得到所述变异报文中违反上述文法约束的有效变异报文,将包含所述有效变异报文的变异测试序列作为测试用例。
步骤106:利用所述测试用例对此协议实现进行模糊测试,以检测此协议实现中是否存在对应的安全漏洞。
协议实现的开发可能基于某种协议规范,尤其是涉及多个分布式的计算实体之间的连接、通信和数据传输的协议实现,它们所实现的功能要符合特定协议的标准化规定。一个协议规范描述了协议实现所能实现的各种功能行为和通信的句法/语义,其中,同一功能行为可以具体实现为源代码不同的各种协议实现,也就是说协议规范并不规定具体实现中协议实现的源代码,因此协议规范可以作为黑盒测试的参考。
本发明实施例向协议安全测试领域引入了基于模型的形式化方法,以识别基于各种协议的IUT中的安全漏洞,其关注于黑盒测试且依赖于协议规范描述的功能行为和通信的语义/句法(也称文法),而不需要了解IUT的源代码和详细的内部结构同时利用了模糊测试、变异分析和模型测试的优点,互相弥补它们的缺点,并以形式化方法来实施IUT的协议安全测试。因此,很容易实施,实现成本较低,且能以较高效率自动化的检测IUT中潜在的安全漏洞。
以下对上述各个步骤的具体实现加以详细说明。
一、关于步骤101
在本发明实施例中,协议状态模型可以为有限状态机(FSM,Finite StateMachine)(也称为有限自动机),如:参数化的扩展有限状态机(PEFSM,Parameterized Extended Finite State Machine),此协议状态模型也可以为其它类型的模型,比如:输入/输出符号转移系统(IOLTS,Input Output Label TransitionSystem)也可以被采用),本发明实施例对于协议状态模型的具体类型并不限定,任何可以描述协议状态及其转移的模型均属上述协议状态模型的范畴。
假定将协议规范映射为PEFSM。此PEFSM包括六元组(6-tuples),可表示为(S,s0,∑,Γ,δ,λ)。这里,S代表PEFSM的状态集合(即协议规范所规定的所有状态的集合);s0∈S代表协议的初始状态;对于所有状态都由向量
Figure BDA0000094836770000111
来代表包括缺省初始值在内的内部变量的有限集合,∑代表输入报文集合,每一输入报文
Figure BDA0000094836770000112
包含其字段的向量(即参数向量)
Figure BDA0000094836770000113
Γ代表输出报文集合,每一输出报文
Figure BDA0000094836770000121
包含其字段的向量(即参数向量)
Figure BDA0000094836770000122
δ:S×∑→S代表转移函数,其定义了收到一输入报文
Figure BDA0000094836770000123
(∈∑)之后所要转移到的目标状态;及,λ:S×∑→Γ代表输出函数,其定义了收到一输入报文
Figure BDA0000094836770000124
之后的输出报文
Figure BDA0000094836770000125
(∈Γ)。在一个PEFSM中,一次转移t包括:一组监视条件(可表达为:“if statement”)和一个动作
Figure BDA0000094836770000126
此动作为针对变量向量和输入/输出参数的操作。如果监视条件都被满足,就可以执行此转移,并且此动作也已基于当前变量向量的值和输入参数而被执行,进而使PEFSM从当前状态转移到下一个状态。
根据协议规范中的定义,可以确定IUT可能存在的状态、各个状态之间的转移、以及对应转移的输入报文和输出报文,然后根据所确定的这些状态、转移及对应转移的输入报文和输出报文,通过上述方法,可以将IUT所基于的协议规范形式化为相应的PEFSM。
其中,对应转移的输入报文和输出报文可以来自于实际的网络报文序列。如可利用现有的抓包工具,如网络包分析工具Wireshark或Tcpdump等采集协议实现之间的网络报文序列。
本发明实施例中,可利用赋值语句或其它计算式来表示协议状态中包括输入报文(或其中的字段)
Figure BDA0000094836770000127
内部变量和输出报文(或其中的字段)
Figure BDA0000094836770000129
的逻辑运算,赋值语句的逻辑格式通常为“变量=表达式”。
二、关于步骤102
在本发明实施例中,可以向协议状态模型引入一个或多个非法状态,此非法状态也可被称为故障状态或“虫洞(wormhole)”,此非法状态对应于IUT出现的安全故障(包括:系统性故障或协议规范中未定义的状态,如宕机或DoS等)。由于,协议规范中不包括使IUT处于意外的错误状态的安全故障的定义,通过引入额外的非法状态可以将安全故障组件引入协议状态模型,以实现安全测试。
其中,当仅引入单一的非法状态时,此单一的非法状态针对所有类型的安全故障;当引入多个非法状态时,每一非法状态针对特定类型的安全故障,此时,需要了解特定类型的安全故障的详细信息。
三、关于步骤103
在本发明实施例中,IUT可能出现的安全故障也可称为需要被覆盖的安全要求,这些安全故障可被定义为时序逻辑的断言(Predicate),即利用时序逻辑的断言来表征协议安全模型的测试目标。这里,时序逻辑可以为线性时序逻辑(LTL,Linear Temporal Logic)或者计算树逻辑(CTL,Computation Tree Logic)等等,本发明实施例对所采用的具体的时序逻辑不做限定。
具体的,将安全故障定义为时序逻辑的断言的方法可以包括但不限于如下几项中的任一者或任意组合:
1)基于给定的测试目标来定义断言;
2)根据安全测试领域知识的预定义断言;及,
3)从初始协议状态模型(即步骤101得到的第一协议状态模型)中反射出断言;比如:针对协议状态模型中的每一次转移,相应生成LTL断言或CTL断言。
在进行安全测试时,IUT可能出现的安全故障可能有一个或多个(通常有多个),则根据这些安全故障而得到的断言就可以有一个或多个。
本领域技术人员可以知道,断言是一种逻辑判断,是断定一个特定前提为真的陈述。断言由原子命题或复合命题通过逻辑算子(如与、或、非)连接而成,其处理结果代表所要判断的条件为真(true)或假(false),比如:一断言可以为一单参函数,此函数带有一整型参数,argument,如果此参数为正数(positive),则此函数的返回值为真。
本领域技术人员根据以上的描述,利用本领域公知技术可以得出表征该第一协议状态模型和/或该第二协议状态模型的测试目标的断言。
同时,对于所有合法输入报文,可根据其协议规范来定义其相应的文法约束,文法约束是指合法输入报文必须遵守的文法规则。具体地,根据协议规范定义文法约束的方法可以包括但不限于如下几项中的任一者或组合:
1)根据协议规范手动定义文法约束;及
2)从初始协议状态模型(即步骤101得到的第一协议状态模型)的合法输入报文中自动反射出文法约束。
四、关于步骤104
在本发明实施例中,步骤104与前述的步骤103可以并行执行,不必区分这两个步骤的执行先后顺序。
具体的,可利用变异算子(mutation operator)来对协议状态模型执行变异操作,这里,所利用的变异算子可以包括但不限于:状态陷阱算子(STO,StateTrap Operator)和输入改变算子(IAO,Input Alter Operator)、表达式否定算子(ENO,Expression Negation Operator)、表达式递增算子(EIO,Expression IncreaseOperator)、表达式递减算子(EDO,Expression Decrease Operator)、保持为0算子(Stuck-at-0)、保持为1算子(Stuck-at-1)、操作数否定算子(ONO,OperandNegation Operator)、操作数引用算子(ORO,Operand Reference Operator)、范围探测算子(REO,Range Exploration Operator)、用例注入算子(CIO,CaseInjection Operator)等算子中的任一者或任意组合。
其中,针对转移所执行的变异算子可包括但不限于:状态陷阱算子(STO)和输入改变算子(IAO)。状态陷阱算子(STO)用于将转移的后续状态改变为非法状态。输入改变算子(IAO)用于将转移的输入报文改变为其他报文。针对转移内部包括输入报文(或其中的字段)
Figure BDA0000094836770000151
内部变量
Figure BDA0000094836770000152
和输出报文(或其中的字段)
Figure BDA0000094836770000153
的逻辑运算,如赋值语句,所执行的变异算子可包括但不限于:表达式否定算子(ENO)、表达式递增算子(EIO)、表达式递减算子(EDO)、保持为0算子(Stuck-at-0)、保持为1算子(Stuck-at-1)、操作数否定算子(ONO)、操作数引用算子(ORO)、范围探测算子(REO)和用例注入算子(CIO)等算子中的任一者或任意组合。
其中,表达式否定算子(ENO)用于使该赋值语句中(右边)表达式的值(按位(bit))取反。
表达式递增算子(EIO)用于使该赋值语句(右边)表达式的值增加n。其中,n为正整数。
表达式递减算子(EDO)用于使该赋值语句(右边)表达式的值减少n。其中,n为正整数。
保持为0算子(Stuck-at-0)用于使该赋值语句中(左边)变量的取值变为0,如将全0赋给(左边的)变量。
保持为1算子(Stuck-at-1)用于使该赋值语句中(左边)变量的取值变为1,如将FF赋给(左边的)变量。
操作数否定算子(ONO)用于逐个取反或按位取反该赋值语句(右边)表达式的各个操作数。
操作数引用算子(ORO)用于将操作数逐一与其后的另一操作数交换,对于最后一个操作数,则将其与第一个操作数交换。
范围探测算子(REO)用于按位取反该赋值语句中(右边)表达式中每个操作数的值(就像ENO一样),并其将该赋值语句标记为“fuzz:replace:n”。其中,n为字段的字节宽度,该字段指的是赋值语句左边的变量,n通常为1,2,4,8个字节。其中,“fuzz:replace:n”只是一个示例,实际应用中,也可采用其它符号进行标记,只要能表明是“替换”标记即可。
假如赋值语句包括可变长度的报文字段,并且存在与该字段的长度相关的断言,则可利用用例注入算子(CIO)对该赋值语句执行变异操作,用例注入算子(CIO)用于将赋值语句中可变长度的字段的长度增加n个字节,并将该赋值语句标记为“fuzz:inject”。其中,“fuzz:inject”只是一个示例,实际应用中,也可采用其它符号进行标记,只要能表明是“注入”标记即可。其中,n为正整数。
本发明实施例并不限定具体采用何种变异算子,只要是能应用于安全测试的变异算子都属本发明实施例所述的变异算子范畴。
这样,每当利用一个行为变异算子执行了一次行为变异操作,就能生成一个与初始协议状态模型(即步骤101映射得到的第一协议状态模型)不同的变异的协议状态模型,这些变异的协议状态模型将在后续步骤中用于执行模型检测。
五、关于步骤105
具体的,要利用步骤103得到的断言来对步骤104得到的每一个变异的协议状态模型进行模型检测。其中,将上述断言和变异的协议状态模型作为模型检测器的输入,由此模型检测器进行模型检测并生成一个或多个反例(counterexample),即状态、报文的符号序列。这里,反例就是指违反上述断言的测试用例,其可以以转移路径的形式从模型检测器输出,所谓转移路径指的是从协议状态模型的初始状态到一个出现断言被违背的状态之间的一个或多个转移构成的路径,相应地,转移路径中的最后一个转移为违反断言的变异转移。
在本发明实施例中,所使用的模型检测器可以基于(但不限于)新符号模型验证器(NuSMV,New Symbolic Model Verifier)、简单Promela(一种逻辑语言)解释器(SPIN,Simple Promela Interpreter)、符号分析实验室(SAL,SymbolicAnalysis Laboratory)等语言,并且其采用的模型检测方法可以为但不限于:显式模型检测(explicit model checking)、符号化模型检测(symbolic model checking)或有界模型检测(bounded model checking)等等;在将变异的协议状态模型输入模型检测器之前,如果模型检测器不能识别此协议状态模型的表示方法,可使用NuSMV或协议原语言(PROMELA,Protocol Meta Language)等语言将此变异的协议状态模型翻译为标号迁移系统(Labelled Transition System),以供模型检测器处理。
由于经过模型检测而生成的一个或多个反例只是一个抽象的符号序列,因此需要将其映射成为一个或多个测试序列(testing trace),以进行后续的处理及模糊测试,优选的,每一个反例都被映射为一个测试序列。具体的,如前面所述,依据变异的协议状态模型,一个反例对应一个转移路径,此转移路径上存在一系列的输入报文/输出报文。因此,可以将此反例映射到一测试序列,在此测试序列中,此反例可以表示为一报文序列,此报文序列包括:按顺序排列的可在此反例所对应的转移路径上存在的所有的输入报文和相应的输出报文。也就是说,测试序列中包括:一系列用于激发IUT的输入报文和作为IUT的预期响应的相应的输出报文。
在将反例映射为测试序列的过程中,与违反断言的变异转移所对应的任一报文以及其中被模型检测器识别到的字段将被标记出,以用于后续的模糊测试。
具体标记方式可包括但不限于:
1.假如模型检测器能够识别出该报文的某个字段的变异可以导致该反例,并且该字段没有其它标记,则将该字段标记为“fuzz(模糊测试)”;否则,将整个报文标记为“fuzz”。其中,“fuzz”只是一个示例,实际应用中,也可以用其它符号代替,只要能表明其是需要被模糊处理的标识即可,本文中简称”模糊测试”标识。
2.假如识别出的字段对应的赋值语句被标记为“fuzz:replace:n”,则将报文中的该字段标记为“replace”,并且将利用长度为n的测试值或非法值对该字段进行模糊测试。
3.假如识别出的字段对应的赋值语句被标记为“fuzz:inject”,则将报文中的该字段标记为“inject”,并将利用所有测试值或非法值对该字段进行模糊测试。
同样,上述字符串是示例性的。
进一步的,还可以利用所获取的这些报文字段的取值范围、合法值和冲突值来减少模糊测试中要被测试的缺陷值的数据量,即:对所识别到的应被标记的报文字段进行优化处理,以去除其中冗余的报文字段。这里,本发明实施例可采用现有技术中的各种方法来对这些报文字段进行优化处理,本文不再详述。
进一步的,为了提高测试效率,还可以对步骤104中生成的测试序列进行优化处理,以去除其中冗余的测试序列(即:去除冗余的反例)。比如:可在执行模型检测之前执行断言化简处理,此时,可以分析断言的作用范围及其安全/逻辑的含义,根据分析结果删除可被其它断言涵盖的冗余的断言;或者,可在执行模型检测时删除冗余的测试序列,如:如果某一短的反例(即测试路径)为一长的反例的前缀,则此短的反例就为冗余的,需要删除此短的反例所映射为的测试序列。这里,本发明实施例可以采用现有技术中的各种方法来对测试序列进行优化处理,本文就不再一一详述。
六、关于步骤106
对步骤105中产生的测试序列进行文法变异,生成对应每个测试序列的的变异测试序列。其中,一个测试序列对应一个或多个变异测试序列。
具体地,对测试序列进行文法变异的方式可有多种,下面列举其中两种:
第一种:
只对模型检测产生的每个测试序列中标记为“fuzz”的报文或含有标记为“fuzz”的字段的报文进行文法变异。具体地,可利用(但不限于)字段删除算子(Field Erase Operator)和、字段重复算子(Field Repeat Operator)、字段交换算子(Field Exchange Operator)、宽度改变算子(Width Change Operator)、编码改变算子(Encode Change Operator)、取值否定算子(Value Negation Operator)等语法文法变异算子中的任一者或任意组合对所述报文进行语法文法变异以产生对应的变异报文。
其中,字段删除算子用于从报文中删除对应的标记为“fuzz”字段。
字段重复算子用于将一个对应的标记为“fuzz”字段在报文中拷贝n份。其中,n为正整数。
字段交换算子用于将对应的当前标记为“fuzz”的字段的位置与其后的字段的位置相交换。
宽度改变算子用于将对应的当前标记为“fuzz”的字段的内容增加n个字节,其中,n不仅可以为正整数,也可以为负整数。
编码改变算子用于将对应的当前标记为“fuzz”的字段的编码格式变换为另一种,如从ASCII变换为UTF-8、UNICODE等。
取值否定算子用于将将对应的当前标记为“fuzz”的字段的取值取反或按位取反。
这样,每当利用一个文法变异算子执行了一次文法变异操作,就能生成一个变异报文,同时便得到一个与初始测试序列(即步骤105中每个反例映射得到的一个测试序列)不同的变异测试序列,这些变异测试序列将在后续步骤中用于执行文法检测。
这种情况下,对于模型检测产生的只包括标记为“replace(替换)”或“inject(注入)”的字段,而不包括标记为“fuzz”的字段的测试序列,则无需执行本步骤,而直接将其作为测试用例执行步骤108的模糊测试即可。
第二种:
不仅对模型检测产生的每个测试序列中标记为“fuzz”的报文或含有标记为“fuzz”的字段的报文采用上述任一种或任意组合的文法变异算子进行文法变异;而且对于对模型检测产生的每个测试序列中标记为“replace”的字段,若该字段的长度为n,则利用长度为n的预定义的测试值或造成断言违反的非法值替换此输入报文中标记为“replace”的字段来构成一个用于模糊测试的变异报文,对于对模型检测产生的每个测试序列中标记为“inject”的字段,可利用任意长度的预定义的测试值或造成断言违反的非法值注入此输入报文中标记为“inject”的字段中来构成一个用于模糊测试的变异报文。
七、关于步骤107
对上述产生的变异测试序列中的变异报文利用步骤103中反射出的文法约束进行文法检测,假如变异报文违反了至少一个文法约束,该变异报文即为有效的变异报文,同时包含该有效的变异报文的测试序列将在后续的模糊测试中作为测试用例。
八、关于步骤108
具体的,对于步骤106中的第一种情况,利用测试用例来对IUT进行模糊测试的方法可以包括:
1)针对输入报文中被标记为“replace”或“inject”的字段,将预定义的测试值或造成断言违反的非法值替换或注入此输入报文的字段来构成一个用于模糊测试的变异报文。其中,对于输入报文中被标记为“replace”的字段,需用测试值或造成断言违反的非法值替换此输入报文的字段来构成一个用于模糊测试的变异报文;对于输入报文中被标记为“inject”的字段,可用任意长度的测试值或造成断言违反的非法值注入此输入报文中标记为“inject”的字段中来构成一个用于模糊测试的变异报文。
2)向IUT依次发送测试用例中的一个或多个测试报文。这里,所谓测试报文就是指前述的测试用例对应的输入报文;及,
3)接收来自IUT的各个响应报文;每收到一个响应报文即检查此响应报文是否与测试用例中相应的期望的输出报文是否一致;如果检查出某响应报文与期望的输出报文不一致或者IUT处于非正常状态,则可判断IUT可能存在相应的安全漏洞。
其中,造成断言违反的非法值可以为:不属合法取值范围之内的非法值或冲突值、随机生成的值、预定义的值或以其它方式生成的值。此外,造成断言违反的非法值有时能够通过反例和/或变异的PEFSM给出。
对于步骤106中的第二种情况,利用测试用例来对IUT进行模糊测试的方法可以包括:
1)向IUT依次发送测试用例中的一个或多个测试报文。这里,所谓测试报文就是指前述的测试用例对应的输入报文;及
2)接收来自IUT的各个响应报文;每收到一个响应报文即检查此响应报文是否与测试用例中相应的期望的输出报文是否一致;如果检查出某响应报文与期望的输出报文不一致或者IUT处于非正常状态,则可判断IUT可能存在相应的安全漏洞。
当上述测试用例中的变异报文被发往IUT之后,可以通过发送探测报文或手动检查等方式来检查IUT的状态。如果IUT处于非正常状态,如:出现系统性故障、未知的状态、宕机、程序崩溃、或者对测试用例中一输入报文不再响应等等,则可发现安全漏洞并且当前的测试用例就可被作为用于发现安全漏洞的滥用脚本(misusing script)。
在本发明实施例中,上述步骤104至步骤108可采用如下两种方式来执行:
1、批处理方式(Batch mode),即:先批量生成所有的测试用例,再执行模糊测试。
具体的,批处理方式可以有多种,下面列举其中两种:
1)先重复执行步骤104至步骤105,直到针对所有变异的协议状态模型的测试序列都已生成,然后执行步骤106至步骤107,直到针对所有测试序列的测试用例都已生成再执行步骤108以针对所生成的所有测试用例逐个进行模糊测试。
这里,利用一个行为变异算子针对协议状态模型中一个转移进行行为变异操作将生成一个变异的协议状态模型,当所有当前欲使用的行为变异算子和转移的组合都被已被用来生成变异的协议状态模型,则可确定已生成了所有变异的协议状态模型。并且,利用一个文法变异算子针对模型检测得到的每个测试序列中的带有标记的报文进行文法变异操作将生成一个变异报文,同时得到一个包含该变异报文的变异测试序列,当所有当前欲使用的文法变异算子和测试序列的组合都已被用来生成变异测试序列,则可确定已生成了所有变异测试序列。
2)重复执行步骤104至步骤107,直到针对变异的协议状态模型的所有测试序列的测试用例都已生成再执行步骤108以针对所生成的所有测试用例逐个进行模糊测试。其中,步骤104-105,和步骤106-107可交互执行。
即每当在步骤104中通过执行行为变异操作而得到了一个变异的协议状态模型、且在步骤105中对此变异的协议状态模型进行模型检测而生成了一个或多个反例,便在步骤106中通过执行文法变异操作而得到对应每个反例的变异测试序列,并在步骤107中对所述变异测试序列进行文法检测,从中确定出所有测试用例后,返回执行步骤104,直到针对所有变异的协议状态模型的所有测试序列的测试用例都已生成再执行步骤108以针对所生成的所有测试用例逐个进行模糊测试。
2、交互方式(Interactive mode),即:测试用例的生成和模糊测试交错进行。
具体的,交互方式也可以有多种,下面列举其中两种:
1)每当在步骤104中通过执行行为变异操作而得到了一个变异的协议状态模型、且在步骤105中对此变异的协议状态模型进行模型检测而生成了一个或多个反例,便在步骤106中通过执行文法变异操作而得到对应每个反例的一个或多个变异测试序列,并在步骤107中对所述一个或多个变异测试序列进行文法检测,在从中每确定出一个测试用例时,在步骤108中使用该测试用例来进行模糊测试,在针对步骤105中的每个反例的所有测试用例均进行模糊检测后,返回步骤104,确定利用新的行为变异算子确定下一个变异的协议状态模块,并重复执行上述操作,执行针对所有变异的协议状态模块的所有反例对应的测试用例均进行模糊检测后结束。
2)每当在步骤104中通过执行变异操作而得到了一个变异的协议状态模型、且在步骤105中对此变异的协议状态模型进行模型检测生成一个反例,继而在步骤106中通过执行文法变异操作而得到一个变异测试序列,并在步骤107中确定该变异测试序列为测试用例时,则在步骤108中使用此测试用例来进行模糊测试。因此,当利用当前测试用例执行完模糊测试之后,将返回步骤106来生成下一变异测试序列并在步骤107中对所述变异测试序列进行文法检测,确定该变异测试序列可作为测试用例时,在步骤108中执行模糊测试,此过程将重复执行直到针对步骤105的所有测试序列的所有可能的测试用例均已生成并已被测试过后,返回步骤104来生成下一个变异的协议状态模型,并重复执行上述过程,直到针对所述变异的协议状态模型的所有测试序列对应的测试用例均已生成并已被测试过后结束。
本领域技术人员可以知道:协议安全测试是为了检测在向IUT输入协议规范未定义的输入报文时IUT的不可预测的行为。在另一方面,协议一致性测试为了确定IUT是否为符合其协议规范的规定的技术,协议一致性测试的主要目的是为了验证协议规范所规定的功能/行为是否已经被IUT正确的实现,这样,在模糊测试中,当给出协议规范所定义的输入报文时,IUT应反馈协议规范所定义的正确输出报文。因此,协议一致性测试关注于协议规范所定义的输入报文。
在上述本发明实施例中,协议规范被形式化为一协议状态模型,其可被称为形式化规范S;以此形式化规范S为基础可以自动生成用于模糊测试的测试用例,此测试用例也可称为测试路径集T,其中,一测试路径为一个变异报文和相应的期望的输出报文的序列,此变异报文指的是其字段被执行变异后的输入报文;此测试路径集T将被输入IUT,再由IUT响应输出报文,通过将这些输出报文将与测试路径集T中的期望的输出报文进行比较来检测IUT中是否存在与测试路径集T相对应的安全漏洞。这种方法也能够为IUT提供在给定的形式化规范模型和故障情况下的故障覆盖率。
本发明实施例提供了一种基于模型的形式化协议安全测试方法,通过引入行为变异分析、模型检测、文法变异分析和文法检测技术到模糊测试来检测由各种协议的IUT的未知缺陷而引发的安全漏洞。以下为依据此协议安全测试方法的本发明一具体实例。
图2为本发明实施例所提供的协议安全测试方法一具体实例的实现流程示意图,包括如下步骤:
步骤201:将IUT所基于的协议规范映射为第一PEFSM(也称为初始PEFSM)。
具体的,为了使用户可以较容易的将协议规范转换为相应的PEFSM,可以采用图形化的用户界面(UI)(比如:状态和迁移图等)和基于可扩展标记语言(XML)的状态迁移语言(如:状态图的可扩展标记语言(SCXML,State ChartXML)等)来描述协议的各个状态、相应的转移和输入/输出报文。
可利用赋值语句或其它计算式来表示协议状态中包括输入报文(或其中的字段)内部变量
Figure BDA0000094836770000252
和输出报文(或其中的字段)
Figure BDA0000094836770000253
的计算。
图3示出了本实例中的初始PEFSM示意图。如图3所示,s0,s1,s2为原始的协议状态,s0为初始状态,状态之间的转移被标记为ik/Ok,其中,ik代表包含字段向量
Figure BDA0000094836770000254
的输入报文,并触发此转移,Ok代表包含字段向量
Figure BDA0000094836770000255
的输出报文,之后,此PEFSM将转移到新的状态。并且,在向量
Figure BDA0000094836770000256
中有一个TYPE域,其代表输入报文的类型。这里,ik,0≤k≤4,TYPE=tk,比如:对于输入报文i0,其TYPE域的值为t0
步骤202:向步骤201得到的初始PEFSM引入非法状态以形成第二PEFSM,从而向初始PEFSM引入与安全故障相关的组件。
在本实例中,将非法状态引入到初始PEFSM的方法为:
1)向初始PEFSM中加入一个非法状态(也称为“虫洞”状态)来模型化未知的IUT的系统性故障和明显未在协议规范中定义的未定义状态;并且,针对此非法状态,所有的内部变量
Figure BDA0000094836770000261
和输入报文的字段都将被设置为故障值(即:不属协议规范所定义的合法取值范围的值)。例如:假定内部变量Vi的合法取值范围为0~16,则此内部变量在非法状态中的值将被设为小于0或者大于16;再举一例:输入报文ik的TYPE字段将被设为
Figure BDA0000094836770000263
0≤k≤4。
2)此非法状态具有一个外出的转移,此外出的转移可以被标记为“重置(reset)”,并且指向PEFSM中的初始状态s0。此被标记为“reset”的转移代表复位操作,此复位操作将重启IUT并能使相应的PEFSM从系统性故障或未定义状态恢复到初始状态s0。由于,非法状态并不属于协议规范的原始定义内容,因此,并没有进入非法状态的转移,即:不能从初始PEFSM中的合法状态转移到此非法状态。
使用上述方法向初始PEFSM引入非法状态之后得到的第二PEFSM可如图4(但不限于)所示。在图4中,一个额外的非法状态被引入到图3所示的初始PEFSM中,此非法状态仅具有一个向初始状态s0的转移,此转移被标记为“reset”,并且没有任何初始PEFSM中的合法状态能转移到此非法状态。
步骤203:根据此IUT可能出现的故障,利用断言来表征初始PEFSM和/或第二PEFSM的测试目标,并利用文法约束来表征初始PEFSM和/或第二PEFSM的合法输入报文的文法规则。
在本实例中,计算树逻辑(CTL)或线性时序逻辑(LTL)等被用做断言,该断言用于根据不同安全测试要求来表征具体的测试目标,以下举出几种利用CTL断言来表征测试目标的例子。
1)根据协议的诸如身份验证(authentication)、授权(authorization)等安全要求,可以定义相应的测试目标。比如:根据协议规范定义:s1为身份验证状态,s0为初始状态,此协议的函数可以仅仅在验证合法之后提供,则此测试目标可以被定义为如下断言:
AXs0=s1
这里,A表示“总是(always)”,X代表下一个(Next),此时,AXs0=s1代表:在PEFSM中,s0的下一状态必须总是为s1
2)根据安全测试的领域知识,也可以定义通用的安全测试目标。
比如:假定额外的“虫洞(wormhole)”状态(即:非法状态)被引入到初始PEFSM中来代表系统性故障或未定义状态,则对于一个正确的IUT而言,初始PEFSM中的各个状态将不会转移到此“虫洞”状态;此时,令si代表初始PEFSM中的各个状态,其中,i=0,1,…,则以下断言可以被用做一个通用的测试目标:
!AG(si→wormhole)
这里,A代表“总是(always)”,G代表“全局的(globally)”,布尔符号!代表否定,则!AG(si→wormhole)声明了:任意状态si将全局的且总是不存在向“虫洞”状态的转移。
3)为了涵盖初始PEFSM中各个状态中的潜在缺陷,进一步的可以自动从初始PEFSM中反射出CTL断言以作为测试目标。以下举出几种从初始PEFSM中反射出CTL断言的方法实例,但本发明实施例中从初始PEFSM中反射出断言的方法并不限于此。
a.对于初始PEFSM中的每一对状态si和sj(不包括非法状态),如果它们之间没有转移,则反射出两个断言:
!AG(si→sj)和!AG(sj→si)
以上两个断言明确声明了在状态si和sj之间无任何转移存在。
b.对于初始PEFSM中的转移si→sj,如果在初始PEFSM中没有转移sj→si存在,则反射出一个断言:
!AG(sj→si)
以上断言明确声明了在初始PEFSM中不存在转移si→sj的反向转移sj→si
c.对于初始PEFSM中的转移si→sj,可以反射出一个断言:
AG(si→sj)
以上断言明确声明了初始PEFSM中存在一个合法转移si→sj
d.对于关心其输入输出的初始PEFSM中的每个转移
Figure BDA0000094836770000281
可以反射出一个断言:
AG((state=si &inPDU=in)→AX(state=si))
其中,in和out分别对应与该转移相关的输入报文和输出报文。
以上断言明确声明了在初始PEFSM中存在一个合法转移
4)除了上述针对状态和转移的断言,也可以生成针对内部变量
Figure BDA0000094836770000283
输入报文的字段以及动作
Figure BDA0000094836770000285
的断言。
例如:输入报文ik(0≤k≤4)的TYPE字段的合法值为t0、t1、t2、t3、t4,其它取值即为非法值,则以下断言可以被用作测试目标:
AG(ik.TYPE=t0∨t1∨t2∨t3∨t4)
以上断言声明了任意输入报文ik的值将全局的且总是为t0、t1、t2、t3和t4中的任一个。这里,仅以两个运算符AX和AG为例,在实际应用中,其它时序逻辑运算符AF、AU、EX、EF、EG和EU也可被用来定义作为测试目标的断言;其中,F代表“未来(future)”,U代表“直到(until)”,E代表“存在(exist)”。
同时,对应的文法约束可以自动从初始PEFSM和/或第二PEFSM的XML格式的合法输入报文中反射出来,并被作为XML模板,反射出的XML模板的文法特征包括(但不限于):
A.字段在报文中的位置;
B.字段在报文中出现的次数;
C.字段在报文中的数据类型或编码等。
此外,用户可根据协议规范定义更多的文法约束,或者,也可对反射出的XML模板进行手工编辑或修改等,例如,可包括(但不限于):
D.固定长度字段的宽度;
E.字段的取值范围等。
步骤204:通过对引入了非法状态的第二PEFSM执行行为变异操作来向此第二PEFSM注入安全故障,从而生成变异的PEFSM。
本实例中,执行行为变异操作所用的行为变异算子可包括但不限于:状态陷阱算子(STO)、输入改变算子(IAO)、表达式否定算子(ENO)、表达式递增算子(EIO)、表达式递减算子(EDO)、保持为0算子(Stuck-at-0)、保持为1算子(Stuck-at-1)、操作数否定算子(ONO)、操作数引用算子(ORO)、范围探测算子(REO)、用例注入算子(CIO)等。
在本实例中,针对转移
Figure BDA0000094836770000291
所执行的变异操作可以包括如下几种:
1)使用状态陷阱算子(STO)对此转移
Figure BDA0000094836770000292
执行变异操作,产生变异的转移
Figure BDA0000094836770000293
即将该转移的后继状态变为wormhole。
2)使用输入改变算子(IAO)对此转移
Figure BDA0000094836770000294
执行变异操作,产生变异的转移
Figure BDA0000094836770000295
其中,in′≠in,即将该转移的输入报文(inPDU)逐一转换为其他的输入报文。
针对协议状态中包括输入报文的字段内部变量
Figure BDA0000094836770000302
和输出报文的字段
Figure BDA0000094836770000303
的赋值语句所执行的变异操作可以包括如下几种:
1)使用表达式否定算子(ENO)对该赋值语句执行变异操作,使该赋值语句中(右边)表达式的值(按位(bit))取反。其中,赋值语句的表达式的值指的是其运算结果。
2)使用表达式递增算子(EIO)对该赋值语句执行变异操作,使该赋值语句(右边)表达式的值增加n。
3)使用表达式递减算子(EDO)对该赋值语句执行变异操作,使该赋值语句(右边)表达式的值减少n。
4)使用保持为0算子(Stuck-at-0)对该赋值语句执行变异操作,使该赋值语句中(左边)变量的取值变为0,也即将全0赋给(左边的)变量。
5)使用保持为1算子(Stuck-at-1)对该赋值语句执行变异操作,使该赋值语句中(左边)变量的取值变为1,也即将FF赋给(左边的)变量。
6)使用操作数否定算子(ONO)对该赋值语句执行变异操作,取反或按位取反该赋值语句(右边)表达式的操作数。
7)假如该赋值语句(右边)表达式有多个操作数,即为多个数值的运算,则使用操作数引用算子(ORO)对该赋值语句执行变异操作,将操作数逐一与其后的另一操作数交换,对于最后一个操作数,则将其与第一个操作数交换。
8)使用范围探测算子(REO)对该赋值语句执行变异操作,按位取反该赋值语句中(右边)表达式中每个操作数的值(就像ENO一样),并其将该赋值语句标记为“fuzz:replace:n”。其中,n为字段的字节宽度,该字段指的是赋值语句左边的变量,n通常为1,2,4,8个字节。
9)假如赋值语句包括可变长度的报文字段,并且存在与该字段的长度相关的断言,则可利用用例注入算子(CIO)对该赋值语句执行变异操作,用例注入算子用于将该可变长度的字段的长度增加n个字节,并将该赋值语句标记为“fuzz:inject”。
这样,针对第二PEFSM中的每一个转移si→sj及其内部变量和输入/输出报文的字段,通过执行行为变异操作可得到对应的变异的PEFSM,其中,每使用一个行为变异算子(如操作数引用算子、表达式否定算子等)执行了一次变异操作将产生一个变异的PEFSM,此变异的PEFSM中仅包括一个安全故障且与初始PEFSM不同。例如:如果使用操作引用算子对图4所示的PEFSM中的转移s2→s0(此转移为图3所示的初始PEFSM中的转移)执行变异操作,以使此转移s2→s0被变异为转移s2→s非法状态,则图4所示第二PEFSM将被变异为如下图5所示的变异的PEFSM。
步骤205:对此变异的PEFSM执行模型检测,以生成此变异的PEFSM中违反步骤203中生成的断言的一个或多个反例,此一个或多个反例被映射为测试序列。
在本实例中,采用NuSMV模型检测器作为产生测试序列的模型引擎,上述步骤205具体包括:
1)步骤204得到的变异的PEFSM通过NuSMV语言被翻译成NuSMV模型,NuSMV赋值约束(NuSMV ASSIGN constraint)被用来表征PEFSM中的状态转移。本实例中的一个变异的PEFSM可被翻译成如下的NuSMV模型:
Figure BDA0000094836770000311
Figure BDA0000094836770000321
Figure BDA0000094836770000331
2)NuSMV模型检测器对步骤204生成的变异的PEFSM和步骤203生成的用于表征测试目标的断言执行模型检测,以发现变异的PEFSM中的违反断言的测试用例(也称为反例)。比如:NuSMV模型检测器发现变异的PEFSM违反断言!AG(si→wormhole)和AG(ik.TYPE=t0∨t1∨t2∨t3∨t4),则生成相应的反例。
3)将所得到的反例映射为测试序列。
具体的,由于所生成的反例对应一个转移路径,所以在本实例中反例被表示为在此转移路径上存在的输入/输出报文的标记,这里,将这些标记映射为相应的输入/输出报文,这些输入/输出报文形成的报文序列构成一个测试序列。因此,可将反例直接映射到实际的测试序列(testing traces),该测试序列包括:一系列用于激发IUT的输入报文和作为IUT的预期响应的相应的输出报文。
同时,对于与违反断言的变异转移(如从合法状态到非法状态的转移)相对应的任一报文以及其中被模型检测器识别到的字段,该报文或其字段可被按照如下方式进行标记:
a.假如模型检测器可以识别出某个字段的变异可以导致该反例,并且该字段没有其它标记,则将该字段标记为“fuzz”;否则,将整个报文标记为“fuzz”。
b.假如识别出的字段对应的赋值语句被标记为“fuzz:replace:n”,则将报文中的该字段标记为“replace”,并且将利用长度为n的测试序列对该字段进行模糊测试。
c.假如识别出的字段对应的赋值语句被标记为“fuzz:inject”,则将报文中的该字段标记为“inject”,并将利用所有测试序列对该字段进行模糊测试。
进一步的,为了改善效率,可在执行模型检测之前和/或执行模型检测之后对测试用例执行优化处理,以消除其中冗余的测试用例。
步骤206:对所述测试序列进行文法变异操作来向此测试序列中的报文注入文法故障,以生成对应每个测试序列的变异测试序列。其中,一个测试序列对应一个或多个包含变异报文的变异测试序列。
对步骤205中产生的测试序列进行文法变异。具体地,对模型检测产生的每个测试序列中标记为“fuzz”的报文或含有标记为“fuzz”的字段的报文,可利用(但不限于)字段删除算子(Field Erase Operator)、字段重复算子(Field RepeatOperator)、字段交换算子(Field Exchange Operator)、宽度改变算子(Width ChangeOperator)、编码改变算子(Encode Change Operator)、取值否定算子(ValueNegation Operator)等文法变异算子中的任一者或组合对所述报文进行文法变异以产生对应的变异报文。
其中,字段删除算子用于从报文中删除对应的标记为“fuzz”字段。
字段重复算子用于将一个对应的标记为“fuzz”字段在报文中拷贝n份。字段交换算子用于将对应的当前标记为“fuzz”的字段的位置与其后的字段的位置相交换。
宽度改变算子用于将对应的当前标记为“fuzz”的字段的内容增加n个字节,其中,n可以为负数。
编码改变算子用于将对应的当前标记为“fuzz”的字段的编码格式变换为另一种,如从ASCII变换为UTF-8、UNICODE等。取值否定算子用于将将对应的当前标记为“fuzz”的字段的取值按位取反。
步骤207:对所述变异测试序列中的变异报文执行文法检测,以得到所述变异报文中违反上述文法约束的有效变异报文,将包含所述有效变异报文的变异测试序列作为测试用例。
采用对应的XML模板,即文法约束,对所述变异报文进行文法检测,其中违反XML模板中的文法约束的变异报文即为有效的变异报文,将包含所述有效的变异报文的测试序列作为进行后续模糊测试的测试用例。其中不违反XML模板中的文法约束的变异报文即为无效的变异报文,即这样的变异报文实质上还是一个合法的报文,因此可将包含该无效的变异报文的测试序列丢弃。
步骤208:利用步骤207得到的测试用例对IUT进行模糊测试,以检测此IUT中是否存在对应的安全漏洞。
具体的,针对一个测试用例,协议安全测试将按如下方式执行:
1)针对输入报文中被标记为“replace”或“inject”的字段,将预定义的测试值或造成断言违反的非法值替换或注入此输入报文的字段来构成一个用于模糊测试的变异报文。
其中,造成断言违反的非法值可以为:不属合法取值范围之内的非法值或冲突值、随机生成的值、预定义的值或以其它方式生成的值。此外,造成断言违反的非法值有时能够通过反例和/或变异的PEFSM给出。
2)依次发送测试用例中的每一个输入报文到IUT。
3)接收来自IUT的响应报文,每收到一个响应报文,即将此响应报文与测试用例中相应的期望的输出报文做比较,检查此响应报文是否与测试用例中相应的输出报文是否一致,如果检查出此响应报文与此期望的输出报文不一致,则可判断IUT出现了相应的安全故障。
4)在上述测试报文发送和比较结束之后,发送正常的探测报文至IUT以检查IUT是否处于系统性故障或未定义的状态。如果发现IUT非正常,则可发现安全漏洞,并且当前的被注入了特定测试实例的测试用例就为可被作为用来发现安全漏洞的滥用脚本。
在本实例中,步骤204至208采用交互方式执行,即:每当在步骤204中通过执行行为变异操作而得到了一个变异的协议状态模型、且在步骤205中对此变异的协议状态模型进行模型检测而生成了一个或多个反例,便在步骤206中通过执行文法变异操作而得到对应每个反例的一个或多个变异测试序列,并在步骤207中对所述一个或多个变异测试序列进行文法检测,在从中每确定出一个测试用例时,在步骤208中使用该测试用例来进行模糊测试,在针对步骤205中的每个反例的所有测试用例均进行模糊检测后,返回步骤204,确定利用新的行为变异算子确定下一个变异的协议状态模块,并重复执行上述操作,执行针对所有变异的协议状态模块的所有反例对应的测试用例均进行模糊检测后结束。
此外,也可以为:每当在步骤204中通过执行变异操作而得到了一个变异的协议状态模型、且在步骤205中对此变异的协议状态模型进行模型检测可生成一个测试序列,继而在步骤206中通过执行文法变异操作而得到一个变异测试序列,并在步骤207中确定该变异测试序列为测试用例时,则在步骤208中使用此测试用例,通过向其中标记为“replace”或“inject”的字段替换或注入不同的非法值来进行模糊测试。因此,当利用当前测试用例执行完模糊测试之后,将返回步骤206来生成下一变异测试序列并在步骤207中确定该变异测试序列可作为测试用例时,在步骤208中执行模糊测试,此过程将重复执行直到针对步骤205的所有测试序列的所有可能的测试用例均已生成并已被测试过后,返回步骤204来生成下一个变异的协议状态模型,并重复执行上述过程,直到针对所述变异的协议状态模型的所有测试序列对应的测试用例均已生成并已被测试过后结束。
基于上述协议安全测试方法,本发明实施例还提出了一种对协议实现进行安全测试装置。如图6所示,该装置包括:
第一模块601,用于在对协议实现进行安全测试时,将此协议实现所基于的协议规范映射为第一协议状态模型;
第二模块602,用于向第一模块601得到第一协议状态模型引入非法状态以形成第二协议状态模型;在此第二协议状态模型中,此非法状态对应于协议实现出现的安全故障;
第三模块603,用于利用断言来表征来自第二模块602的第二协议状态模型和/或来自第一模块601的第一协议状态模型的测试目标,同时利用文法约束来表征此第二协议状态模型和/或第一协议状态模型的合法输入报文的文法规则;
第四模块604,用于通过对来自第二模块602的第二协议状态模型执行行为变异操作来向此协议模型注入安全故障,从而生成变异的协议状态模型;
第五模块605,用于利用第三模块603得到的断言对第四模块604生成的变异的协议状态模型执行模型检测,以生成此变异的协议状态模型中违反上述断言的一个或多个反例,并将此一个或多个反例映射为一个或多个测试序列;
第六模块606,用于通过对来自所述第五模块605的测试序列执行文法变异操作来向此测试序列中的报文注入文法故障,以生成包含变异报文的变异测试序列,其中,一个测试序列可生成包含一个或多个变异测试序列;
第七模块607,用于利用第三模块603得到的文法约束对第六模块606生成的变异测试序列执行文法检测,以得到所述变异报文中违反上述文法约束的有效变异报文,将包含所述有效变异报文的变异测试序列作为测试用例;及,
第八模块608,用于利用第七模块607得到的测试用例对此协议实现进行模糊测试,以检测此协议实现中是否存在与所述一个或多个测试用例对应的安全漏洞。具体实现时,与图1所示方法中的描述相对应,若第五模块605采用第一种方式进行文法变异,则对于第五模块605产生的只包括标记为“replace”或“inject”的字段,而不包括标记为“fuzz”的字段的测试序列,则无需由第六模块606进行处理,而是可直接将其作为测试用例输出给第八模块608执行模糊测试即可,此时,第八模块608还可利用来自第五模块605的测试用例对此协议实现进行模块测试。
优选的,第五模块605将每一个反例都映射为一个测试序列。
具体的,第四模块604、第五模块605、第六模块606、第七模块607和第八模块608之间可采用两种工作方式:
一、  批处理方式
批处理方式又可包括多种实现方式,下面列举其中两种:
1)当第四模块604  生成所有的变异的协议状态模型并且第五模块605通过执行模型检测而得到针对所有的变异的协议状态模块的所有测试序列,并且第六模块606针对所有测试序列生成了所有变异测试序列且第七模块607确定出了所有的测试用例后,第八模块608再以批处理的方式利用所有测试用例进行模糊测试。
2)第四模块604至第七模块607并行执行,即当第四模块604通过执行行为变异操作而得到了一个变异的协议状态模型、且第五模块605对此变异的协议状态模型进行模型检测而生成了一个或多个反例,便由第六模块606执行文法变异操作而得到对应每个反例的变异测试序列,且第七模块607对所述变异测试序列进行文法检测,从中确定出所有测试用例,直到针对所有变异的协议状态模型的所有测试序列的测试用例都已生成,再由第八模块608针对所生成的所有测试用例逐个进行模糊测试。
二、  交互处理方式
交互处理方式又可包括多种实现方式,下面列举其中两种:
1)每当第四模块604生成一个变异的协议状态模块并且第五模块605对此变异的协议状态模型执行模型检测而得到针对此变异的协议状态模型的一个或多个测试序列,便由第六模块606执行文法变异操作而得到对应每个反例的变异测试序列,且第七模块607对所述变异测试序列进行文法检测,从中确定出测试用例,第八模块608即利用针对此反例的一个或多个测试用例进行模糊测试。
2)每当第四模块604生成一个变异的协议状态模型、且第五模块605对此变异的协议状态模型进行模型检测生成一个反例,继而第六模块606通过执行文法变异操作而得到一个变异测试序列,且第七模块607对所述变异测试序列进行文法检测,确定该变异测试序列为测试用例时,第八模块608便使用此测试用例来进行模糊测试。
可选的,第三模块603在得到表征测试目标的断言之后,可进一步优化这些断言,以去除其中冗余的断言。
可选的,第五模块605在映射得到测试序列之后,可进一步这些测试序列进行优化,以去除其中冗余的测试序列。
可选的,上述协议安全测试装置还可对协议实现进行协议一致性测试。此时,第四模块604可进一步对第三模块603得到的断言执行变异操作,以生成变异的断言;第五模块605可进一步利用第四模块604生成的变异的断言对第一模块601得到的第一协议状态模型执行模型检测,以得到用于一致性测试的一个或多个测试用例;及,第六模块606可进一步利用第五模块605得到的用于一致性测试的一个或多个测试用例对此协议实现进行一致性测试以发现其中与协议规范不一致的漏洞。
上述各个模块实现其功能的具体方法在前述各个实施例中均已详述,这里不再重复。
此外,上述协议安全测试装置可以实现为硬件设备,也可以以软件的方式实现为虚拟装置,该虚拟装置可运行在一计算机设备中以实现协议安全测试。
本发明还包括一种机器(计算机或具有计算能力的机器)可读的存储介质,存储用于使一机器执行如本文所述的协议实现安全测试方法的机器可读指令。
本发明还包括一种计算机程序,其包括可执行如本文所述的协议实现安全测试方法的机器可读指令。
具体地,可以提供配有存储介质的系统或者装置,在该存储介质上存储着实现上述实施例中任一实施例的功能的软件程序代码,且使该系统或者装置的计算机(或CPU或MPU)读出并执行存储在存储介质中的程序代码。
在这种情况下,从存储介质读取的程序代码本身可实现上述实施例中任何一项实施例的功能,因此程序代码和存储程序代码的存储介质构成了本发明的一部分。
用于提供程序代码的存储介质实施例包括软盘、硬盘、磁光盘、光盘(如CD-ROM、CD-R、CD-RW、DVD-ROM、DVD-RAM、DVD-RW、DVD+RW)、磁带、非易失性存储卡和ROM。可选择地,可以由通信网络从服务器计算机上下载程序代码。
此外,应该清楚的是,不仅可以通过执行计算机所读出的程序代码,而且可以通过基于程序代码的指令使计算机上操作的操作系统等来完成部分或者全部的实际操作,从而实现上述实施例中任意一项实施例的功能。
在本发明实施例中,基于协议规范的形式化方法在协议安全测试中起着重要的作用,协议规范可被用来指导用于自动检查IUT的安全故障的反例的自动生成,因此,能显著减轻利用反例的协议安全测试的工作量,进而能显著提高协议安全测试的效率,并且本发明实施例所提出的技术方案易于实现且与协议的具体实现相互独立,具有较强的可实施性。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (22)

1.一种对协议实现进行安全测试的方法,该方法包括:
将所述协议实现所基于的协议规范映射为第一协议状态模型;
向所述第一协议状态模型引入非法状态以形成第二协议状态模型;其中,所述非法状态与所述协议实现中存在的安全故障相对应;
利用断言来表征所述第一协议状态模型和/或第二协议状态模型的测试目标;
利用文法约束来表征所述第二协议状态模型和/或第一协议状态模型的合法输入报文的文法规则;
对所述第二协议状态模型执行行为变异操作,生成变异的协议状态模型;
根据所述断言对所述变异的协议状态模型执行模型检测,生成一个或多个违反所述断言的反例,将所述反例映射为测试序列;
对所述测试序列执行文法变异操作,生成包含变异报文的变异测试序列,每个测试序列生成包含一个或多个变异报文的变异测试序列;
根据所述文法约束对所述变异测试序列中的变异报文执行文法检测,得到所述变异报文中违反所述文法约束的有效变异报文,将包含所述有效变异报文的变异测试序列作为测试用例;及,
利用所述测试用例对所述协议实现进行模糊测试,以检测所述协议实现中是否存在与所述一个或多个测试用例对应的安全漏洞。
2.根据权利要求1所述的方法,其中,所述第一协议状态模型为参数化扩展有限状态机PEFSM或者输入/输出符号转移系统IOLTS。
3.根据权利要求1所述的方法,其中,所述利用断言来表征所述第一协议状态模型和/或所述第二协议状态模型的测试目标,包括:
基于给定的测试目标来定义的断言;和/或,
根据安全测试领域知识的预定义的断言;和/或,
从所述第一协议状态模型中反射出的断言。
4.根据权利要求1所述的方法,其中,所述利用文法约束是:
根据协议规范来定义的文法约束;和/或,
从所述第一协议状态模型的合法输入报文中反射出的文法约束。
5.根据权利要求1所述的方法,其中,所述对所述第二协议状态模型执行行为变异操作,包括:利用行为变异算子来对所述第二协议状态模型中的转移以及转移中的逻辑运算执行行为变异操作。
6.根据权利要求5所述的方法,其中,所述对所述第二协议状态模型中的转移执行行为变异操作,包括:
利用状态陷阱算子和/或输入改变算子对所述转移执行行为变异操作,所述状态陷阱算子用于将转移的后续状态改变为非法状态,所述输入改变算子用于将转移的输入报文改变为其他报文;
7.根据权利要求5所述的方法,其中,所述对所述第二协议状态模型中转移中的逻辑运算执行行为变异操作,包括:
利用表达式否定算子、表达式递增算子、表达式递减算子、保持为0算子、保持为1算子、操作数否定算子、操作数引用算子、范围探测算子和用例注入算子中的任一者或任意组合对所述逻辑运算执行行为变异操作,其中:
所述表达式否定算子用于对逻辑运算中的表达式值取反;
所述表达式递增算子用于使逻辑运算中表达式的值增加n;
所述表达式递减算子用于使逻辑运算中表达式的值减少n;
保持为0算子用于使逻辑运算中表达式的取值变为0;
保持为1算子用于使逻辑运算中表达式的取值变为1;
操作数否定算子对表达式的各个操作数按位取反;
操作数引用算子用于将操作数逐一与其后的另一操作数交换,对于最后一个操作数,则将其与第一个操作数交换;
范围探测算子对表达式中每个操作数的值进行按位取反,并其将该赋值语句标记为“替换”标识;
用例注入算子用于将逻辑运算中可变长度的字段的长度增加或减少n个字节,并将该赋值语句标记为“注入”标识;
其中n为正整数。
8.根据权利要求1所述的方法,其中,将模型检测所产生的每一个反例映射为一个测试序列,所述反例对应所述变异的协议状态模型中一条由一个或多个转移构成的转移路径,所述转移路径上存在一个或多个输入报文及其对应的一个或多个输出报文;
所述将所述反例映射为测试序列,包括:将所述反例映射为所述转移路径上存在的所述一个或多个输入报文及其对应的一个或多个输出报文,所得到的报文的序列即为所述测试序列,并且将与违反断言的变异转移所对应的任一报文以及所述报文中被模型检测出的字段标记出。
9.根据权利要求8所述的方法,其中,所述将与违反断言的变异转移所对应的任一报文以及所述报文中被模型检测到的字段标记出包括:
若模型检测能够识别出所述报文的某个字段的变异可以导致该反例,并且所述字段没有其它标记,则将所述字段标记为“模糊测试”,否则,将整个报文标记为“模糊测试”标识;
若模型检测识别出所述报文中的某个字段对应的逻辑运算被标记为“替换”标识,则将报文中的所述字段标记为“替换”标识;及,
若模型检测识别出所述报文中的某个字段对应的逻辑运算被标记为“注入”标识,则将报文中的所述字段标记为“注入”标识。
10.根据权利要求9所述的方法,其中,所述对所述测试序列执行文法变异操作中,对测试序列中标记为“模糊测试”标识的报文或含有标记为“模糊测试”标识的字段的报文利用文法变异算子执行文法变异。
11.根据权利要求10所述的方法,其中,所述文法变异算子包括下列文法变异算子中的任一个或任意组合:
用于将标记为“模糊测试”标识的字段从报文中删除的字段删除算子;
用于将标记为“模糊测试”标识的字段在报文中拷贝多份的字段重复算子;
用于将标记为“模糊测试”标识的字段的位置与其后的字段的位置进行交换的字段交换算子;
用于将标记为“模糊测试”标识的字段的内容增加或减少n个字节的宽度改变算子,n为正整数;
用于将标记为“模糊测试”标识的字段的编码格式变换为另一种的编码改变算子;及,
用于将标记为“模糊测试”标识的字段的取值取反或按位取反的取值否定算子。
12.根据权利要求9所述的方法,其中,所述对所述测试序列执行文法变异操作中,
对测试用例中包含标记为“替换”标识的字段的报文,利用预定义的测试值或造成断言违反的非法值替换该报文中所述标记为”替换”标识的字段,得到对应的变异报文;
对测试用例中包含标记为“注入”标识的字段的报文,利用任意长度的预定义的测试值或造成断言违反的非法值注入该报文中标记为”注入”标识的字段中,得到对应的变异报文。
13.根据权利要求9所述的方法,其中,该方法进一步包括:将只包括标记为“替换”标识或“注入”标识的字段的测试序列直接作为进行模糊测试的测试用例。
14.根据权利要求12或13所述的方法,其中,所述利用所述测试用例对所述协议实现进行模糊测试包括:
向所述协议实现依次发送该测试用例中的各个输入报文;及,
接收来自所述协议实现的响应报文,如果所收到的任一响应报文与该测试用例中对应的输出报文不一致,或者,所述协议实现处于非正常状态,则发现了所述协议实现存在与对应的输入报文对应的安全漏洞。
15.根据权利要求1所述的方法,进一步包括:在进行文法变异操作之前,对所述一个或多个测试序列进行优化处理,以去除冗余的测试序列。
16.根据权利要求1所述的方法,其中,该第一协议状态模型描述该协议状态和状态转移。
17.一种对协议实现进行安全测试的装置,其特征在于,该装置包括:
第一模块(601),用于在对所述协议实现进行安全测试时,将所述协议实现所基于的协议规范映射为第一协议状态模型;
第二模块(602),用于向所述第一模块(601)得到的所述第一协议状态模型引入非法状态以形成第二协议状态模型,其中,所述非法状态对应于所述协议实现存在的安全故障;
第三模块(603),用于利用断言来表征来自所述第二模块(602)的所述第二协议状态模型和/或来自所述第一模块(601)的所述第一协议状态模型的测试目标,并利用文法约束来表征所述第二协议状态模型和/或第一协议状态模型的合法输入报文的文法规则;
第四模块(604),用于对来自所述第二模块(602)的所述第二协议状态模型执行行为变异操作,从而生成变异的协议状态模型;
第五模块(605),用于利用所述第三模块(603)得到的断言对所述第四模块(604)生成的所述变异的协议状态模型执行模型检测,以生成一个或多个测试序列,所述一个或多个测试序列由所述变异的协议状态模型中违反所述断言的一个或多个反例映射得到;
第六模块(606),用于对来自所述第五模块(605)的测试序列执行文法变异操作,生成包含变异报文的变异测试序列,其中,一个测试序列生成包含一个或多个变异的变异测试序列;
第七模块(607),用于利用第三模块(603)得到的文法约束对第六模块(606)生成的变异测试序列执行文法检测,得到所述变异报文中违反所述文法约束的有效变异报文,将包含所述有效变异报文的变异测试序列作为测试用例;及,
第八模块(608),用于利用所述第七模块(607)得到的测试用例对所述协议实现进行模糊测试,以检测所述协议实现中是否存在与所述一个或多个测试用例对应的安全漏洞。
18.根据权利要求17所述的装置,其中,所述第三模块(603)进一步用于优化所述断言,以去除冗余的断言;或者,所述第五模块(605)进一步用于对所述一个或多个测试用例进行优化,以去除冗余的测试用例。
19.根据权利要求17或18所述的装置,其中,第五模块(605)进一步将只包括标记为“替换”标识或“注入”标识的字段的测试序列直接作为测试用例输出给第八模块(608)执行模糊测试。
20.根据权利要求17所述的装置,其中,该第一模块(601)配置为将所述协议规范映射为描述该协议状态和状态转移的该第一协议状态模型。
21.一种计算机可读介质,其上存储有用于实现权利要求1-16任一项所述的方法的计算机可读代码。
22.一种计算机程序,其包含用于实现权利要求1-16任一项所述的方法的计算机可读代码。
CN201110293769.3A 2011-09-29 2011-09-29 一种对协议实现进行安全测试的方法及装置 Active CN103036730B (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN201110293769.3A CN103036730B (zh) 2011-09-29 2011-09-29 一种对协议实现进行安全测试的方法及装置
DE201210216841 DE102012216841A1 (de) 2011-09-29 2012-09-20 Verfahren und Vorrichtung zur Durchführung von Sicherheitstests hinsichtlich von Protokollimplementierungen

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201110293769.3A CN103036730B (zh) 2011-09-29 2011-09-29 一种对协议实现进行安全测试的方法及装置

Publications (2)

Publication Number Publication Date
CN103036730A true CN103036730A (zh) 2013-04-10
CN103036730B CN103036730B (zh) 2015-09-23

Family

ID=47878811

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201110293769.3A Active CN103036730B (zh) 2011-09-29 2011-09-29 一种对协议实现进行安全测试的方法及装置

Country Status (2)

Country Link
CN (1) CN103036730B (zh)
DE (1) DE102012216841A1 (zh)

Cited By (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103812729A (zh) * 2014-02-19 2014-05-21 北京理工大学 一种网络协议模糊测试方法和装置
CN104375942A (zh) * 2014-12-11 2015-02-25 无锡江南计算技术研究所 一种面向二进制的混合模糊测试方法
CN105589906A (zh) * 2014-12-26 2016-05-18 中国银联股份有限公司 交易报文规范性监控方法
CN105763392A (zh) * 2016-02-19 2016-07-13 中国人民解放军理工大学 一种基于协议状态的工控协议模糊测试方法
CN106302025A (zh) * 2016-08-22 2017-01-04 腾讯科技(深圳)有限公司 通信协议的自动化测试方法和装置
CN106506280A (zh) * 2016-11-24 2017-03-15 工业和信息化部电信研究院 智能家居设备的通信协议测试方法及系统
CN107154929A (zh) * 2017-03-31 2017-09-12 武汉斗鱼网络科技有限公司 一种直播软件的测试方法及装置
CN107579871A (zh) * 2017-07-24 2018-01-12 清华大学 基于模型检测的分布式测试脚本的生成方法与生成系统
CN108400978A (zh) * 2018-02-07 2018-08-14 深圳壹账通智能科技有限公司 漏洞检测方法、装置、计算机设备和存储介质
CN109446146A (zh) * 2018-11-09 2019-03-08 中国科学院长春光学精密机械与物理研究所 一种应用层通信协议的状态转换序列生成方法
CN110191021A (zh) * 2019-05-29 2019-08-30 北京百度网讯科技有限公司 一种协议测试方法、装置、电子设备及存储介质
CN110232012A (zh) * 2018-03-06 2019-09-13 国家计算机网络与信息安全管理中心 一种基于xml的模糊测试语言协议测试脚本和测试引擎
CN111123888A (zh) * 2019-12-19 2020-05-08 江苏中天科技软件技术有限公司 一种工控协议测试方法、系统及电子设备和存储介质
CN111163043A (zh) * 2018-11-08 2020-05-15 全球能源互联网研究院有限公司 一种源网荷系统实时交互协议深度解析方法和系统
CN111310113A (zh) * 2020-02-13 2020-06-19 北京工业大数据创新中心有限公司 基于时序数据的专家规则系统的反例生成方法及装置
CN111628900A (zh) * 2019-02-28 2020-09-04 西门子股份公司 基于网络协议的模糊测试方法、装置和计算机可读介质
CN112165465A (zh) * 2020-09-16 2021-01-01 杭州安恒信息技术股份有限公司 外发第三方平台的数据处理方法、装置和电子装置
CN113075537A (zh) * 2019-07-01 2021-07-06 成都奥卡思微电科技有限公司 一种迭代式的形式验证断言空泛性强度的测试方法、存储介质和终端
CN113342669A (zh) * 2021-06-22 2021-09-03 无锡江南计算技术研究所 一种缩短芯片代码覆盖率收敛时间的验证方法及装置
CN113783721A (zh) * 2021-08-20 2021-12-10 大连理工大学 面向工业控制网络协议的可信性建模与验证方法
CN113812116A (zh) * 2019-06-17 2021-12-17 西门子股份公司 网络行为模型构建方法、装置和计算机可读介质
CN114039783A (zh) * 2021-11-10 2022-02-11 中国人民解放军战略支援部队信息工程大学 一种网络安全协议脆弱性分析方法
CN114650163A (zh) * 2022-01-21 2022-06-21 中国人民解放军战略支援部队信息工程大学 面向有状态网络协议的模糊测试方法及系统

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103533562B (zh) * 2013-10-31 2017-02-15 工业和信息化部电子第五研究所 无线传感器网络节点协议一致性测试装置及方法
CN104391788A (zh) * 2014-11-07 2015-03-04 北京交控科技有限公司 一种基于状态模型的安全通信协议测试方法及系统
CN105049256B (zh) * 2015-08-10 2018-11-13 北京思特奇信息技术股份有限公司 一种通用自定义接口报文实现方法及系统
CN112463581B (zh) * 2020-08-18 2021-09-21 清华大学 一种对分布式系统进行模糊测试的方法及系统
CN116094850B (zh) * 2023-04-11 2023-06-27 清华大学 基于系统状态追踪图引导的网络协议漏洞检测方法及系统

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101859274A (zh) * 2009-04-07 2010-10-13 西门子(中国)有限公司 一种进行模糊测试的方法及系统
US20100287535A1 (en) * 2009-05-08 2010-11-11 Electronics And Telecommunications Research Institute System and method for testing software reliability using fault injection
CN102087631A (zh) * 2011-03-09 2011-06-08 中国人民解放军国发科学技术大学 一种面向状态协议实现软件的模糊测试方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101859274A (zh) * 2009-04-07 2010-10-13 西门子(中国)有限公司 一种进行模糊测试的方法及系统
US20100287535A1 (en) * 2009-05-08 2010-11-11 Electronics And Telecommunications Research Institute System and method for testing software reliability using fault injection
CN102087631A (zh) * 2011-03-09 2011-06-08 中国人民解放军国发科学技术大学 一种面向状态协议实现软件的模糊测试方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
章志燮: ""面向变异分析的协议安全测试方法"", 《西安交通大学学报》 *

Cited By (39)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103812729A (zh) * 2014-02-19 2014-05-21 北京理工大学 一种网络协议模糊测试方法和装置
CN103812729B (zh) * 2014-02-19 2017-02-08 北京理工大学 一种网络协议模糊测试方法和装置
CN104375942A (zh) * 2014-12-11 2015-02-25 无锡江南计算技术研究所 一种面向二进制的混合模糊测试方法
CN105589906B (zh) * 2014-12-26 2019-02-19 中国银联股份有限公司 交易报文规范性监控方法
CN105589906A (zh) * 2014-12-26 2016-05-18 中国银联股份有限公司 交易报文规范性监控方法
CN105763392A (zh) * 2016-02-19 2016-07-13 中国人民解放军理工大学 一种基于协议状态的工控协议模糊测试方法
CN105763392B (zh) * 2016-02-19 2019-03-08 中国人民解放军理工大学 一种基于协议状态的工控协议模糊测试方法
CN106302025A (zh) * 2016-08-22 2017-01-04 腾讯科技(深圳)有限公司 通信协议的自动化测试方法和装置
CN106506280A (zh) * 2016-11-24 2017-03-15 工业和信息化部电信研究院 智能家居设备的通信协议测试方法及系统
CN106506280B (zh) * 2016-11-24 2019-10-01 工业和信息化部电信研究院 智能家居设备的通信协议测试方法及系统
CN107154929A (zh) * 2017-03-31 2017-09-12 武汉斗鱼网络科技有限公司 一种直播软件的测试方法及装置
CN107579871A (zh) * 2017-07-24 2018-01-12 清华大学 基于模型检测的分布式测试脚本的生成方法与生成系统
CN107579871B (zh) * 2017-07-24 2020-05-01 清华大学 基于模型检测的分布式测试脚本的生成方法与生成系统
CN108400978A (zh) * 2018-02-07 2018-08-14 深圳壹账通智能科技有限公司 漏洞检测方法、装置、计算机设备和存储介质
CN108400978B (zh) * 2018-02-07 2021-08-06 深圳壹账通智能科技有限公司 漏洞检测方法、装置、计算机设备和存储介质
CN110232012A (zh) * 2018-03-06 2019-09-13 国家计算机网络与信息安全管理中心 一种基于xml的模糊测试语言协议测试脚本和测试引擎
CN111163043A (zh) * 2018-11-08 2020-05-15 全球能源互联网研究院有限公司 一种源网荷系统实时交互协议深度解析方法和系统
CN109446146A (zh) * 2018-11-09 2019-03-08 中国科学院长春光学精密机械与物理研究所 一种应用层通信协议的状态转换序列生成方法
CN111628900B (zh) * 2019-02-28 2023-08-29 西门子股份公司 基于网络协议的模糊测试方法、装置和计算机可读介质
CN111628900A (zh) * 2019-02-28 2020-09-04 西门子股份公司 基于网络协议的模糊测试方法、装置和计算机可读介质
CN110191021A (zh) * 2019-05-29 2019-08-30 北京百度网讯科技有限公司 一种协议测试方法、装置、电子设备及存储介质
CN110191021B (zh) * 2019-05-29 2021-04-30 北京百度网讯科技有限公司 一种协议测试方法、装置、电子设备及存储介质
CN113812116A (zh) * 2019-06-17 2021-12-17 西门子股份公司 网络行为模型构建方法、装置和计算机可读介质
CN113075537B (zh) * 2019-07-01 2022-10-11 成都奥卡思微电科技有限公司 一种迭代式的形式验证断言空泛性强度的测试方法、存储介质和终端
CN113075537A (zh) * 2019-07-01 2021-07-06 成都奥卡思微电科技有限公司 一种迭代式的形式验证断言空泛性强度的测试方法、存储介质和终端
CN111123888A (zh) * 2019-12-19 2020-05-08 江苏中天科技软件技术有限公司 一种工控协议测试方法、系统及电子设备和存储介质
CN111123888B (zh) * 2019-12-19 2022-03-15 江苏中天互联科技有限公司 一种工控协议测试方法、系统及电子设备和存储介质
CN111310113B (zh) * 2020-02-13 2021-01-15 北京工业大数据创新中心有限公司 基于时序数据的专家规则系统的反例生成方法及装置
CN111310113A (zh) * 2020-02-13 2020-06-19 北京工业大数据创新中心有限公司 基于时序数据的专家规则系统的反例生成方法及装置
CN112165465A (zh) * 2020-09-16 2021-01-01 杭州安恒信息技术股份有限公司 外发第三方平台的数据处理方法、装置和电子装置
CN112165465B (zh) * 2020-09-16 2023-04-07 杭州安恒信息技术股份有限公司 外发第三方平台的数据处理方法、装置和电子装置
CN113342669A (zh) * 2021-06-22 2021-09-03 无锡江南计算技术研究所 一种缩短芯片代码覆盖率收敛时间的验证方法及装置
CN113342669B (zh) * 2021-06-22 2022-12-30 无锡江南计算技术研究所 一种缩短芯片代码覆盖率收敛时间的验证方法及装置
CN113783721A (zh) * 2021-08-20 2021-12-10 大连理工大学 面向工业控制网络协议的可信性建模与验证方法
CN113783721B (zh) * 2021-08-20 2022-06-21 大连理工大学 面向工业控制网络协议的可信性建模与验证方法
CN114039783A (zh) * 2021-11-10 2022-02-11 中国人民解放军战略支援部队信息工程大学 一种网络安全协议脆弱性分析方法
CN114039783B (zh) * 2021-11-10 2024-01-30 中国人民解放军战略支援部队信息工程大学 一种网络安全协议脆弱性分析方法
CN114650163A (zh) * 2022-01-21 2022-06-21 中国人民解放军战略支援部队信息工程大学 面向有状态网络协议的模糊测试方法及系统
CN114650163B (zh) * 2022-01-21 2023-08-22 中国人民解放军战略支援部队信息工程大学 面向有状态网络协议的模糊测试方法及系统

Also Published As

Publication number Publication date
DE102012216841A1 (de) 2013-04-04
CN103036730B (zh) 2015-09-23

Similar Documents

Publication Publication Date Title
CN103036730B (zh) 一种对协议实现进行安全测试的方法及装置
CN102624574B (zh) 一种对协议实现进行安全测试的方法及装置
Felderer et al. Model‐based security testing: a taxonomy and systematic classification
Lo et al. SMArTIC: Towards building an accurate, robust and scalable specification miner
Hooimeijer et al. A decision procedure for subset constraints over regular languages
US20130339930A1 (en) Model-based test code generation for software testing
CN103853650A (zh) 一种模糊测试的测试用例生成方法及装置
Tahat et al. Regression test suite prioritization using system models
US20120131668A1 (en) Policy-Driven Detection And Verification Of Methods Such As Sanitizers And Validators
US20150286555A1 (en) System and method for converting the business processes to test-centric activity diagrams
CN111694746A (zh) 面向编译型语言AS3的Flash缺陷模糊测评工具
Ma et al. Model checking based security policy verification and validation
Reger Automata based monitoring and mining of execution traces
Damasceno et al. Learning by sampling: learning behavioral family models from software product lines
US10387288B2 (en) Interactive analysis of a security specification
Yang et al. Information gain of black-box testing
CN111552968A (zh) 基于模型检查的嵌入式终端软件代码漏洞检测方法及装置
Bhurke et al. Methods of Formal Analysis for ICS Protocols and HART-IP CPN modelling
CN111625448B (zh) 协议包生成方法、装置、设备及存储介质
CN101833505B (zh) 一种软件系统安全缺陷检测方法
Ngo et al. Ranking warnings of static analysis tools using representation learning
Büchler et al. Model inference and security testing in the spacios project
Jokhio et al. Towards specification based testing for semantic web services
Baudry Testing model transformations: A case for test generation from input domain models
Aiguier et al. Exhaustive test sets for algebraic specifications

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