宋广军 宋婉约
摘要:结合fuzzing技术、API序列特征匹配技术及特征函数参数检测技术等,开发研究了一种新的软件漏洞检测系统。能有效发掘Window环境下的软件中潜在的未知安全漏洞,提高了软件漏洞检测效率。
关键词:模糊检测 软件漏洞 漏洞发掘
中图分类号:TP3 文献标识码:A 文章编号:1672-3791(2012)10(b)-0004-01
随着软件行业飞速发展,许多问题也相应产生,如软件开发周期短、测试量少、安全性低等,很多软件在仓促的工期之下被颁布出来,这些问题会导致很多软件漏洞的产生,软件漏洞的存在,会影响软件的正常运行,若漏洞被黑客利用,系统就很可能被非法入侵和攻击。为提高软件漏洞检测的效率,针对这些存在的问题,设计开发了一种新的软件漏洞检测系统,利用本系统能够自动检测到软件的功能性、安全性等方面出现的漏洞。利用这个系统简化测试漏洞与缺陷的工作,并提高软件漏洞的检出率和正确率,实践证明该系统对软件漏洞测试的有效性。
1 系统原理与结构设计
这种软件漏洞检测系统初步构想是利用目标程序的API序列与已训练过的特征库进行对比,从而检测出软件的显式及隐式漏洞。然而,在人为不对目标软件进行操作的情况下,仅能够获取程序加载段的API序列,需要一个自动化检测模块使检测范围扩展至整个程序。因此,在该软件漏洞检测系统中引入了模糊测试(Fuzzing)理念,通过对交互界面的控件扫描及分类,不断地向程序接口输入大量有目的构造的随机化操作,其目的是迫使程序报出错误,检测出漏洞及缺陷。但仅仅报出错误是不够的,还需要对错误进行监控,所以加入了漏洞回溯模块,这样对漏洞的发掘及过程查找很有益,也简化了测试人员的工作,系统功能模块划分如图1所示。
本系统针对中、大型企业软件开发及测试人员,检测运行在Windows平台下的应用软件,并从底层函数调用序列的特征匹配、特征函数参数检测与Fuzzing漏洞检测方法三个方面进行底层与表现的多重检测,在系统设计中,对API特征库的创建也是比较重要的任务之一。
2 系统实现的关键技术
2.1Fuzzing模块
Fuzzing,也叫做模糊测试,是一种在各大、中软件公司中常用的测试办法,也是较有效的测试办法。其原理是对于目标软件产生大量的用例,替代了人工获取软件的漏洞情况,当其中的某一个用例使得软件异常,那么可以获取这个用例并对其中的操作进行整理分析,从而能够追溯到比较合理的软件漏洞过程。在系统引入Fuzzing理念之前,只可以对程序加载段进行API序列分析,至于运行过程中则无法监控或者只能以人工代替输入,当引入Fuzzing后,便能够将监控范围扩展至程序运行段,从而更全面地检测漏洞。
Fuzzing是本软件漏洞检测系统中的重要模块,它发送数据到目标程序的指定控件,进行大量的测试任务,是用以触发软件中未知的漏洞的方法。
2.2APIHOOK模块
Detours是一个强大的工具,提供了简单易用的函数接口来拦截win32系统下API调用和为一个已在运行的进程装入一个动态链接库。Detours库有三个主要的函数,一个是原API函数;另一个是需要自己编写的替换函数,再有一个是过渡函数。
在实现过程中,将有关HOOK的代码整合到一个动态链接库中。在exe文件中,Detours库提供一个函数,该函数可以启动被检测软件,并直接将动态链接库注入到被检测软件中。这样软件所有调用的API就会被记录下来,连接起来就是API的序列,调用API时传递的参数也会被记录并保存下来,这样就实现了API序列的跟踪。
2.3数据处理模块
数据集是某些数据的集合;项集是项的集合,或者说就是泛指的集合;一个数据集到另一个数据集支持度是指两个数据集重合的数据占后一个数据集的比例。在这里使用显露模式寻找被测软件的漏洞比例,它的优点是在寻找两个数据集之间多个属性上的差异时结果明显直观。
显露模式(EmergingPatterns,EPs)是指那些从一个数据集到另一个数据集支持度发生显著变化的项集,它们能够捕获数据库中两个数据集之间的多个属性上的差异,两个支持度的比称作EP的增长率。每个EP是一个多属性上的测试,并且可能在区分一个类的实例与另一个类的实例方面非常强。一般地,EP的区分能力大约正比于它的增长率和它在目标类的支持度。
在经过匹配之后,将找到所有存在问题的序列及其位置,结合已有的完整序列,可以计算出有问题的序列占总序列的百分比。这种对数据的分析处理过程可以帮助系统更有效地对软件测试数据进行分析评估,提高软件漏洞检测的效率。
3 结语
软件漏洞的存在,会影响软件的正常运行,甚至可能被非法入侵和攻击。而现有的测试技术对人力有很强依赖性,效率也不高,为提高检测软件漏洞的效率,开发了自动化程度较高的软件漏洞检测系统。系统运用模糊测试(Fuzzing)技术进行数据检测,并利用目标程序的API序列与已训练过的特征库进行对比,从而检测出软件的显式及隐式漏洞,大大提高了软件检测的自动化程度,系统的主要检测对象是用于Windows平台上的应用软件,并且含有交互性界面及数据输入模块,可以迅速的发现并定位出被检测软件中存在的漏洞,并向用户提交检测报告。系统方便快捷、漏洞检出准确率高、误报率低,有很强的实用性与创新性。
参考文献
[1] 王清.0day安全:软件漏洞分析技术[M].北京:电子工业出版社,2008,4.
[2] Anley·C,JohnHeasmanFehx“Fx”Linder,等,著,黑客攻防技术宝典:系统实战篇[M].罗爱国,郑艳杰[译].2版,北京:人民邮电出版社,2010,1.
[3] 孔东林,罗向阳,邓崎皓,等.基于AC自动机匹配算法的入侵检测系统研究微电子学与计算机,2005,22(3):89-95.
[4] 郭焱,蒋泽军,王丽芳.基于API截获技术的实时数据采集[J].微处理机,2008,5:112-115.