APP下载

软件安全漏洞分析与发展趋势探析

2017-03-16郑昌伟

山东工业技术 2017年3期
关键词:信息安全发展趋势

郑昌伟

摘 要:信息安全中的各种问题的产生原因之一就是软件漏洞。所以对于软件安全漏洞的分析慢慢成为信息安全研究部门及其相关领域非常关注的问题。本文以此为切入点,先阐述了软件安全漏洞的各种分析方法,并对其中的一些具体分析方法的利弊进行详细地阐述,然后根据实际情况介绍了软件安全漏洞分析中的核心问题,最后根据这些核心问题针对性地提出了软件安全漏洞分析方法的未来发展趋势,以期为研究本课题的学者们提供理论参考。

关键词:信息安全;软件漏洞;漏洞分析;发展趋势

DOI:10.16640/j.cnki.37-1222/t.2017.03.230

1 软件安全漏洞的分析方法

为了更好地保证软件质量和提高信息安全力度,就需要对软件漏洞进行严格地分析,软件漏洞分析内容一般和软件的生命周期息息相关:软件设计时期,需要对软件的整体架构进行分析,以此避免设计架构中的错误风险;软件开发时期,需要对软件的源代码进行分析,以便及时发现编码中的错误并进行修改;软件测试时期,需要对软件的执行代码进行分析,以发现其中或许会出现的运行故障,及时对其使用特别措施。

1.1 漏洞分析方法类别

参考软件的特征和漏洞形式以及固有的软件分析技术,软件漏洞分析被分为架构分析、静态分析、动态分析、动静结合以及漏洞定位等五种技术方法,如图1所示。

由图1的漏洞分析技术体系可以看出,软件架构分析过程中,一旦发现架构和设计中的错误,应立即反馈给设计人员进行修改;静态分析和动态分析的目标就是保证源代码和可执行代码的正确性,根据分析规范来找出其或许会出现的安全漏洞,二者合在一起使用可以更好地提高查询和分析效率;漏洞定位方法通过对于漏洞的定位追踪来分析出漏洞的各种属性。以上几种方法可以发现和分析软件各种形式的漏洞。

1.2 软件架构分析

研究表明,软件中有二分之一到四分之三的问题都发生在设计时期,发现的时间越晚,就需要投入更多的资金对其进行修复,所以对设计时期的软件架构进行分析显得至关重要,具体分析原理如图2所示。

根据图2可以发现,在分析软件架构时,要先对架构建模,检查其模型能否符合相关的安全要求,对于不满足要求的架构需要按照要求重新设计。一般情况下会使用一样的规范来构造软件架构和安全需求,以便更加快速地通过检查。

国内外对于软件架构的分析原理研究主要总结出形式化和工程化两个类别,形式化分析根据形式化的技术来分析安全规范和软件架构,这种方法可以实现自动化的分析结果且比较精确,但是没有一定的实用性;而工程化分析站在攻击者的视角来分析软件的各种风险,比较实用但是不能完全自动化。

1.3 静态分析

在软件不运行的时候对其进行分析就是代码静态分析,其分析内容一般是可执行代码和源代码。静态分析能够非常具体地根据执行路径的提示来找出安全漏洞。具体原理如图3所示。

根据图3可以发现,模型构造、根据软件和漏洞来进行的模式匹配以及模式提取等模块构成了代码静态分析的全部内容。经过长时间的研究和探索,各种静态分析方法都有了非常大的发展。其中,词法分析的方法可以非常迅速和精准地找到软件里面的危险函数,但是因为其不分析语义层面的内容,所以最终不能很好地发现更多复杂的安全漏洞;数据流分析的方法可以用来分析像常数传播和存访问越界这类操作相对单一的问题,而对于一些操作复杂的问题则显得不太实用;符号执行的方法可以找出软件中难以发现的逻辑问题,相对其他静态漏洞分析技术来说更加有效率,但是执行程序的路径也会因为程序的规模大而随之增加,一定程度上会造成空间爆炸的现象,同时,符号执行的方法虽然能够发现问题,但是没有解决问题的能力,需要借助相应的求解工具来对其进行解决;模型检查的方法可以自动并精准地分析出软件的状态和路径,但是因为详细地罗列了所有或许会出现的状态,在数据密集度比较大的情况下也增加了分析的工作量;定理证明的方法因为采用了非常严密的推理來控制整个分析过程,所以在以上静态分析方法中是效率最高的方法,但是定理证明方法的自动化能力还需要进一步提高,执行过程中需要浪费大量的人力,同时对于各种漏洞没有一定的延展性,所以在比较大型的软件程序中不适合采用此种方法;污点传播方法可以把攻击的全部过程完整地模拟和展现出来,但是它只能用在输入验证类的漏洞分析之中。

