论文部分内容阅读
【摘 要】软件安全性测试是保证软件安全性的重要手段。本文论述了软件安全性测试的特点和主要内容,重点研究了国内外软件安全性测试的主要方法,最后总结了当前研究工作并指出了未来软件安全性测试技术的研究重点与发展方向。
【关键词】安全性测试;安全功能测试;语法测试;模糊测试
安全性是软件质量的一个重要属性。传统上国内学者较多关注软件的失效安全性,即软件运行不引起系统事故的能力,强调的是一类安全关键软件的安全性失效可能造成重大人员伤亡、财产损失、环境污染等危险事故。
1.软件测试方法
1.1静态测试
静态测试在对软件代码进行分析、检查和测试时不实际运行被测试的程序,同时这种测试方法还可以用于对各种软件文档进行测试。例如对需求文档的验证和确认,系统设计文档的检查以及程序代码的检查。
1.2動态测试
动态测试就是通过运行软件来检验软件的动态行为和运行结果的正确性。动态测试的主要特征是计算机必须真正运行被测试的程序,通过输入测试数据,对其运行情况进行分析。
1.3黑盒测试(功能测试)
在黑盒测试或功能测试中,测试条件主要是基于程序或者系统的功能,测试人员不需要了解程序是如何运作,只是关注程序的功能是否与规格说明书所描述的一致。
1.4白盒测试(结构测试)
在此项测试中,测试条件是基于程序逻辑,测试人员查看程序或者系统的内部机构。测试人员需要了解内部程序结构和逻辑,关注生产出来的代码,而不需理会其功能是否与说明书上的功能相同。
2.安全性测试主要方法
随着软件安全性受到人们的重视,安全性测试方法相关研究取得了一定进展。
2.1形式化安全测试
形式化方法的基本思想是建立软件的数学模型,并在形式规格说明语言的支持下,提供软件的形式规格说明。形式化安全测试方法可分为两类,即定理证明和模型检测。定理证明方法将程序转换为逻辑公式,然后使用公理和规则证明程序是一个合法的定理。模型检测用状态迁移系统S 描述软件的行为,用时序逻辑、计算树逻辑或演算公式F 表示软件执行必须满足的性质,通过自动搜索S 中不满足公式F 的状态来发现软件中的漏洞。
NASA(national aeronautics and space administration)的一个实验室JPL(jet propulsion laboratory)开展过形式化安全测试方面的项目。主要思路是建立安全需求的形式化模型,例如状态机模型。输入输出序列决定安全状态转换。安全测试即搜索状态空间,看是否能从起始状态找到一条路径到达违反规约的不安全的状态。随着模型大小与复杂性增长,状态空间呈指数增长,JPL 开发了一种使用SPIN 的形式化建模框架(flexible modeling framework,FMF)解决状态爆炸问题,并开发了基于属性的测试工具(property based tester,PBT)。
2.2基于模型的安全功能测试
基于模型的测试方法是对软件的行为和结构进行建模,生成测试模型,由测试模型生成测试用例,驱动软件测试[3]。常用的软件测试模型有有限状态机、UML 模型、马尔可夫链等。
Mark Blackburn、Robert Busser 研究了基于模型的安全功能测试[4]。主要项目支撑是NIST CSD(computer security division)部门的项目Automated Security Functional Testing。主要思路是利用SCRModeling 工具对软件的安全功能需求进行建模,使用表单方式设计软件的安全功能行为模型,将表单模型转换为测试规格说明模型,利用T-VEC工具生成测试向量(由一组输入变量,期望输出变量组成),开发测试驱动模式和目标测试环境的对象映射,将测试向量输入测试驱动模式执行测试。这种方法是一种一般的安全功能测试方法,它的适用范围取决于安全功能的建模能力,特别适用于建模用与或子句表达逻辑关系的安全需求,对授权、访问控制等安全功能测试比较适用。
2.3语法测试
语法测试是根据被测软件的功能接口的语法生成测试输入,检测被测软件对各类输入的响应。接口可以有多种类型,命令行、文件、环境变量、套接字等。语法测试基于这样一种思想,软件的接口或明确或隐含规定了输入的语法。语法定义了软件接受的输入数据的类型、格式。语法定义可采用BNF或正则表达式。语法测试的步骤是识别被测软件接口的语言,定义语言的语法,根据语法生成测试用例并执行测试。
生成的测试输入应当包含各类语法错误,符合语法的正确输入,不符合语法的畸形输入等。通过察看被测软件对各类输入的处理情况,确定被测软件是否存在安全缺陷。语法测试适用于被测软件有较明确的接口语法,易于表达语法并生成测试输入的情况。语法测试结合故障注入技术可得到更好的测试效果。
2.4基于故障注入的安全性测试
Wenliang Du将故障注入技术用于软件安全性测试,建立软件与环境交互(environment-application interaction,EAI) 的故障模型。故障注入针对应用与环境的交互点,主要包括用户输入、文件系统、网络接口、环境变量等引起的故障。相关项目有OUSPG(university of oulu,secure programming group)的项目PROTOS SecurityTesting of Protocol Implementations,该项目的目标是测试协议实现的安全性。主要思路是通过构造各类协议数据包测试目标软件是否能正确处理。实质是在各类协议数据包中植入故障,如修改某些协议字段的值等,支持的协议有HTTP、SIP、WAP、SNMP等。故障注入可以有效地模拟各种各样的异常程序行为,通过故障注人函数能够强制性地使程序进入到某些特定的状态,而这些状态在采用常规的标准测试技术的情况下一般是无法到达的。
2.5 模糊测试
模糊测试是一种发现安全漏洞的有效的测试方法,在安全性测试中越来越受到重视。模糊测试将随机的坏数据插入程序,观察程序是否能容忍杂乱输入。模糊测试是不合逻辑的,只是产生杂乱数据攻击程序。采用模糊测试攻击应用程序可发现其它采用逻辑思维来测试很难发现的安全缺陷。
2.6 基于属性的测试
描述了基于属性的测试方法,采用TASPEC 语言对软件的安全属性进行描述,生成安全属性规格说明,利用程序切片技术抽取与这个安全属性相关的代码,并测试这部分代码是否违反安全属性规格说明。基于属性的测试有针对性的测试目标软件的特定安全属性,可满足安全属性的分类和优先级排序要求,且部分与具体软件无关的属性规格说明是可重用的。
3.结束语
软件测试是所有工程学科的基本组成单元,是软件开发的重要部分。软件测试是为了发现故障而执行程序的过程,其目的是以尽可能少的时间和人力发现并改正软件中潜在的各种故障及缺陷。如何利用较少的测试用例,实现最大的测试覆盖,最大限度地发现软件瑕疵,是软件测试的目标之一;制定完善的测试计划、测试方案、结果分析、文档资料管理,亦是保证软件测试功效的前提。软件测试只能查找程序中的错误,不能证明程序中没有错误。
未来软件安全性测试技术主要发展方向包括:软件授权、访问控制等安全功能建模与测试研究;形式化安全测试方法研究;基于风险的安全测试及其在软件工程实践中的应用;故障注入、模糊测试、语法测试、基于属性的安全测试方法研究;利用威胁模型与攻击树指导安全测试过程;漏洞发现过程的建模及利用模型定量预测安全漏洞。
另外近年来基于Web 服务的分布式软件快速发展,如何对Web 服务开展安全性测试是分布式软件安全性测试面临的崭新课题。 [科]
【参考文献】
[1]陆璐,王柏勇.软件自动化测试技术[M].北京:清华大学出版社,2006.
[2]郭群.软件测试设计技术[J].电脑知识与技术,2007,(17).
[3]周博文,杜山泽.社会管理创新:从伦理观念、管理理念到思维方式的转变.载于.行政管理改革,2012,(11).
【关键词】安全性测试;安全功能测试;语法测试;模糊测试
安全性是软件质量的一个重要属性。传统上国内学者较多关注软件的失效安全性,即软件运行不引起系统事故的能力,强调的是一类安全关键软件的安全性失效可能造成重大人员伤亡、财产损失、环境污染等危险事故。
1.软件测试方法
1.1静态测试
静态测试在对软件代码进行分析、检查和测试时不实际运行被测试的程序,同时这种测试方法还可以用于对各种软件文档进行测试。例如对需求文档的验证和确认,系统设计文档的检查以及程序代码的检查。
1.2動态测试
动态测试就是通过运行软件来检验软件的动态行为和运行结果的正确性。动态测试的主要特征是计算机必须真正运行被测试的程序,通过输入测试数据,对其运行情况进行分析。
1.3黑盒测试(功能测试)
在黑盒测试或功能测试中,测试条件主要是基于程序或者系统的功能,测试人员不需要了解程序是如何运作,只是关注程序的功能是否与规格说明书所描述的一致。
1.4白盒测试(结构测试)
在此项测试中,测试条件是基于程序逻辑,测试人员查看程序或者系统的内部机构。测试人员需要了解内部程序结构和逻辑,关注生产出来的代码,而不需理会其功能是否与说明书上的功能相同。
2.安全性测试主要方法
随着软件安全性受到人们的重视,安全性测试方法相关研究取得了一定进展。
2.1形式化安全测试
形式化方法的基本思想是建立软件的数学模型,并在形式规格说明语言的支持下,提供软件的形式规格说明。形式化安全测试方法可分为两类,即定理证明和模型检测。定理证明方法将程序转换为逻辑公式,然后使用公理和规则证明程序是一个合法的定理。模型检测用状态迁移系统S 描述软件的行为,用时序逻辑、计算树逻辑或演算公式F 表示软件执行必须满足的性质,通过自动搜索S 中不满足公式F 的状态来发现软件中的漏洞。
NASA(national aeronautics and space administration)的一个实验室JPL(jet propulsion laboratory)开展过形式化安全测试方面的项目。主要思路是建立安全需求的形式化模型,例如状态机模型。输入输出序列决定安全状态转换。安全测试即搜索状态空间,看是否能从起始状态找到一条路径到达违反规约的不安全的状态。随着模型大小与复杂性增长,状态空间呈指数增长,JPL 开发了一种使用SPIN 的形式化建模框架(flexible modeling framework,FMF)解决状态爆炸问题,并开发了基于属性的测试工具(property based tester,PBT)。
2.2基于模型的安全功能测试
基于模型的测试方法是对软件的行为和结构进行建模,生成测试模型,由测试模型生成测试用例,驱动软件测试[3]。常用的软件测试模型有有限状态机、UML 模型、马尔可夫链等。
Mark Blackburn、Robert Busser 研究了基于模型的安全功能测试[4]。主要项目支撑是NIST CSD(computer security division)部门的项目Automated Security Functional Testing。主要思路是利用SCRModeling 工具对软件的安全功能需求进行建模,使用表单方式设计软件的安全功能行为模型,将表单模型转换为测试规格说明模型,利用T-VEC工具生成测试向量(由一组输入变量,期望输出变量组成),开发测试驱动模式和目标测试环境的对象映射,将测试向量输入测试驱动模式执行测试。这种方法是一种一般的安全功能测试方法,它的适用范围取决于安全功能的建模能力,特别适用于建模用与或子句表达逻辑关系的安全需求,对授权、访问控制等安全功能测试比较适用。
2.3语法测试
语法测试是根据被测软件的功能接口的语法生成测试输入,检测被测软件对各类输入的响应。接口可以有多种类型,命令行、文件、环境变量、套接字等。语法测试基于这样一种思想,软件的接口或明确或隐含规定了输入的语法。语法定义了软件接受的输入数据的类型、格式。语法定义可采用BNF或正则表达式。语法测试的步骤是识别被测软件接口的语言,定义语言的语法,根据语法生成测试用例并执行测试。
生成的测试输入应当包含各类语法错误,符合语法的正确输入,不符合语法的畸形输入等。通过察看被测软件对各类输入的处理情况,确定被测软件是否存在安全缺陷。语法测试适用于被测软件有较明确的接口语法,易于表达语法并生成测试输入的情况。语法测试结合故障注入技术可得到更好的测试效果。
2.4基于故障注入的安全性测试
Wenliang Du将故障注入技术用于软件安全性测试,建立软件与环境交互(environment-application interaction,EAI) 的故障模型。故障注入针对应用与环境的交互点,主要包括用户输入、文件系统、网络接口、环境变量等引起的故障。相关项目有OUSPG(university of oulu,secure programming group)的项目PROTOS SecurityTesting of Protocol Implementations,该项目的目标是测试协议实现的安全性。主要思路是通过构造各类协议数据包测试目标软件是否能正确处理。实质是在各类协议数据包中植入故障,如修改某些协议字段的值等,支持的协议有HTTP、SIP、WAP、SNMP等。故障注入可以有效地模拟各种各样的异常程序行为,通过故障注人函数能够强制性地使程序进入到某些特定的状态,而这些状态在采用常规的标准测试技术的情况下一般是无法到达的。
2.5 模糊测试
模糊测试是一种发现安全漏洞的有效的测试方法,在安全性测试中越来越受到重视。模糊测试将随机的坏数据插入程序,观察程序是否能容忍杂乱输入。模糊测试是不合逻辑的,只是产生杂乱数据攻击程序。采用模糊测试攻击应用程序可发现其它采用逻辑思维来测试很难发现的安全缺陷。
2.6 基于属性的测试
描述了基于属性的测试方法,采用TASPEC 语言对软件的安全属性进行描述,生成安全属性规格说明,利用程序切片技术抽取与这个安全属性相关的代码,并测试这部分代码是否违反安全属性规格说明。基于属性的测试有针对性的测试目标软件的特定安全属性,可满足安全属性的分类和优先级排序要求,且部分与具体软件无关的属性规格说明是可重用的。
3.结束语
软件测试是所有工程学科的基本组成单元,是软件开发的重要部分。软件测试是为了发现故障而执行程序的过程,其目的是以尽可能少的时间和人力发现并改正软件中潜在的各种故障及缺陷。如何利用较少的测试用例,实现最大的测试覆盖,最大限度地发现软件瑕疵,是软件测试的目标之一;制定完善的测试计划、测试方案、结果分析、文档资料管理,亦是保证软件测试功效的前提。软件测试只能查找程序中的错误,不能证明程序中没有错误。
未来软件安全性测试技术主要发展方向包括:软件授权、访问控制等安全功能建模与测试研究;形式化安全测试方法研究;基于风险的安全测试及其在软件工程实践中的应用;故障注入、模糊测试、语法测试、基于属性的安全测试方法研究;利用威胁模型与攻击树指导安全测试过程;漏洞发现过程的建模及利用模型定量预测安全漏洞。
另外近年来基于Web 服务的分布式软件快速发展,如何对Web 服务开展安全性测试是分布式软件安全性测试面临的崭新课题。 [科]
【参考文献】
[1]陆璐,王柏勇.软件自动化测试技术[M].北京:清华大学出版社,2006.
[2]郭群.软件测试设计技术[J].电脑知识与技术,2007,(17).
[3]周博文,杜山泽.社会管理创新:从伦理观念、管理理念到思维方式的转变.载于.行政管理改革,2012,(11).