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

文档序号:9326801阅读:581来源:国知局
基于编程模式和模式匹配的漏洞聚类方法
【技术领域】
[0001] 本发明属于计算机程序安全领域,提供一种基于编程模式和模式匹配的漏洞聚类 方法。
【背景技术】
[0002] 脆弱性(Vulnerability)是系统具体实现或安全策略上存在的缺陷和不足。软件 脆弱性的存在给系统服务的可持续性和数据的安全性带来了巨大的危害,是威胁信息系统 安全的主要因素。黑客、蠕虫病毒和木马等都利用安全脆弱性来实现对计算机系统的入侵 或自身传播。
[0003] 计算机系统在社会生活中的应用日益广泛,安全脆弱性的数目呈迅速递增之势, 从发现到首次被利用的时间间隔越来越短,安全漏洞的风险等级节节升高。如何应对安全 漏洞给信息系统带来的威胁,已成了计算机安全领域的重大问题之一。除了利用己知脆弱 性,有的黑客善于挖掘并利用一些尚未公布的脆弱性以达到他们不可告人的目的,而相比 于此,安全研究者们在脆弱性研究工作的影响方面显得被动和滞后。所以加大对脆弱性的 研究力度是非常有必要的,以便对各类脆弱性采取更为主动合理的处理方式。如何来检测 一个现有软件的安全性是解决安全问题的头等大事。从问题的源头就开始关注安全,越早 发现软件存在的脆弱性问题,那么造成的损失就越小。因此,对计算机软件脆弱性分析方法 的研究具有重要的理论和实用价值。
[0004] 当前,根据分析对象不同可将脆弱性分析方法分为两类:源代码分析和二进制分 析。源代码分析是对程序的源代码进行手动或自动的代码审计,根据审查人员的经验来审 查代码中是否包含常见已知漏洞或者潜在安全缺陷;二进制分析是在不运行程序的情况下 对软件汇编代码进行分析,以发现一些潜在的漏洞,它直接反映了机器执行程序的实际过 程,比源代码分析更底层但更难以分析,需要通过特定的逆向平台对软件程序进行反汇编, 得到相应的反汇编文本。
[0005] 专利申请"一种基于属性提取的软件漏洞挖掘系统及方法"(【申请号】 CN201410577779)提供一种基于属性提取的软件漏洞挖掘系统及方法,包括以下步骤:提 取待测软件关键代码的步骤;对待测软件在虚拟机环境中执行,并采用虚拟机故障注入引 擎与关键代码进行测试交互,记录测试结果;将测试结果结合挖掘经验知识库进行推理。该 发明的不足在于,漏洞发掘非常依赖于经验知识库的完备,若知识库不包含相关信息,则难 以检测出新类型的漏洞。
[0006] 专利申请"一种用于漏洞发掘的动态符号执行路径搜索方法"(【申请号】 CN201410230479)提供如下方法,在使用动态符号执行对被测程序的可能执行路径进行搜 索的过程中,标记实际执行被测程序时触发漏洞的路径,对于路径探索过程中生成的每一 个新的测试用例,计算该测试用例执行路径与上次触发漏洞路径的相关度r,并以此计算该 测试用例对应执行路径的权重分数score,在下次执行测试时选择score值最大的测试用 例执行。该发明的不足在于,漏洞发掘依赖于合适的测试用例的设计,难以设计出适用于不 同程序类型的一组用例,故难以保证效率和准确性。

【发明内容】

[0007] 本发明主要解决的技术问题在于,为了更有效率、更准确的比较程序漏洞代码的 相似性,以更好的将代码进行聚类,并发现潜在的漏洞代码,提出了这样一种漏洞聚类方 法。本发明主要研究源代码分析,属于静态分析方法。
[0008] 本发明涉及的相关术语解释如下:
[0009] 编程模式:在本发明中,编程模式是指,反应了一个函数的源代码中,函数名、变量 名、保留字三者组合而成的向量,可以从一定程度上反应该函数的功能;
[0010] 模式块向量:在本发明中,模式块向量是指,反应了一个函数对于指定多种编程模 式的"倾向"程度的向量,这是根据数学方法得到的结果;
[0011] 截断奇异值分解:奇异值分解是矩阵特征值分解在非方针情况下的推广,用来计 算描述一般矩阵重要特征的分析方法;很多情况下,前面一小部分的奇异值之和占据了所 有奇异值总和的绝大部分,故可以截断前一部分的奇异值来过滤"噪音",得到矩阵重要的 信息,这就是截断奇异值分解;
[0012] 欧几里得距离:是一个通常采用的距离定义,指在m维空间中两个点之间的真实 距离,或者向量的自然长度(即该点到原点的距离);
[0013] 模式匹配:在本发明中,模式匹配是指,通过计算若干函数的模式块与目标函数的 模式块的欧几里得距离,找到与目标函数模式块最相近的函数。
[0014] 本发明具体采用如下技术方案:
[0015] -种基于编程模式和模式匹配的漏洞聚类的方法,其流程图如图1所示,具体包 括以下步骤:
[0016] 步骤1.编程模式提取,其流程如图2所示;记已知存在漏洞的函数为函数F,对于 一个包含(C f-I)个函数的程序源代码,进行如下步骤的操作:
[0017] 步骤1-1 :将函数F置于所述程序源代码中,此时程序源代码包含有Cf个函数,统 计插入函数F后的程序源代码中出现的不同关键词并记其总数量为C n,所述关键词类型包 括保留字、函数名、变量名;
[0018] 步骤1-2 :为该程序源代码的每个函数创建一个维度为Cn的列向量Mpi = 1,2,… Cf,列向量Mi中的每个元素与步骤1-1所统计的不同关键词--对应,若列向量M ;对应的 函数中包含有相应关键词,则列向量M1中相应位置的元素值记为1,否则记为零;将创建的 Cf个列向量合并为一个C n X Cf的矩阵M ;
[0019] 步骤1-3 :选取特征数值D,0〈D < Cf,数值D代表之后步骤从源代码中提取出的模 式种类的数量的最大值;D值过小则不能提供足够的精度,过大则不能提供更高的精度;
[0020] 步骤1-4 :对矩阵M进行截断奇异值分解M = USVt,并取前D个奇异值,分解之后 得到矩阵U、S、V ;其中,矩阵U为Cn*D阶矩阵,矩阵S为D*D阶对角矩阵,矩阵V为Cf*D阶 矩阵;
[0021] 矩阵V的每一个行向量与所述程序源代码中的每一个函数一一对应,即矩阵V的 每一个行向量即代表所述程序源代码中的一个函数的模式块,由此得到C f个与程序源代码 的函数一一对应的模式块向量,提取其中与函数F对应的模式块向量;
[0022] 步骤2.模式匹配聚类,其流程图如图3所示;对于步骤1中提取出的Cf个函数的 模式块,进行如下步骤的操作:
[0023] 步骤2-1 :针对程序源代码中除函数F之外的函数所对应的模式块向量,计算每个 模式块向量F1与函数F的模式块向量的欧几里得距离;
[0024] 步骤2-2 :设定欧氏距离阈值δ,将与函数F的模式块向量的欧几里得距离小于等 于阈值S的模式块向量对应的函数提取出来,即将程序源代码中与带有漏洞的函数F具有 较近欧氏距离即较高相似度的函数聚类为一类,
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1