一种基于分组dfa的源代码漏洞检测方法

文档序号:9564812阅读:440来源:国知局
一种基于分组dfa的源代码漏洞检测方法
【技术领域】
[0001] 本发明涉及一种漏洞检测方法,具体涉及一种基于分组DFA的源代码漏洞检测方 法。
【背景技术】
[0002] Web应用程序分为前端和后台两部分,前端主要用于页面显示和接受必要的用户 输入,后台负责执行整个程序执行逻辑包括对用户输入数据的处理等。程序在接收到用户 的输入数据后若没有进行合理的证验和安全过滤处理就直接提交后台服务器访问数据或 执行页面跳转,则极可能出现安全漏洞。SQL注入和跨站脚本攻击(也称XSS攻击)是目 前最为普遍的两种网络攻击模式,这两种攻击可能会造成应用程序后台数据库数据被盗或 者用户隐私泄露等后果,对应用服务提供商和用户都造成了极大的危害。根据0WASP(0pen Web Application Security Project) 2012、2013 年的 TOP IOWeb 程序安全脆弱性报告,排 名前两位的脆弱性分别为Injection Flaws (典型如SQL注入等)和XSS攻击。注入攻击 一般是指攻击者将其精心构造的恶意数据通过应用程序输入接口提交给后台服务器验证, 由于后台服务器逻辑验证的缺陷导致数据库服务器执行包含恶意指令的代码而导致安全 性问题的发生;XSS攻击是指攻击者在Web表单里面插入恶意脚本代码欺骗客户端浏览器 执行从而达成攻击。Web程序对包含在Web请求中的用户输入数据缺乏有效的验证及过滤 机制是Web程序存在上述两种脆弱性的重要原因,攻击者可以构造能够避开服务器端程序 的检查的输入数据来绕过验证从而实施攻击。因此对程序中的用户输入数据进行分析检查 显得尤为重要,同时正则表达式以其强大的匹配检测功能和简单易用性在当前互联网的安 全问题研究方面受到了广泛的关注。
[0003] 一个正则表达式可以对应生成一个DFA结构,在使用DFA去匹配字符串的时候,每 消耗一个字符只有一个确定的迀移状态与它对应,其时间复杂度是线性增长的,和目标字 符串的长度成正比,空间复杂度是一个常量。但是,当正则表达式比较复杂的时候,编译成 的DFA可能会状态膨胀,消耗大量的空间。所以,正则表达式的DFA状态数和正则表达式自 身的结构也有很大的关系,可以总结为:正则表达式的结构越复杂,通配符越多,DFA的状 态数也有可能越多;当正则表达式含有复杂的通配符的时候,DFA需要利用不同的状态来 区分这些通配符产生的歧义匹配,从而引起其DFA的状态数膨胀。
[0004] 为了描述正则表达式的膨胀的相关特性,提出了正则表达式膨胀率的概念,其定 义形式如式:
[0005] 其中,代表了自动机的状态数。公式的具体含义是:#(NFA)是NFA的状态数,它 表示了正则表达式的长度,# (DFA)表示DFA的状态个数,减去NFA的状态个数,就代表DFA 膨胀的部分,DR表示了 DFA膨胀的相对量。
[0006] 可以看出,正则表达式越复杂,那么其膨胀率也就越高,所以可以认为,当有膨胀 率高的正则表达式加入组合DFA的时候,生成的DFA膨胀率也就越高,使得内存消耗更高, 从而对软件安全问题带来了巨大的损失。

【发明内容】

