浅析测试软件安全的方法

上一篇 / 下一篇  2012-11-09 13:17:05 / 个人分类:杂谈

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

  关键词:软件测试;安全测试51Testing软件测试网Rh7h2c.cs2b

51Testing软件测试网&zt2f5p m0f/P e}p

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

51Testing软件测试网CBi%V$PM)t

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

51Testing软件测试网|;h7U`TW,PC

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

mK*sFQK$q\1H_:Is051Testing软件测试网$e U3H r5] d

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

sx|+m$e,a'U051Testing软件测试网-k}*h hQ4@

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

$c;^SDv*V051Testing软件测试网rO G-ac"g

  2.1 手工分析51Testing软件测试网'eg7`1{6R(b Z

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

6cR"e#`}3AA0  2.2 动态测试

y9iW h(@ b.V1v\q0

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

%Z,h8s O+~8u!Q0  2.3静态测试51Testing软件测试网a'O2GpE%yh JPo

51Testing软件测试网N7Jvf b[

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

&[t#U b-m'k*T051Testing软件测试网m9BDE4bOd

  2.3.1 类型推断51Testing软件测试网bq,G9Z/^_C`6b

0s u/tuo0  我们知道我们分析运算符作用的对象、赋值,实际参数的传递时,或多或少都会存在一些类型合适不合适的情况。我们所说的类型推断属于处理过程,它 的目的是保证进行对象的每个操作的数目和类型都是正确、合理的,确保操作有效。类型推断可以检查类型错误,选择合适的操作,根据情况确定必要的类型转换。 这种方法简单、高效,对快速的检测软件的安全性非常的适合。我们在检查操作系统内核权限、遇到程序中字符串格式化漏洞和内核中不安全的指针使用的安全检测 的时候采用类型推断方法检测。51Testing软件测试网5@0x;Y b*s:rCDd~

&rd ` r)~7vq0  2.3.2 数据流分析

[I0x4A8n$?;y051Testing软件测试网k'YFb5J

  在编译的时候我们可以使用数据流分析技术,这种技术可以收集程序代码中的语义信息,然后用代数的方式对它进行编译,从而确定变量定义以及变量的 使用。我们可以用数据流分析来优化编译、调试、验证、并行、测试、向量化程序的环境因素。在安全检测中数据流分析有非常广泛的应用,我们用数据流分析可以 检测程序软件中的数组的越界等多种类型的安全漏洞。

'{y'p!T9d8E0

OYeiT u1~7|.[0  2.3.3 约束分析

s-X6xiQ`i051Testing软件测试网Z/w5H |x7@lqO

  约束分析分为约束产生、约束求解两个步骤,约束分析的第一步是利用约束规则建立分析状态和变量类型的约束,第二步是求解这些约束系统。约束系统 分为三种形式:等式、集合以及混合。约束项之间仅仅存在等式关系的是等式约束,集合约束是把程序变量看作值集,混合约束系统由部分等式约束和部分集合约束 组成。在安全检测中我们使用约束分析来测试软件的安全性能也是比较广泛的。例如我们利用集合约束的方法来测试程序中缓冲区是不是存在溢出漏洞。

%uPril&M\0

$@:y$]*~3V3M%o-Z3b0  以上三种静态检测方法各有各的利弊,通过对各自的比较我们可以看出,检测能力强但是速度慢的是约束分析,这种分析方法检测软件安全比较适合;检 测强速度较快的是数据流分析,这种方法最适合的是要求考虑控制流信息并且变量之间的操作简单的问题;最检测能力弱检测速度快的是类型推断,这种方法最适合 的问题是与控制流无关、属性域有限的安全属性。51Testing软件测试网.zY)^&Z5@$Y%qbp!A(X ?

51Testing软件测试网]5rE0X-yW5Z Fx)P

  2.4 侦听技术51Testing软件测试网ep)IcY1q#w(F\)j

51Testing软件测试网!uPH}.J8G3}+_

  我们所说的侦听技术有的也叫做网络监听,这种方法可以获取网络传输的信息,获取的信息并非发给自己的。在测试软件的安全性时网络侦听技术是常用手段,这种方法可有效诊断、管理网络问题,可以很好的检查软件网络安全存在的威胁。

0\?f*I5a)Q"N;dh+\0

+P&S5`i8H0  我们现在最常用的网络是一个广播型的网络,我们可以从该网中的任何的一台计算机都可以侦听到这个网段所有的数据传输包。我们可以利用这种技术对 软件进行安全性检测,防止软件泄露一些重要的数据,我们可以利用工具或者是自己编的小程序复制我们侦听到的数据包并把他们存储下来,然后我们就可以通过得 到的这些信息数据来分析网络、软件的安全。我们最好把侦听放在路由器、网关、防火墙、交换机等设备的地方,由于这些地方流过的信息包多,所以这里的监听效 果最好。我们经常使用的网络侦听经典程序有Snoop等,一般来说侦听程序还不能做到把侦听到的数据包马上进行分解分析,这些软件一般是先进行不停地存 储,然后慢慢再进行分析,这样可以防止数据包的遗漏。

nr#K5JQ051Testing软件测试网3n.ix+b$cYL wz

  3、总结

If6[._ @8?U051Testing软件测试网!]~ I_*|;N}O!I

  从上面的介绍和论述中我们可以看出,软件的安全是计算机信息安全最重要的组成部分之一,安全性测试的重要性越来越得到软件开发以及测试人员的认 可。现在软件安全的检测办法有很多,我们主要了解介绍了比较传统但是不可缺少的手动分析方法,还有动态分析和静态分析,通过对程序的执行来检测软件的安 全,还有侦听技术,保证网络和软件的安全使用,保证软件的重要数据不被泄露。但是我们现在的测试软件安全的方法还不够的系统全面,还或多或少的存在着这样 那样的问题,这些还需要我们进一步的去研究。在接下来,我们要深入的研究软件的授权等安全功能建模与测试技术,把安全测试方法形式化,研究模糊测试、故障 注入以及基于属性的安全测试方法还有很多新的软件安全测试技术等着我们去深入的研究开发,我相信,通过我们的努力,我们一定能够开发出更好的软件安全测试 技术,让软件的安全性能得到保障。

&n)ut UIp0

TAG:

 

评分:0

我来说两句

Open Toolbar