本发明属于静态的固件漏洞检测领域,涉及固件中漏洞函数特征提取之后不同函数之间相似度的计算,具体涉及一种应用改进的马氏距离计算方法进行固件漏洞检测的方法及系统。
背景技术
固件的漏洞检测分为动态检测和静态检测。动态检测即在电脑模拟的固件运行环境中运行固件,根据动态的数据来对固件的安全性进行评估;静态检测方法,即对一个固件的二进制文件进行了解压以及反编译等操作后,利用数据挖掘等方法来进行漏洞的检测。
在固件漏洞的静态检测中,首先需要获取已知的漏洞函数,对已知的漏洞函数进行特征提取,在一定程度上,获得的特征向量可以代表这个漏洞函数。对于未知的固件,需要检测该固件中是否含有同样的漏洞,则首先需要对固件中所有的函数进行相同的处理,用同样的方法提取未知函数的特征,在得到未知函数的特征之后,一种常用的方式是计算未知函数和已知漏洞函数特征向量之间的距离,设定一个阈值,根据距离的大小以及设置的阈值来判断未知固件是否含有已知漏洞。
在数据挖掘中,经常需要计算样本间的相似度,一般的做法就是计算样本间的距离,常用的距离计算方法有欧式距离,曼哈顿距离,马氏距离,余弦距离等。但不同的距离计算方式同样有各自的优缺点,如最常用的欧式距离,虽然这种距离应用最为广泛,但是它也具有明显的缺点,它将样本的不同属性(即各指标或各变量值)之间的差别等同对待,这一点有时不能满足具体要求。例如在教育研究中,经常遇到对人的分析和判别,个体的不同属性对于区分个体有着不同的重要性,因此不能将这些属性重要性等同看待。马氏距离具有很多的优点,它不受量纲的影响,两点之间的马氏距离与原始数据的测量单位无关,它由标准化数据和中心化数据(即原始数据和均值之差)计算出的二点之间的马氏距离相同,马氏距离还可以排除变量之间相关性的干扰,但是它的缺点同样明显,一个是夸大了变化微小的变量的作用,另一个缺点便是灵活性不高,每次计算一个距离,需要计算一遍原始样本的协方差矩阵,对于维度较高,数据量较大,且不断变换的应用场景,原始的马氏距离计算方法复杂度较高,并不适用。
基于上述马氏距离的缺点,在进行大规模固件漏洞挖掘的过程中,如果考虑使用马氏距离计算样本间距离,不仅要考虑样本量的大小,还需要考虑漏洞函数特征维度过大的缺点,基于此,一种合适的计算方式应对与大规模且动态的样本是非常重要的。
技术实现要素:
本发明要解决的技术问题在于针对现有技术中的上述缺陷,提供一种在保证计算精度的情况下,可提供固件漏洞检测效率的应用改进的马氏距离计算方法的固件漏洞检测方法。
本发明解决其技术问题所采用的技术方案是:
提供一种应用改进的马氏距离计算方法进行固件漏洞检测的方法,包括以下步骤:
步骤1:提取固件中漏洞函数和待检测固件中目标函数特征;
步骤2:,初始选取定量同类型漏洞函数,并计算同类型漏洞函数的特征向量,组成初始样本矩阵,并计算初始样本矩阵的协方差矩阵;
步骤3:根据新加入的待检测函数样本,更新协方差矩阵,利用更新后的协方差矩阵计算目标样本与基础样本之间的距离,在计算过程中,假设所有检测出的漏洞函数与已知的漏洞函数同分布,则最终该分布内所有维度的均值将趋向于已知的漏洞函数特征向量,用漏洞函数的特征向量代替均值以避免均值的计算;最终计算出的距离
步骤4:对于计算出的距离,根据定义的阈值判断待计算的样本属于正样本还是负样本,正样本表示待检测函数检测为漏洞函数,负样本表示待检测函数为非漏洞函数,根据判断出的结果重新对协方差矩阵进行更新。
接上述技术方案,步骤2中,还包括步骤:预先获取已知的漏洞函数的特征样本分布,计算特征样本分布的协方差矩阵,协方差矩阵内元素计算公式如下:
公式中cov(x,y)表示在所有的n个样本中,第x维度和第y维度之间的协方差值;n表示样本量大小,xi表示第x维中第i个样本的值;yi表示第y维中第i个样本的值;
接上述技术方案,步骤3中,将协方差矩阵内元素的计算公式改进为:
用漏洞函数的特征值代替均值可免均值的计算,即:
获得新的协方差矩阵内元素计算公式:
cov(x,y)n,cov(x,y)n+1分别表示第n次和第n+1次计算中x维和y维之间的协方差值,xn+1表示新增的代检测函数特征向量x维的值,yn+1表示新增的代检测函数特征向量y维的值;x1表示已知的漏洞函数特征向量地x维的值,x2表示已知的漏洞函数特征向量地y维的值。
接上述技术方案,步骤4中,
根据计算出来的最终值重新对协方差矩阵进行更新,具体的更新方式为:
令
δs表示针对当前待检测函数的协方差矩阵更新量;
若最终计算得:
若最终计算得:
其中s为步骤3中更新矩阵之前的协方差矩阵,threshold为经验预先定义的阈值。
接上述技术方案,特征向量包括使用工具提取出该函数的代码量,函数使用的栈空间,反编译后汇编指令个数,函数结构图中各基本快到入口长度序列,调用的特殊字符串指令集。
本发明还提供了一种应用改进的马氏距离计算方法进行固件漏洞检测的系统,包括:
目标函数特征提取模块,用于提取固件中漏洞函数和待检测固件中目标函数特征;
协方差矩阵模块,用于初始选取定量同类型漏洞函数,并计算同类型漏洞函数的特征向量,组成初始样本矩阵,并计算初始样本矩阵的协方差矩阵;
该协方差矩阵模块还用于根据新加入的待检测函数样本,更新协方差矩阵,利用更新后的协方差矩阵计算目标样本与基础样本之间的距离,在计算过程中,假设所有检测出的漏洞函数与已知的漏洞函数同分布,则最终该分布内所有维度的均值将趋向于已知的漏洞函数特征向量,用漏洞函数的特征向量代替均值以避免均值的计算;最终计算出的距离
待检测函数判断模块,用于对于计算出的距离,根据定义的阈值判断待计算的样本属于正样本还是负样本,正样本表示待检测函数检测为漏洞函数,负样本表示待检测函数为非漏洞函数,根据判断出的结果重新对协方差矩阵进行更新。
本发明产生的有益效果是:本发明应用改进的马氏距离计算方法的固件漏洞检测方法,在保证计算精度的情况下,大大提高了样本间距离计算的速度,对大规模样本的距离计算取得了较好的时间效果。在计算时间复杂度上,从原有的o(m2l2)提高到o(m2l),即针对样本量的增加,计算时间复杂度从几何增长改进为线性增长。在进行大规模的固件漏洞函数检测过程中,能够明显提高检测效率。
附图说明
下面将结合附图及实施例对本发明作进一步说明,附图中:
图1为本发明实施例应用改进的马氏距离计算方法进行固件漏洞检测的方法的流程图;
图2为原始马氏距离所计算出的距离值曲线图和改进的马氏距离计算出的距离曲线图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
如图1所示,本发明应用改进的马氏距离计算方法进行固件漏洞检测的方法,包括以下步骤:
步骤1:提取固件中漏洞函数和待检测固件中目标函数相应特征,在后文中简称漏洞函数和目标函数;
对每一个漏洞函数,计算其特征向量作为该函数的唯一标识符,对于每一个固件内可识别函数,使用工具提取出该函数的代码量,函数使用的栈空间,反编译后汇编指令个数,函数结构图中各基本快到入口长度序列,调用的特殊字符串指令集等特征,假设针对不同的函数计算出的特征向量为v(code,stack,inst,…list[]…set{}..),由于计算距离所需要的特征向量为数值型向量,因此对于提取出的特征中的list,set等,需要进行预处理,使之成为数值型特征。
对于list型的特征,假设待比较的两个函数f和g的序列型特征分别为lf和lg,则计算两个序列的最长公共子序列作为函数g的该维度向量。计算公式如下:
式中f表示某一漏洞函数,g表示某一待检测函数;lf,lg表示函数f和g中一个list型特征;lcs(lf,lg)即两个序列lf,lg的最长公共子序列;max(lf,lg)表示两个list型特征中的最大长度;l0为常数值。对于集合型特征,计算两个集合的杰卡德(jaccard)距离作为函数g的该维度向量,假设待比较函数f和g的集合型特征分别为sf和sg,则该维度的特征值计算如下:
式中s0为0到1之间的数值型常量。sf和sg表示待比较函数f和g的集合型特征;sf∩sg表示对两个集合进行交集操作,sf∪sg表示对两个集合进行并集操作。
最终通过计算,对每一个函数,都将获得一个唯一代表该函数的特征向量:v(v1,v2,v3,…,vn)。
步骤2:初始选取定量同类型漏洞函数,利用步骤1中的方式计算这些漏洞函数的特征向量并组成初始样本矩阵,对初始样本矩阵计算协方差矩阵;同类型漏洞函数表示引起同一种漏洞的不同函数,认为这些函数的特征向量服从同一种分布。
由于是在原有的协方差矩阵的基础上,动态的更新协方差矩阵,因此在此步骤中,选取一定量的数据,计算协方差矩阵。
假设初始化样本矩阵时,选择满足分布d的200个漏洞函数特征数据作为初始化数据集,且假设函数特征向量维度为18维特征,则按照协方差矩阵计算方法可知,cov(x,y)的计算方式为:
最终计算的协方差矩阵为18*18的矩阵。该矩阵作为协方差矩阵的初始化值,在后续的计算中,新的样本将在此基础上对协方差矩阵进行更新。
步骤3:根据新加入的待检测函数样本,更新协方差矩阵,利用更新后的协方差矩阵计算待检测函数样本与已知漏洞函数样本之间的距离;
在传统的马氏距离计算中,每计算一次距离,需要计算一次协方差矩阵,假设矩阵的维度为m,则协方差矩阵的规格为m*m,根据协方差矩阵的计算公式:
公式中cov(x,y)表示在所有的n个样本中,第x维度和第y维度之间的协方差值;n表示样本量大小,xi表示第x维中第i个样本的值;yi表示第y维中第i个样本的值;
假设一次计算的时候,参与计算的初始化样本中样本有n个,则计算
在计算cov(x,y)时,由于需要累加操作,所以计算一次cov的时间为o(n),由于矩阵的规格为m*m,则计算一次协方差矩阵的时间复杂度为:
o(m*n)+o(m*m*n)=o(m2n)
假设系统需要计算距离的待检测函数样本数为l,由于计算一次的时间复杂度为o(m2n),进行累加(1+2+3+4+…+l)得到值为l(l+1)/2,即则经过计算可知:
对于特征向量维度为m的l个待检测样本进行计算,使用传统的马氏距离计算方法,完全计算的时间复杂度为o(m2l2)。
从时间复杂度的计算可知,在传统的马氏距离计算方式中,当样本量逐渐增大时,计算量呈几何方式增长,因此这种计算方式并不适合大规模的样本计算,而在固件测漏洞函数检测过程中,参与计算的待检测函数量往往十分庞大,因此为了提高计算的效率,本发明对马氏距离的计算方式进行一定的改进,使之在保证了计算合理性的情况下,大大提高了计算的速度。
从cov(x,y)的计算方式进行分析,在样本量为n的时候,计算公式为:
从而得到:
那么在样本量为n+1,即新增一次待检测函数的计算,需要更新协方差矩阵时:
当n→∞时,可令
当n→∞时,
由于在进行漏洞检测时,需要定义一个已知的漏洞函数作为基础函数,其他的未知函数作为待检测函数与基础函数进行计算,假设这个漏洞函数的向量为:
则
cov(x,y)n,cov(x,y)n+1分别表示第n次和第n+1次计算中x维和y维之间的协方差值,xn+1表示新增的代检测函数特征向量x维的值,yn+1表示新增的代检测函数特征向量y维的值。
则在一次的cov的计算中,由于不需要平均值的计算,且cov(x,y)的值是在前一次的基础上更新而来,因此时间复杂度为o(1)。
对于特征向量维度为m的l个样本进行计算,计算l个待检测函数与一个已知的漏洞函数之间的距离,使用改进的马氏距离计算方法,完全计算的时间复杂度为o(m2l)。使得计算的时间复杂度由几何增长变为线性增长。
即最终改进的协方差s的计算公式为:
公式中s表示上一次更新后的协方差矩阵,l表示当前样本矩阵中样本量大小,n表示向量的维度,(x1,x2,x3,…xn)表示当前进行计算的待检测函数特征向量,
更新了协方差矩阵之后,则最终利用该矩阵计算待检测函数与已知漏洞函数之间的距离,计算公式如下:
步骤4:对于计算出的距离,根据经验预先定义的阈值threshold判断待计算的样本属于正样本还是负样本,正样本表示待检测函数检测为漏洞函数,负样本表示待检测函数为非漏洞函数,根据判断出的结果重新对协方差矩阵进行更新,根据判断出的结果重新对协方差矩阵进行更新。
由于在计算了两个样本之间的距离之后,对于给定的阈值以及计算出来的距离,可以对未知的样本进行判断,基于最终判断出的样本的正负,需要对协方差矩阵重新进行更新。
根据协方差矩阵的作用可知,如果特征x和特征y对于样本的取值是负相关的,则cov(x,y)的值为负,如果是正相关的,则cov(x,y)的值为正,根据这一特性,可根据判断的值来重新对协方差矩阵进行更新。
由前面的计算可知,变化量为
δs表示针对当前待检测函数的协方差矩阵更新量。
若最终计算得:
若最终计算得:
其中s为步骤3中更新矩阵之前的协方差矩阵。
最终实验过程中,利用两种计算方式计算出200个待检测函数,计算出新的待检测函数与漏洞函数之间的距离,两种方式计算画图如图2所示。图中绿色为原始马氏距离所计算出的距离值曲线图,红色部分为改进的马氏距离计算出的距离曲线图,如图所示,改进的计算方法所计算的距离在取值范围上有所减小,但总体的变化趋势基本不变,但从步骤3中可知,计算速度得到了较大的提高。
本发明还提供一种应用改进的马氏距离计算方法进行固件漏洞检测的系统,主要用于实现上述固件漏洞检测的方法,该系统主要包括:
目标函数特征提取模块,用于提取固件中漏洞函数和待检测固件中目标函数特征;
协方差矩阵模块,用于初始选取定量同类型漏洞函数,并计算同类型漏洞函数的特征向量,组成初始样本矩阵,并计算初始样本矩阵的协方差矩阵;
该协方差矩阵模块还用于根据新加入的待检测函数样本,更新协方差矩阵,利用更新后的协方差矩阵计算目标样本与基础样本之间的距离,在计算过程中,假设所有检测出的漏洞函数与已知的漏洞函数同分布,则最终该分布内所有维度的均值将趋向于已知的漏洞函数特征向量,用漏洞函数的特征向量代替均值以避免均值的计算;最终计算出的距离
待检测函数判断模块,用于对于计算出的距离,根据定义的阈值判断待计算的样本属于正样本还是负样本,正样本表示待检测函数检测为漏洞函数,负样本表示待检测函数为非漏洞函数,根据判断出的结果重新对协方差矩阵进行更新。
本文提出的应用于固件漏洞检测的改进马氏距离计算方法,通过理论分析可知,在计算时间复杂度上,从原有的o(m2l2)提高到o(m2l),即针对样本量的增加,计算时间复杂度从几何增长改进为线性增长。在进行大规模的固件漏洞函数检测过程中,能够明显提高检测效率,而在实际的固件漏洞函数检测过程中,也很好地验证了这一点。
该系统的其他特征详见上述实施例的方法部分,在此不赘述。
应当理解的是,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,而所有这些改进和变换都应属于本发明所附权利要求的保护范围。