摘要:科学技术不断更新、发展,使得计算机的软件有了越来越广泛的应用范围。然而软件的安全问题也变得越来越重要,安全是软件在它的一个软件生命周期中重要的环节之一,我们只有解决好软件的安全问题才能促使软件更好的发展。该文主要介绍了软件测试的注意事项和测试软件安全的方法。

  软件的安全测试的目的是为了保证软件能够满足与软件预期的设计要求相符合的安全系数,和平常的软件缺陷不同的是,计算机的软件安全测试检测的是软件不应该做什么,而软件缺陷是软件应该做什么没有做到。检测软件的安全性能我们可以分成安全功能和漏洞两个方面来进行检测。功能的测试是为了验证计算机的软件安全功能能不能达到安全所需要的要求。检测软件的安全功能会涉及到比较广的内容和方面,大致包含授权、机密、安全管理以及访问的控制等。安全漏洞的检测主要是针对软件存在的缺陷有哪些可能以及这些缺陷可能会引起的软件使用过程中发生危险。

  软件安全检测工作本身而言研究检测软件安全方法具有很高的价值和意义,软件安全的测试方法的研究是保障计算机软件安全重要的保障之一。软件的安全检测作为开发过程中重要的环节之一,主要的目的是要发现软件存在的漏洞,通过对程序进行执行、检查,从而有效的发现、解决、更正软件存在的潜在风险和问题。我们目前应用在计算机软件的安全检测技术情况而言,我们通常使用的软件安全测试方法大致可以分为手工检测以及静态、动态检测等数种方法。

  1、计算机软件安全检测是应注意的问题

  我们在检测软件的安全性的时候要特别的注意一些问题:首先我们要从实际出发,根据所要检测计算机软件的自身特点以及安全性的要求进行综合的分析判断,在这些基础上科学的选择适合此软件的安全检测方法,安全检测方案的制定贵在实事求是的合理选择。其次,我们在检测软件安全的时候要注意好身边的人员的分配,好进行多元化的配置,因为在检测软件安全的过程我们要配备的不仅仅是软件的安全分析员,还要找一些熟悉那个软件系统的、以及设计这个软件系统的设计人员,让他们一同加入软件的安全测试中去,多领域配合会使得软件的安全检测更全面更有效。后,我们要注意在检测软件安全的时候,要积极的认真的分析需求级、系统级以及代码级,在适当那个的时候比如规模大的软件,我们还应该分析软件的结构设计。计算机软件的安全检测过程是系统化的,我们不能用简单的方法来解决,我们要向全面的检测出系统所有的安全问题要选择合理的检测方法,安排配置好检测人员。

  2、软件安全漏洞检测方法

  2.1 手工分析

  现在绝大多数的安全研究员采用的依然是古老的传统的手工分析方法。手工分析方法如果运用在开源软件上,这种方法一般通过Source Insight这样的源码阅读工具来进行源码的查询和检索。例如我们分析C语言或者C++的程序,简单的办法是首先审查软件系统中的gets、strcpy等输入命令有没有存在危险的函数调用,接着需要审核的是库函数以及软件中的循环。对于闭源软件来说,他们和开源不同,闭源的源代码获得比较的困难,所以我们要使用必要的反汇编以及调试器,我们利用反汇编来得到软件的汇编代码,在这个代码的基础上再来分析软件的安全性,闭源软件的手工分析难度比源代码阅读要高得多,这会造成理解源程序以及程序的逆向工程分析困难。总之不论是用什么手工分析方法,我们都要求我们的安全分析员能够深入的了解软件安全漏洞原理,对软件结构和功能的掌握也是必不可少的。用手工分析的方法来检测软件的安全性能,软件开发员即使精通检测软件安全漏洞技术,手工捡漏仍然非常的费时耗力。可是现在还没有完全自动化的检测软件安全的技术,而且机器的检测终还需要我们去验证,因此人工参与是一个必须的也是不可或缺的过程,在确认静态分析结果、分析动态程序数据的构造等操作的时候我们也少不了手工分析。

  2.2 动态测试

  软件的动态测试的目的是检验软件运行过程中的动态行为以及结果的正确性。现在,动态测试成为了软件安全测试主要的方法之一。这个测试需要执行程序的来完成测试需要,动态分析在运行程序以后可以得到一次或者多次的信息,然后工作人员根据得到的信息检测特定的漏洞,进而完成安全分析。常见的动态测试是程序的测试以及剖析,动态测试对程序的测试结果非常的准确,因为动态测试没有抽象化处理程序,在程序的执行过程中是哪条路被执行了,计算得出的数据是多少,程序运行时使用的内存、执行的时间等都可以很明确的知道。可是动态测试的结果不完整,因为程序的执行的一个情况无法代表程序还可能会执行的其他情况。也是如果输入的一个数据集无法保证程序能够执行完所有可能的路径,程序一次甚至多次执行还是可能会有一些安全的问题无法被发现软件,可是这些漏洞是真实存在的,我们要做好动态测试是要设计好分支和状态覆盖测试。

  2.3 静态测试

  我们在安全检查的时候还有一种效率比较高的软件安全分析方法是静态测试,它的应用越来越受到人们的重视。只要用户给出抽象语义,静态测试技术可以自动的发现软件所有可能执行的状态,以及状态下的软件属性。软件的静态测试分析速度快、自动化程度高,在实际的应用中我们也发现静态测试和动态相比效率更高,而且找到缺陷的速度也快不少。虽然软件的静态分析有可能会发生漏报、误报可是到目前为止和其他的安全测试方法比起来静态测试实用、有效的方法。静态测试使用静态分析技术,直接分析程序的源代码,通过词法分析、语法分析和静态语义分析,检测程序中潜在的安全漏洞。现在,主要有类型推断、数据流以及约束分析三种静态分析方法。