一种针对二进制物联网固件程序的漏洞检测方法和系统

文档序号:33036112发布日期:2023-01-24 19:56阅读:46来源:国知局
一种针对二进制物联网固件程序的漏洞检测方法和系统

1.本发明属于漏洞检测技术领域,尤其涉及一种针对二进制物联网固件程序的漏洞检测方法和系统。


背景技术:

2.软件漏洞是各种网络安全事件产生的主要原因,对网络空间安全的影响至关重要,得到安全研究机构、科研学术团体和企业广泛而持续的关注。在软件开发过程中,开发人员往往复用已发布的代码实现程序的特定功能,这种方法一方面可以有效提高开发效率,缩短开发周期;另一方面,也将复用代码中的安全漏洞扩散到大量的相关程序中,带来的安全隐患不容忽视。对复用代码漏洞的检测是漏洞分析的一个重要的研究方向,也是软件供应链安全的关键研究内容。随着物联网iot(internet of things)设备的广泛使用,传统架构的程序也逐渐适配到基于mips或者arm架构开发的iot 设备中,在跨架构代码复用过程中,某个漏洞在特定体系结构(如intel x86) 下受到广泛关注并进行了修复,而与其源码相同但是应用于另一个体系结构(如arm)的文件中的漏洞并未受到关注,同样存在安全隐患;同时,对受影响的设备进行修复需手工更新固件,因此比传统pc机上的漏洞修复更为困难,这就导致固件设备中的漏洞存在时间更长。加州大学和密歇根大学的研究人员对iot设备进行研究发现,物联网设备(路由器、防火墙,打印机等)在漏洞公布后,往往未及时进行漏洞修补。据统计,超过5000万的 iot设备中的第三方库代码都存在安全漏洞。2020年12月,网络安全公司 forescout发布技术报告,发现了影响超过150个公司的几百万个设备(包括物联网,工业控制系统网络和互联网设备)的33个漏洞,大部分的漏洞与内存损坏相关,导致拒绝服务、信息泄露和远程代码执行攻击等安全问题大部分的固件程序都是以二进制形式发布,这些二进制程序同样存在因代码复用导致的漏洞,对其进行漏洞检测十分必要。当前,大部分的固件程序都是以二进制形式发布,这些二进制程序同样存在因代码复用导致的漏洞,且由于源码未知,编译语义信息丢失和因为代码优化带来的函数内联,冗余消除以及指令重排序问题,对其进行漏洞检测难度要远大于源码已知的程序。
3.近年来,研究人员开始着手解决跨体系的二进制代码相似性检测的问题。最早提出使用漏洞签名来搜索二进制代码中不同体系结构的已知漏洞。随着机器学习的兴起,使用机器学习模型学习代码特征,根据学习到的代码特征规律进行表征,得到代码的特征向量,并使用向量空间距离计算代码的相似程度。genius和gemini是关于跨体系结构漏洞搜索的两个最具代表性的工具。它们分别利用传统的机器学习和深度学习,将函数的cfg 转化为向量进行相似性比较。这些方法都是基于函数级别进行的跨架构二进制相似性比较。将这种函数级别的相似性比较方法直接应用于目标程序的漏洞检测时,需要将漏洞函数与目标程序中的所有函数进行特征提取和相似性比较,效率不高,且受静态分析影响,得到的比较精度无法有大幅提升。
4.二进制程序漏洞检测的一个典型场景是,在给定漏洞函数的条件下,对目标二进制程序集中的程序是否存在类似漏洞进行检测。对目标程序集中的多个程序进行漏洞检测
的流程包括,在分析目标程序集中的所有二进制程序并对其代码进行预处理后,得到每一个程序中的所有函数并对其进行特征提取和表示,其中代码特征包括基本块的指纹,函数的哈希等。同时,对漏洞函数进行同样的预处理、特征提取和表示后,使用一定的度量标准,计算二进制程序中的每一个函数与漏洞函数的相似程度值,基于相似度度量结果,对目标程序中是否存在漏洞函数进行检测。
5.传统基于代码相似性的漏洞检测方法通过提取代码的关键特征,包含程序的控制流图、数据流图或者执行序列,使用图同构、树编辑距离、执行迹距离、最长公共子序列、图编辑距离等度量方法判断代码是否相似,这些方法虽然可以对代码进行匹配,但是存在效率和扩展性问题。基于机器学习的相似性比较方法来检测漏洞虽然能够提高比较的效率,并可以应用于较大规模的程序检测,但是这种方法需要对漏洞函数与目标程序中所有函数进行比较,在对代码特征进行向量空间映射时,可能存在多个函数映射距离较近的情况,因此,对检测精度产生一定影响,特别是在目标程序规模较大时检测精度受到的影响更大。


技术实现要素:

