首页 理论教育 如何进行软件安全问题测试

如何进行软件安全问题测试

时间:2023-06-09 理论教育 版权反馈
【摘要】:安全测试更有针对性,可能采用一些和普通测试不一样的测试手段,如攻击和反攻击技术。实际上,安全测试就是一轮多角度、全方位的攻击和反攻击,其目的就是要抢在攻击者之前尽可能多地找到软件中的漏洞,以减小软件遭到攻击的可能性。在测试用例的设计过程中,必须了解安全测试实际上是对程序进行的安全攻击,因此,不但数据本身需要精心设计,测试手段也要精心设计。

如何进行软件安全问题测试

质量保证活动是软件开发过程中的重要环节,而软件测试是软件质量保证的关键手段。实际上,软件测试的工作量,在软件开发过程中占据较大的一部分,测试做得好,会大大降低维护的成本。测试的主要目标是找到软件中存在的错误。随着应用越来越广泛,软件的安全性也就成为软件的关键质量指标,因此,针对安全问题的测试显得更为重要。

软件安全测试,是在充分考虑软件安全性问题的前提下进行的测试。普通的软件测试的主要目的是:确保软件不会去完成没有预先设计的功能,确保软件能够完成预先设计的功能。安全测试更有针对性,可能采用一些和普通测试不一样的测试手段,如攻击和反攻击技术。实际上,安全测试就是一轮多角度、全方位的攻击和反攻击,其目的就是要抢在攻击者之前尽可能多地找到软件中的漏洞,以减小软件遭到攻击的可能性。

安全测试基于软件需求说明书中关于安全性的功能需求说明,测试的内容主要是软件的安全功能实现是否与安全需求一致。通常情况下,软件的安全需求包括:

●数据保密和完整可用。

通信过程中的身份认证、授权和访问控制。

●通信方的不可抵赖。

●隐私保护、安全管理。

●软件运行过程中的安全漏洞等。

以一个Web网站为例,需要考虑的问题见表3-1。

表3-1 Web网站需要考虑的安全问题

978-7-111-39843-1-Chapter03-44.jpg

软件安全测试和一般的测试具有很大的区别。一般测试主要是确定软件的功能能否达到,如果没有达到,就进行修改,其任务具有一定的确定性。而安全测试主要是检查软件所达到的功能是否安全可靠,需要证明的是软件不会出现安全方面的问题,如数据被篡改、非授权访问和遭受DoS攻击等。

软件的安全测试,一般根据设计阶段的安全威胁模型来实施。

软件安全测试的过程可以分为以下几个步骤。

(1)基于前面设计阶段制定的安全威胁模型,制定测试计划

该过程一般基于威胁树,以针对用户密码安全的威胁树为例,如图3-1所示,测试计划就可以基于密码可能遭受的各种攻击进行制定。

(2)将安全测试的最小组件单位进行划分,并确定组件的输入格式

实际上,和传统的测试不同,安全威胁模型中,并不是所有的模块都会有安全问题,因此,只需将需要进行安全测试的某一部分程序取出来进行测试,将安全测试的最小组件单位进行划分。此外,每个组件都提供了接口,也就是输入,在测试阶段,测试用例需要进行输入,就必须将每个接口的输入类型、输入格式等都列出来,便于测试用例的制定。这些输入包括Socket数据、命令行串口等。(www.xing528.com)

(3)根据各个接口可能遇到的威胁或者系统的潜在漏洞,对接口进行分级

在该步骤中,主要是确定系统将要受到的威胁的严重性,将比较严重的威胁进行优先测试。这个严重性的判断,应该来源于安全威胁模型。可以通过很多方法对接口受到的威胁进行分级。例如,可以采用一种积分制方法,对各个接口可能受到的各种安全威胁进行积分,最后累加,优先测试那些分数较高的接口。

(4)确定输入数据,设计测试用例

每一个接口可以输入的数据都不相同,由于安全测试不同于普通的测试,因此还要更加精心地设计测试用例。有时还要精心设计输入的数据结构,如随机数、集合等,都必须是为安全测试服务的。

在测试用例的设计过程中,必须了解安全测试实际上是对程序进行的安全攻击,因此,不但数据本身需要精心设计,测试手段也要精心设计。例如,在缓冲区溢出的测试中,必须精心设计各种输入,从不同的方面来对程序进行“攻击”。如上文Web网站中可以设计的测试用例见表3-2(这里仅列出测试的手段)。

表3-2 Web网站需要进行的测试

978-7-111-39843-1-Chapter03-45.jpg

(5)攻击应用程序,查看其效果

用设计的测试用例来“攻击”应用程序,使得系统处于一种受到安全威胁的状态,从而得到输出。

(6)总结测试结果,提出解决方案

在本过程中,将预期输出和实际输出进行比较,得出结论,写出测试报告,最后提交给相应的人员,进行错误修改。

以上是测试的过程。近年来,关于安全性测试,还研究出一些新的成果,如借助计算机进行自动测试。这些成果主要包括以下几种:

1)用形式化方法进行安全测试。该方法用状态迁移系统描述软件的行为,将软件的功能用计算逻辑和逻辑演算来表达,通过逻辑上的推理搜索,发现软件中的漏洞。

2)基于模型的安全功能测试。在该方法中,首先对软件的结构和功能进行建模,生成测试模型,然后利用测试模型导出测试用例。该方法的成功与否,取决于建模的准确性,对身份认证、访问控制等情况下的安全测试比较适用。常用模型有UML模型、马尔可夫链模型等。

3)基于输入语法进行测试。接口的输入语法定义了软件接受的输入数据的类型、格式等。在该类方法中,首先提取被测试接口的输入语法,如命令行、文件、环境变量、套接字,然后根据这些语法生成测试用例。此类测试方法比较适用于被测试软件有较明确的接口语法的情况,范围较窄。

4)采用随机方法进行测试。该方法又称模糊测试。将随机的不合法数据输入到程序中,有时能够发现一些意想不到的错误。此类方法在安全性测试中越来越受到重视。

软件测试是软件工程研究中比较活跃的一个分支,也受到越来越多学者的重视。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