一种基于编程模式和模式匹配的漏洞聚类方法技术

技术编号:15087616 阅读:90 留言:0更新日期:2017-04-07 17:21
一种基于编程模式和模式匹配的漏洞聚类方法,属于计算机程序安全技术领域。可以将程序内所有函数进行统一分析,根据每个函数中出现的不同的关键词、API符号,将每个函数映射到向量空间,并利用矩阵分析方法提取出这些函数中占据主导地位的编程模式,以及每个函数最倾向的编程模式。通过计算欧几里得距离,将编程模式相近的函数发现并聚类为一类,并藉此发现潜在的、和已知漏洞相似的漏洞。

【技术实现步骤摘要】

本专利技术涉及一种基于编程模式和模式匹配的漏洞聚类方法,属于计算机程序安全

技术介绍
脆弱性(Vulnerability)是系统具体实现或安全策略上存在的缺陷和不足。软件脆弱性的存在给系统服务的可持续性和数据的安全性带来的巨大的危害,是威胁信息系统安全的主要因素。黑客、蠕虫病毒和木马等都利用安全脆弱性来实现对计算机系统的入侵或自身传播。计算机系统在社会生活中的应用日益广泛,安全脆弱性的数目呈迅速递增之势,从发现到首次被利用的时间间隔越来越短,安全漏洞的风险等级节节升高。如何应对安全漏洞给信息系统带来的威胁,已成了计算机安全领域的重大问题之一。除了利用己知脆弱性,有的黑客善于挖掘并利用一些尚未公布的脆弱性以达到他们不可告人的目的,而相比于此,安全研究者们在脆弱性研究工作的影响方面显得被动和滞后。所以加大对脆弱性的研究力度是非常有必要的,以便对各类脆弱性采取更为主动合理的处理方式。如何来检测一个现有软件的安全性是解决安全问题的头等大事。从问题的源头就开始关注安全,越早发现软件存在的脆弱性问题,那么造成的损失就越小。因此,对计算机软件脆弱性分析方法的研究具有重要的理论和实用价值。当前,根据分析对象不同可将脆弱性分析方法分为两类:源代码分析和二进制分析。源代码分析是对程序的源代码进行手动或自动的代码审计,根据审查人员的经验来审查代码中是否包含常见已知漏洞或者潜在安全缺陷;二进制分析是在不运行程序的情况下对软件汇编代码进行分析,以发现一些潜在的漏洞,它直接反映了机器执行程序的实际过程,比源代码分析更底层但更难以分析。需要通过特定的逆向平台对软件程序进行反汇编,得到相应的反汇编文本。
技术实现思路
为了克服现有技术的不足,本专利技术提供一种基于编程模式和模式匹配的漏洞聚类方法。本专利技术具体采用如下技术方案:一种基于编程模式和模式匹配的漏洞聚类方法,能够将程序内所有函数进行统一分析,根据每个函数中出现的不同的关键词、API符号,将每个函数映射到向量空间,并利用矩阵分析方法提取出这些函数中占据主导地位的编程模式,以及每个函数最倾向的编程模式;通过计算欧几里得距离,将编程模式相近的函数发现并聚类为一类,并藉此发现潜在的、和已知漏洞相似的漏洞。本专利技术的优点是:对于一个开放源代码的程序,当已知其中某个函数存在漏洞时,可以将包括该漏洞函数在内的所有函数进行统一分析。根据每个函数中出现的不同的关键词、API符号,将每个函数用向量表示出来,并利用矩阵分析方法提取出这些函数中占据主导地位的编程模式,以及每个函数最倾向的编程模式。之后通过计算欧几里得距离,将编程模式相近的函数找出来、聚类为一类。本方法不仅可以将相似函数聚类,并且可以藉此发现潜在的、和已知漏洞相似的漏洞函数。附图说明当结合附图考虑时,通过参照下面的详细描述,能够更完整更好地理解本专利技术以及容易得知其中许多伴随的优点,但此处所说明的附图用来提供对本专利技术的进一步理解,构成本专利技术的一部分,本专利技术的示意性实施例及其说明用于解释本专利技术,并不构成对本专利技术的不当限定,如图其中:图1为本专利技术的总体工作流程图;图2为模式抽取步骤的工作流程图;图3为模式匹配步骤的工作流程图;下面结合附图和实施例对本专利技术进一步说明。具体实施方式显然,本领域技术人员基于本专利技术的宗旨所做的许多修改和变化属于本专利技术的保护范围。实施例1:如图1、图2、图3所示,基于编程模式和模式匹配的漏洞聚类方法,包括研究源代码分析,属于静态分析方法;为了更有效率、更准确的比较程序漏洞代码的相似性,以更好的将代码进行聚类,并发现潜在的漏洞代码,提出了这样一种漏洞聚类方法。一种基于编程模式和模式匹配的漏洞聚类的方法,包括以下步骤:步骤1.编程模式提取,对于一个包含了Cf个函数的程序源代码(Cf为整数),进行如下步骤的操作:步骤1-1:统计该程序中出现的关键词数量Cn,包括:保留字、函数名、变量名。步骤1-2:为该程序的每个函数创建一个维度为Cn的列向量Mi(i=1,2,…Cf)并一一赋值,然后将创建的Cf个列向量合并为一个Cn*Cf的矩阵M;其中,列向量Vi的每个分量对应于一个程序的关键词;对于一个函数,若它包含了某个关键词,则向量中对应该关键词的分量的值为1;若不包含该关键词,则该值为0。步骤1-3:根据Cf和Cn,选取合适的数值D。D代表了之后步骤从源代码中提取出的模式种类的数量的最大值。D并没有明确的方法来确定,而是本方案操作者基于对该程序的主观认知而选取的合适的值。D值过小则不能提供足够的精度,过大则不能提供更高的精度。步骤1-4:对矩阵M进行截断奇异值分解,并取前D个特征,分解之后得到矩阵U、矩阵S和矩阵V。参数说明:ui(i=1,2,…,Cn)表示一个列向量的一个分量;σi(i=1,2,…,D)表示一个对应的奇异值;vi(i=1,2,…,Cf)表示一个列向量的一个分量;Cn是所有关键词的个数;Cf是所有函数的个数;D是前述步骤中定义的模式种类数量的最大值,其中:矩阵U为Cn*D阶矩阵,矩阵S为D*D阶矩阵,矩阵V为Cf*D阶矩阵。矩阵U的每一列反映了D种主要的编程模式,在某种程度上显示出该模式里某个关键字的使用频率;矩阵S的对角线上的每个奇异值反映了矩阵U中每个编程模式的重要程度;矩阵V的每一行反映了某个函数对D种编程模式的“倾向”,“倾向”越相近的函数,则它们越有可能属于一类。矩阵V中的每一行的向量[…,vi,…]对应于前述步骤中创建的Mi列向量、代表了Mi所对应的函数的模式块(i=1,2,…,Cf)。步骤2.模式匹配聚类,其流程图如图3所示;对于步骤1中提取出的Cf个函数的模式块,和已知存在漏洞的函数F,进行如下步骤的操作:步骤2-1:以步骤1中的模式块中选取F所对应的模式块为基准,计算其余函数模式块(Fi[a1,a2…aD])与函数F模式块(F[b1,b2…bD])的欧几里得距离。a1,a2…aD、b1,b2…bD的定义为,即在步骤1最后得到的Cf个函数模式块,a1,a2…aD、b1,b2…bD均为对应函数的模式块中的向量分量,公式为:S(Fi,F)=[Σj=1D(aj-bj)2],]]>aj表示目标模式块中的向量分量,bj表示基准模式块中的向量分量,D是前述步骤中定义的模式种类数量的最本文档来自技高网
...

