反汇编扫描

  反汇编扫描对于不公开源代码的程序来说往往是有效的发现安全漏洞的办法。分析反汇编代码需要有丰富的经验,也可以使用辅助工具来帮助简化这个过程,但不可能有一种完全自动的工具来完成这个过程。例如,利用一种的反汇编程序IDA(www.datarescue.com)可以得到目标程序的汇编脚本语言,再对汇编出来的脚本语言进行扫描,进而识别一些可疑的汇编代码序列。

  通过反汇编来寻找系统漏洞的好处是,从理论上讲,不论多么复杂的问题总是可以通过反汇编来解决。它的缺点也是显然的,这种方法费时费力,对人员的技术水平要求很高,同样不能检测到程序动态运行过程中产生的安全漏洞。

  环境错误注入

  由程序执行是一个动态过程这个特点,不难看出静态的代码扫描是不完备的。环境错误注入是一种比较成熟的软件测试方法,这种方法在协议安全测试等领域中都已经得到了广泛的应用。

  系统通常由“应用程序”和“运行环境”组成。由于各种原因,程序员总是假定认为他们的程序会在正常环境中正常地运行。当这些假设成立时,他们的程序当然是正确运行的。但是,由于作为共享资源的环境,常常被其他主体所影响,尤其是恶意的用户,这样,程序员的假设可能是不正确的。程序是否能够容忍环境中的错误是影响程序健壮性的一个关键问题。

  错误注入,即在软件运行的环境中故意注入人为的错误,并验证反应——这是验证计算机和软件系统的容错性、可靠性的一种有效方法。在测试过程中,错误被注入到环境中,所以产生了干扰。换句话,在测试过程中干扰软件运行的环境,观察在这种干扰情况下程序如何反应,是否会产生安全事件,如果没有,可以认为系统是安全的。概言之,错误注入方法是通过选择一个适当的错误模型试图触发程序中包含的安全漏洞。

  在真实情况下,触发某些不正常的环境是很困难的,知道如何触发依赖于测试者的有关“环境”方面的知识。所以,在异常的环境下测试软件安全变得困难。错误注入技术提供了一种模仿异常环境的方法,而不必关心实际中这些错误如何发生。

  软件环境错误注入分析还依赖于操作系统中已知的安全缺陷,也是说,对一个软件进行错误注入分析时,要充分考虑到操作系统本身所存在的漏洞,这些操作系统中的安全缺陷可能会影响到软件本身的安全。所以选择一个适当的错误模型来触发程序中所隐含的安全漏洞是非常重要的。我们需要选择一个适当的错误模型,能够高水平地模拟真实的软件系统,然后分析漏洞数据库记录的攻击者利用漏洞的方法,把这些利用变为环境错误注入,从而缩小在测试过程中错误注入和真实发生的错误之间的差异。

  总结

  这里介绍的几种漏洞检测的方法,其中安全扫描技术主要是针对已知漏洞的检测,后面三种主要是针对未知漏洞的检测。对于未知漏洞的检测,源代码扫描(包括反汇编扫描)属于静态检测技术,而环境错误注入法属于动态检测技术。

  另外,换个视角来看,源代码扫描(包括反汇编扫描)类似于白盒测试,它检测软件系统源码中可能存在的问题;环境错误注入方法类似于黑盒测试,它不关注代码的问题,而是通过对程序运行环境的干扰,关注运行程序对于注入错误的反应,以便从程序外围发现问题。

  漏洞检测的目的在于发现漏洞,修补漏洞,进而从根本上提高信息系统的安全性,以致从根本上减少安全事件的发生。