6.为了解决上述技术问题,本发明提出一种针对二进制物联网固件程序的漏洞检测方案,在提高漏洞检测效率的同时提升漏洞代码定位的精确度。
7.本发明第一方面公开了一种针对二进制物联网固件程序的漏洞检测方法。所述方法包括:步骤s1、分别获取第一二进制程序和第二二进制程序的函数调用图作为第一函数调用图和第二函数调用图;其中,所述第一二进制程序为待检测的目标二进制物联网固件程序,所述第二二进制程序为包含漏洞的标准二进制程序;步骤s2、从所述第一函数调用图中提取所述第一二进制程序的函数多维特征作为第一特征,并从所述第二函数调用图中提取所述第二二进制程序的函数多维特征作为第二特征;步骤s3、基于所述第一特征和所述第二特征确定候选函数对,根据所述候选函数对中两个函数的控制流图分别确定所述两个函数基于控制流图的基本块多维迭代特征向量,以获取所述候选函数对的向量表示;步骤s4、将每一个所述候选函数对包含的两个函数的向量表示输入至经训练的神经网络模型,以计算所述候选函数对包含的两个函数的向量表示的相似度,并基于所述相似度判定所述第一二进制程序包含的漏洞。
8.根据本发明第一方面的方法,在所述步骤s1中,函数调用图以acg= (v,e,σ)来表征,其中v表示二进制程序中包含的各个函数节点的集合,e表示存在调用关系的函数节点对的集合,所述函数节点对在所述函数调用图中以节点之间的边来进行表征,σ表示所述各个函数节点映射到其节点多维属性特征的集合。
9.根据本发明第一方面的方法,在所述步骤s2中,所述函数多维特征包括所述函数节点的文本特征、函数统计特征、函数调用上下文特征、函数内部的结构特征以及函数间的结构特征;其中:所述函数节点的文本特征为函数引用的字符串;所述函数统计特征为所述函数引用的字符串的个数、指令数目和跳转指令个数;所述函数调用上下文特征为函数参数的数目和调用的api函数数目;所述函数内部的结构特征基于函数内部的以基本快为单位的结构来获取,以函数内部代码的圈复杂度c来表征,c=e
’‑
n+2, e’表示函数内部控制流图中边的数目,n表示所述函数内部控制流图中节点的数目;所述函数间的结构特征为所述函数节点的出度和入度,所述出度表示当前函数调用其他函数的个数,所述入度表示所
述当前函数被其他函数调用的次数。
10.根据本发明第一方面的方法,在所述步骤s3中,基于所述第一特征和所述第二特征确定所述候选函数对具体包括:获取所述第一二进制程序包含的函数集合{f1,f2,
…fs
},对函数集合中的函数fi,1≤i≤s,从所述第一特征中提取与所述函数fi相关的函数节点的文本特征、函数统计特征、函数调用上下文特征、函数内部的结构特征以及函数间的结构特征;对与所述函数fi相关的函数节点的文本特征进行轻量化表示,合并所述函数fi经轻量化表示的函数节点的文本特征、函数统计特征、函数调用上下文特征、函数内部的结构特征以及函数间的结构特征,得到所述函数fi的多维特征向量w
fi
;以同样的方式获取所述第二二进制程序中包含的漏洞函数的多维特征向量w
vul
,并计算所述函数函数fi的多维特征向量w
fi
与所述漏洞函数的多维特征向量w
vul
之间的向量空间距离di=d(w
fi
,w
vul
),并对向量空间距离 di按照从小到大的顺序进行排序,选取前个候选函数对。
11.根据本发明第一方面的方法,在所述步骤s3中,确定所述两个函数基于控制流图基本块的多维迭代特征向量,以获取所述候选函数对的向量表示,其中,对于一个所述候选函数对中包含的所述第一二进制程序的目标函数中基本块的多维迭代特征向量和所述第二二进制程序的漏洞函数中基本块的多维迭代特征向量,分别通过以下方式获取对应的向量表示:获取函数的控制流图,所述控制流图中包含若干基本块,以所述基本块的形式表征所述函数,所述函数基于控制流图基本块的特征向量包括:所述函数内部的控制流图的结构特征、所述基本块中的代码统计特征以及所述函数的调用关系特征;记所述基本块的原始节点特征为xv,利用sturcture2vec 结构将所述基本块的节点特征与其邻居特征进行结合来表征所述基本块的迭代节点特征其中t表示迭代次数, w1表示超参数,n(v)表示节点v的邻居节点,σ()为非线性变换函数,σ(l)=p1×
relu(p2×
...relu(pul)),u表示嵌入的层数,p1,p2,

