软件供应链安全检测方法和装置、电子设备及存储介质转让专利

申请号 : CN202111284864.7

文献号 : CN114077741B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 张超朱文宇

申请人 : 清华大学

摘要 :

本发明提供一种软件供应链安全检测方法和装置、电子设备及存储介质,其中所述方法包括:获取待检测二进制文件,提取待检测二进制文件的待分析特征,待分析特征包括函数内特征、函数间特征以及模块间特征;将待分析特征输入至特征向量生成模型,输出与待检测二进制文件对应的至少一个待分析特征向量;获取至少一个待分析特征向量分别与参考文件对应的至少一个参考特征向量之间每两个向量的距离,以得到待检测二进制文件与参考文件之间的相似度;基于相似度,检测出待检测二进制文件与参考文件之间的复用关系。本发明能够检测二进制程序中是否复用了第三方代码、代码缺陷、存在关联的漏洞或恶意代码等供应链安全风险,提高了检测效率、准确率。

权利要求 :

1.一种软件供应链安全检测方法,其特征在于,包括:

对目标二进制文件和参考文件进行文件名和哈希值匹配,若匹配成功,则存在直接复用,输出匹配到的目标二进制文件及与其关联的安全情报;将未匹配到的目标二进制文件作为待检测二进制文件;

获取所述待检测二进制文件,提取所述待检测二进制文件的待分析特征,所述待分析特征包括函数内特征、函数间特征以及模块间特征;

将所述待分析特征输入至特征向量生成模型,输出与所述待检测二进制文件对应的至少一个待分析特征向量;

其中,所述特征向量生成模型是基于二进制代码特征样本数据和预先确定的至少一个特征向量标签进行训练后得到;或,所述特征向量生成模型是基于二进制代码特征样本数据进行训练后得到;

获取所述至少一个待分析特征向量分别与参考文件对应的至少一个参考特征向量之间每两个向量的距离,以得到所述待检测二进制文件与参考文件之间的相似度;其中,所述获取所述至少一个待分析特征向量分别与参考文件对应的至少一个参考特征向量之间每两个向量的距离,包括:将所述至少一个待分析特征向量与参考文件对应的至少一个参考特征向量输入距离生成模型,输出所述至少一个待分析特征向量分别与参考文件对应的至少一个参考特征向量之间每两个向量的距离;其中,所述距离生成模型是基于特征向量样本数据和预先确定的至少一个距离标签进行训练后得到;或,所述距离生成模型是基于特征向量样本数据进行训练后得到;

基于所述相似度,检测出所述待检测二进制文件与参考文件之间的复用关系,所述复用关系为部分复用。

2.根据权利要求1所述的软件供应链安全检测方法,其特征在于,所述基于所述至少一个待分析特征向量分别与参考文件对应的至少一个参考特征向量之间每两个向量的距离,得到所述待检测二进制文件与参考文件之间的相似度之前,包括:基于数据库,获取参考文件对应的至少一个参考特征向量,所述数据库是基于互联网采集的软件信息进行预设并更新形成的,所述参考文件包含安全情报参考数据,所述安全情报参考数据包括安全漏洞、恶意代码和代码缺陷中的至少一个。

3.根据权利要求2所述的软件供应链安全检测方法,其特征在于,所述基于数据库,获取参考文件对应的至少一个参考特征向量,包括:提取所述参考文件的参考特征;

将所述参考特征输入至参考向量生成模型,输出所述参考文件对应的至少一个参考特征向量;

所述参考向量生成模型是基于参考代码特征样本数据和预先确定的至少一个参考特征向量标签进行训练后得到;或,所述特征向量生成模型是基于参考代码特征样本数据进行训练后得到。

4.根据权利要求1所述的软件供应链安全检测方法,其特征在于,所述获取待检测二进制文件,提取所述待检测二进制文件的待分析特征之前,包括:对目标软件进行解压或安装;

将解压或安装过程中提取的二进制文件作为待检测二进制文件或目标二进制文件。

5.根据权利要求1所述的软件供应链安全检测方法,其特征在于,所述获取所述至少一个待分析特征向量分别与参考文件对应的至少一个参考特征向量之间每两个向量的距离,以得到所述待检测二进制文件与参考文件之间的相似度,包括:基于预设规则缩小参考文件的搜索范围;所述预设规则为:将所述待检测二进制文件的函数列表与参考文件的函数列表分别进行函数大小排序后使用滑动窗口算法寻找待检测二进制文件和参考文件中最匹配的函数对;

基于近邻算法的数据检索方式和所述至少一个待分析特征向量分别与参考文件对应的至少一个参考特征向量之间每两个向量的距离,进行函数相似性比对;

基于函数相似性比对结果,得到所述待检测二进制文件与参考文件之间的相似度。

6.一种软件供应链安全检测装置,其特征在于,包括:

预分析模块,用于对目标二进制文件和参考文件进行文件名和哈希值匹配,若匹配成功,则存在直接复用,输出匹配到的目标二进制文件及与其关联的安全情报;将未匹配到的目标二进制文件作为待检测二进制文件;

待分析特征提取模块,用于获取所述待检测二进制文件,提取所述待检测二进制文件的待分析特征,所述待分析特征包括函数内特征、函数间特征以及模块间特征;

待分析特征向量生成模块,用于将所述待分析特征输入至特征向量生成模型,输出与所述待检测二进制文件对应的至少一个待分析特征向量;

其中,所述特征向量生成模型是基于二进制代码特征样本数据和预先确定的至少一个特征向量标签进行训练后得到;或,所述特征向量生成模型是基于二进制代码特征样本数据进行训练后得到;

相似度生成模块,用于获取所述至少一个待分析特征向量分别与参考文件对应的至少一个参考特征向量之间每两个向量的距离,以得到所述待检测二进制文件与参考文件之间的相似度;其中,所述获取所述至少一个待分析特征向量分别与参考文件对应的至少一个参考特征向量之间每两个向量的距离,包括:将所述至少一个待分析特征向量与参考文件对应的至少一个参考特征向量输入距离生成模型,输出所述至少一个待分析特征向量分别与参考文件对应的至少一个参考特征向量之间每两个向量的距离;其中,所述距离生成模型是基于特征向量样本数据和预先确定的至少一个距离标签进行训练后得到;或,所述距离生成模型是基于特征向量样本数据进行训练后得到;

