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

文档序号:7575818阅读:7056来源:国知局
专利名称:一种对协议实现进行安全测试的方法及装置的制作方法
技术领域
本发明涉及信息安全(Information Security)技术领域,特别涉及一种对协议实现进行安全测试的方法及装置。
背景技术
计算机信息安全技术是一门由密码应用技术、信息安全技术、数据灾难与数据恢复技术、操作系统维护技术等组成的计算机综合应用学科。其中,信息安全技术主要用于防止系统漏洞、防止外部黑客入侵、防御病毒破坏和对可疑访问进行有效控制等。随着互联网(Internet)的发展,各种计算机系统中都迫切需要加强其信息安全技术。以信息通信技术(ICT, Information Communication Technology)系统为例。ICT作为一种向客户提供的服务,是信息技术(IT, Information Technology)与通信技术(CT,Communication Technology)的结合和交融,通信业、电子信息产业、互联网、传媒业都将融合在ICT的范围内,进而能为客户提供一站式的ICT整体服务,包括集成服务、外包服务、专业服务、知识服务以及软件开发服务等。但是,随着ICT系统的发展,保护ICT系统的基础结构的要求也在显著提高。比如不同项目利益相关者(如合资企业、联盟伙伴、外包服务)之间连接性的提高、智能装置的连接性的提高、外部连接性的增强、快速增长的网络入侵事件以及出现更多的智能黑客和恶意软件等情况,都导致了 ICT系统的基础结构遭受攻击以及威胁的可能性的显著提高。因此,就非常有必要加强ICT系统的信息安全技术,以针对安全漏洞和/或自发故障来保证ICT系统的基础结构的通信安全。在信息安全技术中,很重要的一个课题就是对协议实现所基于的协议进行安全测试。现存的几种协议安全测试方法包括形式化验证(Informal Verification)、白盒(ffhite-box)测试和黑盒(Black_box)测试等等。其中,由于形式化验证和白盒测试需要作为待测实现(IUT, Implementation Under Test)的计算机程序的源代码(Source Code),因此,此种方法可适用的场景非常有限;而另一方面,黑盒测试基于协议的外部描述,即协议规范(Specifications),其实现并不需要计算机程序的源代码,进而黑盒测试的实现可以与协议实现的计算机程序开发相互独立,其测试结果可以应用于协议规范的所有实现情况,因此,黑盒测试可以广泛应用于各种场景下的安全测试。但是,黑盒测试的实现成本非常高,也非常耗时,且难以优化和改进。因此,目前在信息安全技术领域中,亟待开发一种协议安全测试技术,其不需要协议实现的计算机程序的源代码,并且具有较高的执行效率以及较低的实现成本。

发明内容
为解决上述技术问题,本发明实施例提出了一种对协议实现进行安全测试方法及装置,其不需要待测的协议实现的计算机程序的源代码即能实现协议的安全测试,且具有较高的执行效率以及较低的实现成本。本发明实施例提出了一种对协议实现进行安全测试的方法,该方法包括
将协议实现所基于的协议规范映射为第一协议状态模型;向所述第一协议状态模型引入非法状态以形成第二协议状态模型;其中,所述非法状态与所述协议实现出现的安全故障相对应;利用断言来表征所述第一协议状态模型和/或第二协议状态模型的测试目的;对所述第二协议状态模型执行变异操作,从而生成变异的协议状态模型;根据所述断言对所述变异的协议状态模型执行模型检测,以生成至少一个测试套件,以及利用所述一个或多个测试套件对所述协议实现进行模糊测试,以检测所述协议实现中是否存在与所述测试套件对应的安全漏洞。本发明实施例还提出了一种对协议实现进行安全测试的装置,该装置包括第一映射模块,用于将协议实现所基于的协议规范映射为第一协议状态模型;非法状态模块,用于向所述第一映射模块得到的所述第一协议状态模型引入非法状态以形成第二协议状态模型;其中,所述非法状态对应于所述协议实现出现的安全故障;断言模块,用于利用断言来表征来自所述非法状态模块的所述第二协议状态模型和/或来自所述第一映射模块的所述第一协议状态模型的测试目的;变异模块,用于对来自所述非法状态模块的所述第二协议状态模型执行变异操作,从而生成变异的协议状态模型;检测模块,用于利用所述断言模块得到的断言对所述变异模块生成的所述变异的协议状态模型执行模型检测,以生成一个或多个测试套件,所述一个或多个测试套件由所述变异的协议状态模型中违反所述断言的一个或多个反例映射得到;及,测试模块,用于利用所述检测模块得到的一个或多个测试套件对所述协议实现进行模糊测试,以检测所述协议实现中是否存在与所述一个或多个测试套件对应的安全漏洞。采用本发明实施例提供的方法及装置能够以较高的执行效率以及较低的实现成本实现协议安全测试,且无需待测的协议实现的源代码。


