一种基于隐马尔可夫模型的汇编指令级漏洞检测方法技术

技术编号:4075853 阅读:223 留言:0更新日期:2012-04-11 18:40
本发明专利技术涉及一种基于隐马尔可夫模型的汇编指令级漏洞检测方法,属于信息安全技术领域;包括如下步骤:①构造漏洞指令库VIL;②针对步骤①中构造的漏洞指令库中的全部漏洞,分别为漏洞指令库中的每种漏洞选取多个含有该漏洞的可执行程序作为该漏洞的训练数据;③获取漏洞指令库中的每个漏洞的训练数据的汇编指令片段;④获取训练数据的数字码序列;⑤依次获得漏洞指令库中的每个漏洞对应的隐马尔科夫模型的参数λr={Ar,Br,πr};⑥对待测可执行程序进行漏洞识别。本发明专利技术提出的方法与已有技术相比较,有如下优点:首次将HMM应用于对存在上下文关联性的汇编指令进行建模并对漏洞特征进行识别;提高了漏洞检测的效率,同时降低了误报率和漏报率。

【技术实现步骤摘要】

本专利技术涉及一种汇编指令级的漏洞检测方法,特别涉及一种基于隐马尔可夫模型 的汇编指令级漏洞检测方法,属于信息安全

技术介绍
随着计算机技术的迅速发展,人类社会的信息化程度越来越高,整个社会的政治、 经济、军事、文化以及其他领域对计算机信息系统的依赖程度也越来越高。在这种情况下, 计算机系统的安全性得到了人们越来越多的关注。然而,大型软件、系统的编写需要许许多 多程序员共同完成,他们将一个软件或系统分成若干板块,分工编写,然后再汇总,测试;最 后再修补、发布,因此在软件中存在安全漏洞几乎是不可避免的。软件漏洞是指软件设计实 现过程中被引入的、在数据访问或行为逻辑等方面的缺陷。这些漏洞常常被攻击者利用,从 而使程序行为违背一定的安全策略。在大多数情况下,软件系统的源代码不可得,因此必须 对软件的可执行程序进行分析,这种针对可执行程序的分析非常困难,因为从中很难发现 典型的上下文相关性。基于上述原因,目前对汇编指令级漏洞检测技术的研究越来越受到 重视。为了检测到漏洞,相应的分析方法需要具有高覆盖率和低误报率/漏报率。自动 化的动态检测方法通常会在可控环境中(通常位于虚拟机中)执行程序,同时监视汇编指 令的执行以分析可执行程序的行为特征。然而,动态分析的问题在于其必须运行可执行程 序,并且必须执行尽可能多的汇编指令,这会产生大量的系统开销。特别是当软件系统进入 休眠状态时,动态检测方法必须等待软件的下一次执行,而这意味着更长的分析时间和更 多的系统开销。由于受限于执行遍历策略,动态分析方法目前只对分析恶意软件效果较好, 因为恶意软件体积较小。当分析包含海量汇编指令的软件时,有限的汇编指令执行策略无 法对软件系统的行为特征进行有效分析,也无法对潜在的安全漏洞进行定位。静态检测方法可执行程序的源代码或汇编指令进行分析,且可以在提高分析覆盖 率的同时减少系统开销。此类分析方法可以比动态分析方法发现更多的安全漏洞。此外, 静态分析方法可以覆盖所有可能的汇编指令。Csaba Nagy等人提出了一种静态分析方法(在实施例中称为“方法1”),该方法 通过识别并跟踪软件中与用户输入相关的源代码实现对漏洞的定位。该方法通过扫描源代 码实现分析过程,而不需要运行可执行程序或执行汇编指令。在对源代码的扫描过程中,该 方法采用污点标记技术对安全漏洞进行定位。因此,当无法获得源代码时,该方法就无法跟 踪软件的数据流,也就是说,该方法的分析对象受限于开源软件系统。Pattabiraman等人开发了一套安全漏洞检测系统(在实施例中称为“方法2”)。 该系统分析与关键变量相关的源代码片段。该方法通过控制流分析法判断需要分析哪些片 段,从而为这些源代码片段构造检测表达式。由于这种方法也属于源代码分析方法,因此该 方法无法分析可执行程序。Hassen Saidi开发了一个分析工具套件,该套件结合了多种静态分析方法和工具(在实施例中称为“方法3”)。该套件采用静态分析方法来分析软件的可执行程序或汇 编指令。该套件采用的方法是生成抽象状态图,并将该状态图作为中间结构,以共享其输出 并产生分析结果。虽然采用此方法可以降低误报率,但是该方法只能分析代码量较小的恶 意软件,而无法分析规模较大的软件。现有技术中,很少有能够对可执行程序或汇编指令进行有效分析的静态或动态分 析方法。现有的汇编指令分析器需要对每一条汇编指令进行扫描并分析,这种方法导致了 很高的系统开销和大量的误警警报。此外,由于很难从大量的不具有显著关联性的汇编指 令中定位安全漏洞,因此现有方法能够从汇编指令中检测到的安全漏洞比例大约在50%左 右,不能满足实际应用的需求。本专利技术使用到一项重要的已有技术隐马尔科夫模型。隐马尔可夫模型是一种有效的描述存在于离散时间段上的具有关联关系的数据 序列的统计学方法。隐马尔科夫模型的理论基础是在1970年前后由Baum等人建立起来的,随后有CMU 的Baker和IBM的Jelinek等人将其应用到语音识别之中,由于Bell实验室Rabiner等人 在80年代中期对隐马尔科夫模型的深入浅出的介绍,才逐渐使隐马尔科夫模型为世界各 国从事语音处理的研究员所了解和熟悉,进而成为公认的一个研究热点。隐马尔科夫模型是在Markov链(一种有限状态机)的基础上发展起来的。首 先介绍两个概念状态集合和观察序列。状态集合指隐马尔科夫模型所具有的全部状态 (S1, ...,Si, ...,Sn),其中N为状态总数,取值为正整数;观察序列是一个具有上下文关联 性的数据序列,用V1, . . .,vt,. . .,ντ表示,V1, . . .,vt,. . .,ντ为一个观测序列,其中Vt = cm,表示该序列中时刻t的元素的取值为cm,m的取值范围为1彡m彡M,M表示每个状态可 输出的元素(值)的总数,其取值范围为正整数。由于实际问题比Markov链模型所描述的更为复杂,观察到的观察序列中的元素 并不是与Markov链中的状态一一对应,而是通过一组概率分布相联系。这样,站在观察 者的角度,只能看到观察值,不像Markov链模型中的观察值和状态一一对应。因此,我们 不能直接看到状态,而是通过一个随机过程去感知状态的存在及其特性,这就是所谓的 “隐”Markov模型,即Hidden Markov Model。它是一个双重随机过程第一个随机过程是Markov链,这是基本的随机过程,描述了状态之间的转移概 率,这个概率用% = P(qt+1 = SjIqt = Si)来描述,表示在t时刻从状态i跳转到状态j的 转移概率;在qt = Si中,qt表示t时刻时状变量,其值为Si ;i, j的取值范围为1彡i, j彡N且均为正整数。第二个随机过程描述了状态和所研究的观察序列之间的统计对应关系,该关系由 状态输出概率h (Cm) =P(vt = C1Jqt = Si)来描述,表示t时刻时,状态i输出观察序列中 元素Vt = Cm的概率。除此之外,使用隐马尔科夫模型描述一个随机过程的时候,需要指定状态的起始, 因此每一个状态还具有一个初始概率η”下面以一个全连接结构的3状态的隐马尔科夫 模型模型为例(如图1所示),介绍描述隐马尔科夫模型的参数组对于该隐马尔科夫模型,状态转移矩阵A由所有状态之间的状态转移概率组成, 每一行表示从某一状态到其他所有状态的转移概率,因此每行中的元素之和为1 aUα\2 13 A =a2iα22α23αη输出概率矩阵B由所有状态的输出概率组成,由于每个状态具有M个输出概率,因 此该矩阵的大小为3XM,且每一行元素之和为1 :、(Cl) ... MO、B= b2(ct) ... b2(cM)Mc^ …bH通常,隐马尔科夫模型模型等概率的从某一状态开始,因此各个状态的初始概率 矩阵η被设定为Ji = {Ji ! = 1/3, π 2 = 1/3, π 3 = 1/3}这样,一个隐马尔科夫模型可以由参数组λ = {Α,B,π}来描述。更形象地说, 隐马尔科夫模型可分为两部分,一个是Markov链,由{Α,π}描述,产生的输出为状态序 列;另一个部分是一个随机过程,由概率输出矩阵{B}描述,产生的输出为观察值序列。因 此,对于一个具有时间长度T的观察本文档来自技高网...