,pu表示超级参数, relu为线性整流函数,relu(x)=max{0,x},则得到所述向量表示t表示最终的迭代次数,v表示邻居节点集合, w2表示超参数,g表示函数内的控制流图。
12.根据本发明第一方面的方法,在所述步骤s4中,所述经训练的神经网络模型由以下方式来完成训练:计算第一函数特征向量φ(g1)和第一函数特征向量φ(g2)之间的余弦相似度通过求解使得损失函数最小。
13.根据本发明第一方面的方法,在所述步骤s4中,计算所述候选函数对中包含的所述第一二进制程序中目标函数的向量表示和所述第二二进制程序中漏洞函数的向量表示之间的余弦相似度,当所述余弦相似度超过阈值时,判定所述目标函数中存在漏洞,并确定所述目标函数在所述第一二进制程序中的代码位置作为漏洞位置。
14.本发明第二方面公开了一种针对二进制物联网固件程序的漏洞检测系统。所述系
统包括:第一处理单元,被配置为:分别获取第一二进制程序和第二二进制程序的函数调用图作为第一函数调用图和第二函数调用图;其中,所述第一二进制程序为待检测的目标二进制物联网固件程序,所述第二二进制程序为包含漏洞的标准二进制程序;第二处理单元,被配置为:从所述第一函数调用图中提取所述第一二进制程序的函数多维特征作为第一特征,并从所述第二函数调用图中提取所述第二二进制程序的函数多维特征作为第二特征;第三处理单元,被配置为:基于所述第一特征和所述第二特征确定候选函数对,根据所述候选函数对中两个函数的控制流图分别确定所述两个函数基于控制流图的基本块多维迭代特征向量,以获取所述候选函数对的向量表示;第四处理单元,被配置为:将每一个所述候选函数对包含的两个函数的向量表示输入至经训练的神经网络模型,以计算所述候选函数对包含的两个函数的向量表示的相似度,并基于所述相似度判定所述第一二进制程序包含的漏洞。
15.根据本发明第二方面的系统,函数调用图以acg=(v,e,σ)来表征,其中v表示二进制程序中包含的各个函数节点的集合,e表示存在调用关系的函数节点对的集合,所述函数节点对在所述函数调用图中以节点之间的边来进行表征,σ表示所述各个函数节点映射到其节点多维属性特征的集合。
16.根据本发明第二方面的系统,所述函数多维特征包括所述函数节点的文本特征、函数统计特征、函数调用上下文特征、函数内部的结构特征以及函数间的结构特征;其中:所述函数节点的文本特征为函数引用的字符串;所述函数统计特征为所述函数引用的字符串的个数、指令数目和跳转指令个数;所述函数调用上下文特征为函数参数的数目和调用的api函数数目;所述函数内部的结构特征基于函数内部的以基本快为单位的结构来获取,以函数内部代码的圈复杂度c来表征,c=e
’‑
n+2,e’表示函数内部控制流图中边的数目,n表示所述函数内部控制流图中节点的数目;所述函数间的结构特征为所述函数节点的出度和入度,所述出度表示当前函数调用其他函数的个数,所述入度表示所述当前函数被其他函数调用的次数。
17.根据本发明第二方面的系统,基于所述第一特征和所述第二特征确定所述候选函数对具体包括:获取所述第一二进制程序包含的函数集合 {f1,f2,
…fs
},对函数集合中的函数fi,1≤i≤s,从所述第一特征中提取与所述函数fi相关的函数节点的文本特征、函数统计特征、函数调用上下文特征、函数内部的结构特征以及函数间的结构特征;对与所述函数fi相关的函数节点的文本特征进行轻量化表示,合并所述函数fi经轻量化表示的函数节点的文本特征、函数统计特征、函数调用上下文特征、函数内部的结构特征以及函数间的结构特征,得到所述函数fi的多维特征向量w
fi
;以同样的方式获取所述第二二进制程序中包含的漏洞函数的多维特征向量 w
vul
,并计算所述函数函数fi的多维特征向量w
fi
与所述漏洞函数的多维特征向量w
vul
之间的向量空间距离di=d(w
fi
,w
vul
),并对向量空间距离di按照从小到大的顺序进行排序,选取前个候选函数对。
18.根据本发明第二方面的系统,确定所述两个函数基于控制流图基本块的多维迭代特征向量,以获取所述候选函数对的向量表示,其中,对于一个所述候选函数对中包含的所述第一二进制程序的目标函数中基本块的多维迭代特征向量和所述第二二进制程序的漏洞函数中基本块的多维迭代特征向量,分别通过以下方式获取对应的向量表示:获取函数的控制流图,所述控制流图中包含若干基本块,以所述基本块的形式表征所述函数,所述函
数基于控制流图基本块的特征向量包括:所述函数内部的控制流图的结构特征、所述基本块中的代码统计特征以及所述函数的调用关系特征;记所述基本块的原始节点特征为xv,利用sturcture2vec结构将所述基本块的节点特征与其邻居特征进行结合来表征所述基本块的迭代节点特征其中t表示迭代次数,w1表示超参数,n(v)表示节点v的邻居节点,σ()为非线性变换函数,σ(l)=p1×
relu(p2×
...relu(pul)),u表示嵌入的层数,p1,p2,

