郭连城
摘 要:目前,漏洞挖掘技术在信息安全领域中日趋重要。文章从漏洞的概念出发,对漏洞挖掘的含义、作用以及主要技术进行了分析与探讨,并总结了漏洞挖掘技术未来的发展方向。
关键词:漏洞挖掘;手工测试技术;FUZZING技术;动态分析技术;静态分析技术
1 漏洞
1.1 漏洞的概念
漏洞是指计算机系统或软件中的安全缺陷,这些安全缺陷包括功能缺陷或逻辑缺陷,对计算机系统的安全性具有潜在的威胁。漏洞的存在范围很广泛,在计算机系统的硬件、软件或网络通信协议上都有所体现。
1.2 漏洞的特性
1.2.1 必然性
漏洞的存在对于计算机系统或软件是客观存在、不可避免的,其根本原因在于系统或软件在实现过程中存在的非正常问题,具体因素可包括编程代码疏忽、软件安全机制规划出错。由于计算机系统或软件的天然脆弱性,所以漏洞也是必然存在的。
1.2.2 长期性
随着计算机系统或软件的投入使用,已有的漏洞会随着用户的使用暴露出来。当系统或软件开发商推出补丁修正漏洞时,同时也可能导致程序出现新的安全漏洞。因此,在系统或软件的整个使用过程中,总是会出现旧有漏洞被修复,而新漏洞不断出现的问题。因此,可以说漏洞在系统中的存在是长期性的。
1.3 危害性
漏洞的存在容易对计算机系统造成损害。攻击者可以利用计算机系统或软件的漏洞进行攻击行动,使运行有漏洞的系统或软件的计算机用户的资料、数据被篡改或破坏,造成隐私泄露或经济损失。总之,漏洞的危害性是客观存在的。
2漏洞挖掘
2.1 漏洞挖掘的概念
漏洞挖掘是指查找目标系统中可能存在的漏洞,在这个过程中,需要运用多种计算机技术和工具。根据挖掘对象的不同,漏洞挖掘一般可以分为两大类,即基于源代码的漏洞挖掘和基于目标代码的漏洞挖掘。对于基于源代码的漏洞挖掘来说,首先要获取系统或软件的源代码程序,采取静态分析或动态调试的方式查找其中可能存在的安全隐患。但大多数商业软件的源代码很难获得,一般只有一些开源系统能为挖掘者提供源码,如LINUX系统,所以目前基于源代码的挖掘一般都是LINUX系统及其开源软件。对于不能提供源码的系统或软件而言,只能采用基于目标代码的漏洞挖掘方法,该方法一般涉及程序编译器、计算机硬件指令系统、可执行文件格式等方面的分析技术,实现难度较大。
2.2 漏洞挖掘的作用
由于漏洞的必然存在性和危害性,所以漏洞挖掘是十分必要并有益的。因为一旦攻击者发现系统中存在的严重漏洞,就可能迅速开展攻击行动,从而对计算机系统进行非法访问或破坏。先于攻击者发现并及时修补漏洞可有效减少来自网络的威胁。因此主动发掘并分析系统安全漏洞,对网络安全具有重要的意义。
3 漏洞挖掘的主要技术
3.1 手工测试技术
手工测试就是通过人的手工方式向测试的目标系统或软件发送特殊的数据,这些数据包括正确的或错误的输入,在发送数据后,通过观察测试目标对输入数据的反应来查找系统中可能存在的漏洞。该方式不需要额外的辅助测试软件,可由漏洞测试者独立完成,具有实现简单、结果直观的优点,但是局限性也很大,主要表现为效率不高、对测试者的个人技术水平依赖较大等方面,所以手工测试一般适用于简单、小型、直观的系统或软件。
3.2 FUZZING技术
Fuzzing技术的实现原理是软件工程中的黑盒测试思想,其主要方法是使用大量的数据作为应用系统或软件的输入,以目标对象接受输入后是否出现异常为标志,来查找目标系统中可能存在的安全漏洞。Fuzzing方法所使用的半有效数据一般由特定的工具来生成,这些数据其必要标识和大部分数据是有效的,但在逻辑方面存在一定错误,能够导致应用系统或软件的崩溃,从而发现安全问题所在。
Fuzzing技术的思想较为简单,易于理解与应用,具有漏洞重现容易、误报率低的优点,但其同时也具有黑盒测试技术的一些缺点,比如数据格式不通用、构造测试周期长等问题。总的来说,Fuzzing技术在漏洞挖掘方面的应用越来越广泛,现有漏洞大多数是由Fuzzing方式挖掘而出的。
3.3 动态分析技术
动态分析技术是指在目标系统或软件的动态运行中查找漏洞的技术。其主要思想是在特定的容器中运行目标程序,通过目标程序在执行过程中的状态信息来发现有潜在问题,这些状态信息包括当前内存使用状况、CPU寄存器的值等方面。在具体实现过程中,动态分析主要从代码流和数据流两方面进行操作。对于代码流,主要是通过设置程序运行断点来跟踪系统运行状态,分析对象主要是有安全缺陷的函数或函数参数;对于数据流,主要是进行特殊数据的构造,也是采用半有效的数据进行输入。动态分析技术的关键是容纳程序运行的容器,也就是动态调试器工具,常见的动态调试器工具有SoftIce、OllyDbg、WinDbg等工具。
动态分析技术具有较高的漏洞查找准确率,由于是在程序运行中查找错误,可以说具有较高的说服力和准确性。动态分析技术具有准确率高的优点,但同时也有操作复杂、对测试人员要求高的缺点,并且利用动态分析的方式查找漏洞的周期可能较长,不容易找到分析点,因此动态分析技术往往运用于一些商业软件的测试当中。
3.4 静态分析技术
静态分析是通过程序的语法、语义来检测目标中可能潜在的安全问题。其基本思想是对测试的目标系统或软件的源代码进行静态分析、扫描,重点是检查函数的调用、边界检测和缓冲区检测,也就是对容易在安全方面出现漏洞的代码进行重点的查找、分析,以期能够发现问题。
静态分析技术需要依赖源程序,因些它的操作人员往往是软件开发商或被授权的第三方测试人员,其主要意义是在目标系统开发的早期阶段发现问题并解决。但在静态分析的过程中,容易出现误报,因为在实际扫描与测试的过程中,静态分析工具自身的不完善容易导致漏洞测试结果的不可信。因此,良好、可信的测试工具对静态分析技术十分重要。
3.5 补丁比较技术
补丁比较也称之为二进制文件比较技术,在漏洞挖掘中往往是指对“已知”漏洞的探查。这里的“已知”指的是软件的开发商对自己的软件推出漏洞修复丁或版本升级程序,对比打上补丁前后的二进制文件,有经验的安全专家就能在较短时间内对未升级前的程序中的漏洞进行准确定位。
补丁比较技术是实际的漏洞挖掘中运用得十分普遍,对于定位漏洞的具体位置、寻找漏洞解决方式具有十分积极的现实意义。
4 漏洞挖掘技术的发展趋势
4.1 运算并行化
由于漏洞挖掘越来越复杂,因此需要大量的计算机运算。所以,漏洞挖掘的运算并行化已经势在必行。新的技术,如云计算等技术为并行技术的运用提供了实现的基础。
4.2 智能化挖掘
漏洞存在的方式呈现出多样化的特点,目前尽管已经有智能体、神经网络等新的识别技术,但智能化的挖掘还需要进一步的发展才能适应不断发展的漏洞挖掘需求。
4.3 综合的漏洞挖掘方案
现在,单一的漏洞挖掘技术已经越来越难挖掘日益复杂、隐蔽的系统漏洞,因此,漏洞挖掘技术的综合化成为未来漏洞挖掘的一个重要方向,如静态分析与动态分析、FUZZING技术的结合。
参考文献
[1]Jon Erickson .黑客之道:漏洞发掘的艺术[M].中国水利水电出版社,2009.
[2]王清.0day安全:软件漏洞分析技术(第2版)[M].电子工业出版社,2011.
[3]王继刚.暗战亮剑-软件漏洞发掘与安全防范实战[M].人民邮电出版社,2010.
[4]文伟平,等.软件安全漏洞挖掘的研究思路及发展趋势[J].信息网络安全,2009.