1.4 动态分析

代码的动态分析是参考运行程序中的内部形态和输出信息来确认和发现软件性质问题的过程,动态分析的内容是可执行代码。因为得到了运行中的实际信息,所以发现的漏洞相对来说比较精准。代码动态分析的原理就是根据特殊的运行软件来运行其程序,如果出现崩溃和死机则证明了存在漏洞的风险,具体原理如图4所示。

分析图4可知,软件的运行环境对于待分析软件有着非常直接的影响,软件的停止、启动以及输出获取都能使得待分析软件出现相应的漏洞,根据输出数据来发现和找出相应的运行故障,如果输入数据比较多,则应该为留下漏洞有关的信息而过滤掉其他的输出信息,现阶段的代码动态分析方法涵盖了模糊测试、智能模糊测试以及动态污点分析等几种方法。其中,模糊测试对于漏洞的查找和分析非常有用,可以帮助设计者找到很多潜在的漏洞,缺点就是该种方法在分析数据的时候具有一定的随机性,没有充分覆盖所有的代码,所以在很多情况下会出现错报和漏报的情况,如果测试数据相对独立,这种方法则更难找出复杂的漏洞;智能模糊测试相对其他方法来说更加具有针对性,所以分析的精准度会更加高,不足之处是因为静态分析的加入导致了分析的难度也随之加大,所以是否使用该方法,就要先考虑效率重要还是准确率重要的问题;动态污点分析被非常普遍地用在隐私泄露分析、漏洞分析以及恶意代码的分析之中,但是这种分析方法一般需要可执行代码分析方法的互相配合才能使用,而可执行代码的分析技术又有类型信息和应用语义信息不全等各种问题。

1.5 动静结合分析

动态分析方法因为得到了实际运行中的信息,所以发现的漏洞相对来说更加正确,没有误报和错报的情况;静态分析方法因为非常具体地执行了各种路径,所以其错报和漏报的可能性比動态分析方法少。一些特殊情况下,分析者会为了各取所长而使用动静结合的方法对漏洞进行发现和分析,现在使用比较多的动静结合漏洞分析方法主要涵盖了三大类别:第一类是通过静态的方法分析源代码来找出其中或许会存在的漏洞,后根据输入数据来动态地检验这些漏洞是否真实存在。这类技术的使用频率比较高,但是因为其过分关注静态分析方法对于动态分析方法的指引作用,经常会导致了动态分析方法中出现的有用的运行内容被忽略的情况发生;第二类是反汇编可执行的代码,通过静态分析汇编代码的详细资料来执行动态漏洞分析内容。这种方法调整和完善了已有的污点分析方法,不足之处就是其对可执行代码反汇编得到的汇编代码没有全面的语义信息,使得其不能非常好地对可执行代码进行跟踪处理;第三类是动态运行待分析软件的同时查找其运行内容,在汇编代码的基础上执行静态分析方法。这种方法非常全面地关注到了运行内容,但是其发展时间太短,现在还处于被研究的时期。

1.6 漏洞定位

