CN105718801A - 一种基于编程模式和模式匹配的漏洞聚类方法 - Google Patents
一种基于编程模式和模式匹配的漏洞聚类方法 Download PDFInfo
- Publication number
- CN105718801A CN105718801A CN201610053379.1A CN201610053379A CN105718801A CN 105718801 A CN105718801 A CN 105718801A CN 201610053379 A CN201610053379 A CN 201610053379A CN 105718801 A CN105718801 A CN 105718801A
- Authority
- CN
- China
- Prior art keywords
- function
- matrix
- mode
- programming mode
- leak
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
- G06F21/562—Static detection
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Health & Medical Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Virology (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
一种基于编程模式和模式匹配的漏洞聚类方法,属于计算机程序安全技术领域。可以将程序内所有函数进行统一分析,根据每个函数中出现的不同的关键词、API符号,将每个函数映射到向量空间,并利用矩阵分析方法提取出这些函数中占据主导地位的编程模式,以及每个函数最倾向的编程模式。通过计算欧几里得距离,将编程模式相近的函数发现并聚类为一类,并藉此发现潜在的、和已知漏洞相似的漏洞。
Description
技术领域
本发明涉及一种基于编程模式和模式匹配的漏洞聚类方法,属于计算机程序安全技术领域。
背景技术
脆弱性(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均为对应函数的模式块中的向量分量,
公式为:
aj表示目标模式块中的向量分量,bj表示基准模式块中的向量分量,D是前述步骤中定义的模式种类数量的最大值,
模式块的欧几里得距离越近,则它们的“倾向”越近,相似度越高,它们越有可能属于一类。
步骤2-2:基于步骤2-1得到的结果,操作人员可以从海量函数中筛选出有可能与漏洞函数同类的函数,将具有较近距离即较高相似度的函数聚类为一类,并作为进一步审阅的参考。
实施例2:如图1、图2、图3所示,基于编程模式和模式匹配的漏洞聚类方法,有编程模式提取步骤和模式匹配聚类步骤,确定欲匹配模式的代码库,模式抽取代码库的模式块,进行模式匹配,判断与漏洞模式块的相似度,找到相似漏洞代码聚类。
步骤1.编程模式提取步骤,对于一个包含了Cf个函数的程序源代码(Cf为整数),进行如下步骤的操作:
步骤1-1:统计该程序中出现的关键词数量Cn,包括:保留字、函数名、变量名。
步骤1-2:对于全部Cf个函数,为每个函数单独创建一个维度为Cn的列向量Mi(i=1,2,…Cf)并一一赋值,然后将创建的Cf个列向量合并为一个Cn*Cf的矩阵M;其中,列向量Vi的每个分量对应于一个程序的关键词;对于一个函数,若它包含了某个关键词,则向量Mi中对应该关键词的分量的值为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.模式匹配聚类步骤,对于步骤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均为对应函数的模式块中的向量分量,
公式为:
aj表示目标模式块中的向量分量,bj表示基准模式块中的向量分量,D是前述步骤中定义的模式种类数量的最大值,
模式块的欧几里得距离越近,则它们的“倾向”越近,相似度越高,它们越有可能属于一类。
步骤2-2:基于步骤2-1得到的结果,操作人员可以从海量函数中筛选出有可能与漏洞函数同类的函数,将模式块的欧几里得距离较近的、即相似度较高的函数聚类为一类,它们有较高的几率会包含同样的漏洞。聚类的结果即为相似性数据,可以作为进一步审阅的参考。
本发明涉及的相关术语解释如下:
编程模式:在本发明中,编程模式是指,反应了一个函数的源代码中,函数名、变量名、保留字的组合方式的向量,可以从一定程度上反应该函数的功能。
模式块:在本发明中,模式块是指,反应了一个函数对于某几种编程模式的“倾向”程度的向量。这是根据数学方法奇异值分解得到的结果。
截断奇异值分解:奇异值分解是矩阵特征值分解在非方阵情况下的推广,用来计算描述一般矩阵重要特征的分析方法。很多情况下,前面一小部分的奇异值之和占据了所有奇异值总和的绝大部分,故可以截断前一部分的奇异值来过滤“噪音”,得到矩阵重要的信息。这就是截断奇异值分解。
欧几里得距离:是一个通常采用的距离定义,指在m维空间中两个点之间的真实距离,或者向量的自然长度(即该点到原点的距离)。本发明中是计算两个模式块向量的距离。
模式匹配:在本发明中,模式匹配是指,通过计算若干函数的模式块与目标函数模式块最相近的函数。
如上所述,对本发明的实施例进行了详细地说明,但是只要实质上没有脱离本发明的发明点及效果可以有很多的变形,这对本领域的技术人员来说是显而易见的。因此,这样的变形例也全部包含在本发明的保护范围之内。
Claims (2)
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,选取合适的数值D;D代表了之后步骤从源代码中提取出的模式种类的数量的最大值;
步骤1-4:对矩阵M进行截断奇异值分解,并取前D个特征,分解之后得到矩阵U,矩阵S,矩阵V;其中:矩阵U为Cn*D阶矩阵,矩阵S为D*D阶矩阵,矩阵V为Cf*D阶矩阵;矩阵U的每一列反映了D种主要的编程模式,显示出该模式里某个关键字的使用频率;矩阵S的对角线上的每个奇异值反映了矩阵U中每个编程模式的重要程度;矩阵V的每一行反映了函数对D种编程模式的“倾向”;
矩阵V的每一行即代表该函数的模式块;
步骤2.模式匹配聚类;对于步骤1中提取出的Cf个函数的模式块,和已知存在漏洞的函数F,进行如下步骤的操作:
步骤2-1:以步骤1中的模式块中选取F所对应的模式块为基准,计算其余函数模式块(Fi[a1,a2…aD])与函数F模式块(F[b1,b2...bD])的欧几里得距离;
步骤2-2:基于步骤2-1得到的结果,从海量函数中筛选出有可能与漏洞函数同类的函数,将具有较近距离即较高相似度的函数聚类为一类,并作为进一步审阅的参考。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610053379.1A CN105718801A (zh) | 2016-01-26 | 2016-01-26 | 一种基于编程模式和模式匹配的漏洞聚类方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610053379.1A CN105718801A (zh) | 2016-01-26 | 2016-01-26 | 一种基于编程模式和模式匹配的漏洞聚类方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN105718801A true CN105718801A (zh) | 2016-06-29 |
Family
ID=56154998
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610053379.1A Pending CN105718801A (zh) | 2016-01-26 | 2016-01-26 | 一种基于编程模式和模式匹配的漏洞聚类方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105718801A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106788962A (zh) * | 2016-12-13 | 2017-05-31 | 电子科技大学 | 隐私保护下的向量相似性判断方法 |
CN107608883A (zh) * | 2017-09-08 | 2018-01-19 | 中国农业银行股份有限公司 | 软件缺陷描述关键要素的抽取方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101350745A (zh) * | 2008-08-15 | 2009-01-21 | 北京启明星辰信息技术股份有限公司 | 一种入侵检测方法及装置 |
CN101739337A (zh) * | 2009-12-14 | 2010-06-16 | 北京理工大学 | 一种基于聚类的软件漏洞序列特征的分析方法 |
CN101996292A (zh) * | 2010-12-10 | 2011-03-30 | 北京理工大学 | 一种基于序列聚类的软件安全特性分析方法 |
CN103561004A (zh) * | 2013-10-22 | 2014-02-05 | 西安交通大学 | 基于蜜网的协同式主动防御系统 |
CN105045715A (zh) * | 2015-07-27 | 2015-11-11 | 电子科技大学 | 基于编程模式和模式匹配的漏洞聚类方法 |
-
2016
- 2016-01-26 CN CN201610053379.1A patent/CN105718801A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101350745A (zh) * | 2008-08-15 | 2009-01-21 | 北京启明星辰信息技术股份有限公司 | 一种入侵检测方法及装置 |
CN101739337A (zh) * | 2009-12-14 | 2010-06-16 | 北京理工大学 | 一种基于聚类的软件漏洞序列特征的分析方法 |
CN101996292A (zh) * | 2010-12-10 | 2011-03-30 | 北京理工大学 | 一种基于序列聚类的软件安全特性分析方法 |
CN103561004A (zh) * | 2013-10-22 | 2014-02-05 | 西安交通大学 | 基于蜜网的协同式主动防御系统 |
CN105045715A (zh) * | 2015-07-27 | 2015-11-11 | 电子科技大学 | 基于编程模式和模式匹配的漏洞聚类方法 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106788962A (zh) * | 2016-12-13 | 2017-05-31 | 电子科技大学 | 隐私保护下的向量相似性判断方法 |
CN106788962B (zh) * | 2016-12-13 | 2020-04-14 | 电子科技大学 | 隐私保护下的向量相似性判断方法 |
CN107608883A (zh) * | 2017-09-08 | 2018-01-19 | 中国农业银行股份有限公司 | 软件缺陷描述关键要素的抽取方法 |
CN107608883B (zh) * | 2017-09-08 | 2021-02-19 | 中国农业银行股份有限公司 | 软件缺陷描述关键要素的抽取方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108718310B (zh) | 基于深度学习的多层次攻击特征提取及恶意行为识别方法 | |
US10303874B2 (en) | Malicious code detection method based on community structure analysis | |
CN101853277A (zh) | 一种基于分类和关联分析的漏洞数据挖掘方法 | |
CN106228068B (zh) | 基于混合特征的Android恶意代码检测方法 | |
CN111639337B (zh) | 一种面向海量Windows软件的未知恶意代码检测方法及系统 | |
CN114077741B (zh) | 软件供应链安全检测方法和装置、电子设备及存储介质 | |
US10043012B2 (en) | Method of correlating static and dynamic application security testing results for a web application | |
US10043004B2 (en) | Method of correlating static and dynamic application security testing results for a web and mobile application | |
CN105045715B (zh) | 基于编程模式和模式匹配的漏洞聚类方法 | |
CN108446559A (zh) | 一种apt组织的识别方法及装置 | |
CN113221032A (zh) | 链接风险检测方法、装置以及存储介质 | |
US20210385252A1 (en) | Dynamic, Runtime Application Programming Interface Parameter Labeling, Flow Parameter Tracking and Security Policy Enforcement Using API Call Graph | |
CN109740347A (zh) | 一种针对智能设备固件的脆弱哈希函数的识别与破解方法 | |
CN112115326B (zh) | 一种以太坊智能合约的多标签分类和漏洞检测方法 | |
CN112765660A (zh) | 一种基于MapReduce并行聚类技术的终端安全性分析方法和系统 | |
CN104504334A (zh) | 用于评估分类规则选择性的系统及方法 | |
CN113722719A (zh) | 针对安全拦截大数据分析的信息生成方法及人工智能系统 | |
CN103679034A (zh) | 一种基于本体的计算机病毒分析系统及其特征提取方法 | |
CN105468972B (zh) | 一种移动终端文件检测方法 | |
CN112817877B (zh) | 异常脚本检测方法、装置、计算机设备和存储介质 | |
CN105718801A (zh) | 一种基于编程模式和模式匹配的漏洞聚类方法 | |
Bai et al. | Dynamic k-gram based software birthmark | |
Feichtner et al. | Obfuscation-resilient code recognition in Android apps | |
CN114356744A (zh) | 基于机器学习的应用程序界面遍历方法及设备 | |
CN104391958B (zh) | 网页搜索关键词的相关性检测方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WD01 | Invention patent application deemed withdrawn after publication | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20160629 |