,pu表示超级参数, relu为线性整流函数,relu(x)=max{0,x},则得到所述向量表示t表示最终的迭代次数,v表示邻居节点集合, w2表示超参数,g表示函数内的控制流图。
19.根据本发明第二方面的系统,所述经训练的神经网络模型由以下方式来完成训练:计算第一函数特征向量φ(g1)和第一函数特征向量φ(g2)之间的余弦相似度通过求解使得损失函数最小。
20.根据本发明第二方面的系统,计算所述候选函数对中包含的所述第一二进制程序中目标函数的向量表示和所述第二二进制程序中漏洞函数的向量表示之间的余弦相似度,当所述余弦相似度超过阈值时,判定所述目标函数中存在漏洞,并确定所述目标函数在所述第一二进制程序中的代码位置作为漏洞位置。
21.本发明第三方面公开了一种电子设备。所述电子设备包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时,实现本发明第一方面所述的一种针对二进制物联网固件程序的漏洞检测方法中的步骤。
22.本发明第四方面公开了一种计算机可读存储介质。所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时,实现本发明第一方面所述的一种针对二进制物联网固件程序的漏洞检测方法中的步骤。
23.综上,本发明提供的技术方案首先提出多维代码属性的概念,从不同维度对函数代码量化特征进行描述,筛选出可能与漏洞函数有对应关系的候选函数;其次,使用神经网络模型,对得到的候选函数进行精细化比较,利用神经网络模型自动学习代码语义特征的优势,对候选函数中存在的漏洞函数进行精细化比较。这种方法可以在提高比较效率的前提下,大大提高对二进制固件漏洞检测结果的精确程度。
附图说明
24.为了更清楚地说明本发明具体实施方式或现有技术中的技术方案下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
25.图1为根据本发明实施例的针对二进制物联网固件程序的漏洞检测的流程图;
26.图2为根据本发明实施例的获取候选函数对的向量表示的示意图;
27.图3为根据本发明实施例的一种电子设备的结构图。
具体实施方式
28.为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例只是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
29.漏洞:漏洞是在硬件、软件、协议的具体实现或系统安全策略上存在的缺陷,从而可以使攻击者能够在未授权的情况下访问或破坏系统。
30.基本块:二进制文件中的基本块看作程序中顺序执行的最大连续执行的指令序列,满足:(1)控制流只能从基本块的第一个指令进入该块,即单入口;(2)除了基本块的最后一个指令,控制流在离开基本块之前不会跳转,即单出口。
31.函数调用图:程序调用图是一个有向图,它能够反映程序中的函数之间的调用关系。其中,函数调用图中的每一个节点表示一个函数,而每一条边,如(f,g)表示函数f和g之间的函数调用关系。
32.物联网(internet of things,简称iot):是指通过各种信息传感器、射频识别技术、全球定位系统、红外感应器、激光扫描器等各种装置与技术,实时采集任何需要监控、连接、互动的物体或过程,采集其声、光、热、电、力学、化学、生物、位置等各种需要的信息,通过各类可能的网络接入,实现物与物、物与人的泛在连接,实现对物品和过程的智能化感知、识别和管理。
33.本发明第一方面公开了一种针对二进制物联网固件程序的漏洞检测方法。图1为根据本发明实施例的针对二进制物联网固件程序的漏洞检测的流程图;在候选函数筛选阶段,分析目标二进制固件程序的函数调用图,并对调用图中的函数节点进行多维属性提取,得到函数代码的多维特征,基于函数调用图和函数节点特征构建属性化函数调用图 (attributed call graph)。得到目标二进制固件的属性化函数调用图后,将漏洞函数使用同样方法进行多维属性特征提取,得到漏洞函数与目标二进制固件中的函数特征后,使用定义的属性距离对目标二进制固件中的函数进行初步筛选,得到与漏洞函数相似的二进制固件候选函数集,将候选函数集与漏洞函数构建候选函数对,完成第一步的初步筛选过程;在第二个函数精细化比较阶段,将得到的候选函数对作为输入,对其进行语义特征提取和向量嵌入后,使用训练好的机器学习模型进行精细化相似度比较,对候选函数集中的函数进一步筛选,得到目标程序中疑似漏洞代码位置。该方法由于不需要将目标程序中的所有函数与漏洞函数进行特征提取和向量嵌入后,利用机器学习模型进行比较,提高了比较的效率;同时,添加的初步筛选方法能够大大提高漏洞定位的精确度。
34.所述方法包括:步骤s1、分别获取第一二进制程序和第二二进制程序的函数调用图作为第一函数调用图和第二函数调用图;其中,所述第一二进制程序为待检测的目标二进制物联网固件程序,所述第二二进制程序为包含漏洞的标准二进制程序;步骤s2、从所述第一函数调用图中提取所述第一二进制程序的函数多维特征作为第一特征,并从所述第二函数调用图中提取所述第二二进制程序的函数多维特征作为第二特征;步骤s3、基于所述第一特征和所述第二特征确定候选函数对,根据所述候选函数对中两个函数的控制流图分
别确定所述两个函数基于控制流图的基本块多维迭代特征向量,以获取所述候选函数对的向量表示;步骤s4、将每一个所述候选函数对包含的两个函数的向量表示输入至经训练的神经网络模型,以计算所述候选函数对包含的两个函数的向量表示的相似度,并基于所述相似度判定所述第一二进制程序包含的漏洞。
35.在一些实施例中,在所述步骤s1中,函数调用图以acg=(v,e,σ) 来表征,其中v表示二进制程序中包含的各个函数节点的集合,e表示存在调用关系的函数节点对的集合,所述函数节点对在所述函数调用图中以节点之间的边来进行表征,σ表示所述各个函数节点映射到其节点多维属性特征的集合。
36.在一些实施例中,在所述步骤s2中,所述函数多维特征包括所述函数节点的文本特征、函数统计特征、函数调用上下文特征、函数内部的结构特征以及函数间的结构特征;其中:所述函数节点的文本特征为函数引用的字符串;所述函数统计特征为所述函数引用的字符串的个数、指令数目和跳转指令个数;所述函数调用上下文特征为函数参数的数目和调用的api 函数数目;所述函数内部的结构特征基于函数内部的以基本快为单位的结构来获取,以函数内部代码的圈复杂度c来表征,c=e
’‑
n+2,e’表示函数内部控制流图中边的数目,n表示所述函数内部控制流图中节点的数目;所述函数间的结构特征为所述函数节点的出度和入度,所述出度表示当前函数调用其他函数的个数,所述入度表示所述当前函数被其他函数调用的次数。
37.具体地,在函数多维特征提取时,本技术基于程序中的函数调用图,对调用图中的节点属性特征进行提取和表示,构建属性化函数调用图。首先对属性化函数调用图进行定义。定义属性化函数调用图(attributed callgraph)可以使用acg=(v,e,σ)进行表示,其中,v表示函数节点集合, e表示函数之间的边集合,如果函数vi和vj之间存在调用关系,则《vi,vj》 ∈e;同时σ:v-》σ表示函数节点与其属性的映射,对每一个函数节点映射到其节点多维属性特征集合。
38.在定义属性化函数调用图后,为了对acg中的节点属性特征进行提取和表示,提出轻量级的函数多维特征提取方法,从文本特征、统计特征、调用上下文特征、函数内部结构特征、函数间结构特征五个维度对acg中的函数节点属性进行表示。
39.(1)函数节点的文本特征,主要涉及函数引用的字符串,如openssl 库中的函数asn1_time_print中引用了“bad time value”字符串。
40.(2)函数统计特征,包含引用字符串个数、指令数目、跳转指令个数。
41.(3)调用上下文特征,包含函数参数数目以及调用的api函数数目,其中,二进制函数参数的数目可以通过调用栈内容分析得到,并已有成熟工具(如ida hex rays)对其进行提取。
42.(4)函数内部的结构特征,基于函数内部的以基本块为单位的结构获得。函数内部的基本块节点基于控制依赖关系来添加边,构建函数控制流图。基于函数控制流图,本技术使用公式c=e-n+2计算函数内部代码的圈复杂度,使用c表示。其中,e表示函数内部控制流图中的边数,n表示控制流图中的节点数。
43.(5)函数间结构特征,以函数为单位构建函数调用图,函数调用图中函数节点的出度表示该函数调用其他函数的个数,节点入度表示该函数被其他函数调用的次数,因此函数间的结构特征包含函数调用图中的节点出度和入度。
44.在一些实施例中,在所述步骤s3中,基于所述第一特征和所述第二特征确定所述候选函数对具体包括:获取所述第一二进制程序包含的函数集合{f1,f2,
…fs
},对函数集合中的函数fi,1≤i≤s,从所述第一特征中提取与所述函数fi相关的函数节点的文本特征、函数统计特征、函数调用上下文特征、函数内部的结构特征以及函数间的结构特征;对与所述函数fi相关的函数节点的文本特征进行轻量化表示,合并所述函数fi经轻量化表示的函数节点的文本特征、函数统计特征、函数调用上下文特征、函数内部的结构特征以及函数间的结构特征,得到所述函数fi的多维特征向量w
fi
;以同样的方式获取所述第二二进制程序中包含的漏洞函数的多维特征向量w
vul
,并计算所述函数函数fi的多维特征向量w
fi
与所述漏洞函数的多维特征向量w
vul
之间的向量空间距离di=d(w
fi
,w
vul
),并对向量空间距离di按照从小到大的顺序进行排序,选取前个候选函数对。
45.具体地,在得到函数节点的多维属性特征后,对得到的属性特征进行量化表示。其中,函数节点的文本特征中包含了函数引用的字符串,需要对其进行向量化处理。由于函数引用的字符串可读,如“signaturealogrithm”,“trusted uses”,为了提高表征的效率,本技术使用轻量化的方法来表征函数引用的字符串,首先对字符串进行哈希计算,得到的哈希字符串直接使用二进制0,1进行编码,得到函数字符串对应的一串二进制编码序列,将得到的编码序列作为字符串向量。
46.在对函数节点的文本特征进行向量化表示后,对于包含函数集合 {f1,f2,
…fs
}的目标二进制固件,将文本特征向量与其他四个维度的量化特征合并,得到其中表征每一个函数的特征向量。具体来说,对函数f进行多维特征提取和表示后得到了编码后的文本特征向量wtext,函数统计特征向量wsta,函数语义特征向量wsem,函数内部结构特征向量winner_stru 和函数之间的特征向量winter_stru,那么表示该函数的向量w就可以将多维向量进行连接得到,即:
47.w=concatenate(wtext,wsta,wsem,winner_stru,winter_stru)
48.基于得到的函数属性特征向量计算两个函数之间的向量空间距离,对于两个函数对应的向量x=(x1,x2,

,xm)和y=(y1,y2,

,ym),使用公式定义x和y在向量空间相似距离d(x,y),得到表示函数相似程度的向量距离。
49.记函数fi的多维特征向量为w
fi
,漏洞函数vul的多维特征向量为w
vul
。可以得到目标程序函数集中每一个函数fi对应的向量w
fi
与漏洞函数vul的对应的向量w
vul
在向量空间相似距离di=d(w
fi
,w
vul
)。得到目标程序中s个函数与漏洞函数的向量空间相似距离的s个值(d1,d2,

,ds)。
50.在筛选候选函数对时,函数对中的两个函数向量距离越小,说明其相似程度越高,对得到的s个距离值进行由小到大排序,选择前的值对应的函数与漏洞函数构建候选函数对,从而筛选出个候选函数对。
51.在一些实施例中,在所述步骤s3中,确定所述两个函数基于控制流图基本块的多维迭代特征向量,以获取所述候选函数对的向量表示,其中,对于一个所述候选函数对中包含的所述第一二进制程序的目标函数中基本块的多维迭代特征向量和所述第二二进制程
序的漏洞函数中基本块的多维迭代特征向量,分别通过以下方式获取对应的向量表示:获取函数的控制流图,所述控制流图中包含若干基本块,以所述基本块的形式表征所述函数,所述函数基于控制流图基本块的特征向量包括:所述函数内部的控制流图的结构特征、所述基本块中的代码统计特征以及所述函数的调用关系特征;记所述基本块的原始节点特征为xv,利用sturcture2vec结构将所述基本块的节点特征与其邻居特征进行结合来表征所述基本块的迭代节点特征其中t表示迭代次数,w1表示超参数,n(v)表示节点v的邻居节点,σ()为非线性变换函数,σ(l)=p1×
relu(p2×
...relu(pul)),u表示嵌入的层数,p1,p2,

