首页 > 范文大全 > 正文

漏洞检测技术的初探

开篇:润墨网以专业的文秘视角,为您筛选了一篇漏洞检测技术的初探范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘 要 漏洞是在软件开发阶段由于测试环节不够全面而导致程序后还存在的可被攻击者利用的安全隐患。本章在明确漏洞概念后,对漏洞的形成原因及漏洞所造成的危害进行分析;在此基础上,对现有漏洞检测技术进行研究。

【关键词】漏洞 检测

1 漏洞概述

漏洞已成为信息安全领域最热门的名词之一,随着震网事件的发生,越来越多的安全人员及机构加大漏洞研究力度,在对漏洞概念进行极大丰富的同时,也对漏洞检测技术的发展提供了更多支持。

漏洞的概念存在于各个行业领域,其内涵相当丰富也十分抽象,本文所讨论的漏洞是指信息安全领域由于处理软件自身或者由于输入“非正常”数据而导致软件运行出现错误的安全隐患。漏洞主要是因为软件开发和测试环节对非正常输入考虑不够全面而形成,根据软件存在的缺陷的成因、表现和危害,软件缺陷表现为软件功能存在缺陷和软件安全存在缺陷两部分,功能性缺陷一般不会导致严重错误,而安全性缺陷一旦发现将会产生严重后果。目前,用于网络攻击的安全漏洞大大多为安全性缺陷所演变。

2 漏洞检测技术

漏洞检测是指对信息系统所用软硬件进行研究,找出存在的可能威胁信息系统安全的薄弱环节。目前,流行的漏洞检测技术包括静态检测、动态检测和混合检测三种。

2.1 静态检测技术

静态检测技术的研究目标是目标程序源代码,其采用的方法主要是分析和审计,目的是判断目标程序源代码的健壮性如何,是否有可能导致程序运行不稳定或者导致程序出现重大异常的可能。静态检测技术的主要指标来源是事先研究生成的规则库,对目标程序源代码中存在的可疑模块、过程或函数在规则库中查找匹配模型,如果找到,说明有安全隐患;否则,还需进一步研究,如果是安全隐患就需要对规则库进行扩充完善。

手工分析和分析工具是静态检测技术两大要素,静态检测主要是对目标源代码进行分析,找出其中的安全隐患。静态分析对程序中不安全函数调用有很好的检测效果。

静态检测技术的本旨是建立程序的一个状态模型(规则库),然后通过静态分析工具获取的信息,利用状态转换来进行漏洞检测。其检测技术主要包括词法检测、程序评注、类型推断、元编译和二进制代码的类型检查等。

2.2 动态检测技术

动态检测技术的主要原理是对目标程序运行时所使用的变量参数和申请的硬件资源空间进行监视,跟踪程序在运行中出现的异常进而确定目标程序是否存在漏洞的方法。

2.2.1 非执行栈技术

内存的栈区即系统栈,系统栈由系统自动维护,用于实现高级语言中的函数调用。在调用中程序的变量、函数返回地址等均保存在栈中,使得攻击者可以通过篡改程序输入数据注入恶意代码实现攻击。栈溢出攻击是当且最流行的攻击方法之一。

非执行堆与数据技术和非执行栈技术类似,设置程序运行时动态分配的堆区及程序初始化时分配的数据段均为不可执行,该技术和非执行栈技术结合可以更好地预防攻击事件发生。数据保护执行(DEP:Data Execution Prevention)就是非执行栈、堆和数据段技术的具体实现。

2.2.2 内存映射技术

内存映射技术是指通过使用映射代码页的方法,将代码页随机地址地映射到不同的内存地址,从而防止依靠跳转地址和内存覆盖开展的攻击。ASLR(Address Space Layout Randomization)就是Windows系统采用的内存映射的安全保护技术.

对于自定义的程序要开启ASLR也非常简单,现在许多的编译环境均增加的ALSR安全特性,如Visual Studio 2005 SP1增加了/dynamic base Address链接选项。

2.2.3 沙盒技术

沙盒技术在安全软件领域应用非常广泛,沙盒旨在创造一个运行存在潜在安全风险的应用程序的隔离环境,发现可疑行为后让程序继续运行,当发现的确是安全漏洞时才会终止。沙盒技术的实践应用流程是:让存在潜在安全风险应用程序的可疑行为在“沙盒”中充分表现,沙盒会记录其每个运行特征,当危险行为所有特征暴露后,沙盒会执行回滚机制,将攻击的痕迹和动作擦除,恢复系统到正常状态。

2.3 混合检测技术

混合检测技术是综合利用静态检测技术和动态检测技术的检测特性,由于混合检测技术综合了静态检测技术和动态检测技术的优点,从程序源代码分析和目标程序运行状态检测两个方面着手开展工作,综合利用规则库和动态检测规则,根据程序动态状态检测结果和目标程序源代码静态分析结果进行程序安全隐患排查,所以混合检测技术相对静态检测技术和动态检测技术而言,检测的准确度相对较高。

2.3.1 测试库技术

测试库技术主要用于检测软件运行中的动态内存错误,Purify是应用测试库技术进行安全检测的工具之一。Purify是一个面向VC、VB或者Java开发的测试Visual C/C++和Java代码中与内存有关的错误,确保整个应用程序的质量和安全。

采用测试库技术的漏洞检测工具主要用来检测程序在运行过程中调用动态内存操作函数时由于没有对输入数据的长度进行验证,导致输入数据长度可能大于动态内存函数分配的空间而导致的缓冲区溢出漏洞。通过测试发现,采用测试库技术的漏洞检测工具对其它类型的漏洞检测效果不佳。

2.3.2 二进制代码改编技术

采用二进制代码改变技术的漏洞检测工具通过对函数调用时通过压栈操作存入栈区的函数返回地址,以确保函数调用返回时能获取正确的返回地址而维护程序的正常流程。该类型的检测工具一般检测程序流中的CALL指令,当有CALL指令发生时,读出当前EBP的下一个内存所存储的值,再函数返回时,将该值和EIP指针所指数值进行对应,相同则继续执行,否则调用异常保护机制进行异常处理,确保程序不会执行非法操作。二进制代码改编技术对程序的二进制代码进行改编,对程序源代码无影响。该技术通过保护栈中保存的函数调用是压入的返回地址(CALL指令压栈数据)以确保函数调用完毕时正确返回。

2.3.3 异常技术

异常技术的主要实现原理是对大量程序调用栈的行为及结果进行统计形成一个检测指导标准和方法来检测程序是否受到攻击。利用异常技术的漏洞检测工具在检测指导标准的指导下对应用程序访问栈区的频次、动作类型和结果进行统计。因此,异常技术是漏洞检测技术发展的新方向,对目前主流的漏洞攻击方法有较好的检测能力。

3 结论

本文对软件安全漏洞的成因进行分析的基础上,对软件安全漏洞检测技术及方法进行分析,从分析可以得出:软件安全漏洞检测技术各有优缺点,并且适用环境不同,如何使这些技术及方法和具体的实践相结合是目前安全检测的重要课题。

参考文献

[1]岳彩松.MS Office漏洞挖掘与利用技术研究[D].上海:上海交通大学,2008.

[2]迟强,罗红,乔向东.漏洞挖掘分析技术综述[J].计算机与信息技术,2009.

作者单位

装备学院训练部 北京市 101416