检测模块,用于基于所述相似度,检测出所述待检测二进制文件与参考文件之间的复用关系,所述复用关系为部分复用。

7.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至5任一项所述的软件供应链安全检测方法的步骤。

8.一种非暂态计算机可读存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现如权利要求1至5任一项所述的软件供应链安全检测方法的步骤。

说明书 :

软件供应链安全检测方法和装置、电子设备及存储介质

技术领域

[0001] 本发明涉及网络空间安全领域,尤其涉及一种软件供应链安全检测方法和装置、电子设备及存储介质。

背景技术

[0002] 软件供应链是指软件从软件供应商到达用户手中并被用户使用的整个过程中相关环节的连接,从软件设计开始,到代码编写与软件生成,再到软件分发与用户下载,并最终由用户使用的一个软件供应商与软件用户之间,紧密围绕软件,由开发环节(上游),交付环节(中游)和使用环节(下游)三大环节所组成的链状结构。软件供应链攻击直接导致了软件供应链污染。有别于传统的针对软件自身程序漏洞进行的攻击,软件供应链攻击者侧重利用软件供应链上的安全漏洞,在合法软件的开发编译、分发交付以及安装使用等环节中进行劫持或篡改,借助用户和软件供应商之间的信任关系,在合法软件的外衣下,突破安全产品的防线,获得用户的信任,利用被篡改的软件悄然实施攻击。
[0003] 遏制软件供应链污染问题需要对包括源代码、开源软件包、软件安装包、软件可执行程序等在内的软件供应链上游、中游、下游各个环节的对象开展安全性检测。出于产权保护等原因,诸多软件不会向用户提供源代码,而是只提供包括可执行程序、库文件等在内的二进制文件,因此,在软件供应链下游开展污染检测尤为重要。
[0004] 目前,二进制程序逆向分析技术是实现软件供应链下游污染检测的最重要手段,现有的分析方法主要包括静态分析、动态分析、符号执行和污点分析。静态分析和动态分析是检测代码安全的基本方法,两者的区别在于获取信息的方式不同:静态分析方法的数据源是可执行文件中的数据,动态分析的数据源是动态执行过程中获取的运行时数据。
[0005] 静态分析方法包括行文件结构解析、控制流分析、数据流分析、库函数识别、反编译等。其中库函数识别是静态分析方法优势的重要体现。通过对已知静态链接库函数建模得到唯一的特征,并在程序分析时分析各个库函数,查看其特征是否与已知静态链接库函数的特征一致,可以识别静态链接库函数。现有技术中存在通过分析异常库函数发现恶意代码被植入在C语言动态运行库中,进而推断出实施攻击的方法。但是代码混淆技术,例如控制流扁平化、不透明谓词、花指令等会干扰静态分析的分析结果,导致误报或漏报;别名分析、值域分析等分析方法在反向数据流分析、间接控制流转移的目标预测等任务中均无法达到较高的实用性,准确率也偏低,使得静态分析方法无法准确有效地判定控制流可达性和发现控制流转移目标,并最终导致静态分析方法出现漏报或误报。
[0006] 动态分析方法以动态跟踪技术为核心,在动态跟踪程序执行的过程中获取原始数据,之后再利用这些数据进行后续分析。在动态执行过程中,通过对程序本身以及各种系统资源的监控,包括系统资源、服务、驱动、流量信息等,可以检测软件的恶意行为。例如全系统模拟方案S2E能够在动态分析过程中发现“隐魂”、“异鬼”木马病毒的注册系统服务、安装程序驱动的行为。
[0007] 符号执行的核心思想是在在程序执行过程中搜集路径约束,之后根据路径探索策略选择一个需要继续探索的路径,并且求解满足该路径的约束的程序输入,使得控制流向目标路径转移。符号执行是实现路径探索、提高动态分析覆盖率的主要技术。例如一些供应链污染事件的分析需要借助路径探索技术才能搜集到表达程序真实意图的执行路径。
[0008] 污点分析的主要流程是选择程序的某些输入标记为污点,在程序运行过程中根据污点传播规则标记数据依赖于污点的内存或寄存器。污点分析的思想在软件供应链污染检测中使用非常广泛,特别是在存在信息泄露的事件中。将敏感数据标注为污点源,如果污点数据被网络发送,则说明发生了信息泄露。但污点分析方法存在过污染或欠污染的问题,需要较多的人工干预分析。随着技术的发展,污点分析和符号执行工作的界限越来越模糊,因为符号执行中对路径约束的搜集和求解在本质上也是数据依赖分析。
[0009] 虽然符号执行、污点分析技术能够提高动态分析的覆盖率,恶意程序依然可以通过隐藏路径约束、利用复杂数学变换攻击约束求解器、使用单向函数阻碍约束求解等技术干扰分析,使得动态分析方法很难搜集到程序的恶意行为。而且,符号执行技术还存在路径爆炸的问题,当程序中存在循环等情况时,程序的所有可执行路径条数将过于庞大,无法逐一分析。此外,动态分析过程中缺乏全局信息,很难在动态执行过程中准确识别静态链接库函数。
[0010] 综上所述,现有技术在二进制软件供应链污染检测中存在效率不高、准确性不足等问题,且各项技术没有形成成熟的面向企业用户或个人计算机用户的解决方案,仍停留在科研探索阶段。

发明内容

