APP下载

软件脆弱性检测技术及应用

2020-02-21傅伟玉

电子技术与软件工程 2020年13期
关键词:检测技术脆弱性软件

摘要:本文介绍了软件脆弱性检测方案,分别从污点分析、内存定位和测试数据生成三个方面,分析了软件脆弱性检测关键技术,在此基础上,基于这些技术,构建相关系统,并验证系统在软件脆弱性检测中的应用效果。结论证实,本次开发系统在软件脆弱性检测中有良好的效果,可以推广使用。

关键词:软件;脆弱性;检测技术

计算机现已成为人们日常工作、学习和生活中,不可或缺的工具之一,计算机的各种功能都是通过应用软件来予以实现。如果软件本身存在漏洞,那么会对计算机系统中的数据信息安全性构成威胁。所以需要对软件进行脆弱性测试,根据测试结果,对软件的性能进行优化,从而使其在满足计算机应用需求的前提下,保证系统安全。鉴于此,选择合理可行的技术,对软件进行脆弱性检测显得尤为必要。

1 软件脆弱性检测方案

软件是计算机系统的重要组成部分之一,它是由数据和指令构成,比较常见的有系统软件,如Windows、LINUX等,应用软件。其中应用软件与计算机的使用功能密切相关,尤其是在网络、通信技术不断发展的推动下,使得大量应用软件都具备了通信能力,与此同时,安全隐患随之出现。为进一步降低网络通信软件的安全威胁,应当及时发现软件中存在的漏洞,这一目标的实现,需要借助相应的测试技术,比较常用的为Fuzzing(模糊测试)技术。从目前的情况来看,Fuuing技术是软件脆弱性检测的主要手段。在对软件脆弱性进行研究中,具体的思路如下:借助内存定位技术,对软件程序的内部障碍点进行准确定位,在此基础上,对软件程序的脆弱性进行间接检测,当发现软件中存在漏洞之后,通过加密数据的重新构建,完成漏洞驗证[1]。具体方案的实现中,需要运用到的关键技术包括污点分析优化技术、内存定位技术、测试数据生成技术。

2 软件脆弱性检测关键技术

2.1 污点分析优化技术

在Fuzzing技术,污点分析是基础性技术之一,它能够为内存定位、测试数据生成等技术提供强有力的支撑。然而,从目前的情况来看,现有的污点分析技术存在一些缺陷,如耗时、性能不高等。为此,需要对该技术进行优化。具体的优化思路如下:以静态分析方法对污点在计算机网络中的传播过程进行优化,利用所得的结果对动态污点分析进行指导。

2.1.1 优化流程

当需要对某个输入数据进行分析时,可对PIN(二进制插桩工具)加以利用,通过跟踪目标软件处理数据的过程,从而获得基本块信息。在这个过程当中,因为除了插桩分析之外,不需要再进行其它操作,所以能够大幅降低时间开销;借助基本块信息,以翻译的方法,可将之转化为TIR(污染传播中间表示);随后可在TIR上对污点传播的相关内容进行优化,如消除死代码、对传播进行复写等,进而得到经过优化以后的TIR,据此生成与插桩点信息相对应的历程函数,以便后续调用;再次对软件处理输入数据的过程进行跟踪,按照静态分析所得结果中的分析历程,完成对数据的动态污点分析 [2]。

2.1.2 传播优化

对污点分析的优化实质上就是对传播过程的优化,在具体优化时,TIR的位置会发生移动,其目的在于将无用的传播过程去除掉。鉴于此,要对表达式中变量的生存周期加以明确,以此来确保传播过程的一致性。由TIR可知,寄存器变量、内存变量以及常量是表达式的基本构成要素,而死代码消除的思路为冗余代码的消除,复写传播可以采用的算法为Copy Prop Taint[3]。

2.1.3优化效果

为对优化后的污点分析技术性能进行验证,以随机的方式选取应用软件进行测试,利用基本块信息对数据进行优化,结果表明,经过优化后的污点分析技术的时间开销大幅度减少,性能显著提升,达到预期中的效果。

2.2 内存定位技术

在测试数据生成中,定位解密数据是不可或缺的关键性依据。由于本文所研究的是软件脆弱性检测,所以内存定位技术中的内存主要是指解密数据所在的内存,并不是计算机系统的内存。内存定位技术除了要具有通用性之外,还应能够实现快速定位,基于这一前提,对该技术进行具体分析。下面提出两种解密内存定位方法,一种是通用定位,该方法依托的是循环1/O,即输入/输出;另一种是快速定位,该方法基于的是高依赖度。

2.2.1通用定位法