,pu表示超级参数, relu为线性整流函数,relu(x)=max{0,x},则得到所述向量表示t表示最终的迭代次数,v表示邻居节点集合, w2表示超参数,g表示函数内的控制流图。
52.具体地,图2为根据本发明实施例的获取候选函数对的向量表示的示意图;如图2所示,将候选函数对中的目标函数和漏洞函数分别进行基于机器学习模型的特征提取和向量嵌入前,需首先对数据进行预处理,反汇编二进制固件程序得到的汇编代码并对其分析,得到以基本块为单位的代码特征,包括三类特征:函数内部的控制流图相关的结构特征、基本块中的代码统计特征以及函数的调用关系特征。其中控制流图相关结构特征包括基本块的出度、入度和介数,基本块代码统计特征包括跳转指令数目和算术指令数目,函数调用关系特征则使用基本块所在函数的输入参数个数表示。
53.在得到函数内基本块的一系列特征后,基于函数内部的控制流图,使用图嵌入网络structure2vec[3]对得到的基本块向量特征与其邻居节点向量特征整合后,得到函数级别的特征矩阵,并使用孪生网络siamese架构对得到的特征矩阵进行相似性分值计算,得到目标程序中的候选函数与漏洞函数之间的相似性分值,根据相似性分值的高低,判断目标程序中可能存在漏洞的代码位置。
[0054]
其中,基于图嵌入网络的代码特征向量表示的方法为,给定控制流图g,图中的节点v包含了对应的基本块提取的代码特征,如上文讨论的内容,将基本块节点特征记为xv,sturcture2vec结构将节点特征与其邻居特征进行结合来表示该节点特征,使用μv表示,μv的计算方式如下:
[0055][0056]
其中,t表示迭代的次数,t次迭代后,可以将得到与节点距离为t的邻居节点信息整合到该节点特征中,w1表示超参数,n(v)表示节点v的邻居节点,σ()为非线性变换函数,σ(l)=p1×
relu(p2×
...relu(pul)),u表示嵌入的层数,p1,p2,