在代码之中找出和确认漏洞出现的地方,根据漏洞的发生原因来正确评价可用的利用方法和风险级别的过程叫做漏洞定位。上面描述过的各种方法中也涵盖了漏洞定位的分析内容。在架构分析的过程中,应该对找出的设计漏洞进行追溯跟踪,以此找出产生问题的软件信息和不正确的结构内容;在静态分析方法中,对找出的漏洞采用一些方法对其进行确定,目前使用的静态漏洞查找工具一般都能够自动生成出发路径和辅助查找的相关图形,以此更加方便地对漏洞的产生原因进行追溯分析;在动态分析方法中,可以从很多的软件运行状态内容和输出数据信息中找出相对应的漏洞,然后根据动态分析原理对其进行过滤和追溯。现阶段的漏洞定位方法一般在可执行代码中使用,涵盖了动态调试、逆向分析以及指令追踪等方法。其中,动态调试一般用来查找和定位漏洞,其分析内容是可执行的代码,动态调试方法通过观察调试器中运行软件的内存使用、寄存器值以及软件运行状态等信息来完成,在调试的过程中,用特定的输入信息来跟踪和分析出运行时寄存器状态、函数调用路径以及堆栈可能会出发的漏洞信息,以此来精准定位软件中的漏洞,目前使用得非常多的一个动态调试工具是OllyDbg;逆向分析方法需要先反汇编可执行代码,以此来得到汇编代码,后扫描这些汇编代码来找出可能会出现问题的代码序列,从而精准地找出漏洞位置,非常有名的分析工具是IDA Pro;指令追踪方法能够实现精准和快速定位漏洞的目的,运用该方法时,应该按照正常情况来运行软件,把软件执行的全部指令序列一一记录下来,后使用一些方法来触发漏洞,把漏洞被触发时所执行的指令序列详细记录下来,把两次记录的指令序列进行对比,从对比中找到两次执行过程中出现的不同代码区并对其进行逆向分析,再对这些不同代码区的代码进行动态运行和调试跟踪,以此来发现漏洞函数。现在用得非常多的指令追踪工具有Valgrind和PIN等。

2 软件安全漏洞分析中的核心问题

经过一段时间的探索和研究,软件漏洞分析方法有了非常大的发展,但是还有一些非常核心的问题需要分析和解决,笔者根据调查研究及查阅相关资料和文献,找出了软件漏洞分析领域中存在的典型问题,下面从技术难题、科学难题和工程实现三个方面对其进行分析和研究。

2.1 技术难题

首先,对于精确度的判断问题,相关研究人员应该找到更多精准的分析方法来提高对于漏洞的分析能力。比如,现在常用的漏洞分析的简单技术就是按照分析精度来分类的,从单一的语法匹配、流敏感分析以及流不敏感分析方法慢慢演变为路径敏感的分析方法,这些分析方法的不断变化和改进也提高了漏洞分析的深度和精度。而因为核心算法的时间空间复杂度的提升速度非常迅速,这就一定程度上导致了计算机资源消耗量呈现几何级别的趋势不断增加,比如路径敏感分析所导致的路径爆炸现象。所以,持续提高漏洞分析的深度和精度的能力的同时,也应该在条件允许的时间和资源中达到资源消耗和漏洞分析程度之间的平衡,这一点是漏洞分析中亟待解决的技术难题。

其次,智能化的提升是另外一个技术难题。软件安全漏洞分析工作对于技术程度和智力水平都有非常高的要求。现阶段的漏洞分析领域也有很多的相关方法和工具,让人们享受软件自动化的同时也解放了双手和大脑,而因为这些漏洞分析方法的智能水平还需要一定程度的提高和优化,很多情况下更多的是分析人员对其分析结果和漏洞定位结果进行反复地核查和检验,这就浪费了更多的人力和时间。比如静态分析方法一般会根据已找出的漏洞的特点来进行分析,而动态分析方法一般根据漏洞的异常输入和攻击信息来进行分析。提取和总结这些分析结果需要耗费更多的时间和人力,只有完全提升漏洞分析工具的智能程度,才能完全解决这些问题。

2.2 科学问题

首先,软件模型的构建问题。软件漏洞分析的内容一般是可执行代码和源代码,对这些代码进行分析的前提是先对他们进行建模,也就是把软件转变为中间表示,然后在其基础上进行半自动和自动的分析。分析者一般会使用图型和树型的结构来构建软件模型。需要根据不同的漏洞分析方法来使用不同的模型结构,比如控制流和抽象语法树等模型在以前的漏洞分析中比较常见,而近期的分析者一般会采用统一中间表示来对软件的可执行代码和源代码进行建模。而现阶段的软件建模技术一般根据程序编译优化方法来构造,所以很多中间表示不是针对某一种漏洞进行分析的。因此,相关人员应该更加具体地研究和分析出针对漏洞分析的软件建模技术,让其模型可以更加具体地表现出软件以安全特性为代表的各种属性,最终使得漏洞分析的准确度得到大大的提高。

