【技术实现步骤摘要】
本专利技术涉及一种汇编指令级的漏洞检测方法,特别涉及一种基于隐马尔可夫模型 的汇编指令级漏洞检测方法,属于信息安全
技术介绍
随着计算机技术的迅速发展,人类社会的信息化程度越来越高,整个社会的政治、 经济、军事、文化以及其他领域对计算机信息系统的依赖程度也越来越高。在这种情况下, 计算机系统的安全性得到了人们越来越多的关注。然而,大型软件、系统的编写需要许许多 多程序员共同完成,他们将一个软件或系统分成若干板块,分工编写,然后再汇总,测试;最 后再修补、发布,因此在软件中存在安全漏洞几乎是不可避免的。软件漏洞是指软件设计实 现过程中被引入的、在数据访问或行为逻辑等方面的缺陷。这些漏洞常常被攻击者利用,从 而使程序行为违背一定的安全策略。在大多数情况下,软件系统的源代码不可得,因此必须 对软件的可执行程序进行分析,这种针对可执行程序的分析非常困难,因为从中很难发现 典型的上下文相关性。基于上述原因,目前对汇编指令级漏洞检测技术的研究越来越受到 重视。为了检测到漏洞,相应的分析方法需要具有高覆盖率和低误报率/漏报率。自动 化的动态检测方法通常会在可控环境中(通常位于虚拟机中)执行程序,同时监视汇编指 令的执行以分析可执行程序的行为特征。然而,动态分析的问题在于其必须运行可执行程 序,并且必须执行尽可能多的汇编指令,这会产生大量的系统开销。特别是当软件系统进入 休眠状态时,动态检测方法必须等待软件的下一次执行,而这意味着更长的分析时间和更 多的系统开销。由于受限于执行遍历策略,动态分析方法目前只对分析恶意软件效果较好, 因为恶意软件体积较小。当分析包 ...
【技术保护点】
一种基于隐马尔可夫模型的汇编指令级漏洞检测方法,其具体操作步骤如下:步骤一、构造漏洞指令库;漏洞指令库用来存储已知漏洞及已知漏洞的特征,一个漏洞包括3个属性:漏洞名称、汇编指令帧和数字码;每个汇编指令帧包括1条或多条汇编指令;每个数字码包括两部分,其中一部分为每个漏洞的唯一编码,另一部分为该漏洞对应的汇编指令帧中包含的汇编指令的顺序编号;对于每一个漏洞,其具体构造方法为:步骤1.1:针对包含一种软件漏洞的一个或一个以上的可执行程序使用静态反汇编分析工具进行反汇编,获得可执行程片段;针对步骤二得到的漏洞指令库中的每个漏洞的训练数据使用静态反汇编分析工具进行反汇编,获得可执行程序中全部函数的函数结构图;将每个函数结构图称为一个汇编指令片段;步骤四、获取训练数据的数字码序列;依次对步骤三得到的漏洞指令库中的每个漏洞的训练数据的汇编指令片段中的汇编指令分别采用结构化处理方法进行处理,获得漏洞指令库中每个漏洞的训练数据的汇编指令片段的数字码序列;所述结构化处理方法的具体操作步骤为:步骤4.1:依次将漏洞指令库中的每一条汇编指令中的数字去掉,组成新字符串;漏洞指令库中的所有汇编指令分别用P↓[1] ...
【技术特征摘要】
一种基于隐马尔可夫模型的汇编指令级漏洞检测方法,其具体操作步骤如下步骤一、构造漏洞指令库;漏洞指令库用来存储已知漏洞及已知漏洞的特征,一个漏洞包括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[中国|北京]
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。