日期:2023-01-24 阅读量:0次 所属栏目:信息安全
1 引言
随着社会的发展,黑客的技术水平越来越高,而在软件方面,漏洞属于一个不可避免的问题,这会导致黑客有机可趁,使数据信息受到破坏。在这种背景下,如何更快地发现软件安全漏洞,并做好修复工作,是保证数据信息安全的一个有效手段。
2 软件安全漏洞挖掘技术概述
2.1 漏洞概念
在任何软件运行的过程中,都会根据安全策略进行一个安全域假定,也就是说这一域内所有的操作都是可控且安全的,但是如果违反了安全策略或者超出了这一安全域,软件运行则会变为未知且不可控的,而安全域在切换为非安全域的过程中,其触发点就是漏洞。通俗点说,漏洞就是指由于安全域设计不合理所形成的软件及系统破坏。正是由于这种漏洞的存在,使得计算机在未授权的情况下会被攻击者访问或破坏。一般来说,漏洞多数是被动的、静态的、可触发的。
如果根据产生漏洞的原因来分类,则漏洞可以分为:输入验证错误、边界条件错误、缓冲区溢出错误、访问验证错误、意外条件错误、配置错误、竞争条件错误等其他错误。之所以出现漏洞,从根本上说是因为安全机制实现的过程中出现了一些非正常问题,比如软件编程出错、安全机制规划不完善。由于信息系统中存在潜在错误这一问题是不可避免的,因此漏洞在信息系统中也是必然存在的。
2.2 漏洞挖掘技术
在通过漏洞攻击的过程中,主要可以分为三个步骤:漏洞挖掘、漏洞分析以及漏洞利用,由此可见漏洞挖掘属于后两个步骤的基础及前提,对网络攻防有着非常重要的意义。所谓漏洞挖掘,主要是找寻漏洞,详细点说就是该领域专业人士使用各种综合应用工具以及技术尽最大可能找出软件中存在的潜在漏洞,要想做好这一工作并不容易,这对于个人经验有很大的依赖性。在实际的工作中,根据不同的分析对象,漏洞挖掘技术又可以分为基于源代码漏洞挖掘技术以及基于目标代码漏洞挖掘技术。
对于基于源码漏洞挖掘技术来说,获得源代码是我们工作的前提。一般针对一些开源项目,对其公布的源代码进行分析就能够获得漏洞,比如在Limix系统中,漏洞挖掘所采用的技术就是使用的这一技术。具体来说,在应用这一技术的过程中,我们还通过源代码审核技术,扫描软件源代码,并对一些不安全的内存操作以及安全函数使用进行语义检查,进而挖掘出其中存在的漏洞。其中,静态分析技术属于一种比较典型的机遇源代码漏洞挖掘技术。
但是在实际的工作中,由于很多商业软件源代码的获取比较困难,所以基于源代码漏洞挖掘技术往往难以起到应有的作用,在这种情况下,我们则可以使用基于目标代码漏洞挖掘技术。这一技术是依靠分析目标码来实现的,其过程往往涉及到指令系统、编译器以及文件格式等很多方面,所以难度比较大。具体的步骤是先反汇编需要分析的二进制目标代码,在获取汇编代码之后再对其切面,也就是将一些关联密切而且有意义的代码汇聚在一起,使其复杂性降低,最后利用分析功能模块对其是否存在漏洞进行判断。
3 当前漏洞挖掘技术分析
当前漏洞挖掘技术主要包括已知漏洞检测以及位置漏洞补救这两种,其中前者主要的作用在于发现系统中可能存在但是还没有被发现的漏洞,在这方面主要又包括静态分析、动态检测、安全扫描以及手工分析这几种技术。其中,手工分析要求比较高,不仅需要安全分析人员对软件漏洞原理有充分的了解,还要对软件结构及功能有比较深入的认识,而且即使满足了这两点要求,其依然会耗费很多的精力和时间,基于此,以下将主要对静态分析以及动态检测进行分析。
3.1 静态分析
这种漏洞检测技术不需要对程序进行运行,而且在没有输入的条件下就可以发现程序中存在的安全漏洞,因此在程序编写阶段,通过静态漏洞挖掘技术就可以发现其中存在的问题,并在开发早期就消灭掉漏洞。不过人们在运用静态分析的过程中,往往会出现误报。这一技术从本质上说是建立程序的一个状态模型,然后对程序如何完成状态转换进行分析,但是一个程序的状态空间是很大的,因此难以对所有的状态同时进行考虑,针对这种情况,对状态空间进行抽象是必不可免的,这就导致了程序部分信息的丢失。而我们为了提升分析结果的正确性,则会损失一部分分析精度,一般来说,近似假设地方越多,则精度的损失也会越大,而误报也越容易发生。实际的工作中,分析工具可能会使用一些不稳妥的分析策略,这也会导致出现一些安全漏洞,为日后的软件运行埋下隐患。
3.2 动态检测
所谓动态检测,主要是在程序动态运行的时候对软件中存在的漏洞进行检测,这不仅要求被测试目标编译为可执行程序,而且在检测的过程中还要提供相应的输入。具体来说,动态检测技术主要是利用操作系统所提供的雕饰接口以及资源监视接口,来获得目标程序运行过程中所需的运行数据及运行状态。在当前的动态检测技术中,比较常用的有数据流分析法以及环境错误注入法。
这里首先分析环境错误注入法,它主要是故意将人为错误注入到软件运行环境中,然后利用程序的反应进行验证。一般情况下,编程的过程中程序员总是会假定其程序能够正常地运行于环境中,如果这种假定成立,那么其程序自然会正确的运行。不过由于程序运行的环境并不是独立的,而是会受到很多主体的影响,比如一些恶意用户之类的,这会使程序员假定出现错误,也正因为此,环境中的错误会给程序造成多大地的影响,是判断程序健壮性的一个重要标准,而环境错误注入法正是对软件系统可靠性及容错性进行判断的有效方法。
至于数据流分析法,它在实现检测的时候需要数据流、执行流等信息,主要的原理是对各种参数、序列以及返回值等进行跟踪,然后经过对比分析,对系统是否存在安全漏洞进行判断。
3.3 动态检测以及静态分析的对比
客观来说,静态分析以及动态检测都是我们经常使用的检测方法,其中,静态分析由于在运行过程中的数据比较缺乏,因此难以实现动态测试细粒度的安全评估,无法对所有的安全漏洞都进行确定,所以存在很多不足之处,不过其优势在于比较容易在开发过程中集成。至于动态检测,虽然其可信性以及精确性非常高,但是对于源代码的需求也非常高,而且不能够对漏洞及漏洞原因进行准确的定位,加之不容易保证代码覆盖率,因此它也存在一定的
不足。通过表1我们可以比较系统的对二者进行对比。
4 软件安全漏洞挖掘流程分析
通过上文的分析我们可以看出,每种检测方法都是存在缺陷的,我们要想真正地做好漏洞挖掘工作,就必须要在漏洞挖掘的不同环节使用不同的检测方法,并根据具体的情况采取相应的策略及方法,这样才能将各种方法的优势发挥出来,并弥补其存在的不足。一般来说,漏洞挖掘的流程可以分为几个环节。
首先,初始化,这主要是将软件类型分类,将开源和非开源软件所使用的静态分析方法确定下来。
其次,反汇编,这主要是载入需要分析的程序,然后通过反汇编操作,实现对二进制代码的反汇编,并确定代码中哪些属于可执行指令以及哪些属于数据。
第三,过程抽象,能够识别可执行指令之后,可以把其分为表示函数或者过程的组。
第四,特征模式扫描,对于开软软件,我们通过编译技术在编译期间或者代码扫描期间确定一些信息,根据这些信息检查漏洞模型。至于非开源软件的静态分析,则可以通过之下而上的分析方法对调用二进制文件的库函数等进行检查,得到漏洞验证代码。
第五,验证漏洞特性,这主要是比较漏洞特征库以及疑似漏洞验证代码,并对其中是否含有恶意行为进行判断,得到检测报告。
第六,注入错误环境,对需要注入的错误环境数据进行构造,并利用其干扰程序运行。
第七,动态检测,系统自动地对程序所有函数序列以及特定函数序列进行分析,并对可能存在的漏洞数目进行估算,得到检测报告。
第八,检测评估,根据所得报告信息,确认它们共同提出的疑似漏洞,并对其他疑似漏洞进行下一步分析。
最后,进入下一轮静态及动态检测环节。
5 软件安全漏洞挖掘技术的发展方向
首先,测试平台的可扩展性以及通用性将越来越强,这是因为伴随着测试对象的增多,一个可扩展性及通用性比较强的平台对这一技术的发展有非常重要的提升效果。具体来说,这种平台要具备以下几个方面的特点:首先,能够产生多种格式并最好是有效的畸形测试数据;具有可定制以及独立的数据产生变异功能;具有可操作跟踪调试功能;能够对多模块之间的自动化运行进行很好的协调。
其次,以fuzzing测试技术为例,由于在fuzzing测试过程中,很大一部分时间都用在输入数据格式、程序状态转换的人工分析上。因此提高知识获取自动化程度对于提升测试效率非常有利,是未来的发展方向。
第三,多维测试用例生成技术。当前很多测试用例生成技术都是一维的,这容易使很多安全漏洞不能够被有效地检测出来。而如果使用多为测试用例生成技术虽然会拓宽其测试范围,但也容易导致状态爆炸问题,因此,多维测试用例生成技术的研究是未来的一个重点。同样,智能测试用例生成技术也是未来的一个重点。
第四,测试效果评估技术,当前的很多测试使用代码覆盖率对测试效果进行评估,这存在着很大的不合理性。因此未来测试效果将从程序状态的覆盖率、测试数据的有效性以及输入边界测试的充分性等多个方面对测试效果进行评估。
6 结束语
软件安全漏洞挖掘技术的研究是一个很宽泛的研究,本文限于篇幅,很多地方难以涉及并深入。因此,在我们的日常工作中应加强这方面的探索和研究,只有不断提升我们的技术水平,才能真正为信息数据的安全起到保障作用。
参考文献
[1]文伟平.软件安全漏洞挖掘的研究思路及发展趋势[J]. 信息网络安全. 2009(10).
[2]迟强. 漏洞挖掘分析技术综述[J]. 计算机与信息技术. 2009(Z2).
[3]徐有福. 基于漏洞模型检测的安全漏洞挖掘方法研究[J].信息网络安全. 2011(08).
[4]夏建军,孙乐昌,刘京菊,张旻,蔡铭. 基于多维Fuzzing的缓冲区溢出漏洞挖掘技术研究[J]. 计算机应用研究. 2011(09).
作者简介:
杨莎滢(1987-)女,浙江慈溪人,杭州电子科技大学,硕士研究生;研究方向:嵌入式软件安全。