其次,漏洞模式提取问题。漏洞的分析效果通常用漏洞模式提取作为评价指标来进行判断。现在见得比较多的漏洞模式有适合危险函数调用分析的语法结构模式、适合污点传播分析的格与不动点模式以及适合类型安全分析的类型约束模式等,同时,在检验模型的时候,漏洞模式一般被说成是时序逻辑公式,现在常用的漏洞模式具有非常粗的描述力度,不能具体全面地描述漏洞性质和其运行的上下文内容,因此会出现非常多的误报现象。所以,相关研究人员应该分析和找出更实用的漏洞模式提取技术,让漏洞模式可以非常精准地表示出漏洞的静态和动态属性,以此帮助分析者更准确地找出漏洞的构成原理,最终使得漏洞分析自动化的同时能够提高漏洞分析的精准度。

最后,技术极限求解问题。无论是软件漏洞分析领域还是其他的研究领域,在研究到一定程度的时候都会出现极限问题,也就是在能够接受的空间、成本以及时间范围内,可以发现和分析出的漏洞特点和类型、漏洞分析的精准度和覆盖范围以及可以達到漏洞分析检验标准的安全特点和种类等问题。通过归纳和分析现有漏洞分析方法来寻找出现有的不全面的技术体系和技术极限之间的关联,然后通过结合各种分析方法、运用具有一定限制性的程序语言、调整分析软件的架构等各种方法,找出以上描述的极限问题相关的解决办法。

2.3 工程实现

首先,大规模软件漏洞分析的实现问题。现阶段的软件漏洞分析工具并没有因为软件的规模和复杂性不断增加而随之进步,大部分的软件漏洞分析工具都是传统的根据单一引擎和单机来进行分析的,其速度不快且效率不高。使用分布式并行的分析方法可以非常显著地提高漏洞分析效果,比如现在的使用非常多的分布式并行方法的模糊测试工具、采用了并行化的符合执行系统以及并行化过程的程序分析工具等,都很好地体现了其漏洞分析的能力,但是因为此方法的应用时间比较短,现在还在研究和探索的时期,所以不能非常具体地体现出工程应用的效果,所以,相关的研究者应该投入更多的经历来调整和改进漏洞分析的算法,力求在短时间内构建出针对漏洞分析的分布式算法,以此根据分布式系统和多核硬件架构的性能特点来协调各种算法模块在运行时出现的动态协同等问题,以此提高对于复杂类型的软件的漏洞分析能力。

其次,新型平台上的漏洞分析的实现问题。数字时代的迅猛发展衍生出了以IOS和Android操作系统为代表的移动终端平台的迅速发展。在这些操作系统的基础上构建出了网银、支付宝、电子商务、各类社交软件、在线游戏以及影音咨询等应用软件,这些应用软件也慢慢变成漏洞分析的重要部分。这些应用软件的开发和设计一般是基于Dalvik虚拟机和ARM架构来实现的,而现在用的比较多的漏洞分析工具是针对Linux和Windows操作系统以及X86和X64结构的程序软件,二者是两条平行线,不能拿来使用。所以,应该在云服务平台和智能操作系统等相关领域中找寻到其能适用的漏洞分析方法,并通过这些方法来开发和设计出相对应的漏洞分析工具。

最后,安全测评中的漏洞分析问题。国内现阶段的安全测评主要是根据国家通用的信息安全测评准则来进行的,准则中很多内容都涉及到系统功能的安全性以及如何实现这些安全性等部分,而对于系统功能安全性的具体测试方法和工具没有详细的说明,没有实际的操作意义,而对于软件安全漏洞类的分析内容几乎没有,所以,国内的信息安全部门应该根据实际情况来制定软件漏洞的安全评测规范,以此指导相关分析者对漏洞进行预防、发现以及弥补。比如对几个有类似安全需求的软件系统的各种变体中,在特殊的上下文条件下,通过漏洞分析方法找出其可能具有的漏洞的特点并对比他们的安全性。实现这一点的基础就是具有漏洞分析相关的具体度量规范,使相关分析者能够根据规范来客观全面地体现软件的安全性,也以此来表现软件安全测评的重要性。

3 软件安全漏洞分析方法的未来发展趋势