【技术保护点】
一种基于隐马尔可夫模型的汇编指令级漏洞检测方法,其具体操作步骤如下:步骤一、构造漏洞指令库;漏洞指令库用来存储已知漏洞及已知漏洞的特征,一个漏洞包括3个属性:漏洞名称、汇编指令帧和数字码;每个汇编指令帧包括1条或多条汇编指令;每个数字码包括两部分,其中一部分为每个漏洞的唯一编码,另一部分为该漏洞对应的汇编指令帧中包含的汇编指令的顺序编号;对于每一个漏洞,其具体构造方法为:步骤1.1:针对包含一种软件漏洞的一个或一个以上的可执行程序使用静态反汇编分析工具进行反汇编,获得可执行程片段;针对步骤二得到的漏洞指令库中的每个漏洞的训练数据使用静态反汇编分析工具进行反汇编,获得可执行程序中全部函数的函数结构图;将每个函数结构图称为一个汇编指令片段;步骤四、获取训练数据的数字码序列;依次对步骤三得到的漏洞指令库中的每个漏洞的训练数据的汇编指令片段中的汇编指令分别采用结构化处理方法进行处理,获得漏洞指令库中每个漏洞的训练数据的汇编指令片段的数字码序列;所述结构化处理方法的具体操作步骤为:步骤4.1:依次将漏洞指令库中的每一条汇编指令中的数字去掉,组成新字符串;漏洞指令库中的所有汇编指令分别用P↓[1]~P↓[sum]表示,其中,sum为正整数,表示漏洞指令库包含的汇编指令的数量;由漏洞指令库中的每一条汇编指令产生的新字符串分别用Q↓[1]~Q↓[sum]表示;步骤4.2:漏洞指令库包含的汇编指令的数量使用计数器A计数,计数器A的计数值用m表示,m≥1且m为正整数;设定m的初值为1;步骤4.3:判断计数器A的计数值m是否不大于第m个漏洞的训练数据的汇编指令片段的个数N,N为正整数;;如果该条件成立,则执行步骤4.4的操作;否则,结束操作;步骤4.4:将第m个漏洞的训练数据的汇编指令片段中的每一条汇编指令中的数字去掉,组成新字符串;第m个漏洞的训练数据的汇编指令片段中的每一条汇编指令分别用P′↓[1]~P′↓[sum′]表示,其中,sum′为正整数,表示第m个漏洞的训练数据的汇编指令片段中的汇编指令的数量;第m个漏洞的训练数据的汇编指令片段中的每一条汇编指令产生的新字符串分别用Q′↓[1]~Q′↓[sum′]表示;步骤4.5:第m个漏洞的训练数据的汇编指令片段中的汇编指令的数量用计数器B计数,计数器B的计数值用i表示,i为正整数;设定计数器B的计数值i的初值为1;步骤4.6:判断第m个漏洞的训练数据的汇编指令片段中的汇编指令的计数...