[0007] 为了克服上述现有技术的不足,本发明提供一种基于分组DFA的源代码漏洞检测 方法,本发明优化了正则表达式分组算法,使得分组效果更加良好,内存消耗更加优良。
[0008] 为了实现上述发明目的,本发明采取如下技术方案:
[0009] 一种基于分组DFA的源代码漏洞检测方法,所述方法包括如下步骤:
[0010] (1)根据常见源代码漏洞特征构造正则表达式;
[0011] (2)利用分组DFA算法构造特征匹配DFA引擎;
[0012] (3)根据所述特征匹配DFA引擎进行漏洞检测。
[0013] 优选的,所述步骤(2)中包括如下步骤:
[0014] 步骤2-1、计算正则表达式生成的DFA节点状态数,确定漏洞特征构建的各个正则 表达式之间的两两相互作用情况;
[0015] 步骤2-2、基于对比正则表达式两两相互作用的结果,对正则表达式进行分组;
[0016] 步骤2-3、检查是否存在还未分组的漏洞特征正则表达式,若存在,则转到步骤 2-2,否则转到步骤2-4 ;
[0017] 步骤2-4、将各个漏洞特征正则表达式的分组输出,构成源代码漏洞检测的特征匹 配DFA引擎。
[0018] 优选的,所述步骤2-1中,包括如下步骤:
[0019] 步骤2-1-1、随机选取两个正则表达式编译成DFA ;
[0020] 步骤2-1-2、若所述两个正则表达式一起编译出的复合DFA包含的状态数,大于两 个正则表达式独立的DFA的状态数之和,则这两个正则表达式是相互作用的。
[0021] 优选的,所述步骤2-2中包括如下步骤:
[0022] 步骤2-2-1、通过对比正则表达式两两相互作用的结果,找出与其他未分组的正则 表达式相互作用最少的正则表达式加入一个新的分组;
[0023] 步骤2-2-2、找出所有未分组的正则表达式中与当前所有已分组中的正则表达式 之间没有相互作用的正则表达式集合RegEx_Set ;
[0024] 步骤2-2-3、分别计算集合RegEX_Set中的每个元素与每个已存在分组内部的正 则表达式之间的相似度,并计算每个分组的所有相似度的平均值;
[0025] 步骤2-2-4、选取所有计算出的相似度平均值最高值,假设此值由正则表达式Rl 和分组Gn计算得出,则将Rl加入分组Gn,将Rl标记为已分组;
[0026] 步骤2-2-5、检查集合RegEX_Set中是否存在未分组的元素,若存在,则转到步骤 2-2-4,否则转到步骤2-2-6 ;
[0027] 步骤2-2-6、整理各个分组内的正则表达式,并标记各自的分组情况。
[0028] 优选的,所述步骤(3)中包括如下步骤:
[0029] 步骤3-1、构建待测源代码的漏洞正则表达式;
[0030] 步骤3-2、加载入分组的特征匹配DFA引擎中进行检测;
[0031] 步骤3-3、待检测源代码的漏洞正则表达式与所述特征匹配DFA引擎中的漏洞正 则表达式匹配结果一致,则判定存在漏洞。
[0032] 优选的,所述步骤2-2-3中,所述正则表达式之间的相似度的计算公式为:
[0034] 式中为DFA JP DFA 2的相似度,范围为0~1,# (DFA J为DFA^状态节 点数,# (DFA2)为DFA^状态节点数,# (DFA μ )为DFAJP DFA 2合并后的状态节点数。
[0035] 与现有技术相比,本发明的有益效果在于:
[0036] 本发明对表达式生成的DFA引擎进行优化,优化了正则表达式分组算法,使分组 效果更加良好,内存消耗更加优良,减少了软件安全问题带来的巨大损失。
【附图说明】
[0037] 图1是本发明提供的一种基于分组DFA的源代码漏洞检测方法的流程图,
[0038] 图2是本发明提供的构造分组DFA特征匹配引擎的流程图
【具体实施方式】
[0039] 下面结合附图对本发明作进一步详细说明。
[0040] 针对Web应用中常见的SQL注入和跨站脚本漏洞的特征,构建相应的正则表达式。 当构造检测SQL注入攻击的正则表达式时,程序的输入验证逻辑必须能够考虑到来自用户 的各种各样类型的输入,包括来自于表格和cookie中的嫌疑信息。同时如果发现很多警告 来自于一个检测单引号或者分号的签名,其可能是来自自身的Web程序产生的cookie中的 正常输入。因此必须为每一个特定的Web应用程序去评估每一个可能的签名,从而能够做 到分辨恶意数据和正常输入来做到更有效率的检测。尝试一次典型的SQL注入一般围绕使 用单引号来操纵原始的查询从而使其可以产生一个恒为真的条件来通过程序的验证,根据 此特征,构建元字符正则表达式用以检测"="号和其十六进制表示,以及零个或多个非换 行符的字符和检查单引号、双破折号或分号。构建关键字的正则表达式可以准确检测攻击 者恶意构造的多种判定
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1