本文提出的解密内存通用定位的方法基于的是循环1/O的思路,具体而言,所有的数据在进行加密和解密时,都需要进行若干次迭代,也就是说,密码函数的实现是以循环结构为基础,而解密内存则是在循环迭代中生成[4]。鉴于此,可对动态定位方法加以利用,以此来实现密码函数循环结构的定位,进而分析该结构中的1/O,收集与解密数据有关的内存,最后依据解密数据本身所具备的特性,从而将解密内存筛选出来。具体的定位流程如下:跟踪密码函数的执行轨迹,并对循环结构中的内存参数进行聚合,包括识别、构建和合并,最后完成解密内存的筛选。

2.2.2快速定位法

上文中以循环1/O为依托的定位方法通用性虽然比较强,但在实际应用中发现,该方法存在一些不足,即必须对密码函数进行预先定位,以此来对后续的分析范围进行确定。不仅如此,还要对执行轨迹进行动态跟踪,进而完成对循环结构的识别,整个流程的繁琐程度比较高,进一步增大了时间开销。为缩短时间开销,可以采取快速定位,该方法以高依赖度为基础,除了能够对解密内存进行快速、准确定位之外。同时,只需要在污点分析中完成定位即可。相关研究结果表明,依赖度本身具有迭代的特点,当两个内存有着较高的依赖度关系时,与这两个内存中任意一个内存相关的数据,都与另一个内存具有依赖关系。高依赖度是一个条件,它的存在能够使数据与内存之间相关联。而定位必须确保准确,所以还要设置相关的约束条件,包括解密内存的字节≥4个;生成后能够被读取[5];同时定位多个高依赖度内存,会将最先定位到视作为解密内存。

2.2.3通用与快速定位的对比

两种定位方法都存在一定的优缺点,但确定都能对解密内存进行定位。故此需要二者的适用范围进行明确。通用定位法本身具有较强的通用性特点,对于绝大部分的解密内存全部适用。而快速定位法的定位速度较快,能够节省时间开销,但却并不适用于加密前的内存和流密码。鉴于此,若是流密码,应当选择通用定位法,如果为分组密码,那么可以选用快速定位法。

2.3测试数据生成技术

在软件脆弱性检测中,测试数据生成是关键,上文的定位方法也是为生成服务。在此需要着重指出的一点是,以定位的方法获得解密内存只是生成测试数据的基础条件,仅仅凭借这个条件,还无法基于加密的通信软件,构造出相应的测试数据。所以,应当进行分解重构,这样才能顺利完成软件测试数据的生成。分解是重构的依据,分解时,要对加密和解密内存进行准确定位,这是非常关键的环节[6] 。除此之外,还需要对完整性检查点进行定位。在对完整性进行定位的过程中,可以采用快速定位法,当需要将完整性检查机制关闭时,则可绕过检查点。在此着重阐明一点,通过对被测试软件程序进行修改,将完整性检查功能禁用的主要目的是为了证明检查点后有无漏洞,即以重构的方法按预期目标对样本进行解密。

3 软件脆弱性检测技术的具体应用

依托上文的关键技术,设计开发一套用于软件脆弱性检测的系统,该系统的特点体现在如下几个方面:可以对加密数据在软件内的污点传播过程进行跟踪;能够对解密内存进行自动定位等[7]。下面重点对系统的构建及应用进行分析。

3.1系统构建

3.1.1系统主要模块

本次设计开发的系统采用较为流行的模块化设计理念,整个系统由三个模块组成,即动态分析模块、数据定位模块、测试模块。各模块的功能如下:

(1)动态分析模块的主要功能是以插桩工具分析目标软件,对分析所得的信息进行记录,该模块由跟踪和记录两个子模块构成。

(2)数据定位模块最为重要的功能是定位關键信息,该模块由以下两个子模块组成:内存定位、检查点定位。

(3)测试模块负责对软件的脆弱性进行检测,这是整个系统的核心模块,直接关系到检测结果的准确性。

3.1.2模块设计

在本次开发的系统中,测试模块是核心。因此,重点对该模块的设计与实现过程进行分析。系统的测试模块能够按照定位的解密内存,对软件进行脆弱性测试,构成测试模块的子模块有三个,分别为数据构造、内存测试和异常样本修复。

(1)数据构造模块可以将经过定位所得的解密内存作为主要对象,据此生成能够用于测试的具体用例。本系统在数据构造方面采用的是污点分析的方法,由此能够解决测试盲目性的问题[7]。其中污点分析是经过优化之后的技术,对传播过程的跟踪,可得到数据输入区域,并使测试用例对相关函数产生直接影响。