【技术保护点】
一种基于编程模式和模式匹配的漏洞聚类方法,其特征在于能够将程序内所有函数进行统一分析,根据每个函数中出现的不同的关键词、API符号,将每个函数映射到向量空间,并利用矩阵分析方法提取出这些函数中占据主导地位的编程模式,以及每个函数最倾向的编程模式;通过计算欧几里得距离,将编程模式相近的函数发现并聚类为一类,并藉此发现潜在的、和已知漏洞相似的漏洞。

【技术特征摘要】
1.一种基于编程模式和模式匹配的漏洞聚类方法,其特征在于能够
将程序内所有函数进行统一分析,根据每个函数中出现的不同的关键词、
API符号,将每个函数映射到向量空间,并利用矩阵分析方法提取出这些
函数中占据主导地位的编程模式,以及每个函数最倾向的编程模式;通过
计算欧几里得距离,将编程模式相近的函数发现并聚类为一类,并藉此发
现潜在的、和已知漏洞相似的漏洞。
2.根据权利要求1所述的一种基于编程模式和模式匹配的漏洞聚类
方法,其特征在于包括以下步骤:
步骤1.编程模式提取;对于一个包含了Cf个函数的程序源代码,进
行如下步骤的操作:
步骤1-1:统计出现的关键词数量Cn,包括:保留字、函数名、变量
名;
步骤1-2:为每个函数创建一个维度为Cn的列向量Mi(i=1,2,…Cf)
并一一赋值,然后将创建的Cf个列向量合并为一个Cn*Cf的矩阵M;其
中,列向量Vi的每个分量对应于一个程序的关键词;对于一个函数,若
它包含了某个关键词,则向量中对应该关键词的分量的值为1;若不包含
该关键词,则该值为0;
步骤1-3:根据Cf和Cn,...

【专利技术属性】
技术研发人员:李京春张小松梁利许云清王少杰朱迦南万仁忠李霞胡剑青陈琳刘楠
申请(专利权)人:国家信息技术安全研究中心
类型:发明
国别省市:北京;11

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

1