[0011] 本发明提供一种软件供应链安全检测方法和装置、电子设备及存储介质,用以解决现有技术中存在的技术缺陷。
[0012] 本发明提供一种软件供应链安全检测方法,包括:
[0013] 获取待检测二进制文件,提取所述待检测二进制文件的待分析特征,所述待分析特征包括函数内特征、函数间特征以及模块间特征;
[0014] 将所述待分析特征输入至特征向量生成模型,输出与所述待检测二进制文件对应的至少一个待分析特征向量;
[0015] 其中,所述特征向量生成模型是基于二进制代码特征样本数据和预先确定的至少一个特征向量标签进行训练后得到;或,所述特征向量生成模型是基于二进制代码特征样本数据进行训练后得到;
[0016] 获取所述至少一个待分析特征向量分别与参考文件对应的至少一个参考特征向量之间每两个向量的距离,以得到所述待检测二进制文件与参考文件之间的相似度;
[0017] 基于所述相似度,检测出所述待检测二进制文件与参考文件之间的复用关系。
[0018] 根据本发明所述的软件供应链安全检测方法,其中,所述基于所述至少一个待分析特征向量分别与参考文件对应的至少一个参考特征向量之间每两个向量的距离,得到所述待检测二进制文件与参考文件之间的相似度之前,包括:
[0019] 基于数据库,获取参考文件对应的至少一个参考特征向量,所述数据库是基于互联网采集的软件信息进行预设并更新形成的,所述参考文件包含安全情报参考数据,所述安全情报参考数据包括安全漏洞、恶意代码和代码缺陷中的至少一个。
[0020] 根据本发明所述的软件供应链安全检测方法,其中,所述获取待检测二进制文件,提取所述待检测二进制文件的待分析特征之前,包括:
[0021] 对目标二进制文件和所述参考文件进行文件名和哈希值匹配,输出匹配到的目标二进制文件及与其关联的安全情报;
[0022] 将未匹配到的目标二进制文件作为待检测二进制文件。
[0023] 根据本发明所述的软件供应链安全检测方法,其中,所述基于数据库,获取参考文件对应的至少一个参考特征向量,包括:
[0024] 提取所述参考文件的参考特征;
[0025] 将所述参考特征输入至参考向量生成模型,输出所述参考文件对应的至少一个参考特征向量;
[0026] 所述参考向量生成模型是基于参考代码特征样本数据和预先确定的至少一个参考特征向量标签进行训练后得到;或,所述特征向量生成模型是基于参考代码特征样本数据进行训练后得到。
[0027] 根据本发明所述的软件供应链安全检测方法,其中,所述获取待检测二进制文件,提取所述待检测二进制文件的待分析特征之前,包括:
[0028] 对目标软件进行解压或安装;
[0029] 将解压或安装过程中提取的二进制文件作为待检测二进制文件或目标二进制文件。
[0030] 根据本发明所述的软件供应链安全检测方法,其中,所述获取所述至少一个待分析特征向量分别与参考文件对应的至少一个参考特征向量之间每两个向量的距离,包括:
[0031] 将所述至少一个待分析特征向量与参考文件对应的至少一个参考特征向量输入距离生成模型,输出所述至少一个待分析特征向量分别与参考文件对应的至少一个参考特征向量之间每两个向量的距离;
[0032] 其中,所述距离生成模型是基于特征向量样本数据和预先确定的至少一个距离标签进行训练后得到;或,所述特征向量生成模型是基于特征向量样本数据进行训练后得到。
[0033] 根据本发明所述的软件供应链安全检测方法,其中,所述获取所述至少一个待分析特征向量分别与参考文件对应的至少一个参考特征向量之间每两个向量的距离,以得到所述待检测二进制文件与参考文件之间的相似度,包括:
[0034] 基于预设规则缩小参考文件的搜索范围;所述预设规则为:将所述待检测二进制文件的函数列表与参考文件的函数列表分别进行函数大小排序后使用滑动窗口算法寻找待检测二进制文件和参考文件中最匹配的函数对;
[0035] 基于近邻算法的数据检索方式和所述至少一个待分析特征向量分别与参考文件对应的至少一个参考特征向量之间每两个向量的距离,进行函数相似性比对;
[0036] 基于函数相似性比对结果,得到所述待检测二进制文件与参考文件之间的相似度。
[0037] 本发明还提供了一种软件供应链安全检测装置,包括:
[0038] 待分析特征提取模块,用于获取待检测二进制文件,提取所述待检测二进制文件的待分析特征,所述待分析特征包括函数内特征、函数间特征以及模块间特征;
[0039] 待分析特征向量生成模块,用于将所述待分析特征输入至特征向量生成模型,输出与所述待检测二进制文件对应的至少一个待分析特征向量;
[0040] 其中,所述特征向量生成模型是基于二进制代码特征样本数据和预先确定的至少一个特征向量标签进行训练后得到;或,所述特征向量生成模型是基于二进制代码特征样本数据进行训练后得到;
[0041] 相似度生成模块,用于获取所述至少一个待分析特征向量分别与参考文件对应的至少一个参考特征向量之间每两个向量的距离,以得到所述待检测二进制文件与参考文件之间的相似度;
[0042] 检测模块,用于基于所述相似度,检测出所述待检测二进制文件与参考文件之间的复用关系。
[0043] 本发明还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述任一种所述软件供应链安全检测方法的步骤。
[0044] 本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上述任一种所述软件供应链安全检测方法的步骤。
[0045] 本发明设计并实现了一种软件供应链污染检测方案,通过提取所述待检测二进制文件的待分析特征,生成至少一个待分析特征向量,并得到所述待检测二进制文件与参考文件之间的相似度,检测出待检测二进制文件与参考文件之间的复用关系,能够检测二进制程序中是否复用了第三方代码、代码缺陷、存在关联的漏洞或恶意代码等供应链安全风险,提高了检测效率、准确率。

附图说明

[0046] 为了更清楚地说明本发明或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0047] 图1是本发明提供的软件供应链安全检测方法的流程示意图之一;
[0048] 图2是本发明提供的软件供应链安全检测方法的流程示意图之二;
[0049] 图3是本发明提供的软件供应链安全检测方法中的自动安装的流程示意图;
[0050] 图4是本发明提供的软件供应链安全检测方法中自动安装操作规则的示意图;
[0051] 图5是本发明提供的软件供应链安全检测方法中的二进制文件相似性分析的流程示意图;
[0052] 图6是本发明提供的软件供应链安全检测装置的结构示意图;
[0053] 图7是本发明提供的电子设备的结构示意图。