下面将通过参照附图详细描述本发明的示例性实施例,使本领域的普通技术人员更清楚本发明的上述及其它特征和优点,附图中图1为依据本发明实施例的方法流程示意图;图2为本发明方法一具体实例的实现流程示意图;图3为图2所示实例中的初始协议状态模型示意图;图4为图3所示初始协议状态模型中引入了非法状态之后的示意图;图5为对图3所示初始协议状态模型进行变异操作之后所得到的变异的协议状态模型示意图;及,图6为依据本发明实施例的装置组成结构示意图。
具体实施方式
以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用于解释本发明,并不用于限定本发明。
本发明实施例提出了一种对协议实现(Protocol Implementation)进行安全测试的方法。当对一协议实现进行测试时,该方法的处理流程如图I所示包括如下步骤步骤101 :将此协议实现所基于的协议规范映射为第一协议状态模型(也可称为初始协议状态模型)。步骤102 向此第一协议状态模型引入非法状态以形成第二协议状态模型。步骤103 :利用断言来表征此第二协议状态模型和/或第一协议状态模型的测试目的。步骤104 :对此第二协议状态模型执行变异操作(mutation operation),从而生成变异的协议状态模型。步骤105 :对此变异的协议状态模型执行模型检测,以生成至少一个测试套件。步骤106 :利用此测试套件对此协议实现进行模糊测试,以检测此协议实现中是否存在该测试套件对应的安全漏洞。在本实施例中,步骤104通过对第二协议状态模型执行变异操作可以向该协议状态模型注入安全故障。在本实施例中,步骤105通过对第二协议状态模型执行变异操作,可以获得此变异的协议状态模型中违反上述断言的一个或多个反例,并将此一个或多个反例被映射为一个或多个测试套件。其中,反例与测试套件之间的映射关系可以为一对一,多对一,一对多或者多对多的。优选的,一个反例映射为一个测试套件。协议实现的开发可能基于某种协议规范,尤其是涉及多个分布式的计算实体之间的连接、通信和数据传输的协议实现,它们所实现的功能要符合特定协议的标准化规定。一个协议规范描述了协议实现所能实现的各种功能行为和通信的句法/语义,其中,同一功能行为可以具体实现为源代码不同的各种协议实现,也就是说协议规范并不规定具体实现中协议实现的源代码,因此协议规范可以作为黑盒测试的参考。本发明实施例向协议安全测试领域引入了基于模型的形式化方法,以识别基于各种协议的IUT中的安全漏洞,其关注于黑盒测试且依赖于协议规范描述的功能行为和通信的语义/句法,而不需要了解IUT的源代码和详细的内部结构同时利用了模糊测试、变异分析和模型测试的优点,互相弥补它们的缺点,并以形式化方法来实施IUT的协议安全测试。因此,很容易实施,实现成本较低,且能以较高效率自动化的检测IUT中潜在的安全漏洞。以下对上述各个步骤的具体实现加以详细说明。一、关于步骤101在本发明实施例中,协议状态模型可以为有限状态机(FSM,Finite StateMachine)(也称为有限自动机),如参数化的扩展有限状态机(PEFSM,ParameterizedExtended Finite State Machine),此协议状态模型也可以为其它类型的模型,比如输入/输出标号转移系统(I0LTS, Input Output Label TransitionSystem)。本发明实施例对于协议状态模型的具体类型并不限定,任何可以描述协议状态及其转移的模型均属上述协议状态模型的范畴。假定将协议规范映射为PEFSM。此PEFSM包括六元组(6-tuples),可表示为(S,S0, Σ, Γ,δ,λ)。这里,S代表PEFSM的状态集合(即协议规范所规定的所有状态的集合)S代表协议的初始状态;对于所有状态都由向量P来代表包括缺省初始值在内的内部变量的有限集合,Σ代表输入报文集合,每一输入报文Zjfc(Vifc)包含其字段的向量(即参数向量)1 ; Γ代表输出报文集合,每一输出报文%(Vt)包含其字段的向量(即参数向量δ SX Σ—S代表转移函数,其定义了收到一输入报文(£Σ)之后所要转移到的目标状态;及,λ SX Σ— Γ代表输出函数,其定义了收到一输入报文之后的输出报文乂(&0 (εΓ)。在一个PEFSM中,一次转移t包括一组监视条件(可表达为“ifstatement”)和一个动作Zjfc(Vifc)5Ojfc(Wifc)),此动作为针对变量向量和输入/输出参数的操作。如果监视条件都被满足,就可以执行此转移,并且此动作也已基于当前变量向量的值和输入参数而被执行,进而使PEFSM从当前状态转移到下一个状态。根据协议规范中的定义,可以确定IUT可能存在的状态、各个状态之间的转移、以及相应的输入报文和输出报文,然后根据所确定的这些状态、转移及输入报文和输出报文,通过上述方法,可以将IUT所基于的协议规范形式化为相应的PEFSM。二、关于步骤102在本发明实施例中,可以向协议状态模型弓I入一个或多个非法状态,此非法状态也可被称为故障状态或“虫洞(wormhole) ”,此非法状态对应于IUT出现的安全故障(包括系统性故障或协议规范中未定义的状态)。由于,协议规范中不包括使IUT处于意外的错误状态的安全故障的定义,通过引入额外的非法状态可以将安全故障组件引入协议状态模型,以实现安全测试。本实施例中,非法状态可以仅为单一的非法状态,也可以为多个非法状态。其中,当仅引入单一的非法状态时,此单一的非法状态针对所有类型的安全故障;当引入多个非法状态时,每一非法状态针对特定类型的安全故障,此时,需要了解特定类型的安全故障的详细信息。三、关于步骤103在本发明实施例中,IUT可能出现的安全故障也可称为需要被覆盖的安全要求,这些安全故障可被定义为时序逻辑的断言(Predicate),即利用时序逻辑的断言来表征协议安全模型的测试目的。这里,时序逻辑可以为线性时序逻辑(LTL,Linear Temporal Logic)或者计算树逻辑(CTL,Computation Tree Logic)等等,本发明实施例对所采用的具体的时序逻辑不做限定。具体的,将安全故障定义为时序逻辑的断言的方法可以包括如下几项中的任一者或任意组合I)基于给定的测试目的来定义断言;2)根据安全测试领域的知识来定义断言;及,3)从初始协议状态模型(即步骤101得到的第一协议状态模型)中反射出断言;比如针对协议状态模型中的每一次转移,相应生成LTL断言或CTL断言。在进行安全测试时,IUT可能出现的安全故障可能有一个或多个(通常有多个),则根据这些安全故障而得到的断言就可以有一个或多个。本领域技术人员可以知道,断言是一种逻辑判断,由原子命题或复合命题通过逻辑算子(如与、或、非)连接而成,其处理结果代表所要判断的条件为真(true)或假(false),比如一断言可以为一单参函数,此函数带有一整型参数,argument,如果此参数为正数(positive),则此函数的返回值为真。四、关于步骤104
在本发明实施例中,步骤104与前述的步骤103可以并行执行,不必区分这两个步骤的执行先后顺序。具体的,可利用变异算子(mutation operator)来对协议状态模型执行变异操作,这里,所利用的变异算子可以包括操作数引用算子(Operand Reference Operator)、表达否定算子(Expression Negation Operator)和变量否定算子(VariableNegationOperator)等算子中的任一者或任意组合。本发明实施例并不限定具体采用何种变异算子,只要是能应用于安全测试的变异算子都属本发明实施例所述的变异算子范畴。其中,操作数引用算子用于将一次转移、一个监视条件或一个动作改变为其它值;表达否定算子用于否定一次转移、一个监视条件或一个动作;及,变量否定算子用于将一个变量的值由合法值修改为非法值。这里,所谓合法值指的是在协议规范所规定的取值范围之内的值,而所谓非法值为不在协议规范所规定的取值范围之内的值。优选的,针对协议状态模型中的每一个转移以及每一个(涉及到模型内部变量的)逻辑运算都要利用变异算子来执行变异操作,从而更全面的检测安全漏洞。其中,针对一个转移所执行的变异操作包括对此转移本身的变异操作、和/或对此转移对应的输入/输出报文的字段的变异操作、和/或对与此转移相关的内部变量的变异操作等等。这里,可利用操作数引用算子或表达否定算子来对一个转移本身执行变异操作,可利用变量否定算子对输入/输出报文的字段和逻辑运算中的变量执行变异操作。这样,每当利用一个变异算子执行了一次变异操作,就能生成一个与初始协议状态模型(即步骤101映射得到的第一协议状态模型)不同的变异的协议状态模型,这些变异的协议状态模型将在后续步骤中用于执行模型检测。五、关于步骤105具体的,要利用步骤103得到的断言来对步骤104得到的每一个变异的协议状态模型进行模型检测。其中,将上述断言和变异的协议状态模型作为模型检测器的输入,由此模型检测器进行模型检测并生成一个或多个反例(counterexample)。这里,反例就是指违反上述断言的测试用例,其可以以转移路径的形式从模型检测器输出,所谓转移路径指的是从协议状态模型的初始状态到一个出现断言被违背的状态之间的一个或多个转移构成的路径。在本发明实施例中,所使用的模型检测器可以基于(但不限于)新符号模型验证器(NuSMV, NewSymbolic Model Verifier)、简单 Promela (—种逻辑语言)解释器(SPIN,Simple Promela Interpreter)、符号分析实验室(SAL, SymbolicAnalysis Laboratory)等语言,并且其采用的模型检测方法可以为但不限于显式模型检测(explicit modelchecking)、符号化模型检测(symbolic model checking)或有界模型检测(bounded modelchecking)等等。在将变异的协议状态模型输入模型检测器之前,如果模型检测器不能识别此协议状态模型的表示方法,可使用NuSMV或协议原语言(PR0MELA,Protocol MetaLanguage)等语言将此变异的协议状态模型翻译为标号迁移系统(Labelled TransitionSystem),以供模型检测器处理。
经过模型检测而生成的一个或多个反例可以被映射为一个或多个测试套件(testing suite),以进行后续的模糊测试。优选的,每一个反例都被映射为一个测试套件。具体的,如前面所述,依据变异的协议状态模型,一个反例对应一个转移路径,此转移路径上存在一系列的输入报文/输出报文。因此,可以将此反例映射到一测试套件,在此测试套件中,此反例可以表示为一报文序列,此报文序列包括按顺序排列的可在此反例所对应的转移路径上存在的所有的输入报文和相应的输出报文。也就是说,测试套件中包括一系列用于激发IUT的输入报文和作为IUT的预期响应的相应的输出报文。进一步的,在本步骤中,模型检测器可使用上述被违反的断言来识别在模糊测试中应被填入模糊数据的输入报文的字段,并可进一步获取这些要被填入模糊数据的报文字段的取值范围、合法值和冲突值。对于与步骤104中得到的经过变异操作的转移相对应的任一报文,其中被模型检测器识别到的要被填入模糊数据的字段可以被标记为“fuzzing”。进一步的,还可以利用所获取的这些报文字段的取值范围、合法值和冲突值来减少要模糊测试中要被测试的缺陷值的数据量,即对所识别到的应被填入模糊数据的报文字段进行优化处理,以去除其中冗余的报文字段。这里,本发明实施例可采用现有技术中的各种方法来对这些报文字段进行优化处理,本文不再详述。进一步的,为了提高测试效率,还可以对步骤104中生成的测试套件进行优化处理,以去除其中冗余的测试套件(即去除冗余的反例)。比如可在执行模型检测之前执行断言化简处理,此时,可以分析断言的作用范围及其安全/逻辑的含义,根据分析结果删除可被其它断言涵盖的冗余的断言;或者,可在执行模型检测时删除冗余的测试套件,如如果某一短的反例(即测试路径)为一长的反例的前缀,则此短的反例就为冗余的,需要删除此短的反例所映射为的测试套件。这里,本发明实施例可以采用现有技术中的各种方法来对测试套件进行优化处理,在此就不再一一详述。六、关于步骤106具体的,利用测试套件来对IUT进行模糊测试的方法可以包括I)向IUT依次发送测试套件中的一个或多个测试报文。这里,所谓测试报文就是指前述的测试套件对应的输入报文;及,2)接收来自IUT的各个响应报文;每收到一个响应报文即检查此响应报文是否与测试套件中相应的期望的输出报文是否一致;如果检查出某响应报文与期望的输出报文不一致或者IUT处于非正常状态,则可判断IUT存在相应的安全漏洞。其中,如果在步骤104中模型检测器使用上述被违反的断言来识别在模糊测试中应被填入模糊数据的输入报文的字段,则本步骤中,在发送测试报文之前,进一步向所识别到的输入报文的字段中注入模糊数据。假定模型检测器将所识别到的要被填入模糊数据的字段标识为“fuzzing”,则本步骤中,如果一测试报文中的字段被标记为“fuzzing”,则说明此测试报文需要被注入模糊数据,此时,可以对此测试报文中被标记为“fuzzing”的字段进行变异处理(即注入模糊数据),以生成用于模糊测试的变异报文。这里,对此种字段进行的变异处理可以包括使用违反对应断言的测试实例来替代原来的字段、或者将违反对应断言的测试实例注入此字段、或者删除此字段,所述违反对应断言的测试实例可以为不属合法取值范围之内的非法值或冲突值、随机生成的值、预定义的值或以其它方式生成的值。当上述被注入模糊数据的测试报文被发往IUT之后,可以通过发送探测报文或手动检查等方式来检查IUT的状态。如果IUT处于非正常状态,如出现系统性故障、未知的状态、宕机、程序崩溃、或者对测试套件中一输入报文不再响应等等,则可发现安全漏洞并且当前的测试套件(其被注入了违反对应断言的测试实例)就可被作为用于发现安全漏洞的滥用脚本(misusing script)。在本发明实施例中,上述步骤104至步骤106可采用如下两种方式来执行
I、批处理方式(Bach mode),即先批量生成所有的测试套件,再执行模糊测试。具体的,重复执行步骤104至步骤105,直到针对所有变异的协议状态模型的测试套件都已生成,然后执行步骤106以针对所生成的所有测试套件逐个进行模糊测试。这里,利用一个变异算子针对协议状态模型中一个转移进行变异操作将生成一个变异的协议状态模型,当所有变异算子和转移的组合都被已被用来生成变异的协议状态模型,则可确定以生成了所有变异的协议状态模型。2、交互方式(Interactive mode),即测试套件的生成(步骤104的变异分析和步骤105的模型检测)和步骤106的模糊测试交错进行。具体的,每当在步骤104中通过执行变异操作而得到了一个变异的协议状态模型、且在步骤105中对此变异的协议状态模型进行模型检测而生成了一个或多个反例时,在步骤106中使用每一个反例所映射到的测试套件来进行模糊测试。本领域技术人员可以知道协议安全测试是为了检测在向IUT输入协议规范未定义的输入报文时IUT的不可预测的行为。在另一方面,协议一致性测试为了确定IUT是否为符合其协议规范的规定的技术,协议一致性测试的主要目的是为了验证协议规范所规定的功能/行为是否已经被IUT正确的实现,这样,在模糊测试中,当给出协议规范所定义的输入报文时,IUT应反馈协议规范所定义的正确输出报文。因此,协议一致性测试关注于协议规范所定义的输入报文。进一步的,在执行上述步骤101至步骤106来完成对IUT的协议安全测试的基础之上,还可对IUT执行协议一致性测试,此协议一致性测试可以集成为协议安全测试的一部分,此协议一致性测试,包括对上述断言执行变异操作,以生成变异的断言;利用此变异的断言对第一协议状态模型执行模型检测,以生成用于一致性测试的一个或多个测试套件;及,利用所述用于一致性测试的一个或多个测试套件对协议实现进行一致性测试以发现其中与协议规范不一致的漏洞。具体的,在协议一致性测试中,可利用步骤101中得到的初始协议状态模型,并对步骤103中得到的一个或多个断言进行变异操作,然后通过模型检测以得到测试套件,然后利用该测试套件可对对IUT进行一致性测试以发现IUT中与协议规范不一致的漏洞。其中,与前述步骤104的变异操作不同的是,协议一致性测试中的变异操作是针对步骤103中得到的每一断言而执行的而不是针对协议状态模型;而与前述步骤105的模型检测不同的是,协议一致性测试中的模型检测是利用变异的断言针对初始协议状态模型执行的而不是针对变异的协议状态模型执行的。在上述本发明实施例中,协议规范被形式化为一协议状态模型,其可被称为形式化规范S ;以此形式化规范S为基础可以自动生成用于模糊测试的测试套件,此测试套件也可称为测试路径集T,其中,一测试路径为一个有缺陷的输入报文和相应的期望的输出报文的序列,此有缺陷的输入报文指的是其字段被注入模糊数据(也称为缺陷数据)的输入报文;此测试路径集T将被输入IUT,再由IUT响应输出报文,通过将这些输出报文将与测试路径集T中的期望的输出报文进行比较来检测IUT中是否存在与测试路径集T相对应的安全漏洞。这种方法也能够为IUT提供在给定的形式化规范模型和故障情况下的故障覆盖率。本发明实 施例提供了一种基于模型的形式化协议安全测试方法,通过引入变异分析和模型检测技术到模糊测试来检测由各种协议的IUT的未知缺陷而引发的安全漏洞。以下为依据此协议安全测试方法的本发明一具体实例。图2为本发明实施例所提供的协议安全测试方法一具体实例的实现流程示意图,包括如下步骤步骤201 :将IUT所基于的协议规范映射为第一 PEFSM(也称为初始PEFSM)。具体的,为了使用户可以较容易的将协议规范转换为相应的PEFSM,可以采用图形化的用户界面(UI)(比如状态和迁移图等)和基于可扩展标记语言(XML)的状态迁移语言(如状态图的可扩展标记语言(SCXML,State ChartXML)等)来描述协议的各个状态、相应的转移和输入/输出报文。图3示出了本实例中的初始PEFSM示意图。如图3所示,s0, si, s2为原始的协议状态,s0为初始状态,状态之间的转移被标记为ik/0k,其中,ik代表包含字段向量&的输入报文,并触发此转移,Ok代表包含字段向量的输出报文,之后,此PEFSM将转移到新的状态。并且,在向量&中有一个TYPE域,其代表输入报文的类型。这里,ik,0彡k彡4,TYPE=tk,比如对于输入报文iQ,其TYPE域的值为tQ。步骤202 :向步骤201得到的初始PEFSM引入非法状态以形成第二 PEFSM,从而向初始PEFSM引入与安全故障相关的组件。在本实例中,将非法状态弓I入到初始PEFSM的方法为I)向初始PEFSM中加入一个非法状态(也称为“虫洞”状态)来模型化未知的IUT的系统性故障和明显未在协议规范中定义的未定义状态;并且,针对此非法状态,所有的内部变量P和输入报文的字段都将被设置为故障值(即不属协议规范所定义的合法取值范围的值)。例如假定内部变量Vi的合法取值范围为O 16,则此内部变量在非法状态中的值将被设为小于O或者大于16 ;再举一例输入报文ik的TYPE字段将被设为?, 矣4,O彡k彡4。2)此非法状态具有一个外出的转移,此外出的转移可以被标记为“重置(reset) ”,并且指向PEFSM中的初始状态S0。此被标记为“reset”的转移代表复位操作,此复位操作将重启IUT并能使相应的PEFSM从系统性故障或未定义状态恢复到初始状态S。。由于,非法状态并不属于协议规范的原始定义内容,因此,并没有进入非法状态的转移,即不能从初始PEFSM中的合法状态转移到此非法状态。使用上述方法向初始PEFSM引入非法状态之后得到的第二 PEFSM如图4所示。在图4中,一个额外的非法状态被引入到图3所示的初始PEFSM中,此非法状态仅具有一个向初始状态Stl的转移,此转移被标记为“reset”,并且没有任何初始PEFSM中的合法状态能转移到此非法状态。步骤203 :根据此IUT可能出现的故障,利用断言来表征初始PEFSM和/或第二PEFSM的测试目的。在本实例中,计算树逻辑(CTL)或线性时序逻辑(LTL)被用做断言,该断言用于根据不同安全测试要求来表征具体的测试目的,以下举出几种利用CTL断言来表征测试目的的例子。I)根据协议的诸如身份验证(authentication)、授权(authorization)等安全要求,可以定义相应的测试目的。比如根据协议规范定义Sl为身份验证状态,^为初始状态,此协议的函数可以仅仅在验证合法之后提供,则此测试目标可以被定义为如下断言AXs0 = S1这里,A表示“总是(always) ”,X代表下一个(Next),此时,AXs0 = S1代表在PEFSM中,S0的下一状态必须总是为Siq2)根据安全测试的领域知识,也可以定义通用的安全测试目的。比如假定额外的“虫洞(wormhole) ”状态(即非法状态)被引入到初始PEFSM中来代表系统性故障或未定义状态,则对于一个正确的IUT而言,初始PEFSM中的各个状态将不会转移到此“虫洞”状态;此时,令SiR表初始PEFSM中的各个状态,其中,i = 0,1,…,则以下断言可以被用做一个通用的测试目的! AG(sj wormhole)这里,A代表“总是(always)”,G代表“全局的(globally) ”,布尔符号!代表否定,则! AG(Si-Wormhole)声明了 任意状态Si将全局的且总是不存在向“虫洞”状态的转移。3)为了涵盖初始PEFSM中各个状态中的潜在缺陷,进一步的可以自动从初始PEFSM中反射出CTL断言以作为测试目的。以下举出几种从初始PEFSM中反射出CTL断言的方法实例,但本发明实施例中从初始PEFSM中反射出断言的方法并不限于此。a.对于初始PEFSM中的每一对状态Si和Sj (不包括非法状态),如果它们之间没有转移,则反射出两个断言! AG (Si — S』)和! AG (Sj — Si)以上两个断言明确声明了在状态Si和Sj之间无任何转移存在。b.对于初始PEFSM中的转移Si — Sj,如果在初始PEFSM中没有转移Sj — Si存在,则反射出一个断言! AG(Sj^Si)以上断言明确声明了在初始PEFSM中不存在转移Si — Sj的反向转移Sj — Si。c.对于初始PEFSM中的转移Si — S」,可以反射出一个断言AG (Si ^ Sj)以上断言明确声明了初始PEFSM中存在一个合法转移Si — Sj。d.除了上述针对状态和转移的断言,也可以生成针对内部变量P、输入报文的字段k以及动作Zjfc(Vifc),Oifc Ot))的断言。例如输入报文ik(0彡k彡4)的TYPE字段的合法值为WWt4,其它取值即为非法值,则以下断言可以被用作测试目的 AG (ik. TYPE = t0 V h V t2 V t3 V t4)以上断言声明了任意输入报文ik的值将全局的且总是为V t2、&和t4中的任一个。这里,仅以两个运算符AX和AG为例,在实际应用中,其它时序逻辑运算符AF、AU、EX、EF、EG和EU也可被用来定义作为测试目的的断言;其中,F代表“未来(future) ”,U代表“直到(until) ”,E代表“存在(exist) ”步骤204 :通过对引入了非法状态的第二 PEFSM执行变异操作来向此第二 PEFSM注入安全故障,从而生成变异的PEFSM。在本实例中,使用三个变异算子来执行变异操作操作数引用算子(OperandReference Operator)、表达否定算子(Expression Negation Operator)和变量否定算子(Variable Negation Operator)。其中,操作数引用算子和表达否定算子是针对转移的,变量否定算子是针对内部变量和输入/输出报文字段的针对转移Si — Sj所执行的变异操作可以包括如下几种I)使用操作数引用算子对此转移Si — Sj执行变异操作,产生变异的转移Sk — Sj (k 关 i)或者转移 Si — sk(k 关 j)。2)使用表达否定算子对此转移Si — Sj执行变异操作,将把此转移Si — Sj从初始PEFSM中删除。3)使用变量否定算子对此转移Si — Sj的内部变量或输入报文的字段执行变异操作,将把此内部变量或输入报文的字段的值由合法值改为非法值。这样,针对第二 PEFSM中的每一个转移Si — ,将使用操作数引用算子、表达否定算子和变量否定算子来对此转移及其内部变量和输入/输出报文的字段执行变异操作,其中,每使用一个变异算子(操作数引用算子、表达否定算子或变量否定算子)执行了一次变异操作将产生一个变异的PEFSM,此变异的PEFSM中仅包括一个安全故障且与初始PEFSM不同。例如如果使用操作引用算子对图4所示的PEFSM中的转移S2 — Stl(此转移为图3所示的初始PEFSM中的转移)执行变异操作,以使此转移S2 — S0被变异为转移S2 —
则图4所示第二 PEFSM将被变异为如下图5所示的变异的PEFSM。步骤205 :对此变异的PEFSM执行模型检测,以生成此变异的PEFSM中违反步骤203中生成的断言的一个或多个反例,此一个或多个反例被映射为用于进行模糊测试的测试套件。在本实例中,采用NuSMV模型检测器作为产生模糊测试的测试套件的模型引擎,上述步骤205具体包括I)步骤204得到的变异的PEFSM通过NuSMV语言被翻译成NuSMV模型,NuSMV赋值约束(NuSMVASSIGN constraint)被用来表征PEFSM中的状态转移。本实例中的一个变异的PEFSM可被翻译成如下的NuSMV模型MODULE mainVARstate {s0, S1, S2, wormhole};input {I0, I1, I2, I3, I4, reset};TYPE ·.{to, ti, 2, U, t}output {null O0, O1, O2, O3, O4};ASSIGNinit (state) = S0 ;
next (state)=casestate = s0&input = I0 s0 ;state = s0&input = I1 IS1 ;state = S1Mnput = I2 s2 ;state = s2&input = I3 s2 ;state = s2&input = I4 wormhole ;state = wormhole s0 ;I : state ;esac ;init (output) := null ;next (output)=caseinput = I0 00 ;input = I1 -O1 ;input = I2 02 ;input = I3 03 ;input = I4 04 ;input = reset null ;I null ;esac ;init (input) = {I0 I1I ;next (input)=casestate = s0&input = {I。,I1I ;state = s0&input = I1 J1 ;state = s^input = I2 :{I3,I4I ;state = s2&input = I3 :{I3,I4I ;state = s2&input = I4 -.reset ;state = wormhole&input = reset {I。,I1I ;I null ;esac ;init (TYPE) := null ;next (TYPE)=casestate = s0&input = I0 t0 ;state = s0&input = I1 It1 ;state = S1Mnput = I2 t2 ;state = s2&input = I3 t3 ;
state = s2&input = I4 t4 ;state = wormhole : t;
I null ;esac ;2) NuSMV模型检测器对步骤204生成的变异的PEFSM和步骤203生成的用于表征测试目的的断言执行模型检测,以发现变异的PEFSM中的违反断言的测试用例(也称为反例)。比如=NuSMV模型检测器发现变异的PEFSM违反断言! AG (Si — wormhole)和AG (ik.TYPE = t0 V ti V t2 V t3 V t4),则生成相应的反例。3)将所得到的反例映射为用于模糊测试的测试套件。具体的,由于所生成的反例对应一个转移路径,所以在本实例中反例被表示为在此转移路径上存在的输入/输出报文的标记,这里,将这些标记映射为相应的输入/输出报文,这些输入/输出报文构成测试套件中的一个报文序列。其中,将来自于经过变异操作的转移的输入报文的所有字段标记为“fuzzing” ;如果被违反的断言可以更准确的识别输入报文的哪些字段与此断言违反相关,则这些字段将被标记为“fuzzing”;如果反例和/或变异的PEFSM可以给出造成断言违反的非法值,则模糊测试可以直接使用这些非法值来进行测试,即在模糊测试中在相应的输入报文的字段填入此非法值。进一步的,为了改善效率,可在执行模型检测之前和/或执行模型检测之后对测试套件执行优化处理,以消除其中冗余的测试套件。步骤206 :利用步骤205得到的测试套件对IUT进行模糊测试,以检测此IUT中是否存在对应的安全漏洞。具体的,针对一个测试套件,协议安全测试将按如下方式执行I)针对输入报文中被标记为“fuzzing”的字段,将预定义的测试值或步骤205中所述造成断言违反的非法值注入此输入报文的字段来构成一个用于模糊测试的变异报文。2)依次发送测试套件中的每一个输入报文到IUT。3)接收来自IUT的响应报文,每收到一个响应报文,即将此响应报文与测试套件中相应的期望的输出报文做比较,检查此响应报文是否与测试套件中相应的输出报文是否一致,如果检查出此响应报文与此期望的输出报文不一致,则可判断IUT出现了相应的安
全故障。4)在上述测试报文发送和比较结束之后,发送正常的探测报文至IUT以检查IUT是否处于系统性故障或未定义的状态。如果发现IUT非正常,则可发现安全漏洞,并且当前的被注入了特定测试实例的测试套件就为可被作为用于用来发现安全漏洞的滥用脚本。在本实例中,步骤204至206采用交互方式执行,即每当在步骤204中通过执行变异操作而得到了一个变异的协议状态模型、且在步骤205中对此变异的协议状态模型进行模型检测可生成一个测试套件,则在步骤206中使用此测试套件,通过向其中指定报文的指定字段注入不同的非法值来进行模糊测试。因此,当利用当前测试套件执行完模糊测试之后,将返回步骤204来生成下一测试套件并执行模糊测试,此过程将重复执行直到所有可能的测试套件均已生成并已被测试过。基于上述协议安全测试方法,本发明实施例还提出了一种对协议实现进行安全测试装置。如图6所示,该装置包括
第一映射模块601,用于将协议实现所基于的协议规范映射为第一协议状态模型;非法状态模块602,用于向第一映射模块601得到第一协议状态模型引入非法状态以形成第二协议状态模型 ;在此第二协议状态模型中,此非法状态对应于协议实现出现的安全故障;断言模块603,用于利用断言来表征来自非法状态模块602的第二协议状态模型和/或来自第一映射模块601的第一协议状态模型的测试目的;变异模块604,用于对来自非法状态模块602的第二协议状态模型执行变异操作,从而生成变异的协议状态模型;检测模块605,用于利用断言模块603得到的断言对变异模块604生成的变异的协议状态模型执行模型检测,以生成至少一个测试套件;及,测试模块606,用于利用检测模块605得到的至少一个测试套件对此协议实现进行模糊测试,以检测此协议实现中是否存在与所述测试套件对应的安全漏洞。本实施例中,检测模块605具体用于通过模型检测,将变异的协议状态模型中违反上述断言的一个或多个反例映射为至少一个测试套件。具体的,映射时,反例与测试套件可以是一对一、一对多、多对一或者多对多的对应关系。优选的,检测模块605将一个反例映射为一个测试套件,且且该一个反例对应所述变异的协议状态模型中的一条转移路径,该转移路径由一个或多个转移构成,且该转移路径上存在一个或多个输入报文及其对应的一个或多个输出报文,该一个反例映射为的测试套件包括该转移路径上存在的所述一个或多个输入报文及其对应的一个或多个输出报文。优选的,为了全面覆盖安全漏洞,检测模块605将每一个反例都映射为一个测试套件。进一步,该装置还可以包括优化模块607,用于对上述测试套件进行优化,以去除冗余的测试套件,从而可以提高模糊测试的效率。具体的,第一映射模块601具体用于采用形式化的方法将所述协议实现所基于的协议规范映射为所述第一协议状态模型。具体的,第一映射模块601具体用于采用形式化的方法将所述协议实现所基于的协议规范映射为PEFSM或者I0LTS。本实施例中,断言模块603例如可以包括以下子模块之一或其任意组合第一断言子模块,用于基于给定的测试目的定义断言;第二断言子模块,用于根据安全测试领域的知识定义断言;以及,第三断言子模块,用于从所述第一协议状态模型中反射出断言。本实施例中,变异模块604具体用于利用变异算子对第二协议状态模型中的至少一个转移和/或至少一个逻辑运算执行变异操作。具体的,变异模块604例如包括以下子模块之一或其任意组合第一变异子模块,用于对所述第二协议状态模型中的至少一个转移的本身执行变异操作;第二变异子模块,用于对所述第二协议状态模型中的至少一个转移对应的输入报文和/或输出报文的字段执行变异操作;第三变异子模块,用于对所述第二协议状态模型中的至少一个转移相关的内部变量执行变异操作;第四变异子模块,用于对所述第二协议状态模型中的至少一个逻辑运算中的内部变量执行变异操作。本实施例中,测试模块606例如包括发送子模块,用于向所述协议实现依次发送该测试套件中的输入报文;接收子模块,用于接收来自所述协议实现的响应报文;第一判断子模块,用于在所收到的任一响应报文与该测试套件中对应的输出报文不一致时,确定所述协议实现存在与该输入报文对应的安全漏洞。本实例中,测试模块606例如可以包括上述发送子模块、接收子模块以及第二判断子模块,该第二判断子模块用于在所述协议实现处于非正常状态时确定所述协议实现存在与该输入报文对应的安全漏洞。本实施例中,测试模块606例如还可以包括上述发送子模块、接收子模块、第一判断子模块和第二判断子模块。本实施例中,该装置进一步还可以包括报文输入模块。该报文输入模块包括确定子模块,用于利用被违反的断言确定应向所述测试套件中注入模糊数据的输入报文的字段;以及注入子模块,用于向确定的输入报文的字段中注入模糊数据。具体的,变异模块604、检测模块605和测试模块606之间的可采用两种工作方式一、批处理方式当变异模块604已生成所有的变异的协议状态模型并且检测模块605已通过执行模型检测而得到针对所有的变异的协议状态模块的所有测试套件后,测试模块606再以批处理的方式利用所有测试套件进行模糊测试。二、交互处理方式每当变异模块604生成一个变异的协议状态模块并且检测模块605对此变异的协议状态模型执行模型检测而得到针对此变异的协议状态模型的一个或多个测试套件,测试模块606即利用针对此变异的协议状态模型的一个或多个测试套件进行模糊测试。可选的,断言模块603在得到表征测试目的的断言之后,可进一步优化这些断言,以去除其中冗余的断目。可选的,上述装置还可对协议实现进行协议一致性测试。此时,变异模块604可进一步对断言模块603得到的断言执行变异操作,以生成变异的断言;检测模块605可进一步利用变异模块604生成的变异的断言对第一映射模块601得到的第一协议状态模型执行模型检测,以得到用于一致性测试的一个或多个测试套件;及,测试模块606可进一步利用检测模块605得到的用于一致性测试的一个或多个测试套件对此协议实现进行一致性测试以发现其中与协议规范不一致的漏洞。本实施例提供的装置可以执行上述方法实施例中所提供的方法实施例。因此,上述各个模块实现其功能的具体方法在前述各个实施例中均已详述,这里不再重复。此外,上述协议安全测试装置可以实现为硬件设备,也可以以软件的方式实现为虚拟装置,该虚拟装置可运行在一计算机设备中以实现协议安全测试。在本发明实施例中,基于协议规范的形式化方法在协议安全测试中起着重要的作用,协议规范可被用来指导用于自动检查IUT的安全故障的反例的自动生成,因此,能显著减 轻利用反例的协议安全测试的工作量,进而能显著提高协议安全测试的效率,并且本发明实施例所提出的技术方案易于实现且与协议的具体实现相互独立,具有较强的可实施性。以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
权利要求
1.一种对协议实现进行安全测试的方法,所述方法包括 将协议实现所基于的协议规范映射为第一协议状态模型; 向所述第一协议状态模型引入非法状态以形成第二协议状态模型;其中,所述非法状态与所述协议实现出现的安全故障相对应; 利用断言来表征所述第一协议状态模型和/或第二协议状态模型的测试目的; 对所述第二协议状态模型执行变异操作,从而生成变异的协议状态模型; 根据所述断言对所述变异的协议状态模型执行模型检测,以生成至少一个测试套件;以及, 利用所述测试套件对所述协议实现进行模糊测试,以检测所述协议实现中是否存在与所述测试套件对应的安全漏洞。
2.根据权利要求I所述的方法,其中,所述将协议实现所基于的协议规范映射为第一协议状态模型,包括 采用形式化的方法将所述协议实现所基于的协议规范映射为所述第一协议状态模型。
3.根据权利要求2所述的方法,其中,所述第一协议状态模型为参数化的扩展有限状态机PEFSM或者输入/输出标号转移系统IOLTS。
4.根据权利要求I所述的方法,其中,所述利用断言来表征的所述第一协议状态模型和/或所述第二协议状态模型的测试目的,包括 基于给定的测试目的定义断言;和/或, 根据安全测试领域的知识定义断言;和/或, 从所述第一协议状态模型中反射出断言。
5.根据权利要求I所述的方法,其中,所述对所述第二协议状态模型执行变异操作,包括 利用变异算子对所述第二协议状态模型中的至少一个转移和/或至少一个逻辑运算执行变异操作。
6.根据权利要求5所述的方法,其中, 所述利用变异算子对所述第二协议状态模型中的至少一个转移执行变异操作,包括以下之一或其任意组合对所述至少一个转移本身执行变异操作,对所述至少一个转移对应的输入报文和/或输出报文的字段执行变异操作,对与所述至少一个转移相关的内部变量执行变异操作;和/或, 所述利用变异算子对所述第二协议状态模型中的至少一个逻辑运算执行变异操作,包括对所述一个逻辑运算中的内部变量执行变异操作。
7.根据权利要求I至6中任一项所述的方法,其中,所述根据所述断言对所述变异的协议状态模型执行模型检测,包括 将所述变异的协议状态模型中违反所述断言的一个或多个反例映射为所述至少一个测试套件。
8.根据权利要求7所述的方法,其中, 所述一个或多个反例中的每一个反例被映射为一个测试套件;所述一个或者多个反例中的一个反例对应所述变异的协议状态模型中的一条转移路径,该转移路径由一个或多个转移构成,且该转移路径上存在一个或多个输入报文及其对应的一个或多个输出报文,该一个反例映射为的测试套件包括该转移路径上存在的所述一个或多个输入报文及其对应的一个或多个输出报文;以及, 所述利用所述测试套件对所述协议实现进行模糊测试,包括针对每一测试套件,执行如下处理 向所述协议实现依次发送该测试套件中的输入报文;及, 接收来自所述协议实现的响应报文,如果所收到的任一响应报文与该测试套件中对应的输出报文不一致,或者,如果所述协议实现处于非正常状态,则确定所述协议实现存在与该输入报文对应的安全漏洞。
9.根据权利要求8所述的方法,其中,在所述向所述协议实现依次发送该测试套件中的输入报文之前,所述方法进一步包括 利用被违反的断言确定应向所述测试套件中注入模糊数据的输入报文的字段; 向确定的输入报文的字段中注入模糊数据。
10.根据权利要求I至6中任一项所述的方法,在所述利用所述测试套件对所述协议实现进行模糊测试之前,所述方法进一步包括对所述测试套件进行优化处理,以去除冗余的测试套件。
11.一种对协议实现进行安全测试的装置,所述装置包括 第一映射模块,用于将协议实现所基于的协议规范映射为第一协议状态模型; 非法状态模块,用于向所述第一映射模块得到的所述第一协议状态模型引入非法状态以形成第二协议状态模型;其中,所述非法状态对应于所述协议实现出现的安全故障; 断言模块,用于利用断言来表征来自所述非法状态模块的所述第二协议状态模型和/或来自所述第一映射模块的所述第一协议状态模型的测试目的; 变异模块,用于对来自所述非法状态模块的所述第二协议状态模型执行变异操作,从而生成变异的协议状态模型; 检测模块,用于利用所述断言模块得到的断言对所述变异模块生成的所述变异的协议状态模型执行模型检测,以生成至少一个测试套件;及, 测试模块,用于利用所述检测模块得到的所述测试套件对所述协议实现进行模糊测试,以检测所述协议实现中是否存在与所述测试套件对应的安全漏洞。
12.根据权利要求11所述的装置,其中,所述第一映射模块,具体用于采用形式化的方法将所述协议实现所基于的协议规范映射为第一协议状态模型,且所述第一协议状态模型为参数化的扩展有限状态机PEFSM或者输入/输出标号转移系统IOLTS。
13.根据权利要求11所述的装置,其中,所述断言模块包括以下子模块之一或其任意组合 第一断言子模块,用于基于给定的测试目的定义断言;第二断言子模块,用于根据安全测试领域的知识定义断言;以及,第三断言子模块,用于从所述第一协议状态模型中反射出断言。
14.根据权利要求11所述的装置,其中,所述变异模块包括以下子模块之一或其任意组合 第一变异子模块,用于对所述第二协议状态模型中的至少一个转移的本身执行变异操作;第二变异子模块,用于对所述第二协议状态模型中的至少一个转移对应的输入报文和/或输出报文的字段执行变异操作; 第三变异子模块,用于对所述第二协议状态模型中的至少一个转移相关的内部变量执行变异操作; 第四变异子模块,用于对所述第二协议状态模型中的至少一个逻辑运算中的内部变量执行变异操作。
15.根据权利要求11所述的装置,其中,所述检测模块,具体用于将所述变异的协议状态模型中违反所述断言的一个或者多个反例映射为所述至少一个测试套件,其中一个反例被映射为一个测试套件,且该一个反例对应所述变异的协议状态模型中的一条转移路径,该转移路径由一个或多个转移构成,且该转移路径上存在一个或多个输入报文及其对应的一个或多个输出报文,该一个反例映射为的测试套件包括该转移路径上存在的所述一个或多个输入报文及其对应的一个或多个输出报文。
16.根据权利要求11至15中任一项所述的装置,其中,所述装置进一步包括 所述优化模块,用于对所述测试套件进行优化,以去除冗余的测试套件。
全文摘要
本发明实施例提供了一种对协议实现进行安全测试的方法,该方法包括将协议实现所基于的协议规范映射为第一协议状态模型;向第一协议状态模型引入与安全故障相对应的非法状态以形成第二协议状态模型;利用断言来表征第一协议状态模型和/或第二协议状态模型的测试目的;对第二协议状态模型执行变异操作从而生成变异的协议状态模型;根据断言对变异的协议状态模型执行模型检测,以生成由变异的协议状态模型中违反断言的反例映射得到的测试套件;及,利用测试套件对协议实现进行模糊测试,以检测协议实现中存在的安全漏洞。本发明实施例还提供了一种相应的测试装置。采用本发明实施例能以高效及低成本实现协议安全测试。
文档编号H04L12/26GK102624574SQ201110030260
公开日2012年8月1日 申请日期2011年1月27日 优先权日2011年1月27日
发明者唐文, 隋爱芬 申请人:西门子公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1