7.4.2 软件安垒测试
1.软件安全测试基本概念
一般来说,对安全性要求不高的软件,其安全性测试可以混在单元测试、集成测试、系统测试之中一起做。但是对于安全性要较高要求的软件,则必须做专门的安全性测试,以便在部署之前预防并识别软件的安全问题。
显然,传统的软件测试重点在于功能测试,其强调软件的肯定需求,强调软件应当做什么。但是,在工程项目中,这种软件测试并不能用来发现软件中的安全缺陷,不能用来验证软件安全性。因此,需要考虑采用专门的安全测试来保证软件安全性。事实上,软件安全性测试技术有着与其他传统测试类型不同的关注重点。相比传统软件测试,软件安全测试的重点在于软件的否定需求,安全性测试不但强调软件应当做什么,而且更加强调软件不应该做什么。例如,未授权用户不能访问系统数据。
随着软件技术的发展,安全性作为软件系统的质量属性受到越来越多的重视。软件安全测试是确定软件的安全特性实现是否与预期设计一致的过程,是验证软件安全等级和识别潜在安全缺陷的过程,检查软件系统是否具有一定程度的保护机制和防止受到非法侵入的能力。
安全性测试应该以攻击者所有可能的方式探测系统,寻找软件中可以被利用的弱点。安全性测试在由风险分析阶段发现的系统风险指导时最有效。这意味着安全性测试是一种创造性的测试形式,它受限于已识别的风险和测试人员的安全专业知识。
实践证明,代码覆盖范围是理解一组测试能发现多少系统缺陷的度量标准。对于安全性测试,代码覆盖范围扮演了更关键的角色。简而言之,如果程序的某个模块没有被测试,则其安全性就应该受到怀疑。一个明显的风险是未经测试的代码可能会包含特洛伊木马,表面上无害的代码会由此进行攻击。更为普遍的风险是未经验证的代码含有严重的错误,这些错误可能被攻击者利用。