具体实施方式

[0054] 为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明中的附图,对本发明中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0055] 下面结合图1描述本发明的一种软件供应链安全检测方法,该方法包括:
[0056] S1、获取待检测二进制文件,提取所述待检测二进制文件的待分析特征,所述待分析特征包括函数内特征、函数间特征以及模块间特征;
[0057] 本质上,二进制文件由若干函数构成,这些函数可能分属不同的模块。本发明方案通过提取待分析二进制文件的特征来计算两个函数总体的相似度。所提取特征包括但不限于函数内特征、函数间特征、模块间特征等,所基于的二进制程序中的数据结构包括但不限于指令序列、控制流图、数据流图、导入表、导出表、字符串等。以下对所提取特征进行举例说明。
[0058] 函数内特征:二进制文件中一个函数可以表示为一张控制流图(Control Flow Graph,CFG),控制流图的节点称为基本块,控制流图的边表示了基本块之间的执行顺序关系。一个基本块由若干条汇编指令组成。因此函数内特征可以表现为如下形式:按地址顺序组成的指令序列;函数控制流图中的基本块;基于函数控制流图上的路径中的指令组成的序列;指令数目、操作数、操作码的统计量;基本块数目、出度、入度的统计量;若干相邻指令的组成的集合(n‑gram);函数中的字符串等。
[0059] 函数间特征:二进制文件中的函数不是孤立存在的,它会调用同文件内其他函数或者被其他函数调用,在跨编译器和跨版本的二进制代码比对中,相似的函数具有相似的函数交互(调用)关系。这些与其他函数的交互关系,成为二进制代码相似性分析的重要的语义特征,被称为“函数间特征”。函数间特征的具体表征为从函数调用图(Call Graph,CG)中提取的各类信息。函数调用图的每个节点代表一个函数,每条边代表两个函数间的调用关系。因此,函数间特征可以表现为如下形式:节点即函数的出度、入度;节点个数;子图数目等。
[0060] 模块间特征:除了存在与同文件内其他用户定义函数的交互关系外,函数也存在与外部模块(其他可执行文件或库文件)的交互关系(导入函数调用)。因此,该交互关系同样作为一个重要的语义特征,被称为“模块间特征”,可以表现为如下形式:导入表;导出表等。
[0061] S2、将所述待分析特征输入至特征向量生成模型,输出与所述待检测二进制文件对应的至少一个待分析特征向量;
[0062] 其中,所述特征向量生成模型是基于二进制代码特征样本数据和预先确定的至少一个特征向量标签进行训练后得到;或,所述特征向量生成模型是基于二进制代码特征样本数据进行训练后得到;
[0063] 一个机器学习模型可以抽象表示为
[0064] Y=f(X;θ)
[0065] 其中f是模型的抽象函数,X是模型的输入,Y是模型的输出,θ是模型的参数。
[0066] 设训练样本为(xi,yi),其中xi∈X表示第i个样本的特征,yi∈Y表示第i个样本的标签。
[0067] 那么损失函数可以定义为
[0068]
[0069] 损失函数代表了模型输出(预测值)f(xi;θ)和标签(真实值)yi之间的距离,其中N为样本个数。
[0070] 该距离可以有很多种形式,例如均方误差:
[0071]
[0072] 该距离可以有很多种形式,例如均方误差:
[0073]
[0074] 综合上述特征,将每个函数的特征利用特征生成模型(AI模型,例如卷积神经网络等,可以是有监督模型或者无监督模型)转化为一个向量(称为特征向量)后,计算两个函数特征向量的距离,即得到这两个函数的相似性。对于二进制文件中的每个函数,计算其与另外一个二进制文件中每个函数的距离,并按距离排序,将排在最前面(距离最小)的函数看作该函数的匹配项,即可实现跨编译器和跨版本的函数级二进制代码相似性比较。本发明的方案也不局限于卷积神经网络这一模型,本发明的方案对于任意AI算法或模型,例如最近邻算法、多层感知机等各类机器学习,深度学习算法或模型均有效。
[0075] S3、获取所述至少一个待分析特征向量分别与参考文件对应的至少一个参考特征向量之间每两个向量的距离,以得到所述待检测二进制文件与参考文件之间的相似度;
[0076] 每个特征向量对应一个函数,而一个二进制文件里可能有不止一个函数,因此可能有多个特征向量,本发明将二进制文件细化到函数级别。假设,文件A有M个特征向量,文件B有N个,那么比对并获取距离就是M*N次。M、N均为大于等于1的正整数。每两个二进制文件的向量的距离一共有M*N个,基于M*N个距离,得到待检测二进制文件与参考文件之间的相似度。
[0077] S4、基于所述相似度,检测出所述待检测二进制文件与参考文件之间的复用关系。
[0078] 本发明的方案并不受限于操作系统或计算机硬件系统。对于任意可以运行在计算机硬件系统或操作系统上的二进制文件,本发明的方案均可进行分析,即软件自动安装‑哈希值比对‑二进制相似性比对的过程。
[0079] 本发明设计并实现了一种软件供应链污染检测方案,通过提取所述待检测二进制文件的待分析特征,生成至少一个待分析特征向量,并得到所述待检测二进制文件与参考文件之间的相似度,检测出待检测二进制文件与参考文件之间的复用关系,能够检测二进制程序中是否复用了第三方代码、代码缺陷、存在关联的漏洞或恶意代码等供应链安全风险,提高了检测效率、准确率。
[0080] 根据本发明所述的软件供应链安全检测方法,其中,所述基于所述至少一个待分析特征向量分别与参考文件对应的至少一个参考特征向量之间每两个向量的距离,得到所述待检测二进制文件与参考文件之间的相似度之前,包括:
[0081] 基于数据库,获取参考文件对应的至少一个参考特征向量,所述数据库是基于互联网采集的软件信息进行预设并更新形成的,所述参考文件包含安全情报参考数据,所述安全情报参考数据包括安全漏洞、恶意代码和代码缺陷中的至少一个。参考文件对应的至少一个参考特征向量可以是预先计算好直接存储在数据库中随时可以调用的,节省计算空间;也可以在检测过程中,基于数据库来获取的。
[0082] 根据本发明所述的软件供应链安全检测方法,其中,所述获取待检测二进制文件,提取所述待检测二进制文件的待分析特征之前,包括:
[0083] 对目标二进制文件和所述参考文件进行文件名和哈希值匹配,输出匹配到的目标二进制文件及与其关联的安全情报;
[0084] 将未匹配到的目标二进制文件作为待检测二进制文件。
[0085] 本发明可以预先对收集到的软件进行预分析,建立数据库(包含软件模块库及函数特征库),同时收集已公开漏洞及恶意代码的情报,形成漏洞库、恶意代码库以及代码缺陷库,并与软件库或函数特征库进行关联。本发明支持在软件库模块的各数据库中进行精确匹配或模糊搜索。
[0086] 针对软件开发过程中复用的第三方二进制文件存在漏洞、恶意代码或者代码缺陷导致的软件供应链污染问题,本发明采用基于文件哈希值和二进制代码特征的二进制代码相似性检测方法,分别针对直接复用和部分复用两个方法进行检测,实现软件供应链威胁判定。
[0087] 直接复用的方法是:对于给定的待测二进制程序,在已知存在恶意代码的第三方二进制文件的条件下,使用哈希值搜索查询实现直接复用(即相似性100%)检测;如果哈希值匹配失败,说明二进制程序并不是直接复用已知的恶意代码/漏洞文件,而是复用其中的部分代码,因此需要基于AI模型进行相似性分析,实现函数级相似性检测,并综合函数级相似性检测的结果,进一步实现模块级相似性检测。
[0088] 具体而言,对于已知存在恶意代码植入或者漏洞的模块文件如DLL等,本发明在检测待测软件中是否直接复用了该模块文件时,首先在软件成功安装部署后,将释放的文件的文件名和哈希值与已知存在恶意代码或漏洞的模块文件做校验,若匹配则说明存在直接文件复用污染,若不匹配则说明不存在直接文件复用污染,本发明进一步基于AI对文件进行二进制文件代码相似性比对。
[0089] 对于匹配到的数据库中的文件,输出其关联的漏洞情报和恶意代码情报。如果未匹配到的目标二进制文件,则将未匹配到的目标二进制文件作为待检测二进制文件进行进一步的特征提取、相似度分析以得到待检测二进制文件和所述参考文件的复用关系,也就是利用二进制相似性检测模块40进行函数级相似性分析,而后综合函数级相似性分析的结果。如果数据库中的二进制文件被判定为与待测软件的二进制文件相似度高于预设的相似度,那么输出该文件的漏洞情报和恶意代码情报,否则认为待测软件的二进制文件不存在漏洞或恶意代码。
[0090] 根据本发明所述的软件供应链安全检测方法,其中,所述基于数据库,获取参考文件对应的至少一个参考特征向量,包括:
[0091] 提取所述参考文件的参考特征;
[0092] 将所述参考特征输入至参考向量生成模型,输出所述参考文件对应的至少一个参考特征向量;
[0093] 所述参考向量生成模型是基于参考代码特征样本数据和预先确定的至少一个参考特征向量标签进行训练后得到;或,所述特征向量生成模型是基于参考代码特征样本数据进行训练后得到。
[0094] 参考向量生成模型与上述特征向量生成模型是一致的,训练方式、训练的损失函数也是相同的。
[0095] 根据本发明所述的软件供应链安全检测方法,其中,所述获取待检测二进制文件,提取所述待检测二进制文件的待分析特征之前,包括:
[0096] 对目标软件进行解压或安装;
[0097] 将解压或安装过程中提取的二进制文件作为待检测二进制文件或目标二进制文件。
[0098] 例如,对于给定待检测软件,如果其是未安装的状态,则对其进行安装,得到安装后释放出来的二进制文件。对目标软件进行解压或安装这个步骤是可选的增强步骤。如果检测的目标是已经安装好的程序,可以直接进行后续分析。解压或安装步骤主要是能够支持那些安装包程序,自动安装之后能够得到背后的实际程序。
[0099] 本发明可以采用增量式安装方法:首先判断安装包类型,如果软件以安装包形式发布,则直接对其进行解压,如果存在解压密码,则使用文件名和文件名子串当作密码,尝试解压;对于需要运行的安装包,使用简单易行的静默安装方式完成部分软件的安装;之后对无法使用静默安装的软件,采用基于规则的控件识别和OCR识别方式进行安装。最后对安装后的结果进行分析,不断调整追加安装规则,争取对获取的软件安装包实现最高的安装覆盖率。
[0100] 具体而言,①:对于压缩包类型的软件安装包,使用WinRAR命令行模式尝试解压。如果解压过程需要密码,则使用文件名或文件名的子串当作密码进行尝试。如果均尝试失败,则放弃对其的后续分析。如果尝试成功,在文件中查询是否有setup.exe、install.bat、install.exe等文件,如果有,则尝试利用后文中的方法进行自动化安装。如果没有,则初步判断该压缩包为绿色免安装版,直接收集该压缩包释放的二进制文件。②:对于可执行文件类型的软件安装包,本发明利用USSF工具获取部分安装包的参数,并将同一封包工具的参数进行汇总;对无法获取参数的安装包,使用查壳工具提取文件加壳特征,即封包工具类型,并按照封包工具进行分类。对使用同一封包工具的安装包,查询USSF提供的该工具的静默安装参数,若存在,则直接尝试静默安装,若不存在,则将该安装包留给下一步基于控件识别的安装方法继续处理。③:对于①②均无法处理的安装包,本发明通过在特定位置模拟键盘输入和鼠标点击等行为来代替人工操作完成安装,即在安装窗口中进行控件识别获取控件列表,然后将列表中的控件按照自定义的操作规则进行筛选,获取有效操作控件,对有效的操作控件进行模拟操作,操作完成后,继续循环遍历新弹出的窗口,直至安装完毕。④:
对于③仍然无法自动安装的软件安装包,即无法利用API函数获取控件的位置和名称的安装包,本发明通过光学字符识别(OpticalCharacterRecognition,OCR)技术获取安装包窗口截图中所有字符序列及字符序列的位置信息,从而确定需要操作的控件类型和控件位置。
[0101] 根据本发明所述的软件供应链安全检测方法,其中,所述获取所述至少一个待分析特征向量分别与参考文件对应的至少一个参考特征向量之间每两个向量的距离,包括:
[0102] 将所述至少一个待分析特征向量与参考文件对应的至少一个参考特征向量输入距离生成模型,输出所述至少一个待分析特征向量分别与参考文件对应的至少一个参考特征向量之间每两个向量的距离;
[0103] 其中,所述距离生成模型是基于特征向量样本数据和预先确定的至少一个距离标签进行训练后得到;或,所述特征向量生成模型是基于特征向量样本数据进行训练后得到。
[0104] 距离生成模型是用于代码相似检测,即判定两段二进制代码是否相似。基于相似性检测,可以识别代码复用情况,进而支持检测二进制代码中是否存在由于复用代码引入的相似漏洞、或者二进制代码是否包含已知恶意代码片段。
[0105] 具体到二进制代码相似性分析任务,距离生成模型所用的机器学习模型可以抽象表示为:
[0106] Y=f(g(X;θ),g(X′;θ))
[0107] 其中X,X′分别为输入的两个函数的特征,g(X;θ),g(X′;θ)为模型生成的两个特征向量,f(g(X;θ),g(X′;θ))为模型输出的两个特征向量之间的距离。该距离f(·)可以是人工设计的公式(例如欧式距离),也可以是另一个AI模型。
[0108] 设训练样本为(xi,x′i,yi),其中xi,x′i∈X表示第i个样本对(两个函数)的特征,yi∈Y表示第i个样本对的标签(这两个函数的距离/相似度),N表示样本对的数量。
[0109] 那么损失函数可以定义为
[0110]
[0111] 例如均方误差:
[0112]
[0113] 根据本发明所述的软件供应链安全检测方法,其中,所述获取所述至少一个待分析特征向量分别与参考文件对应的至少一个参考特征向量之间每两个向量的距离,以得到所述待检测二进制文件与参考文件之间的相似度,包括:
[0114] 基于预设规则缩小参考文件的搜索范围;所述预设规则为:将所述待检测二进制文件的函数列表与参考文件的函数列表分别进行函数大小排序后使用滑动窗口算法寻找待检测二进制文件和参考文件中最匹配的函数对;
[0115] 基于近邻算法的数据检索方式和所述至少一个待分析特征向量分别与参考文件对应的至少一个参考特征向量之间每两个向量的距离,进行函数相似性比对;
[0116] 基于函数相似性比对结果,得到所述待检测二进制文件与参考文件之间的相似度。
[0117] 为了使本发明的目的、技术方案和创新点更加清楚明白,本发明实施例结合附图对软件自动安装及二进制代码相似性检测部分进行进一步补充说明。
[0118] 如图2所示,给定待测软件,本发明方案首先对软件包进行自动安装,自动安装流程如图3所示,通过监控软件安装目录,获取安装包所释放的文件,建立软件库。对于释放的每个二进制文件,本发明方案通过哈希检测和依赖分析进行模块复用分析:如果所分析文件的哈希值与软件库中已知二进制文件的哈希值相同,则报告该已知文件的漏洞或恶意行为情报,否则基于后文所述的AI相似性比较模块进行相似性比较,对于AI模型判定为相似的软件库中的二进制文件,输出其漏洞或恶意行为情报。
[0119] 压缩包解压当解压过程需要密码时,本发明方案具体的尝试方法如下:
[0120] (1)使用文件名作为密码进行尝试,如果尝试失败,则执行(2);
[0121] (2)使用模糊匹配的方式在文件名中搜索“密码”、“password”、“pwd”、“zipcode”、“code”等关键字,如果存在,则其后续部分(冒号和空格)当成密码进行尝试,如果尝试失败,执行(3);
[0122] (3)区分文件名中的字符类型,分别将中文和英文字符当作密码,进行尝试。
[0123] (4)如果均尝试失败,放弃解压
[0124] 静默安装结果判定:在获取软件安装包的静默安装参数后,通过设计批处理程序即可实现无人值守的自动化安装。然而使用软件的静默安装方式,安装过程无交互界面,完全免人工应答,因此无法得知软件是否安装完成、安装成功,本发明方案采用对安装过程进行监控的方式,判断安装过程是否成功结束。由于安装过程中必定会在磁盘上新建文件,因此可以监控磁盘上的文件新建情况。若安装包运行静默安装后,一分钟内没有发现新建文件的过程,则判定安装过程失败,否则安装过程顺利进行,若判定安装开始后,持续一分钟时间没有新的文件产生,则判定软件安装结束。
[0125] 控件识别安装:在基于图形界面的交互式安装的过程中,成功启动软件安装包的安装程序后,在系统环境中会成功弹出交互式安装窗口。本发明方案通过调用系统API函数EnumWindows获取安装窗口,通过调用系统API函数EnumChildWindows来获取特定窗口中所有控件句柄的列表,并根据控件句柄进一步获取控件的其他属性信息,如控件标题(“下一步”“完成”等)、控件类型(“Button”“CheckBox”等)和控件位置(相对于屏幕)等。在安装窗口中,根据窗口内的控件是否能被API函数识别,又分为标准控件和非标准控件两类。对标准控件,可利用控件句柄直接获取控件的属性信息。对于非标准控件,则无法利用API函数获取控件的属性信息,也就无法获取控件的位置,进而利用模拟操作完成安装。对于非标准控件的安装包,交由后文所述OCR识别进行处理。
[0126] 在获取窗口中所有控件列表后,需要进一步对控件进行筛选,保留有效的操作控件。对某一特定的安装窗口,安装人员需要操作的对象往往只有几种,例如“Button”控件中的“下一步”、“安装”和“完成”等,“RadioButton”控件中的“我同意”和“接受”等,而对于“Static”控件(描述了提示信息)则全都不需要处理。因此本发明方案定义了一个控件操作规则的XML文件,如图4所示,XML中总结了常见的需要操作的控件类型和控件标题,由于软件包的开发语言不同,因此控件标题相应存在中英文、简繁体的差别,在XML中搜集了所有可能出现的控件标题的别名。对输入的控件列表,首先匹配第一级的控件类型(“Button”、“RadioButton”和“CheckBox”等),若XML中没有匹配的控件类型,则说明该类型的控件不需要操作(如“Static”“Toolbar”等),若匹配到控件类型,则继续遍历所有的“Names”,若不匹配则说明该控件不需要操作(如“上一步”“取消”等),若匹配则输出该控件以及控件的优先级。按照以上方法,将输入的控件列表按照XML中匹配的控件进行筛选,输出需要操作的有效控件列表以及控件的操作顺序。此外,当预置XML内容无法驱动安装进行下一步操作时,按照文本输入框、选则框(CheckBox)和按钮(Button)的优先级进行组合探索,如果某种组合最终实现了自动化安装,则反馈该组合,并更新XML操作规则。对获取的有效操作控件列表,若列表中只有一个控件,则直接通过API函数mouse_event模拟鼠标操作(如点击“下一步”“安装”或“完成”等)即可;若列表中的控件有多个,首先根据控件优先级进行排序,然后按照优先级由高到低依次模拟操作。
[0127] OCR识别安装对无法静默安装,且使用了非标准控件的软件,由于无法利用API函数获取控件的位置和名称,也就无法确定需要操作的控件类型和控件位置。在窗口识别定位到安装包的安装窗口后,利用API函数GetWindowRect获取窗口的位置,然后对软件安装窗口截图,在该截图上使用OCR识别,获取窗口截图中所有字符序列及字符序列的位置信息。识别的字符序列包含控件的标题以及安装界面上的帮助信息和说明,OCR识别无法区分这两类字符序列,本文中采用字符长度来进行初步判断,基于经验,“Button”控件的标题长度都在5个字符以内,“CheckBox”控件的标题长度在10个字符以内,“RadioButton”控件最长的标题如“我已阅读并同意该软件许可协议”的长度也在15个字符以内,因此设置的字符长度临界值为15,若字符长度大于临界值,则直接将其归类为帮助信息和说明。在控件识别安装中的XML操作规则中总结了常见的需要操作的控件类型和控件标题,由于OCR识别只能获取字符序列和位置,无法判定是否是控件及相应的控件类型,因此在查询XML时,需要跳过控件类型的匹配,直接通过控件标题的别名来进行筛选。
[0128] 在检测经源码编译的第三方库的模块复用的场景下,本发明方案实现基于AI模型的函数级相似性分析,并利用函数级相似性分析结果实现模块级相似性分析。
[0129] 如图5所示,对于给定待测软件X及不安全第三方库L,首先,经过软件自动化安装,获取程序释放的所有文件。对于其中每个文件M,利用交互式反汇编工具(InteractiveDisassembler,IDAPro)提取M和L的二进制代码特征,并分别获取其中的函数列表。然后,在对两个函数列表分别按函数大小进行排序后使用滑动窗口算法寻找M和L中最匹配的函数对。具体方法是:对于L中每个函数f,函数大小为s,在M中寻找大小范围为
0.85s‑1.15s、且未被标记过的函数集合T,利用AI模型计算f与T中每个函数的相似性,取其中相似度最大的函数s′,并标记为函数对(s,s′,α),其中α为该函数对的相似度。直到L中所有函数都找到对应的函数对。最终模块M和L的相似度为∑αis′i/SM,其中SM为M中所有函数的总大小。如果该相似度大于80%,则认为存在模块复用行为。
[0130] 此外,本发明方案还提供基于近邻算法的高效数据检索方法进行函数相似性比对,通过将软件库中的所有模块预先提取特征形成函数特征库,结合非度量空间库(Non‑MetricSpaceLibrary,NMSLIB)提供的API即可实现高效相似函数搜索,进而检测模块40复用。
[0131] 参见图6,下面对本发明提供的软件供应链安全检测装置进行描述,下文描述的软件供应链安全检测装置与上文描述的软件供应链安全检测方法可相互对应参照,所述软件供应链安全检测装置包括:
[0132] 待分析特征提取模块10,用于获取待检测二进制文件,提取所述待检测二进制文件的待分析特征,所述待分析特征包括函数内特征、函数间特征以及模块间特征;
[0133] 待分析特征向量生成模块20,用于将所述待分析特征输入至特征向量生成模型,输出与所述待检测二进制文件对应的至少一个待分析特征向量;
[0134] 其中,所述特征向量生成模型是基于二进制代码特征样本数据和预先确定的至少一个特征向量标签进行训练后得到;或,所述特征向量生成模型是基于二进制代码特征样本数据进行训练后得到;
[0135] 相似度生成模块30,用于获取所述至少一个待分析特征向量分别与参考文件对应的至少一个参考特征向量之间每两个向量的距离,以得到所述待检测二进制文件与参考文件之间的相似度;
[0136] 检测模块40,用于基于所述相似度,检测出所述待检测二进制文件与参考文件之间的复用关系。
[0137] 根据本发明所述的软件供应链安全检测装置,其中,所述装置还包括至少一个参考特征向量获取模块,所述至少一个参考特征向量获取模块用于:
[0138] 基于数据库,获取参考文件对应的至少一个参考特征向量,所述数据库是基于互联网采集的软件信息进行预设并更新形成的,所述参考文件包含安全情报参考数据,所述安全情报参考数据包括安全漏洞、恶意代码和代码缺陷中的至少一个。具体的,数据库需要从互联网上不断采集软件,通过自动安装/解压等,逐渐积累形成的。数据库可以逐渐完善,每次检测的时候可以与当前软件库进行比对。数据库是通过互联网搜索安装包等,自动安装形成的。复用检测时,拿一个待测的目标程序,与当前数据库进行匹配,找到相似代码片段,从而推断相似漏洞或者恶意代码的安全风险。
[0139] 根据本发明所述的软件供应链安全检测装置,其中,所述装置还包括预分析模块,所述预分析模块用于:
[0140] 对目标二进制文件和所述参考文件进行文件名和哈希值匹配,输出匹配到的目标二进制文件及与其关联的安全情报;
[0141] 将未匹配到的目标二进制文件作为待检测二进制文件。
[0142] 根据本发明所述的软件供应链安全检测方法,其中,所述基于数据库,获取参考文件对应的至少一个参考特征向量,包括:
[0143] 提取所述参考文件的参考特征;
[0144] 将所述参考特征输入至参考向量生成模型,输出所述参考文件对应的至少一个参考特征向量;
[0145] 所述参考向量生成模型是基于参考代码特征样本数据和预先确定的至少一个参考特征向量标签进行训练后得到;或,所述特征向量生成模型是基于参考代码特征样本数据进行训练后得到。
[0146] 根据本发明所述的软件供应链安全检测装置,其中,所述装置还包括文件提取模块,所述文件提取模块用于:
[0147] 对目标软件进行解压或安装;
[0148] 将解压或安装过程中提取的二进制文件作为待检测二进制文件或目标二进制文件。
[0149] 根据本发明所述的软件供应链安全检测装置,其中,所述相似度生成模块30用于:
[0150] 将所述至少一个待分析特征向量与参考文件对应的至少一个参考特征向量输入距离生成模型,输出所述至少一个待分析特征向量分别与参考文件对应的至少一个参考特征向量之间每两个向量的距离;
[0151] 其中,所述距离生成模型是基于特征向量样本数据和预先确定的至少一个距离标签进行训练后得到;或,所述特征向量生成模型是基于特征向量样本数据进行训练后得到。
[0152] 根据本发明所述的软件供应链安全检测装置,其中,所述相似度生成模块30用于:
[0153] 基于预设规则缩小参考文件的搜索范围;所述预设规则为:将所述待检测二进制文件的函数列表与参考文件的函数列表分别进行函数大小排序后使用滑动窗口算法寻找待检测二进制文件和参考文件中最匹配的函数对;
[0154] 基于近邻算法的数据检索方式和所述至少一个待分析特征向量分别与参考文件对应的至少一个参考特征向量之间每两个向量的距离,进行函数相似性比对;
[0155] 基于函数相似性比对结果,得到所述待检测二进制文件与参考文件之间的相似度。
[0156] 图7示例了一种电子设备的实体结构示意图,该电子设备可以包括:处理器(processor)310、通信接口(Communications Interface)320、存储器(memory)330和通信总线340,其中,处理器310,通信接口320,存储器330通过通信总线340完成相互间的通信。处理器310可以调用存储器330中的逻辑指令,以执行软件供应链安全检测方法,该方法包括:
[0157] S1、获取待检测二进制文件,提取所述待检测二进制文件的待分析特征,所述待分析特征包括函数内特征、函数间特征以及模块间特征;
[0158] S2、将所述待分析特征输入至特征向量生成模型,输出与所述待检测二进制文件对应的至少一个待分析特征向量;
[0159] 其中,所述特征向量生成模型是基于二进制代码特征样本数据和预先确定的至少一个特征向量标签进行训练后得到;或,所述特征向量生成模型是基于二进制代码特征样本数据进行训练后得到;
[0160] S3、获取所述至少一个待分析特征向量分别与参考文件对应的至少一个参考特征向量之间每两个向量的距离,以得到所述待检测二进制文件与参考文件之间的相似度;
[0161] S4、基于所述相似度,检测出所述待检测二进制文件与参考文件之间的复用关系。
[0162] 此外,上述的存储器330中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read‑Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
[0163] 另一方面,本发明还提供一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法所提供的软件供应链安全检测方法,该方法包括:
[0164] S1、获取待检测二进制文件,提取所述待检测二进制文件的待分析特征,所述待分析特征包括函数内特征、函数间特征以及模块间特征;
[0165] S2、将所述待分析特征输入至特征向量生成模型,输出与所述待检测二进制文件对应的至少一个待分析特征向量;
[0166] 其中,所述特征向量生成模型是基于二进制代码特征样本数据和预先确定的至少一个特征向量标签进行训练后得到;或,所述特征向量生成模型是基于二进制代码特征样本数据进行训练后得到;
[0167] S3、获取所述至少一个待分析特征向量分别与参考文件对应的至少一个参考特征向量之间每两个向量的距离,以得到所述待检测二进制文件与参考文件之间的相似度;
[0168] S4、基于所述相似度,检测出所述待检测二进制文件与参考文件之间的复用关系。
[0169] 又一方面,本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各提供的软件供应链安全检测方法,该方法包括:
[0170] S1、获取待检测二进制文件,提取所述待检测二进制文件的待分析特征,所述待分析特征包括函数内特征、函数间特征以及模块间特征;
[0171] S2、将所述待分析特征输入至特征向量生成模型,输出与所述待检测二进制文件对应的至少一个待分析特征向量;
[0172] 其中,所述特征向量生成模型是基于二进制代码特征样本数据和预先确定的至少一个特征向量标签进行训练后得到;或,所述特征向量生成模型是基于二进制代码特征样本数据进行训练后得到;
[0173] S3、获取所述至少一个待分析特征向量分别与参考文件对应的至少一个参考特征向量之间每两个向量的距离,以得到所述待检测二进制文件与参考文件之间的相似度;
[0174] S4、基于所述相似度,检测出所述待检测二进制文件与参考文件之间的复用关系。
[0175] 以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
[0176] 通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
[0177] 最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。