关于软件安全性测试方法研究
摘 要:软件安全性测试是保证软件安全性的重要手段。本文论述了软件安全性测试的特
点和主要内容,重点研究了国内外软件安全性测试的主要方法,最后总结了当前研究工作
并指出了未来软件安全性测试技术的研究重点与发展方向。
关键词:安全性测试;安全功能测试;语法测试;模糊测试
安全性是软件质量的一个重要属性。本文将重点关注安全性测试的主要方法、技术及工
具。有
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 基于模型的安全功能测试。基于模型的测试方法是对软件的行为和结构进行建模,
生成测试模型,由测试模型生成测试用例,驱动软件测试。常用的软件测试模型有有限状态
机、
UML 模型、马尔可夫链等。
Mark Blackburn、Robert Busser 研究了基于模型的安全功能测试。主要项目支撑是 NIST
CSD(computer security division)部门的项目 Automated Security Functional Testing。主要思
路是利用
SCRModeling 工具对软件的安全功能需求进行建模,使用表单方式设计软件的安