在做测试过程中,我们的软件产品在安全性方面考虑了多少?应该如何测评一个软件到底有多安全?
这个软件因为涉及客户商业上重要的信息资料,因此用户关心的核心问题始终围绕“这个软件安全吗”。一个由于设计导致的安全漏洞和一个由于实现导致的安全漏洞,对用户的最终影响都是巨大的。我的任务就是确保这个软件在安全性方面能满足客户期望。
一、什么是软件安全性测试
(1)什么是软件安全
软件安全属于软件领域里一个重要的子领域。在以前的单机时代,安全问题主要是操作系统容易感染病毒,单机应用程序软件安全问题并不突出。但是自从互联网普及后,软件安全问题愈加显加突显,使得软件安全性测试的重要性上升到一个前所未有的高度。
软件安全一般分为两个层次,即应用程序级别的安全性和操作系统级别的安全性。应用程序级别的安全性,包括对数据或业务功能的访问,在预期的安全性情况 下,操作者只能访问应用程序的特定功能、有限的数据等。操作系统级别的安全性是确保只有具备系统平台访问权限的用户才能访问,包括对系统的登录或远程访 问。
本文所讲的软件安全主要是应用程序层的安全,包括两个层面:①是应用程序本身的安全性。一般来说,应用程序的安全问题主要是由软件漏洞导 致的,这些漏洞可以是设计上的缺陷或是编程上的问题,甚至是开发人员预留的后门。②是应用程序的数据安全,包括数据存储安全和数据传输安全两个方面。
(2)软件安全性测试
一般来说,对安全性要求不高的软件,其安全性测试可以混在单元测试、集成测试、系统测试里一起做。但对安全性有较高需求的软件,则必须做专门的安全性测试,以便在破坏之前预防并识别软件的安全问题。
安全性测试(Security Testing)是指有关验证应用程序的安全等级和识别潜在安全性缺陷的过程。应用程序级安全测试的主要目的是查找软件自身程序设计中存在的安全隐患,并 检查应用程序对非法侵入的防范能力,根据安全指标不同测试策略也不同。注意:安全性测试并不最终证明应用程序是安全的,而是用于验证所设立策略的有效性, 这些对策是基于威胁分析阶段所做的假设而选择的。例如,测试应用软件在防止非授权的内部或外部用户的访问或故意破坏等情况时的运作。
二、软件安全性测试过程
(1)安全性测试方法
有许多的测试手段可以进行安全性测试,目前主要安全测试方法有:
①静态的代码安全测试:主要通过对源代码进行安全扫描,根据程序中数据流、控制流、语义等信息与其特有软件安全规则库进行匹对,从中找出代码中潜在的安 全漏洞。静态的源代码安全测试是非常有用的方法,它可以在编码阶段找出所有可能存在安全风险的代码,这样开发人员可以在早期解决潜在的安全问题。而正因为 如此,静态代码测试比较适用于早期的代码开发阶段,而不是测试阶段。
②动态的渗透测试:渗透测试也是常用的安全测试方法。是使用自动化工具或 者人工的方法模拟黑客的输入,对应用系统进行攻击性测试,从中找出运行时刻所存在的安全漏洞。这种测试的特点就是真实有效,一般找出来的问题都是正确的, 也是较为严重的。但渗透测试一个致命的缺点是模拟的测试数据只能到达有限的测试点,覆盖率很低。
③程序数据扫描。一个有高安全性需求的软件, 在运行过程中数据是不能遭到破坏的,否则就会导致缓冲区溢出类型的攻击。数据扫描的手段通常是进行内存测试,内存测试可以发现许多诸如缓冲区溢出之类的漏 洞,而这类漏洞使用除此之外的测试手段都难以发现。例如,对软件运行时的内存信息进行扫描,看是否存在一些导致隐患的信息,当然这需要专门的工具来进行验 证,手工做是比较困难的。
(2)反向安全性测试过程
大部分软件的安全测试都是依据缺陷空间反向设计原则来进行的,即事先检查哪些 地方可能存在安全隐患,然后针对这些可能的隐患进行测试。因此,反向测试过程是从缺陷空间出发,建立缺陷威胁模型,通过威胁模型来寻找入侵点,对入侵点进 行已知漏洞的扫描测试。好处是可以对已知的缺陷进行分析,避免软件里存在已知类型的缺陷,但是对未知的攻击手段和方法通常会无能为力。
①建立缺陷威胁模型。建立缺陷威胁模型主要是从已知的安全漏洞入手,检查软件中是否存在已知的漏洞。建立威胁模型时,需要先确定软件牵涉到哪些专业领域,再根据各个专业领域所遇到的攻击手段来进行建模。
②寻找和扫描入侵点。检查威胁模型里的哪些缺陷可能在本软件中发生,再将可能发生的威胁纳入入侵点矩阵进行管理。如果有成熟的漏洞扫描工具,那么直接使用漏洞扫描工具进行扫描,然后将发现的可疑问题纳入入侵点矩阵进行管理。
③入侵矩阵的验证测试。创建好入侵矩阵后,就可以针对入侵矩阵的具体条目设计对应的测试用例,然后进行测试验证。
(3)正向安全性测试过程
为了规避反向设计原则所带来的测试不完备性,需要一种正向的测试方法来对软件进行比较完备的测试,使测试过的软件能够预防未知的攻击手段和方法。
①先标识测试空间。对测试空间的所有的可变数据进行标识,由于进行安全性测试的代价高昂,其中要重点对外部输入层进行标识。例如,需求分析、概要设计、详细设计、编码这几个阶段都要对测试空间进行标识,并建立测试空间跟踪矩阵。
②精确定义设计空间。重点审查需求中对设计空间是否有明确定义,和需求牵涉到的数据是否都标识出了它的合法取值范围。在这个步骤中,最需要注意的是精确二字,要严格按照安全性原则来对设计空间做精确的定义。
③标识安全隐患。根据找出的测试空间和设计空间以及它们之间的转换规则,标识出哪些测试空间和哪些转换规则可能存在安全隐患。例如,测试空间愈复杂,即 测试空间划分越复杂或可变数据组合关系越多也越不安全。还有转换规则愈复杂,则出问题的可能性也愈大,这些都属于安全隐患。
④建立和验证入侵矩阵。安全隐患标识完成后,就可以根据标识出来的安全隐患建立入侵矩阵。列出潜在安全隐患,标识出存在潜在安全隐患的可变数据,和标识出安全隐患的等级。其中对于那些安全隐患等级高的可变数据,必须进行详尽的测试用例设计。
(4)正向和反向测试的区别
正向测试过程是以测试空间为依据寻找缺陷和漏洞,反向测试过程则是以已知的缺陷空间为依据去寻找软件中是否会发生同样的缺陷和漏洞,两者各有其优缺点。 反向测试过程主要的一个优点是成本较低,只要验证已知的可能发生的缺陷即可,但缺点是测试不完善,无法将测试空间覆盖完整,无法发现未知的攻击手段。正向 测试过程的优点是测试比较充分,但工作量相对来说较大。因此,对安全性要求较低的软件,一般按反向测试过程来测试即可,对于安全性要求较高的软件,应以正 向测试过程为主,反向测试过程为辅。
三、常见的软件安全性缺陷和漏洞
软件的安全有很多方面的内容,主要的安全问题是由软件本身的漏洞造成的,下面介绍常见的软件安全性缺陷和漏洞。
(1)缓冲区溢出
缓冲区溢出已成为软件安全的头号公敌,许多实际中的安全问题都与它有关。造成缓冲区溢出问题通常有以下两种原因。①设计空间的转换规则的校验问题。即缺 乏对可测数据的校验,导致非法数据没有在外部输入层被检查出来并丢弃。非法数据进入接口层和实现层后,由于它超出了接口层和实现层的对应测试空间或设计空 间的范围,从而引起溢出。②局部测试空间和设计空间不足。当合法数据进入后,由于程序实现层内对应的测试空间或设计空间不足,导致程序处理时出现溢出。
(2)加密弱点
这几种加密弱点是不安全的:①使用不安全的加密算法。加密算法强度不够,一些加密算法甚至可以用穷举法破解。②加密数据时密码是由伪随机算法产生的,而 产生伪随机数的方法存在缺陷,使密码很容易被破解。③身份验证算法存在缺陷。④客户机和服务器时钟未同步,给攻击者足够的时间来破解密码或修改数据。⑤未 对加密数据进行签名,导致攻击者可以篡改数据。所以,对于加密进行测试时,必须针对这些可能存在的加密弱点进行测试。
(3)错误处理
一般情况下,错误处理都会返回一些信息给用户,返回的出错信息可能会被恶意用户利用来进行攻击,恶意用户能够通过分析返回的错误信息知道下一步要如何做 才能使攻击成功。如果错误处理时调用了一些不该有的功能,那么错误处理的过程将被利用。错误处理属于异常空间内的处理问题,异常空间内的处理要尽量简单, 使用这条原则来设计可以避免这个问题。但错误处理往往牵涉到易用性方面的问题,如果错误处理的提示信息过于简单,用户可能会一头雾水,不知道下一步该怎么 操作。所以,在考虑错误处理的安全性的同时,需要和易用性一起进行权衡。
(4)权限过大
如果赋予过大的权限,就可能导致只有普通 用户权限的恶意用户利用过大的权限做出危害安全的操作。例如没有对能操作的内容做出限制,就可能导致用户可以访问超出规定范围的其他资源。进行安全性测试 时必须测试应用程序是否使用了过大的权限,重点要分析在各种情况下应该有的权限,然后检查实际中是否超出了给定的权限。权限过大问题本质上属于设计空间过 大问题,所以在设计时要控制好设计空间,避免设计空间过大造成权限过大的问题。
四、做好安全性测试的建议
许多软件安全测试经验告诉我们,做好软件安全性测试的必要条件是:一是充分了解软件安全漏洞,二是评估安全风险,三是拥有高效的软件安全测试技术和工具。
(1)充分了解软件安全漏洞
评估一个软件系统的安全程度,需要从设计、实现和部署三个环节同时着手。我们先看一下Common Criteria是如何评估软件系统安全的。首先要确定软件产品对应的Protection Profile(PP)。一个PP定义了一类软件产品的安全特性模板。例如数据库的PP、防火墙的PP等。然后,根据PP再提出具体的安全功能需求,如用 户的身份认证实现。最后,确定安全对象以及是如何满足对应的安全功能需求的。因此,一个安全软件的三个环节,哪个出问题都不行。
(2)安全性测试的评估
当做完安全性测试后,软件是否能够达到预期的安全程度呢?这是安全性测试人员最关心的问题,因此需要建立对测试后的安全性评估机制。一般从以下两个方面进行评估。①安全性缺陷数据评估。
如果发现软件的安全性缺陷和漏洞越多,可能遗留的缺陷也越多。进行这类评估时,必须建立基线数据作为参照,否则评估起来没有依据就无法得到正确的结论。 ②采用漏洞植入法来进行评估。漏洞植入法和可靠性测试里的故障插入测试是同一道理,只不过这里是在软件里插入一些有安全隐患的问题。采用漏洞植入法时,先 让不参加安全测试的特定人员在软件中预先植入一定数量的漏洞,最后测试完后看有多少植入的漏洞被发现,以此来评估软件的安全性测试做得是否充分。
(3)采用安全测试技术和工具
可使用专业的具有特定功能的安全扫描软件来寻找潜在的漏洞,将已经发生的缺陷纳入缺陷库,然后通过自动化测试方法来使用自动化缺陷库进行轰炸测试。例如,使用一些能够模拟各种攻击的软件来进行测试。
安全测试是用来验证集成在软件内的保护机制是否能够在实际中保护系统免受非法的侵入。一句通俗的话说:软件系统的安全当然必须能够经受住正面的攻击——但是它也必须能够经受住侧面的和背后的攻击
分享到:
相关推荐
它包括功能测试、性能测试、安全性测试、兼容性测试等多个方面。 4. 接受测试:也称为用户验收测试,是软件交付前的最后一环,由最终用户或代表用户执行,确保软件满足业务需求。 二、测试方法 1. 白盒测试:也...
- **性能测试**:虽然不是单元测试的重点,但有时也会涉及简单的性能测试。 #### 集成测试主要内容 集成测试主要关注模块之间的交互,其主要内容包括: - **接口测试**:验证模块间接口的正确性。 - **数据传递测试...
为了完成使命,TE需要评估软件中的薄弱点,并考虑安全、性能、可用性等多方面的风险因素。在此基础上,TE需要制定测试计划,确保测试的系统性和周密性,并对真实用户的使用方式和系统级别的体验进行重点关注。 为了...
7. 转载与分享:描述中提到软件是从网络下载站转载而来,并分享至CSDN这样的技术社区,这表明NZT9可能受到了一定的用户认可,用户间的分享也体现了软件的实用性和口碑。 8. 注意事项:使用此类工具前,用户应确保已...
在当今矿业机械化和自动化的趋势下,Pro/E软件以其强大的三维建模能力,在转载机的三维建模及其在煤机制修行业中的应用中发挥了重要作用。Pro/E,即Pro/ENGINEER,是PTC公司开发的一款全功能的三维CAD/CAM/CAE软件,...
硬盘检测工具是IT领域中非常实用的一类软件,主要用于对计算机硬盘进行健康状况检查、性能测试和故障预测。这类工具通常包含多种功能,比如SMART(Self-Monitoring, Analysis, and Reporting Technology)自监测、...
- 非功能性需求:如性能、可用性、安全性等,这些都是软件除功能需求外的重要考量因素。 - 需求跟踪:确保需求从产生到实现的过程可追溯,分为向前追溯(需求如何转化为设计和实现)和向后追溯(设计和实现如何...
这份概要设计说明书是软件开发过程中的关键文档,它为项目的后续详细设计、编码和测试提供了清晰的蓝图,有助于提高开发效率和软件质量。通过遵循这样的模板,开发团队可以确保所有方面都得到了充分考虑,降低潜在...
10. **测试与迭代**:开发完成后,需要进行多轮测试,包括功能测试、性能测试、兼容性测试以及用户体验测试,以确保在不同场景下都能正常运行,并根据用户反馈持续改进。 "眼镜试戴功能_files"这个压缩包很可能包含...
13. **性能优化**:包括查询优化、索引优化、存储过程优化等,以提升数据库的响应速度和整体性能。 这些基本概念和操作构成了SQL Server的基础知识框架。通过《2011 SQL笔试题》这样的练习材料,学习者可以测试并...
课程会教授如何使用CAD软件(如AutoCAD)进行二维和三维建模,绘制工程图样,以及理解和应用国际标准制图规则。 7. **创新与优化设计**:随着科技的发展,机械设计正逐步引入更多创新元素,如轻量化设计、绿色设计...
MPTool,即Marvell Product Tool,是与这款控制器配套的软件工具,主要用于SSD的初始化、性能测试、固件升级等操作。 在东芝的产品线中,88NV1120 MPTool扮演着重要角色。它专为东芝的存储设备定制,可以实现对88NV...
油腻QQ空间说说批量转载工具 v1.0 版本是这个软件的一个特定迭代,可能包含了优化的性能和新特性。下面将详细介绍这款工具的功能、使用方法以及它在IT领域的相关知识点。 1. **批量操作**:在社交网络中,手动逐一...
本文档面向的主要读者群体包括系统用户、软件设计师、程序开发员、测试人员以及售后技术支持团队,确保了从需求到实现的各个阶段都能有明确的设计依据。 1. 引言 引言部分主要阐述编写这份设计说明书的目的,背景...
5. **测试调试**:在不同设备上进行多次测试,确保界面能够在各种环境下正常运行,并修复可能出现的问题。 6. **部署上线**:将完成后的登录界面部署到目标系统中,并设置为默认启动项,使用户每次开机时都能看到这...
这款软件被广泛应用于企业的数据库管理、数据建模、数据测试、代码优化等环节,因其强大的功能和高效的性能,赢得了众多开发者的青睐。 在Toad for Oracle 12.8的官方手册中,首先提到了版权声明和软件许可。这份...
8. **单元测试**:为了保证代码质量,开发者可能利用了NUnit、xUnit等单元测试框架对各个模块进行测试。 9. **数据结构与算法**:优化的算法和合理的数据结构能够提升系统处理教务数据的效率,如排序、搜索算法的...
【RPA之家转载视频教程4】与UiPath合作的EDP商业RPA之旅.mp4 这个文件是关于RPA(Robotic Process Automation)的学习资源,由RPA之家提供,旨在帮助用户系统地掌握RPA技术和应用。RPA是一种自动化技术,它允许软件...
所以本手册以Java开发者为中心视角,划分为编程规约、异常日志、单元测试、安全规约、工程结构、MySQL数据库六个维度,再根据内容特征,细分成若干二级子目录。 ———————————————— 版权声明:本文为...