pu表示超级参数,relu是线性整流函数,relu(x)=max{0,x}。
[0057]
使用上述方法,t次迭代后得到的特征向量可以表示与节点以及与其在距离不大于t的邻居节点的特征,对于包含基本块节点属性的函数内控制流图g,使用向量嵌入方法后,得到表征函数的特征向量
[0058]
在一些实施例中,在所述步骤s4中,所述经训练的神经网络模型由以下方式来完
成训练:计算第一函数特征向量φ(g1)和第一函数特征向量φ (g2)之间的余弦相似度通过求解使得损失函数最小。
[0059]
具体地,使用孪生网络siamese来进行相似性比较,孪生网络包含两个分支,分支共享超参数,将两个函数特征作为孪生网络分支的输入,使用语义编码方法可以得到表征函数的特征向量,使用φ(g1)和φ(g2)表示两个函数的特征向量,使用余弦相似度计算两个输入之间的相似值y',余弦相似度用两个代码特征向量在向量空间中夹角的余弦值作为衡量代码差异大小的指标,用于判断函数对中的函数相似程度。
[0060]
余弦距离的范围为[-1,1],即两个函数的相似性分值范围为[-1,1]。训练阶段将待比较的两个函数,也就是函数对进行作为一个训练样本,每一个训练样本函数对中的函数相似程度已知,使用值y∈{1,-1}对函数对样本进行标记,相似的函数对标记为1,不相似的函数对标记为-1。在训练过程中,使用n个训练样本,优化网络参数w1,p1和p2等,计算使得训练误差最小。
[0061]
训练用于特征嵌入的神经网络模型需构建基础数据集,在构建基础数据集时,使用gcc 5.4.0从o0到o3的优化级别,在x86、x64、mips32、 mips64、arm32和arm64体系结构中编译了不同的二进制形式的openssl和 busybox,得到大量的二进制函数。选择基础数据集中的二进制函数构建函数对样本,并将得到的函数对样本集合划分为训练集、测试集和验证集。对样本集中的样本添加标签,由于每一个样本包含了函数对,需要使用标签对样本中的两个函数是否相似进行标记。在表示样本中函数对之间的相似程度时,使用了余弦距离计算函数对应向量之间的距离,因此1和-1分别标记相似样本和不相似样本:如果样本中的两个函数相似,则将该样本标记为1,否则标记为-1。由于基础数据集是通过交叉编译得到的,可以在编译源码文件时,设置编译参数保留生成二进制程序的函数名。在从基础数据集中选择同一个源码下不同架构和不同优化条件下编译的不同二进制函数,构建相似函数对;对于不同源码编译的二进制函数,构建不相似函数对,并标记为-1。
[0062]
在一些实施例中,在所述步骤s4中,计算所述候选函数对中包含的所述第一二进制程序中目标函数的向量表示和所述第二二进制程序中漏洞函数的向量表示之间的余弦相似度,当所述余弦相似度超过阈值时,判定所述目标函数中存在漏洞,并确定所述目标函数在所述第一二进制程序中的代码位置作为漏洞位置。
[0063]
具体地,给定函数f和g,使用特征提取和嵌入后,在训练好的神经网络模型中通过向量映射得到表征两个函数的特征向量m(f)和m(g),使用余弦距离计算两个函数的相似性分值两个函数的相似性分值越大,则说明两个函数的相似程度越高。对iot固件程序的代码进行预处理后,得到程序中的所有函数并对其进行特征提取和向量嵌入,同时,对漏洞函数进行同样的预处理、特征提取和向量嵌入后,使用语义学习模型进行相似性比较,计算二进制程序中的每一个函数与漏洞函数的相似性分
值,对相似性分值进行排序,相似性分值更大的函数与漏洞函数更为相似。使用这种方法,可以得到iot固件程序中可能存在漏洞的代码位置。
[0064]
本发明第二方面公开了一种针对二进制物联网固件程序的漏洞检测系统。所述系统包括:第一处理单元,被配置为:分别获取第一二进制程序和第二二进制程序的函数调用图作为第一函数调用图和第二函数调用图;其中,所述第一二进制程序为待检测的目标二进制物联网固件程序,所述第二二进制程序为包含漏洞的标准二进制程序;第二处理单元,被配置为:从所述第一函数调用图中提取所述第一二进制程序的函数多维特征作为第一特征,并从所述第二函数调用图中提取所述第二二进制程序的函数多维特征作为第二特征;第三处理单元,被配置为:基于所述第一特征和所述第二特征确定候选函数对,根据所述候选函数对中两个函数的控制流图分别确定所述两个函数基于控制流图的基本块多维迭代特征向量,以获取所述候选函数对的向量表示;第四处理单元,被配置为:将每一个所述候选函数对包含的两个函数的向量表示输入至经训练的神经网络模型,以计算所述候选函数对包含的两个函数的向量表示的相似度,并基于所述相似度判定所述第一二进制程序包含的漏洞。
[0065]
根据本发明第二方面的系统,函数调用图以acg=(v,e,σ)来表征,其中v表示二进制程序中包含的各个函数节点的集合,e表示存在调用关系的函数节点对的集合,所述函数节点对在所述函数调用图中以节点之间的边来进行表征,σ表示所述各个函数节点映射到其节点多维属性特征的集合。
[0066]
根据本发明第二方面的系统,所述函数多维特征包括所述函数节点的文本特征、函数统计特征、函数调用上下文特征、函数内部的结构特征以及函数间的结构特征;其中:所述函数节点的文本特征为函数引用的字符串;所述函数统计特征为所述函数引用的字符串的个数、指令数目和跳转指令个数;所述函数调用上下文特征为函数参数的数目和调用的api函数数目;所述函数内部的结构特征基于函数内部的以基本快为单位的结构来获取,以函数内部代码的圈复杂度c来表征,c=e
’‑
n+2,e’表示函数内部控制流图中边的数目,n表示所述函数内部控制流图中节点的数目;所述函数间的结构特征为所述函数节点的出度和入度,所述出度表示当前函数调用其他函数的个数,所述入度表示所述当前函数被其他函数调用的次数。
[0067]
根据本发明第二方面的系统,基于所述第一特征和所述第二特征确定所述候选函数对具体包括:获取所述第一二进制程序包含的函数集合 {f1,f2,
…fs
},对函数集合中的函数fi,1≤i≤s,从所述第一特征中提取与所述函数fi相关的函数节点的文本特征、函数统计特征、函数调用上下文特征、函数内部的结构特征以及函数间的结构特征;对与所述函数fi相关的函数节点的文本特征进行轻量化表示,合并所述函数fi经轻量化表示的函数节点的文本特征、函数统计特征、函数调用上下文特征、函数内部的结构特征以及函数间的结构特征,得到所述函数fi的多维特征向量w
fi
;以同样的方式获取所述第二二进制程序中包含的漏洞函数的多维特征向量 w
vul
,并计算所述函数函数fi的多维特征向量w
fi
与所述漏洞函数的多维特征向量w
vul
之间的向量空间距离di=d(w
fi
,w
vul
),并对向量空间距离di按照从小到大的顺序进行排序,选取前个候选函数对。
[0068]
根据本发明第二方面的系统,确定所述两个函数基于控制流图基本块的多维迭代特征向量,以获取所述候选函数对的向量表示,其中,对于一个所述候选函数对中包含的所
述第一二进制程序的目标函数中基本块的多维迭代特征向量和所述第二二进制程序的漏洞函数中基本块的多维迭代特征向量,分别通过以下方式获取对应的向量表示:获取函数的控制流图,所述控制流图中包含若干基本块,以所述基本块的形式表征所述函数,所述函数基于控制流图基本块的特征向量包括:所述函数内部的控制流图的结构特征、所述基本块中的代码统计特征以及所述函数的调用关系特征;记所述基本块的原始节点特征为xv,利用sturcture2vec结构将所述基本块的节点特征与其邻居特征进行结合来表征所述基本块的迭代节点特征其中t表示迭代次数,w1表示超参数,n(v)表示节点v的邻居节点,σ()为非线性变换函数,σ(l)=p1×
relu(p2×
...relu(pul)),u表示嵌入的层数,p1,p2,

