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

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

Info

Publication number
CN105320890B
CN105320890B CN201510632698.3A CN201510632698A CN105320890B CN 105320890 B CN105320890 B CN 105320890B CN 201510632698 A CN201510632698 A CN 201510632698A CN 105320890 B CN105320890 B CN 105320890B
Authority
CN
China
Prior art keywords
dfa
regular expression
grouping
regular
source code
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.)
Active
Application number
CN201510632698.3A
Other languages
English (en)
Other versions
CN105320890A (zh
Inventor
张涛
马媛媛
李伟伟
周诚
邵志鹏
时坚
楚杰
汪晨
费稼轩
何高峰
黄秀丽
陈璐
管小娟
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
State Grid Corp of China SGCC
Smart Grid Research Institute of SGCC
Original Assignee
State Grid Corp of China SGCC
Smart Grid Research Institute of SGCC
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by State Grid Corp of China SGCC, Smart Grid Research Institute of SGCC filed Critical State Grid Corp of China SGCC
Priority to CN201510632698.3A priority Critical patent/CN105320890B/zh
Publication of CN105320890A publication Critical patent/CN105320890A/zh
Application granted granted Critical
Publication of CN105320890B publication Critical patent/CN105320890B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/577Assessing vulnerabilities and evaluating computer system security
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/03Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
    • G06F2221/033Test or assess software

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computing Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明提供一种基于分组DFA的源代码漏洞检测方法,所述方法包括:(1)根据常见源代码漏洞特征构造正则表达式;(2)利用分组DFA算法构造特征匹配DFA引擎;(3)根据所述特征匹配DFA引擎进行漏洞检测。本发明对表达式生成的DFA引擎进行优化,优化了正则表达式分组算法,使分组效果更加良好,内存消耗更加优良,减少了软件安全问题带来的巨大损失。

Description

一种基于分组DFA的源代码漏洞检测方法
技术领域
本发明涉及一种漏洞检测方法,具体涉及一种基于分组DFA的源代码漏洞检测方法。
背景技术
Web应用程序分为前端和后台两部分,前端主要用于页面显示和接受必要的用户输入,后台负责执行整个程序执行逻辑包括对用户输入数据的处理等。程序在接收到用户的输入数据后若没有进行合理的证验和安全过滤处理就直接提交后台服务器访问数据或执行页面跳转,则极可能出现安全漏洞。SQL注入和跨站脚本攻击(也称XSS攻击)是目前最为普遍的两种网络攻击模式,这两种攻击可能会造成应用程序后台数据库数据被盗或者用户隐私泄露等后果,对应用服务提供商和用户都造成了极大的危害。根据OWASP(Open WebApplication Security Project)2012、2013年的TOP 10Web程序安全脆弱性报告,排名前两位的脆弱性分别为Injection Flaws(典型如SQL注入等)和XSS攻击。注入攻击一般是指攻击者将其精心构造的恶意数据通过应用程序输入接口提交给后台服务器验证,由于后台服务器逻辑验证的缺陷导致数据库服务器执行包含恶意指令的代码而导致安全性问题的发生;XSS攻击是指攻击者在Web表单里面插入恶意脚本代码欺骗客户端浏览器执行从而达成攻击。Web程序对包含在Web请求中的用户输入数据缺乏有效的验证及过滤机制是Web程序存在上述两种脆弱性的重要原因,攻击者可以构造能够避开服务器端程序的检查的输入数据来绕过验证从而实施攻击。因此对程序中的用户输入数据进行分析检查显得尤为重要,同时正则表达式以其强大的匹配检测功能和简单易用性在当前互联网的安全问题研究方面受到了广泛的关注。
一个正则表达式可以对应生成一个DFA结构,在使用DFA去匹配字符串的时候,每消耗一个字符只有一个确定的迁移状态与它对应,其时间复杂度是线性增长的,和目标字符串的长度成正比,空间复杂度是一个常量。但是,当正则表达式比较复杂的时候,编译成的DFA可能会状态膨胀,消耗大量的空间。所以,正则表达式的DFA状态数和正则表达式自身的结构也有很大的关系,可以总结为:正则表达式的结构越复杂,通配符越多,DFA的状态数也有可能越多;当正则表达式含有复杂的通配符的时候,DFA需要利用不同的状态来区分这些通配符产生的歧义匹配,从而引起其DFA的状态数膨胀。
为了描述正则表达式的膨胀的相关特性,提出了正则表达式膨胀率的概念,其定 义形式如式:
其中,“#”代表了自动机的状态数。公式的具体含义是:#(NFA)是NFA的状态数,它表示了正则表达式的长度,#(DFA)表示DFA的状态个数,减去NFA的状态个数,就代表DFA膨胀的部分,DR表示了DFA膨胀的相对量。
可以看出,正则表达式越复杂,那么其膨胀率也就越高,所以可以认为,当有膨胀率高的正则表达式加入组合DFA的时候,生成的DFA膨胀率也就越高,使得内存消耗更高,从而对软件安全问题带来了巨大的损失。
发明内容
为了克服上述现有技术的不足,本发明提供一种基于分组DFA的源代码漏洞检测方法,本发明优化了正则表达式分组算法,使得分组效果更加良好,内存消耗更加优良。
为了实现上述发明目的,本发明采取如下技术方案:
一种基于分组DFA的源代码漏洞检测方法,所述方法包括如下步骤:
(1)根据常见源代码漏洞特征构造正则表达式;
(2)利用分组DFA算法构造特征匹配DFA引擎;
(3)根据所述特征匹配DFA引擎进行漏洞检测。
优选的,所述步骤(2)中包括如下步骤:
步骤2-1、计算正则表达式生成的DFA节点状态数,确定漏洞特征构建的各个正则表达式之间的两两相互作用情况;
步骤2-2、基于对比正则表达式两两相互作用的结果,对正则表达式进行分组;
步骤2-3、检查是否存在还未分组的漏洞特征正则表达式,若存在,则转到步骤2-2,否则转到步骤2-4;
步骤2-4、将各个漏洞特征正则表达式的分组输出,构成源代码漏洞检测的特征匹配DFA引擎。
优选的,所述步骤2-1中,包括如下步骤:
步骤2-1-1、随机选取两个正则表达式编译成DFA;
步骤2-1-2、若所述两个正则表达式一起编译出的复合DFA包含的状态数,大于两个正则表达式独立的DFA的状态数之和,则这两个正则表达式是相互作用的。
优选的,所述步骤2-2中包括如下步骤:
步骤2-2-1、通过对比正则表达式两两相互作用的结果,找出与其他未分组的正则表达式相互作用最少的正则表达式加入一个新的分组;
步骤2-2-2、找出所有未分组的正则表达式中与当前所有已分组中的正则表达式之间没有相互作用的正则表达式集合RegEx_Set;
步骤2-2-3、分别计算集合RegEx_Set中的每个元素与每个已存在分组内部的正则表达式之间的相似度,并计算每个分组的所有相似度的平均值;
步骤2-2-4、选取所有计算出的相似度平均值最高值,假设此值由正则表达式R1和分组Gn计算得出,则将R1加入分组Gn,将R1标记为已分组;
步骤2-2-5、检查集合RegEx_Set中是否存在未分组的元素,若存在,则转到步骤2-2-4,否则转到步骤2-2-6;
步骤2-2-6、整理各个分组内的正则表达式,并标记各自的分组情况。
优选的,所述步骤(3)中包括如下步骤:
步骤3-1、构建待测源代码的漏洞正则表达式;
步骤3-2、加载入分组的特征匹配DFA引擎中进行检测;
步骤3-3、待检测源代码的漏洞正则表达式与所述特征匹配DFA引擎中的漏洞正则表达式匹配结果一致,则判定存在漏洞。
优选的,所述步骤2-2-3中,所述正则表达式之间的相似度的计算公式为:
式中DL(DFA1、DFA2)为DFA1和DFA2的相似度,范围为0~1,#(DFA1)为DFA1的状态节点数,#(DFA2)为DFA2的状态节点数,#(DFA合并)为DFA1和DFA2合并后的状态节点数。
与现有技术相比,本发明的有益效果在于:
本发明对表达式生成的DFA引擎进行优化,优化了正则表达式分组算法,使分组效果更加良好,内存消耗更加优良,减少了软件安全问题带来的巨大损失。
附图说明
图1是本发明提供的一种基于分组DFA的源代码漏洞检测方法的流程图,
图2是本发明提供的构造分组DFA特征匹配引擎的流程图
具体实施方式
下面结合附图对本发明作进一步详细说明。
针对Web应用中常见的SQL注入和跨站脚本漏洞的特征,构建相应的正则表达式。当构造检测SQL注入攻击的正则表达式时,程序的输入验证逻辑必须能够考虑到来自用户的各种各样类型的输入,包括来自于表格和cookie中的嫌疑信息。同时如果发现很多警告来自于一个检测单引号或者分号的签名,其可能是来自自身的Web程序产生的cookie中的正常输入。因此必须为每一个特定的Web应用程序去评估每一个可能的签名,从而能够做到分辨恶意数据和正常输入来做到更有效率的检测。尝试一次典型的SQL注入一般围绕使用单引号来操纵原始的查询从而使其可以产生一个恒为真的条件来通过程序的验证,根据此特征,构建元字符正则表达式用以检测“=”号和其十六进制表示,以及零个或多个非换行符的字符和检查单引号、双破折号或分号。构建关键字的正则表达式可以准确检测攻击者恶意构造的多种判定条件恒为真的情况,比如“1’or’1’=’1”、“1’or 2>1—”等。同时包含了等号和不等号的情况,覆盖面更广。攻击者针对MS SQL Server数据库发起的存储过程攻击,一般情况下攻击者会尝试执行“cmdshell”命令,构建存储过程的正则表达式用以检测此种特征。
为了检测Web网站是否存在跨站脚本的脆弱性时,攻击者可能首先利用简单的HTML标记比如表示粗体显示的<b>,斜体显示的<i>,下划线显示的<u>。另外其也会尝试一些简单的脚本标记警告如<script>alert("OK")</script>,根据此特征构建检测普通XSS攻击的正则表达式,可以捕获尝试利用<b>、<u>、<script>的攻击。构建检测“<img src=>”攻击的正则表达式,检测攻击者利用“img src=”发起跨站访问的动作。构建极端检测XSS攻击的正则表达式,只要HTML标签的尖括号中间不是换行符的内容都能被检测出来,但是这样存在比较高的误报率。
如图1所示,基于分组DFA的源代码漏洞检测算法,具体步骤如下:
步骤1、根据常见源代码漏洞缺陷特征构造正则表达式,包含SQL注入,XSS跨站脚本等常见漏洞。
步骤2、构建好所有漏洞特征的正则表达式之后,接下来利用分组DFA算法构造特征匹配引擎,构造特征匹配引擎是基于分组DFA的源代码漏洞检测算法的核心部分,具体过程如图2所示。主要包括如下子步骤:
步骤101、计算正则表达式生成的DFA的状态数(DFA=(K,Σ,f,S,Z)中的K是一个有穷集合,其中的每一个元素称为一个状态),确定软件漏洞特征构建的各个正则表达式之间的两两相互作用情况。
随机选取两个正则表达式编译成DFA,若所述两个正则表达式一起编译出的复合DFA包含的状态数,大于两个正则表达式独立的DFA的状态数之和,则这两个正则表达式是相互作用的。
步骤102、通过对比正则表达式两两相互作用的结果,找出与其他未分组的正则表达式相互作用最少的正则表达式加入一个新的分组。
步骤103、找出所有未分组的正则表达式中与当前所有已分组中的正则表达式之间没有相互作用的正则表达式集合RegEx_Set。
步骤104、分别计算集合RegEx_Set中的每个元素与每个已存在分组内部的正则表达式之间的相似度,并计算每个分组的所有相似度的平均值。
所述正则表达式之间的相似度的计算公式为:
式中DL(DFA1、DFA2)为DFA1和DFA2的相似度,范围为0~1,#(DFA1)为DFA1的状态节点数,#(DFA2)为DFA2的状态节点数,#(DFA合并)为DFA1和DFA2合并后的状态节点数。
步骤105、选取所有计算出的相似度平均值最高值,假设此值由正则表达式R1和分组Gn计算得出,则将R1加入分组Gn,将R1标记为已分组。
步骤106、检查集合RegEx_Set中是否存在未分组的元素,如果存在,则转到步骤105,否则转到步骤107。
步骤107、整理各个分组内的正则表达式,并标记各自的分组情况。
步骤108、检查是否存在还未分组的漏洞特征正则表达式,如果存在,则转到步骤102,否则转到步骤109。
步骤109、将各个漏洞特征正则表达式的分组输出,构成源代码漏洞检测的特征匹配DFA引擎。
步骤3、利用生成的源代码漏洞检测的特征匹配DFA引擎进行漏洞检测,构建待测源代码的漏洞正则表达式,加载入分组DFA特征匹配引擎中进行检测,若待检测源代码的漏洞正则表达式与特征匹配DFA引擎中的漏洞正则表达式匹配结果一致,则判定存在漏洞。
最后应当说明的是:以上实施例仅用以说明本发明的技术方案而非对其限制,尽管参照上述实施例对本发明进行了详细的说明,所属领域的普通技术人员应当理解:依然可以对本发明的具体实施方式进行修改或者等同替换,而未脱离本发明精神和范围的任何修改或者等同替换,其均应涵盖在本发明的权利要求范围当中。

Claims (1)

1.一种基于分组DFA的源代码漏洞检测方法,其特征在于,所述方法包括如下步骤:
(1)根据常见源代码漏洞特征构造正则表达式;
(2)利用分组DFA算法构造特征匹配DFA引擎;
(3)根据所述特征匹配DFA引擎进行漏洞检测;
所述步骤(2)中包括如下步骤:
步骤2-1、计算正则表达式生成的DFA节点状态数,确定漏洞特征构建的各个正则表达式之间的两两相互作用情况;
步骤2-2、基于对比正则表达式两两相互作用的结果,对正则表达式进行分组;
步骤2-3、检查是否存在还未分组的漏洞特征正则表达式,若存在,则转到步骤2-2,否则转到步骤2-4;
步骤2-4、将各个漏洞特征正则表达式的分组输出,构成源代码漏洞检测的特征匹配DFA引擎;
所述步骤2-1中,包括如下步骤:
步骤2-1-1、随机选取两个正则表达式编译成DFA;
步骤2-1-2、若所述两个正则表达式一起编译出的复合DFA包含的状态数,大于两个正则表达式独立的DFA的状态数之和,则这两个正则表达式是相互作用的;
所述步骤2-2中包括如下步骤:
步骤2-2-1、通过对比正则表达式两两相互作用的结果,找出与其他未分组的正则表达式相互作用最少的正则表达式加入一个新的分组;
步骤2-2-2、找出所有未分组的正则表达式中与当前所有已分组中的正则表达式之间没有相互作用的正则表达式集合RegEx_Set;
步骤2-2-3、分别计算集合RegEx_Set中的每个元素与每个已存在分组内部的正则表达式之间的相似度,并计算每个分组的所有相似度的平均值;
步骤2-2-4、选取所有计算出的相似度平均值最高值,假设此值由正则表达式R1和分组Gn计算得出,则将R1加入分组Gn,将R1标记为已分组;
步骤2-2-5、检查集合RegEx_Set中是否存在未分组的元素,若存在,则转到步骤2-2-4,否则转到步骤2-2-6;
步骤2-2-6、整理各个分组内的正则表达式,并标记各自的分组情况;
所述步骤(3)中包括如下步骤:
步骤3-1、构建待测源代码的漏洞正则表达式;
步骤3-2、加载入分组的特征匹配DFA引擎中进行检测;
步骤3-3、待检测源代码的漏洞正则表达式与所述特征匹配DFA引擎中的漏洞正则表达式匹配结果一致,则判定存在漏洞;
所述步骤2-2-3中,所述正则表达式之间的相似度的计算公式为:式中为DFA1和DFA2的相似度,范围为0~1,#(DFA1)为DFA1的状态节点数,#(DFA2)为DFA2的状态节点数,#(DFA合并)为DFA1和DFA2合并后的状态节点数。
CN201510632698.3A 2015-09-29 2015-09-29 一种基于分组dfa的源代码漏洞检测方法 Active CN105320890B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510632698.3A CN105320890B (zh) 2015-09-29 2015-09-29 一种基于分组dfa的源代码漏洞检测方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510632698.3A CN105320890B (zh) 2015-09-29 2015-09-29 一种基于分组dfa的源代码漏洞检测方法

Publications (2)

Publication Number Publication Date
CN105320890A CN105320890A (zh) 2016-02-10
CN105320890B true CN105320890B (zh) 2019-02-22

Family

ID=55248255

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510632698.3A Active CN105320890B (zh) 2015-09-29 2015-09-29 一种基于分组dfa的源代码漏洞检测方法

Country Status (1)

Country Link
CN (1) CN105320890B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109460663A (zh) * 2018-11-12 2019-03-12 北京知道创宇信息技术有限公司 一种智能合约审计方法、装置及其存储介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101079890A (zh) * 2007-07-04 2007-11-28 杭州华三通信技术有限公司 一种生成特征码确定状态机的方法和装置
CN101853301A (zh) * 2010-05-25 2010-10-06 华为技术有限公司 正则表达式匹配的方法和系统
CN102111402A (zh) * 2010-12-17 2011-06-29 曙光信息产业(北京)有限公司 一种对正则式dfa分组的方法
CN103297293A (zh) * 2013-05-17 2013-09-11 华为技术有限公司 报文检测方法及装置

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP1436936A4 (en) * 2001-09-12 2006-08-02 Safenet Inc RECOGNITION OF FORMS OF HIGH-SPEED DATA FLOW

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101079890A (zh) * 2007-07-04 2007-11-28 杭州华三通信技术有限公司 一种生成特征码确定状态机的方法和装置
CN101853301A (zh) * 2010-05-25 2010-10-06 华为技术有限公司 正则表达式匹配的方法和系统
CN102111402A (zh) * 2010-12-17 2011-06-29 曙光信息产业(北京)有限公司 一种对正则式dfa分组的方法
CN103297293A (zh) * 2013-05-17 2013-09-11 华为技术有限公司 报文检测方法及装置

Also Published As

Publication number Publication date
CN105320890A (zh) 2016-02-10

Similar Documents

Publication Publication Date Title
CN103744802B (zh) Sql注入攻击的识别方法及装置
US9990583B2 (en) Match engine for detection of multi-pattern rules
CN107122221B (zh) 用于正则表达式的编译器
CN112929390B (zh) 一种基于多策略融合的网络智能监控方法
Gu et al. Convolution Neural Network‐Based Higher Accurate Intrusion Identification System for the Network Security and Communication
CN110912889A (zh) 一种基于智能化威胁情报的网络攻击检测系统和方法
CN106506462B (zh) 一种基于表单置乱的网站安全保护方法与装置
CN104954346A (zh) 基于对象分析的攻击识别方法及装置
CN104954345A (zh) 基于对象分析的攻击识别方法及装置
Hou et al. A dynamic detection technique for XSS vulnerabilities
CN105320890B (zh) 一种基于分组dfa的源代码漏洞检测方法
Wan et al. An improved eliminating SQL injection attacks based regular expressions matching
CN106911649A (zh) 一种检测网络攻击的方法和装置
CN108830082A (zh) 一种基于输出点位置的xss漏洞检测参数自动选取方法
Lyu et al. An Efficient and Packing‐Resilient Two‐Phase Android Cloned Application Detection Approach
Zhang et al. Research on SQL injection vulnerabilities and its detection methods
Shrivastava et al. SQL injection attacks: Technique and prevention mechanism
CN106790102A (zh) 一种基于url特征的qr码网络钓鱼识别方法及系统
Wang et al. The research and improvement in the detection of PHP variable webshell based on information entropy
Stephen et al. Prevention of cross site scripting with E-Guard algorithm
Zhang et al. An automated composite scanning tool with multiple vulnerabilities
CN103116543A (zh) 白黑盒结合的Web应用安全检测方法
CN104301300A (zh) 一种检测网络钓鱼欺诈风险的方法、客户端和系统
Zhu et al. Attacker traceability on ethereum through graph analysis
Al-Taharwa et al. Redjsod: A readable javascript obfuscation detector using semantic-based analysis

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant