青海省测试计算中心 刘 鑫
国产软件安全测试方法探讨
青海省测试计算中心 刘 鑫
进行软件的安全测试,是在将软件投入市场之前必不可少的重要前提条件之一,只有经过安全测试达到标准之后,才能够正式投入市场。我国国产的软件在科技含量和运行流畅程度方面具有一定的劣势,在市场竞争中往往处于不利地位,因此更需要加强安全测试环节,保证投入市场的软件的安全性,促进软件行业的良性发展。
国产软件;安全测试;软件安全;测试方法
一个软件的安全性代表着这一软件的质量,而软件的安全测试则是为了检验软件的潜在安全缺陷,并且确认软件的安全性能否达到与预期一致。对软件进行安全测试,是软件开发环节中比较重要的一环,最终目的就是在软件投入使用之前,就检测出其是否存在问题,并对可能存在的问题提前设置解决的办法,从而达到对软件潜在故障的修正目的。
软件进行安全测试在本质上是为了能够有效地查找出程序中的错误,其方法通常包括静态测试和动态测试两类。静态测试,是对源代码进行扫描,直接在代码中找出可能存在的安全漏洞。动态测试是通过模拟黑客的行为模式,对系统进行攻击,从系统的应对和反应中找出可能存在的漏洞。这种测试相对而言比较真实有效,淡数据有限,无法达成对软件的全面测试[1]。
对软件的安全进行测试,主要包括两个方面。其一是针对软件的漏洞进行测试,测试条件是要求检查出软件内部具有的缺陷;另一方面是安全性测试,它所测试的是软件的“禁止区”,检查软件所不能进行的行动是否保障其不会进行,也就是对软件是否能够遵守规约进行测试,要求软件在输入A命令时决不能执行B命令。
2.1 注意事项
软件安全测试包括渗透、功能、验证等环节的测试,其必要的条件在于三个方面,其一是了解软件有可能存在的安全漏洞,其二是去评估软件可能出现的安全风险,三是需要拥有效率和质量水准都比较高的安全测试工具,以高质量的技术进行测试。针对软件进行检测的过程中,需要根据具体出现的情况进行综合性的分析,在进行了深入分析之后,需要选择适合的检测技术,制定出一个足够高效的测试计划。而在另一方面,在安全测试计划的执行期间,也要根据测试人和需要用到的测试设备的保养状况等实际情况进行,要配备的不仅包括能够对软件安全进行专门的专业分析人员,而且也要对被测试的软件系统整体情况有高度熟悉度、最好是这一系统的设计人员加入到软件安全测试的计划中,通过进行多方面的合作,进而更好的完成测试计划[2]。
在进行软件安全测试时,各个等级的分析工作必不可少。当需要进行测试的软件规模相对较大,对软件结构设计本身进行分析的工作也同样需要专业人员的支持和加入,因此在对软件进行分析的过程中,需要测试和分析人员能够根据实际需求对分析技术进行高效的选择,并且如果测试要求中有这个必要,那么也可以构建一个仿真环境,通过方针的分析工具进行协助性的测试。软件的安全检测是一个非常系统化的工作,无法通过使用一个简单而单纯的测试方法,来解决整个系统的测试,不可能建立一个测试体系和测试环境,通过全自动的方式一键将系统整体测试完毕。因此,在软件安全测试实际进行的过程中,非常有必要来选择一个足够高效和合理的测试方法。
2.2 评估方法
在软件安全性测试结束之后,对于判断这一软件能否真正达到预期中的安全程度,需要测试人员能够建立一个行之有效的安全评估体系。建立这一体系能够从两个方面进行全面的评估。
其一是对软件的缺陷数据进行评估。如果软件中被发现的漏洞越多,这就意味着会被留下的缺陷也就越多。因此在进行评估时,需要建立一个能够作为参照系的基线数据,以此进行全面评估,否则其结果就会没有依据,即使最后得到了结果,这个结论也无法肯定是否正确。
其二是需要采用漏洞植入法对软件进行进一步的评估。这一做法具体而言,就是直接在被测试软件中插入安全隐患,要求令不参加测试的工作者在软件中植入一定漏洞,通过测试后,将结果与这些工作者进行核对,看他们所植入的漏洞中有多少能够被发现,来评估软件安全性。
对软件进行安全检测,一般而言的进行方式是模块测试(单元测试)——集成测试——系统测试这一顺序。模块测试(单元测试)就是针对软件中最小的单位进行安全检测,检查各个模块中的每一个部分是否能够正确地去实现其功能,最终的目的是为了能够发现各个模块中可能存在的缺陷。集成测试是把通过了之前的单元测试的模块进行组装,测试软件的体系结构是否安全。系统测试则是在完成了以上两个步骤之后,将软件实际运行,与其它的系统组合测试,以此来确认软件能否实现其在设计之初预期达到的各种功能。
进行软件的安全测试,具体全面的测试方法包括多个方面的复数内容,其中系统安全性的测试方法包括:源代码评审法、基于风险的安全测试、渗透性测试方法 、模糊测试方法。代码安全性检验方法包括:程序代码安全性、C++/Java安全性列表、JavaScript安全性列表、代码安全性扫描工具。对系统功能安全性验证主要包括:口令安全性、用户权限、非授权攻击、配置管理以及功能失效、异常带来的安全风险等。数据安全性验证主要包括:数据编码验证、加密和解密,系统数据完整性、管理性、独立性、备份和灾难恢复等[3]。而在其中,能够有效地达成对软件进行的安全测试,可行的方法包括以下六种:
第一是语法测试。这种方法是对受测软件的功能接口进行测试,通过对其功能接口输入多种不同的命令,检测软件是否能够根据命令进行符合设计者预期的运行,最终确定其结果是否能够达到预期的效果。
第二种是属性测试。这种检测方法具体而言需要确认软件的编程规则,对已经经过确认了的编程规则编码进行验证,检测的主要内容是确认系统程序中正在运行的代码是否能够遵守软件编写之初建立起的规则。这种检测方法能够有效地对安全漏洞进行分析,检验其交互性。
第三种是比较常见的故障注入测试,通过进行故障分析,来寻找会导致软件发生事故的中间事件与底端事件,以此进行逻辑构架,构成故障树,其检测的效率比较高。
我国软件在国际市场上具有一定的劣势,因此需要格外加强在软件安全检测环节的严格性。另一方面,如果能够选择正确有效的方式进行检测,那么在工作环节中就能够事半功倍,起到更好的效果。本次研究通过对软件安全测试的重要性进行分析,确定进行软件安全测试过程中所需要注意的问题,确立了几种有效的软件测试方法,为加强软件测试环节的针对性和有效性提供理论支持。
[1]张升,陈恒如,韩利凯.软件安全测试方法探讨[J].科技视界,2015,11(22):89+110.
[2]崔天意,肖洋.安全关键软件测试设计方法[J].甘肃科技,2015,04(14):6-7.
[3]高宁宁.面向国产安全数据库的测试体系的构建[D].中国科学院大学(工程管理与信息技术学院),2014.