,pu表示超级参数, relu为线性整流函数,relu(x)=max{0,x},则得到所述向量表示t表示最终的迭代次数,v表示邻居节点集合, w2表示超参数,g表示函数内的控制流图。
[0069]
根据本发明第二方面的系统,所述经训练的神经网络模型由以下方式来完成训练:计算第一函数特征向量φ(g1)和第一函数特征向量φ(g2)之间的余弦相似度通过求解使得损失函数最小。
[0070]
根据本发明第二方面的系统,计算所述候选函数对中包含的所述第一二进制程序中目标函数的向量表示和所述第二二进制程序中漏洞函数的向量表示之间的余弦相似度,当所述余弦相似度超过阈值时,判定所述目标函数中存在漏洞,并确定所述目标函数在所述第一二进制程序中的代码位置作为漏洞位置。
[0071]
本发明第三方面公开了一种电子设备。所述电子设备包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时,实现本发明第一方面所述的一种针对二进制物联网固件程序的漏洞检测方法中的步骤。
[0072]
图3为根据本发明实施例的一种电子设备的结构图;如图3所示,电子设备包括通过系统总线连接的处理器、存储器、通信接口、显示屏和输入装置。其中,该电子设备的处理器用于提供计算和控制能力。该电子设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该电子设备的通信接口用于与外部的终端进行有线或无线方式的通信,无线方式可通过wifi、运营商网络、近场通信(nfc)或其他技术实现。该电子设备的显示屏可以是液晶显示屏或者电子墨水显示屏,该电子设备的输入装置可以是显示屏上覆盖的触摸层,也可以是电子设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
[0073]
本领域技术人员可以理解,图3中示出的结构,仅仅是与本公开的技术方案相关的部分的结构图,并不构成对本技术方案所应用于其上的电子设备的限定,具体的电子设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
[0074]
本发明第四方面公开了一种计算机可读存储介质。所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时,实现本发明第一方面所述的一种针对二进制物联网固件程序的漏洞检测方法中的步骤。
[0075]
综上,本发明提供的技术方案首先提出多维代码属性的概念,从不同维度对函数代码量化特征进行描述,筛选出可能与漏洞函数有对应关系的候选函数;其次,使用神经网络模型,对得到的候选函数进行精细化比较,利用神经网络模型自动学习代码语义特征的优势,对候选函数中存在的漏洞函数进行精细化比较。这种方法可以在提高比较效率的前提下,大大提高对二进制固件漏洞检测结果的精确程度。
[0076]
请注意,以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。以上所述实施例仅表达了本技术的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本技术构思的前提下,还可以做出若干变形和改进,这些都属于本技术的保护范围。因此,本技术专利的保护范围应以所附权利要求为准。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1