(2)内存测试模块的主要对象为解密内存,针对该内存进行模糊测试,在这一过程中找出软件内部存在的漏洞,即脆弱点。Fuzzing技术可以借助恢复点,对软件的指定内存进行自动变异,并在软件运行到预先设定好的恢复点时,将软件程序恢复到初始的状态。在对恢复点进行确定时,需要利用解密内存的生成时机,并按照测试深度,对恢复点进行合理选择。

(3)在本系统中,异常样本修复模块可用于加密后的样本重构,它以通用定位法,对密码函数所读的内存进行准确定位,并使该内存与解密内存相匹配,进而获得候选缓冲区,再以回溯的方法,对会话数据进行还原,当该数据在源缓冲区内生成后,可以按变异字段完成篡改,拦截发送函数,据此得到的数据即为加密后的异常样本。

3.2具体应用

为验证系统在软件脆弱性方面的检测能力,选取一款较为常用的通信软件,软件本身为网络加密型,应用该系统进行测试分析。本次选择的通信软件为IRC软件,该软件为互联网中继聊天协议,是一款具有即时性特点的通信协议,为使通信过程的私密性得到有效保障,IRC服务器采用了数据加密技术。下面选取经过SSL加密的IRC服务器软件[8],运用本文开发的系统,对其脆弱性进行检测,验证系统的能力。

3.2.1 分解能力测试

随机选取部分加密数据作为污染源,利用系统跟踪软件对这部分数据的处理过程,依托快速定位法对解密内存进行定位,由定位结果可知,解密数据所在内存的依赖度为Ox18。之后输出若干个高依赖度的内存,这部分内存依赖度均高于解密内存。若是将解密内存视作为污染源,则经计算所得的校验值与解密内存自带的校验值相等。由此说明,系统具备对软件分解的能力。

3.2.2重构能力测试

通过本文开发的系统对软件进行脆弱性测试的过程中,并未发现软件中有异常样本存在,导致这一情况的主要原因如下:本次选取的IRC协议过于简单,加之测试空间有限,致使未能从中挖掘出漏洞;软件应用时间较长,经过多次升级和维护,存在漏洞的可能性比较小。虽然通过测试未能挖掘到软件中的漏洞,但却可以在测试的过程中,对系统重构加密样本的能力进行验证。具体方法如下:假设在服务端存在一个需要变异的字段,如果字段经过加密处理后所得的数据包能够通过完整性检查,那么表明系统具备重构能力。经过验证,系统重构后的数据包顺利通过完整性检查,证明重构有效。由此可见,本次开发的系统在软件脆弱性测试中具有良好的效果,可以推广使用。

4 结论

综上所述,软件脆弱性检测是一项较为复杂的工作,为确保检测结果的准确性,应当选取合理可行的技术,并以技术为支撑,构建系统,利用系统完成软件脆弱性检测,从而发现软件中存在的漏洞,及时进行优化。

参考文献

[1]牧涛,杨宁.基于激光技术的工控网络信息脆弱性检测方法研究[J].激光杂志,2020 (6):58-62.

[2]鲍海燕.集成化网络存储安全脆弱性区域的检测仿真[J].计算机仿真,2019 (9):376-379.

[3]杨超,郭云飞,扈红超,刘文彦,霍树民等.基于符号执行的软件缓存侧信道脆弱性检测技术[J].电子学报,2019 (6):1194-1200.

[4]王钧玉.基于熵方法的计算机网络脆弱性检测和优化[J].安徽电子信息职业技术学院学报,2018 (2):1-4,8.

[5]刘玉敏,阮福,鲁晓波,脆弱性网络用户信息安全性在线检测仿真[J].计算机仿真,2018 (8):365-369.

[6]范铭,刘烃,刘均,罗夏朴,于乐等.安卓恶意软件检测方法综述[J].中国科学:信息科学,2020 (8):1148-117 7.

[7]韩锦荣,张元瞳,朱子元,孟丹.基于底层数据流分析的恶意软件检测方法[J].信息安全学报,2020 (4):123-137.

[8]高杨晨,方勇,刘亮,张磊.基于卷积神经网络的Android恶意软件检测技术研究[J].四川大学学报(自然科学版),2020 (4):167 3-680.

作者简介

傅伟玉(1980一),女,吉林省人。硕士学位,江苏财经职业技术学院,讲师。研究方向为计算机技术,软件技术与理论。

猜你喜欢

检测技术脆弱性软件
禅宗软件
软件对对碰
煤矿电网脆弱性评估
煤矿机电产品检测技术
杀毒软件中指令虚拟机的脆弱性分析
基于攻击图的工控系统脆弱性量化方法
谈软件的破解与保护
基于电流介数的电力系统脆弱性评估