软件安全性测试研究综述_何鑫
- 格式:pdf
- 大小:185.07 KB
- 文档页数:4
软件安全性测试与评估的研究一、引言随着信息化时代的到来,软件已经成为了人们生产、生活、娱乐的必需品。
软件的出现大大提高了人们的效率和生活质量,但也给人们的财产、隐私和安全带来了新的风险。
为了保护软件的安全性,软件安全性测试和评估显得尤为重要。
二、软件安全性测试软件安全性测试是保障软件安全的重要环节。
软件安全性测试主要包括以下几个方面:1.功能测试:对软件进行功能测试,以验证其是否满足预期的功能需求。
测试人员需要针对不同的输入验证软件是否有正确的输出。
2.性能测试:对软件进行性能测试,以验证其是否能正常地处理大量数据或高并发请求等。
3.稳定性测试:对软件进行稳定性测试,以验证其在不同环境下是否可以维持稳定运行。
4.安全性测试:对软件进行安全性测试,以验证其是否能避免或抵御各种攻击、漏洞。
软件安全性测试的重点在于安全性测试,其目的是发现软件系统中潜在的安全漏洞,比如密码泄露、SQL注入、XSS攻击、文件上传漏洞等等。
软件安全性测试的方法有很多种,其中主要的分为黑盒测试和白盒测试。
1.黑盒测试:黑盒测试是指测试人员只考虑软件的输入与输出,忽略系统内部的实现细节。
测试人员不需要了解软件的程序代码,只需要根据具体的测试用例进行测试。
2.白盒测试:白盒测试是基于算法和代码实现的测试方法,测试人员需要知道软件的程序代码和内部实现细节。
白盒测试可以更加深入地了解软件系统的实际结构和运行情况,从而更好地发现安全漏洞。
三、软件安全性评估软件安全性评估是一项系统性的安全风险评估,其目的是发现系统中可能存在的安全漏洞,分析这些漏洞所带来的安全风险,并提出解决方案,以保障软件系统的安全。
软件安全性评估主要包括以下两个方面:1.安全风险评估:对软件系统的安全风险进行评估,明确软件在安全风险方面的弱点和缺陷,并提出解决方案。
2.安全性能评估:对软件系统的安全性能进行评估,包括软件系统的防御能力、保密能力、完整性和可用性等方面。
软件安全性测试技术研究随着信息化时代的到来,越来越多的企业和个人开始使用软件来解决实际问题。
然而,随之而来的软件安全问题也越来越严重,各种安全漏洞、恶意程序和网络攻击频繁出现。
这给用户带来了很大的安全隐患,也给开发者带来了很大的压力。
为保障软件系统的安全性,软件安全性测试技术应运而生。
一、软件安全性测试的概念软件安全性测试是指对软件系统进行安全分析和漏洞探测的过程。
其目的是发现软件系统中潜在的安全漏洞和缺陷,并对它们进行修补,以提高软件系统的安全性和可靠性。
软件安全性测试主要包括黑盒测试和白盒测试两种方法。
二、黑盒测试黑盒测试是一种测试方法,其测试者对被测试软件的内部结构和代码并不了解,只是通过输入某些数据和指令来观察其输出结果,从而分析软件系统的安全性能。
黑盒测试主要检测软件系统的安全性能如:密钥管理、认证、授权等。
三、白盒测试白盒测试相较黑盒测试,在测试的过程中需要对被测试的软件进行源代码分析,从而获取其内部的运行细节和逻辑结构,以更深入地挖掘软件系统中可能存在的问题,对软件系统进行安全性能评估。
四、软件安全性测试技术的研究方向1.漏洞挖掘技术随着软件系统的更新换代,越来越多的漏洞被发现和公开。
漏洞挖掘技术是指通过黑盒、白盒等方式对程序进行测试,尝试发现其中可能存在的漏洞和弱点。
2.静态分析技术静态分析技术是指对软件程序源代码进行分析的过程,以检测代码中可能存在的问题和风险。
静态分析技术分为两种:符号执行技术和抽象解释技术。
前者是对程序的各个语句和数据进行符号化,从而在程序实际执行之前进行分析,发现程序中可能存在的问题;而后者是以程序的抽象形式为基础,对其进行逐一分析。
3.动态测试技术动态测试技术是指在执行程序的同时,监测程序的行为和输出结果,以判断程序的运行是否符合预期。
动态测试技术分为两种:代码插桩技术和模糊测试技术。
前者通过在程序的执行路径上插入各种监测点,对程序的运行过程进行监控和调试;后者则是通过在程序输入的数据中注入各种形式的模糊性,尝试让程序运行出各种可能的异常情况。
软件工程中的安全性测试软件工程是一门急需严密测试的学科,因为在多数情况下,软件的功能和质量会直接关系到人们的生命安全、财产安全和隐私安全。
软件的安全性测试是保证软件的安全、稳定和可靠的重要环节,其中最重要的工具就是软件安全性测试。
1. 什么是软件安全性测试软件安全性测试是通过模拟黑客攻击、渗透测试、漏洞扫描和威胁建模等手段,对软件中的缺陷和漏洞进行发现和修复,以保证软件能够安全、稳定地运行。
其主要目标是检测软件中可能存在的安全漏洞,并进行修复,防止攻击者利用这些漏洞对系统进行攻击,以保持软件系统的安全性、可靠性和高效性。
2. 安全性测试的重要性软件安全性测试至关重要。
在如今这个科技迅猛发展的时代,软件技术应用更加广泛,攻击手段也更加繁复。
如果软件的误用或漏洞问题没有得到及时修复,那么可能会造成极大的危害,尤其是在财产安全和人身安全上,比如说网络钓鱼、软件扫描等恶意攻击;还有机密信息被拿走或黑客窃取个人信息等。
因此,软件的安全性测试刻不容缓。
3. 安全性测试的方法当前,安全性测试主要分为手动测试和自动测试两种:手动测试手动测试是指人员通过手动模拟漏洞,通过人工去发现、复现、验证漏洞。
手动测试的优点是可以发现许多自动工具无法找到的漏洞,但需要耗费较多人力和精力。
手动测试的方法可以很好地找到Web的SQL注入、XSS、文件上传漏洞、越权访问等漏洞。
测试人员主要通过清晰定义用例、强化测试用例的深入程度、收集反馈并改进测试计划等方法,来促进手动测试的强大。
自动测试自动测试是指通过一些攻击模拟工具和漏洞扫描器等,对目标软件进行测试。
自动测试的优点是快速和高效,但是其能够发现的漏洞相对于手动测试较为有限,且可能存在误报和漏报的情况。
结合手动测试和自动测试来进行安全性测试,通过两者之间进行交互和协同,会更加高效、全面地发现软件中的漏洞问题。
4. 安全性测试的标准和步骤安全性测试有细致而复杂的测试标准和流程。
测试人员可以根据软件特点和安全测试的实际需要,制定适合该软件的测试标准和流程,对安全性测试进行评估和分配。
软件开发中的安全性测试:策略与工具在当今数字化时代,软件已成为我们生活和工作中不可或缺的一部分。
从智能手机上的应用程序到企业的关键业务系统,软件的安全性至关重要。
一旦软件存在安全漏洞,可能会导致个人隐私泄露、企业数据被盗取,甚至对国家安全造成威胁。
因此,在软件开发过程中,安全性测试是必不可少的环节。
本文将探讨软件开发中的安全性测试策略与工具,帮助您更好地理解和保障软件的安全性。
一、安全性测试的重要性随着网络技术的飞速发展,软件面临的安全威胁日益增多。
黑客攻击、恶意软件、数据泄露等事件屡见不鲜。
如果在软件发布之前没有进行充分的安全性测试,就如同将一座没有坚固城墙的城堡暴露在敌人面前,后果不堪设想。
安全性测试不仅可以帮助发现潜在的安全漏洞,还能提高用户对软件的信任度。
用户越来越关注软件的安全性,如果一款软件频繁出现安全问题,用户很可能会选择放弃使用,转而寻找更可靠的替代品。
对于企业来说,软件的安全性直接关系到企业的声誉和经济利益。
一旦发生重大安全事故,企业可能会面临巨额的赔偿和法律责任。
二、安全性测试策略1、需求分析阶段的安全性考虑在软件开发的需求分析阶段,就应该将安全性纳入考虑范围。
明确软件需要处理的敏感数据类型,如个人身份信息、财务数据等,并确定相应的安全级别和保护措施。
同时,分析可能存在的安全威胁和风险,为后续的安全性测试提供指导。
2、设计阶段的安全架构在软件设计阶段,构建合理的安全架构是确保软件安全性的关键。
采用分层的架构设计,将不同的功能模块进行隔离,限制访问权限,减少安全漏洞的传播范围。
使用加密技术对敏感数据进行加密存储和传输,确保数据的机密性和完整性。
3、编码阶段的安全规范开发人员在编码过程中应遵循安全规范,避免常见的安全漏洞,如SQL 注入、跨站脚本攻击(XSS)、缓冲区溢出等。
对输入数据进行严格的验证和过滤,防止恶意输入导致系统崩溃或数据泄露。
使用安全的函数和库,避免使用存在安全风险的代码片段。
计算机软件安全检测技术综述计算机软件安全检测技术是指通过对计算机软件进行系统化、自动化的检测,以发现其中的安全漏洞、风险和威胁,并提出相应的修复措施的一种技术。
随着互联网的快速发展和计算机软件的广泛应用,软件安全已成为信息安全领域的重要研究方向之一。
目前,常见的计算机软件安全检测技术包括静态分析、动态分析和漏洞扫描等。
静态分析是指在不执行软件程序的情况下,通过对软件源代码、字节码或可执行文件进行分析,发现其中的安全漏洞和风险。
静态分析技术主要包括代码审查、抽象解释、数据流分析、符号执行等方法。
代码审查是目前最常见的静态分析方法之一,通过仔细地检查软件源代码中潜在的安全问题,如缓冲区溢出、代码注入等。
抽象解释是一种数学方法,通过对程序的抽象执行来推导出程序的属性,包括安全属性。
数据流分析是通过跟踪程序中的数据流,找到其中潜在的安全问题和漏洞。
符号执行是一种基于约束求解的方法,通过对程序中的符号进行执行和分析,发现其中可能存在的安全漏洞。
动态分析是指在执行软件程序的情况下,通过监视程序的行为和数据流动态,找出其中的安全风险和威胁。
动态分析技术主要包括模糊测试、符号执行、行为分析等方法。
模糊测试是一种通过向程序输入异常或非预期的数据来测试其鲁棒性和安全性的方法。
符号执行在动态分析中也有应用,通过对程序中的符号进行符号执行和分析,发现其中的安全问题。
行为分析是一种通过监视程序的运行时行为,包括系统调用、网络通信等来发现其中的安全问题。
漏洞扫描是指使用自动化工具对软件进行扫描,发现其中已知的安全漏洞和威胁。
漏洞扫描技术主要包括漏洞数据库、漏洞扫描工具和漏洞挖掘等方法。
漏洞数据库是存储已知软件漏洞和威胁的数据库,通过对软件进行扫描和匹配,发现其中的已知漏洞。
漏洞扫描工具是一种自动化工具,通过对软件进行扫描和测试,发现其中的安全漏洞和风险。
漏洞挖掘是一种通过主动探测软件中的安全漏洞和威胁的方法,包括黑盒测试、白盒测试等。
软件开发中的安全性测试:策略与工具在当今数字化的时代,软件已经成为我们生活和工作中不可或缺的一部分。
从智能手机上的应用程序到企业的关键业务系统,软件的广泛应用带来了极大的便利,但同时也伴随着潜在的安全风险。
为了确保软件的安全性,保障用户的隐私和数据安全,软件开发中的安全性测试显得尤为重要。
安全性测试是软件开发过程中的一个关键环节,其目的是发现软件中可能存在的安全漏洞和弱点,评估软件在面对各种攻击和威胁时的抵御能力,并提供改进和修复的建议。
有效的安全性测试可以帮助开发团队在软件发布之前识别和解决潜在的安全问题,降低安全风险,提高软件的质量和可靠性。
在进行安全性测试时,需要采用一系列的策略和工具。
首先,明确测试的目标和范围是至关重要的。
测试目标应该与软件的用途、用户群体以及可能面临的安全威胁相关。
例如,一个金融类软件的安全性测试重点可能在于数据加密、身份验证和交易安全;而一个社交网络应用的安全性测试则可能更关注用户隐私保护、数据泄露防范等方面。
确定测试范围时,需要考虑软件的功能模块、接口、数据库、网络通信等各个方面。
风险评估是安全性测试策略中的重要组成部分。
通过对软件可能面临的威胁进行分析,评估其发生的可能性和潜在的影响,从而确定测试的优先级。
常见的威胁包括 SQL 注入、跨站脚本攻击(XSS)、跨站请求伪造(CSRF)、权限提升、缓冲区溢出等。
针对高风险的区域和功能,应该投入更多的测试资源和精力。
在安全性测试策略中,还需要考虑测试的类型和方法。
常见的安全性测试类型包括静态测试和动态测试。
静态测试主要是对软件的源代码、配置文件等进行分析,查找潜在的安全漏洞。
工具如 Fortify、Checkmarx 等可以帮助进行静态代码分析,检测诸如代码注入、敏感信息泄露等问题。
动态测试则是在软件运行时进行测试,模拟真实的攻击场景,验证软件的安全性。
例如,使用 Burp Suite 等工具进行Web 应用的渗透测试,通过发送恶意请求来检测是否存在漏洞。
软件测试报告软件安全性测试软件测试报告1. 引言软件安全性测试是软件测试过程中的一项重要环节,旨在评估软件系统在安全方面的表现。
本报告旨在分析并总结对XXX软件进行的软件安全性测试的结果,以及相关的测试方法和策略。
2. 测试背景XXX软件是一款用于处理敏感数据的企业级应用程序。
鉴于该软件在保护用户数据方面的重要性,对其安全性进行全面的测试是必要的。
3. 测试目标本次软件安全性测试的目标是:3.1 评估XXX软件在用户访问控制方面的表现,包括登录验证、权限管理等功能;3.2 检查XXX软件是否存在常见的安全漏洞,例如跨站脚本攻击(XSS)、SQL注入等;3.3 评估XXX软件在数据传输过程中的安全性,确保数据的机密性和完整性;3.4 验证XXX软件在异常输入和边界条件测试下的稳定性和安全性。
4. 测试方法为了达到上述测试目标,采用了以下测试方法:4.1 静态代码审查:通过分析源代码来发现潜在的安全漏洞;4.2 黑盒测试:模拟攻击者的行为来发现系统的漏洞,包括探测输入点、尝试常见攻击向量等;4.3 白盒测试:分析和测试系统的内部结构和流程,查找可能存在的漏洞和弱点;4.4 功能测试:验证XXX软件在正常使用场景下的安全性和稳定性;4.5 性能测试:评估XXX软件在高负载情况下的安全性表现。
5. 测试结果5.1 用户访问控制:对XXX软件的登录验证和权限管理功能进行了全面测试,并未发现明显的安全漏洞或潜在问题;5.2 安全漏洞:通过黑盒、白盒和静态代码审查等综合方法,对XXX软件进行了安全漏洞扫描,发现并修复了少数低危漏洞;5.3 数据传输:通过加密算法和数据传输过程的验证,确保XXX 软件在数据传输中的机密性和完整性;5.4 异常输入和边界条件测试:对XXX软件进行了大量的异常输入和边界条件测试,系统表现稳定,未发现安全性问题。
6. 结论综合上述测试结果,XXX软件在软件安全性方面表现良好。
测试过程中发现的少数低危漏洞已经得到修复。
计算机软件安全检测存在的问题及方法综述论文计算机软件安全检测存在的问题及方法综述论文计算机软件安全检测主要是进行计算机软件漏洞的检测,计算机软件漏洞的检测主要针对软件可能存在的缺陷且该缺陷有可能导致软件在应用中存在一定的风险。
由于软件安全检测对于软件开发工作是极为重要的过程,对软件安全检测工作也是需要相应地高度重视。
1 计算机软件安全检测计算机软件安全检测是利用运行程序的方式来发现软件编写过程中存在的一些漏洞并对漏洞进行修改的过程,从而对计算机软件本身可能存在的风险进行有效地避免和改正,软件安全检测是软件开发中及其重要的一环。
软件安全检测所需要达到的目标是用更少的测试过程来实现更大的软件安全覆盖面,达到高效快速地发现软件漏洞。
目前网络中存在很多种对计算机软件安全检查的方法,但从本质上看,进行计算机软件安全测试的方法主要两大类。
大部分检测方案都是基于静态检测和动态监测两大类检测方法。
2 进行软件安全检测的意义计算机软件的安全检测过程是整个软件开发中极为重要的一个步骤,越早发现软件中可能存在的一些故障问题,就意味着越早解决问题,就能将软件出现问题的概率降到最低,有效地预防软件崩溃。
而计算机软件的安全检测则主要是对软件中可能留存的一些漏洞进行测试,以免该漏洞在今后的日常使用中致使软件出现故障,因此,对计算机软件的安全进行检测是很有必要性的。
3 软件安全检测存在的问题3.1软件安全检测人员涉及广泛由于计算机软件的相关特性,软件安全检测工作涉及的方面广泛,所需要的检测人员及技术的要求也就对应地提高,需要各方面的技术人才。
对于检测人员的多元化问题就极为重要,不仅人员要齐,各方面的合作也要密切。
只有多部门的密切合作以及与软件开发相关部门的密切沟通,才能高效的解决软件检测中出现的各种疑难问题。
如果没有密切的合作,在软件安全检测中,各自为战,没有有效的沟通,不能从实际出发,软件安全检测将无法顺利进行下去,即使发现问题也没有有效的办法解决问题。
软件评测的安全性测试与保障软件评测是一项关键的工作,它旨在提供对软件产品质量的评估和建议。
在进行软件评测时,安全性测试是至关重要的一步。
在本文中,我们将探讨软件评测中的安全性测试以及保障措施。
一、安全性测试的重要性在当今数字化时代,软件在我们的生活中扮演着越来越重要的角色。
然而,随着软件的广泛应用,安全风险也日益增长。
保障软件的安全性对于用户的数据和隐私的保护至关重要。
因此,安全性测试是确保软件功能稳定和用户信息安全的必要步骤。
二、安全性测试的方法1.静态分析静态分析是评估软件代码潜在缺陷和漏洞的常用方法。
通过分析源代码或二进制代码,识别潜在的安全漏洞,如缓冲区溢出和代码注入。
对软件进行静态分析可以提前发现并修复潜在的安全漏洞,从而提高软件的安全性。
2.动态测试动态测试是在运行时对软件进行测试以模拟真实的使用情况。
通过使用各种工具和技术,如输入验证和负载测试,动态测试可以评估软件在不同使用场景下的安全性能。
通过动态测试,可以检测到可能存在的漏洞和安全缺陷,以便及时修复。
3.代码审查代码审查是一种以人工方式检查源代码的方法。
通过仔细检查软件源代码,发现潜在的漏洞和编程错误。
代码审查可以发现一些静态分析方法无法覆盖的问题,并提供更全面的安全评估。
三、安全性测试的保障措施1.数据保护在进行软件评测时,保护测试数据的安全非常重要。
测试数据可能包含敏感信息,如个人身份证号码或银行账户信息。
为了保护这些数据不被未授权的人访问,可以使用加密技术和访问权限控制。
2.漏洞报告与修复在安全性测试中发现的漏洞和安全缺陷应该及时报告给开发团队,并与其合作解决问题。
开发团队需要对漏洞进行修复,并确保修复方案的有效性。
定期发布安全补丁和更新,以修复已知漏洞,提高软件的安全性。
3.敏感信息保护软件评测过程中,对于用户敏感信息的处理需要谨慎。
评测人员应该遵循隐私保护原则,确保用户数据的机密性和完整性。
评测人员应该严格遵守保密协议,防止敏感信息泄露。
基于DO-178B的软件测试技术研究何鑫;刘畅;郑军【摘要】为了满足适航要求,航空机载系统软件测试需要遵循DO-178B的要求;然而,传统的软件测试技术和过程并不能完全适应适航标准的要求;同时,国内缺乏基于DO-178B的软件测试研究和工程实践,适航相关领域研究现状与国外成熟的适航标准规范体系相比尚有一定的差距;因此,文中根据DO-178B对软件测试的相关要求,提出一套基于DO-178B的软件测试技术方案,通过工程实例进行应用,并对相关领域的发展前景进行总结和展望;实例应用表明,该软件测试实施方案可以成功指导基于DO-178B的软件测试工作.【期刊名称】《计算机测量与控制》【年(卷),期】2013(021)006【总页数】4页(P1470-1473)【关键词】DO-178B;软件测试【作者】何鑫;刘畅;郑军【作者单位】中国航空综合技术研究所,北京 100028;中国航空综合技术研究所,北京 100028;中国航空综合技术研究所,北京 100028【正文语种】中文【中图分类】TP3110 引言DO-178B[1]是由美国航空无线电技术委员会(RTCA)所提出的一个航空工业软件标准,用于建立一套航空机载系统和设备合格审定相关的软件要求[2],需要开发人员、验证人员和用户在对机载系统和设备进行设计、实现、验证时执行。
软件测试是验证软件是否能达到期望功能的重要方法,也是保证软件质量的关键途径[3]。
为了满足适航要求,航空机载系统软件测试也需要遵循DO-178B的要求。
然而,传统的软件测试技术和过程并不能完全适应适航标准的要求,因此需要提出满足DO-178B要求的软件测试过程,用于验证机载软件产品是否达到了适航标准要求。
基于DO-178B的软件测试的主要目的是证明软件满足其需求,并以高置信度证明可能导致在系统安全性评估过程中确定的不可接受的失效状态的错误已被消除[4]。
根据国外多年的软件工程实践经验,遵循DO-178B标准,采用基于需求的软件测试方法,是一种行之有效的保证航空嵌入式软件质量和可靠性的手段。
综述与评论计算机测量与控制.2011.19(3) Com puter Measurement &C ontrol ·493·收稿日期:2010-10-18; 修回日期:2010-11-27。
作者简介:何 鑫(1983-),男,北京人,硕士,主要从事软件可靠性工程、软件安全性工程研究。
文章编号:1671-4598(2011)03-0493-04 中图分类号:TP311文献标识码:A软件安全性测试研究综述何 鑫,郑 军,刘 畅(中国航空综合技术研究所,北京 100028)摘要:近年来,软件安全性在保证系统安全、避免重大人员伤亡和财产损失方面起到了重要作用;然而在软件安全性工程中,软件安全性并不能完全依靠常规的软件工程方法和软件测评手段来进行测试;如何在工程中开展软件安全性测试仍然是一个悬而未决的问题;首先从软件安全性测试的发展现状入手,分析我国在该领域工程应用中所遇到的问题;然后阐述当前主要的软件安全性测试流程和方法,将现有的测试方法分3类进行描述,并分析和比较这些测试方法的特点;最后总结并展望软件安全性测试研究的发展方向。
关键词:软件安全性;软件安全性测试A Survey on Research of Software Safety TestH e Xin ,Zheng Jun ,Liu Chang(China A ero -Poly techno lo gy Establishment ,Beijing 100028,China )Abstract :In recent y ears ,s oftw are safety plays an impo rtant role in verifying system safety and avoiding the casualties and property los -s es ,but it is difficult to verify system safety in traditional softw are engin eering and softw are tes t .Consequen tly ,how to do software safety test tu rns to be an open question in software s afety engineering .After des cribing the statu s of softw are safety tes t ,this paper discu sses the prob lem s of softw are safety test in engineering .In addition ,this paper provides a su rvey on the cu rren t m ajor softw are safety test process and m ethods ,and gives a detail in troduction to characteristics of the meth ods w hich are classified into three species in this paper .Finally ,the fu -ture developm en t in this res earch area is also discussed .Key words :softw are safety ;software s afety test0 引言随着科技的进步,软件的应用领域已逐渐扩展到航空、航天、核工业、医疗等行业。
在这些领域中,软件在运行和控制危险以及安全关键功能中起着越来越重要的作用。
作为软件质量的一个重要属性,软件安全性表达了“软件在系统工作中避免不可接受风险的能力[1]”以及“软件运行而不引起系统事故的能力[2]”,成为保证系统安全、避免重大人员伤亡和财产损失的一个重要环节。
然而在工程项目中,常规的软件工程方法和软件测评手段并不能完全验证软件安全性,因此,需要通过软件安全性测试来验证与软件相关的系统危险已被消除或被控制在可接受的风险水平,并通过测试在软件中发现和排除隐蔽的重大错误[3]。
目前,如何在工程中开展软件安全性测试仍然是一个悬而未决的问题。
针对这一问题,文中将首先从软件安全性测试的发展现状入手,分析我国在该领域工程应用中所遇到的问题;然后阐述当前主要的软件安全性测试流程和方法,将现有的测试方法分3类进行描述,并分析和比较这些方法的特点;最后总结并展望软件安全性测试研究的发展方向。
1 国内外发展现状软件安全性测试是检验软件中已存在的软件安全性措施是否有效的测试,是保证系统安全性的重要手段。
国外对软件安全性的研究源于实际项目中的成功经验和失败教训。
目前,多个国际组织和空间大国在技术研究与应用、标准制订与推广等方面都取得了重要成果,制订了一系列关于软件安全性的标准和指南。
而国内相关领域的研究大多参考国外经验,仍停留在理论阶段,不能满足应用的需要,在实际运用中遇到了如下问题:(1)在软件研制周期中没有开展相应的软件安全性分析和评估工作,造成制定的软件安全性需求不全面,同时缺乏对系统及软件危险的跟踪控制。
(2)对软件安全性测试在工程中的应用缺乏足够的重视。
目前,国内的软件测试虽然包含安全性测试这一测试类型,但在测试中针对性不强,并且由于安全性需求不够全面,也造成了测试依据的缺乏。
(3)国内相关标准中缺乏对软件安全性测试相关技术的完整描述,这也影响了软件安全性测试在软件验证过程中的推广与应用。
2 软件安全性测试流程软件安全性测试应包含如下内容[5]:验证每一个软件安全性需求都有相应的软件安全性测试相对应;证明每个软件安全性需求都通过一个或多个测试得到了满足;通过测试分析和软件实现对相关的风险进行了评估;判断给出的软件安全性测试已足够充分。
如图1所示,软件安全性测试的主要流程如下:(1)确认软件安全性测试规程。
此步骤要求软件安全性工程师检查所建立的规程,并验证这些规程能否完全地测试软件安全性需求。
(2)执行和监督软件安全性测试。
软件系统安全性团队必须监督软件安全性测试,既是为了确认软件安全性测试规程,也是为了判断该规程对软件安全性可能产生的异常影响。
·494· 计算机测量与控制 第19卷图1 安全性测试流程(3)整理测试数据。
实际上,在测试组将测试数据整理为有用的形式之前,大多数异常数据是很难发现的。
数据整理的过程是通过抽取测试期间记录的数据来推导性能和其它参数,并表示为易理解的显示信息来实现的。
(4)分析测试数据。
数据抽取和分析的目的是标识安全性相关的异常和产生不安全的因素。
这些因素可能是设计、实现、代码、测试用例、规程和测试环境中的错误。
(5)重新测试失败的系统需求。
在通常情况下,通过一次测试并不能确认全部的软件安全性需求。
在测试中仿真器、激励器或实验室环境能力的局限均可能使某些测试不通过。
因此,需要通过回归测试来对该功能的安全性提供充分的保证。
(6)编写软件安全性测试报告。
软件安全性测试报告必须标识所进行的测试,并分析测试的结果。
在测试结论中,软件安全性团队使用该结果来更新安全性需求标准分析中的需求可追踪性矩阵,以及对系统和软件进行的各种初步分析和详细分析。
软件安全性测试报告将被附加到系统安全性测试报告中。
由此可见,软件安全性测试是一个独立的测试过程,其测试方法也有不同于一般测试的特点。
因此,分析国内外常用的软件安全性测试方法是十分必要的。
3 软件安全性测试方法根据特点的不同,文中将目前国内外常用的软件安全性测试方法分为3类:基于可靠性分析方法的、基于形式化模型的和基于软件测试方法的软件安全性测试方法。
下面对这些方法进行详细描述,并进行分析比较。
3.1 基于可靠性分析法的软件安全性测试方法3.1.1 基于F T A的软件安全性测试方法基于F T A的软件安全性测试方法是利用故障树的最小割集来生成软件安全性测试用例的方法。
它以系统中最不希望发生的故障状态作为故障分析的顶事件,寻找导致这一故障发生的全部可能因素,绘制故障树,然后搜索出最小割集,并以最小割集为依据生成软件安全性测试用例。
该方法在计算机联锁软件自动测试系统中进行了实现[6]。
实际结果表明:它不仅有效地提高了测试的自动化程度,而且提高了软件安全性测试的充分性。
此外,由于应用的领域的不同,故障树中底事件的语义解释并不唯一,因此出现了一种基于形式化故障树分析建模的软件安全性测试方法[7]。
它将故障树的叶结点语义形式化为一个以时间为变量的实时间隔逻辑持续时间计算公式,消除故障树的语义模糊性,达到形式化故障树的目的。
这种方法首先对软件需求规格说明进行分级划分,然后利用形式化故障树表示安全性需求,在搜索出形式化故障树所有最小割集的基础上,运用基于割集的安全性测试用例动态扩展算法进行用例设计。
3.1.2 基于Pe tri网的软件安全性测试方法基于Petri网的软件安全性测试方法是利用Petri网简洁、直观、潜在模拟能力强等特点,在因果关系作用下进行推演的过程,体现系统的动态行为特征[8]。
目前,软件安全性测试存在两种基于Petri网的方法,即正向分析法和逆向分析法。
正向分析法首先建立完整的可达图和状态标识表,得到P etri网的可达集,建立相应的P etri网模型,然后在可达集中搜索所有包含任意一个状态的状态标识,并将其标记为危险标识,从初始状态到该危险标识的每个变迁序列均可设计为一个测试用例。
在生成用例时,对每个被标记的危险标识应至少生成一个用例,这些用例构成了针对该Petri网模型的软件安全性测试用例集。
该方法在联锁软件自动测试系统中进行了实现[9]。
实际结果表明,它可以快速地求出测试用例集,并能有效地提高测试自动化程度。
然而,正向分析的方法存在一定的缺陷,因为它需要生成完整的可达图和状态标识集,这对于逻辑和结构比较复杂的系统是比较困难的,甚至容易形成组合爆炸的问题,因此出现了逆向分析方法。
逆向分析方法是构造所有可能导致危险的软件危险状态,然后分析求出由初始状态到该危险状态可能的路径,并通过构造测试用例来验证该路径是可行的。
这说明逆向分析法要针对具体问题具体分析。
3.2 基于形式化模型的软件安全性测试方法形式化方法的基本思想是建立软件的数学模型,并在形式规格说明语言的支持下提供软件的形式规格说明[10]。
目前,形式化软件安全性测试方法可分为两类:模型检验方法和定理证明方法。
3.2.1 基于模型检验的软件安全性测试方法模型检验方法用状态迁移系统S描述软件的行为,用逻辑公式F表示软件执行必须满足的性质,通过自动搜索S中不满足公式F的状态来发现软件中的漏洞。