【技术特征摘要】
一种基于隐马尔可夫模型的汇编指令级漏洞检测方法,其具体操作步骤如下步骤一、构造漏洞指令库;漏洞指令库用来存储已知漏洞及已知漏洞的特征,一个漏洞包括3个属性漏洞名称、汇编指令帧和数字码;每个汇编指令帧包括1条或多条汇编指令;每个数字码包括两部分,其中一部分为每个漏洞的唯一编码,另一部分为该漏洞对应的汇编指令帧中包含的汇编指令的顺序编号;对于每一个漏洞,其具体构造方法为步骤1.1针对包含一种软件漏洞的一个或一个以上的可执行程序使用静态反汇编分析工具进行反汇编,获得可执行程序中全部函数的函数结构图;将每个函数结构图称为一个汇编指令片段;步骤1.2从步骤1.1中获得的汇编指令片段中提取出产生该漏洞的汇编指令片段;步骤1.3使用动态反汇编分析工具从步骤1.2中得到的产生该漏洞的汇编指令片段中依次提取出产生该漏洞的汇编指令,将这些汇编指令组成的有序集合称为汇编指令帧;具体为步骤1.3.1在正常状态下运行步骤1.1中所述可执行程序,使用动态反汇编分析工具依次跟踪步骤1.2中提取出的产生该漏洞的汇编指令片段,记录下每个产生该漏洞的汇编指令片段中在此次运行过程中所执行的汇编指令,将这些执行的汇编指令组成的有序集合称为汇编指令集合1;步骤1.3.2激活该漏洞,使用动态反汇编分析工具再次运行步骤1.1中所述可执行程序,跟踪步骤1.2中提取的产生该漏洞的汇编指令片段,依次记录下每个汇编指令片段中在此次运行过程中所执行的汇编指令,将这些执行的汇编指令组成的有序集合称为汇编指令集合2;步骤1.3.3依次将汇编指令集合1和汇编指令集合2中的汇编指令进行匹配比对,并分为以下三种情况处理情况1对于同时出现在汇编指令集合1和汇编指令集合2中的汇编指令,视为不是触发该漏洞的汇编指令,做删除处理;情况2对于在编指令集合1中出现,但是在汇编指令集合2中没有出现的汇编指令,做丢弃处理;做丢弃处理的这些汇编指令是可执行程序在正常运行时所执行的,而在触发漏洞时未执行的汇编指令,因此视为不是触发该漏洞的汇编指令;情况3对于在汇编指令集合2中出现,但是在编指令集合1中没有出现的汇编指令组成的有序集合称为汇编指令帧;汇编指令帧中存储与触发漏洞有关的汇编指令;经过上述步骤的操作即可得到产生该漏洞的汇编指令帧;步骤1.4构造漏洞指令库;按照步骤1.3得到的汇编指令帧中的汇编指令的依次提取顺序,为每条汇编指令增加一条数字码;通过重复执行步骤1.1到步骤1.4的操作,可构造包含多个漏洞的漏洞指令库;步骤二、针对步骤一中构造的漏洞指令库中的全部漏洞,分别为漏洞指令库中的每种漏洞选取多个含有该漏洞的可执行程序作为该漏洞的训练数据;漏洞指令库中的每种漏洞用Vi表示,该漏洞的训练数据用Ti表示;i代表漏洞指令库中每个漏洞的唯一编码;步骤三、获取漏洞指令库中的每个漏洞的训练数据的汇编指令片段;针对步骤二得到的漏洞指令库中的每个漏洞的训练数据使用静态反汇编分析工具进行反汇编,获得可执行程序中全部函数的函数结构图;将每个函数结构图称为一个汇编指令片段;步骤四、获取训练数据的数字码序列;依次对步骤三得到的漏洞指令库中的每个漏洞的训练数据的汇编指令片段中的汇编指令分别采用结构化处理方法进行处理,获得漏洞指令库中每个漏洞的训练数据的汇编指令片段的数字码序列;所述结构化处理方法的具体操作步骤为步骤4.1依次将漏洞指令库中的每一条汇编指令中的数字去掉,组成新字符串;漏洞指令库中的所有汇编指令分别用P1~Psum表示,其中,sum为正整数,表示漏洞指令库包含的汇编指令的数量;由漏洞指令库中的每一条汇编指令产生的新字符串分别用Q1~Qsum表示;步骤4.2漏洞指令库包含的汇编指令的数量使用计数器A计数,计数器A的计数值用m表示,m≥1且m为正整数;设定m的初值为1;步骤4.3判断计数器A的计数值m是否不大于第m个漏洞的训练数据的汇编指令片段的个数N,N为正整数;;如果该条件成立,则执行步骤4.4的操作;否则,结束操作;步骤4.4将第m个漏洞的训练数据的汇编指令片段中的每一条汇编指令中的数字去掉,组成新字符串;第m个漏洞的训练数据的汇编指令片段中的每一条汇编指令分别用P′1~P′sum′表示,其中,sum′为正整数,表示第m个漏洞的训练数据的汇编指令片段中的汇编指令的数量;第m个漏洞的训练数据的汇编指令片段中的每一条汇编指令产生的新字符串分别用Q′1~Q′sum′表示;步骤4.5第m个漏洞的训练数据的汇编指令片段中的汇编指令的数量用计数器B计数,计数器B的计数值用i表示,i为正整数;设定计数器B的计数值i的初值为1;步骤4.6判断第m个漏洞的训练数据的汇编指令片段中的汇编指令的计数器B的计数值i是否不大于第m个漏洞的训练数据的汇编指令片段中的汇编指令的数量sum′,如果该条件成立,则执行步骤4.7的操作;否则,执行步骤4.9的操作;步骤4.7依次将第m个漏洞的训练数据的汇编指令片段中的每一条汇编指令中的数字去掉,组成新字符串Q′i与步骤4.1得到的将漏洞指令库中的每一条汇编指令中的数字去掉,组成新字符串Q1~Qsum逐一对比,并采用字符匹配的方法计算字符串Q′i分别与字符串Q1~Qsum的相似度,分别用S1~Ssum表示;如果相似度S1~Ssum均小于某一预先设定的阈值,则字符串Q′i对应的数字码为0;否则,如果相似度S1~Ssum中仅有一个最大值Smax,则字符串Q′i对应的数字码为最大值Smax对应的汇编指令在漏洞指令库的数字码;否则,如果相似度S1~Ssum中的最大值Smax多于一个,即可随机选取任意一个最大值Smax,则字符串Q′i对应的数字码为该最大值Smax对应的汇编指令在漏洞指令库的数字码;步骤4.8将第m个漏洞的训练数据的汇编指令片段中的汇编指令的计数器B的计数值i值增1,重复执行步骤4.6到步骤4.8;步骤4.9将漏洞指令库包含的汇编指令的计数器A的计数值m的值增1,重复执行步骤4.3到步骤4.9;经过结构化处理方法的一次完整操作,即可得到属于漏洞指令库中的一个漏洞的数字码序列Or={o1,...,ok,...,oN},也称为该漏洞的一组观测序列;1≤k≤N且k为正整数,N为该漏洞的训练数据的汇编指令片段的个数,该漏洞的训练数据的汇编指令片段中的每一个汇编指令片段产生一个该漏洞的观测序列;1≤r≤N′,N′为漏洞指令库中包含的漏洞的数量,r和N′均为正整数;步骤五、依次获得...

【专利技术属性】
技术研发人员:王崑声李宁胡昌振白昊
申请(专利权)人:中国航天科技集团公司第七一○研究所北京理工大学
类型:发明
国别省市:11[中国|北京]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1