(1)研究核心技术问题来突破现有的漏洞分析方法。相关技术研究人员应该根据实际情况,采用一切能够使用的方法来找出合适的算法以提高漏洞分析的精确度,只有漏洞分析方法更加精确和高效,才能从根本上减少人力和时间成本。可能调整和完善了的漏洞分析技术还是无法从根本上达到资源消耗和分析精确度之间的平衡,但是相关技术人员可以把分析的对象放在安全敏感范围以内研究,尽量在不影响分析精确度的同时,最大限度地降低资源损耗。除此之外,大力展开对于漏洞分析智能化水平的研究和探索,找出合适的漏洞分析的自动获取办法,以此来完全解决人工在漏洞查询中出现的不准确性和复杂性问题的现象。

(2)分析更深层次的科学问题来实现漏洞分析技术的变革和创新。相关技术人员应该与时俱进,及时地学习和掌握最前沿的科学方法,加强研究漏洞提取模式和漏洞分析的程序建模等内容,力求在短期内建造出统一的建模来全面具体地表现和描述漏洞模式,以此帮助构建规范的漏洞查找规则,同时也方便展开对于漏洞分析自动化技术的研究。同时,相关技术人员应该根据实际情况来探索和找出漏洞分析技术体系的极限问题,将现有分析技术的不足之处和技术极限联系起来进行分析,以此找到产生技术极限的根本原因,为实现漏洞分析技术的变革和创新奠定基础。

(3)分析和解决工程问题来实现漏洞分析技术的实际应用。现在的漏洞分析领域中亟待解决的工程难题就是实现漏洞分析方法的规模化和自动化。建议相关技术人员根据现有的并行算法来研究和探索分布式并行化漏洞分析方法,以期在最短的时间内实现可靠的漏洞分析技术,以此来实现工程应用的规模化。同时,为了跟上数字化时代背景下迅猛发展的信息技术,对于漏洞分析方法的研究应该更加具有针对性,可以针对云计算和互联网在内的新型平台来研究具体的漏洞分析方法,并根据其方法来设计和开发对应的漏洞分析工具。除此之外,保证安全漏洞分析方法和技术的顺利施行的关键在于安全度量规范,可以建立完善的安全评测方法来保证漏洞分析方法和技术的正常实现和运行。

4 小结

综合以上描述内容,笔者参考软件的生命周期各个阶段的特性和其分析内容,把现有的漏洞分析技术划分为软件架构分析、静态分析、动态分析、动静结合分析以及漏洞定位方法等五类,表明了漏洞定位方法在整个漏洞分析技术体系中的核心位置,同时具体分析了每一个方法的优点和不足,以期为相关技术人员在选择漏洞分析方法时提供具体的理论参考。文中也提出了软件漏洞分析领域中存在的技术难题、科学难题以及工程问题等,以期相关技术人员能够在未来的研究和探索中以此为重点研究对象,尽快找到软件安全漏洞分析技术中关于这些核心难题的解决办法。

参考文献:

[1]和亮,苏璞睿.软件漏洞自动利用研究进展[J].中国教育网络,2016(Z1).

[2]刘红霞.新形势下计算机网络安全与漏洞扫描技术分析[J].信息与电脑(理论版),2015(24).

[3]赵喜明.计算机网络安全与漏洞扫描技术研究[J].网络安全技术与应用,2014(01).

[4]韦韬,王贵驷,邹维.软件漏洞产业:现状与发展[J].中国信息安全,2010(01).

[5]刘崯杰.试谈软件漏洞的分类[J].电脑编程技巧与维护,2011(12).

[6]郑晶.计算机软件漏洞与防范措施的研究[J].吉林农业科技学院学报,2010(02).

[7]曾霞,周四清.软件漏洞发现概率及最优投入水平的研究[J].计算机工程,2010(12).

[8]陈鑫,崔宝江,范文庆,钮心忻.软件漏洞的攻击与防范[J].电信科学,2009(02).

[9]韦韬,王贵驷,邹维.软件漏洞产业:现状与发展[J].清华大学学报(自然科学版).2009(S2).

[10]王颖,李祥和.软件漏洞的分类研究[J].计算机系统应用,2008(11).

[11]李淼,吴世忠.软件漏洞起因的分类研究[J].计算机工程,2006(20).

猜你喜欢

信息安全发展趋势
信息安全不止单纯的技术问题
基于模糊综合评价法的信息安全风险评估模型
基于模糊综合评价法的信息安全风险评估模型
2014第十五届中国信息安全大会奖项
信息安全管理