CN109670318B - 一种基于核控制流图循环验证的漏洞检测方法 - Google Patents

一种基于核控制流图循环验证的漏洞检测方法 Download PDF

Info

Publication number
CN109670318B
CN109670318B CN201811578979.5A CN201811578979A CN109670318B CN 109670318 B CN109670318 B CN 109670318B CN 201811578979 A CN201811578979 A CN 201811578979A CN 109670318 B CN109670318 B CN 109670318B
Authority
CN
China
Prior art keywords
vulnerability
bug
program
day
cfg
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
CN201811578979.5A
Other languages
English (en)
Other versions
CN109670318A (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.)
Institute of Software of CAS
Original Assignee
Institute of Software of CAS
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 Institute of Software of CAS filed Critical Institute of Software of CAS
Priority to CN201811578979.5A priority Critical patent/CN109670318B/zh
Publication of CN109670318A publication Critical patent/CN109670318A/zh
Application granted granted Critical
Publication of CN109670318B publication Critical patent/CN109670318B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

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)
  • Stored Programmes (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明涉及一种基于核控制流图循环验证的漏洞检测方法,包括:1)生成n‑day漏洞的CCFG;2)生成待测程序CFG,在待测程序CFG中搜索漏洞CCFG的核;3)将漏洞CCFG在待测程序CFG上围绕核进行循环验证,计算待测程序漏洞率;4)将待测程序漏洞率与阈值比较,判断待测程序是否存在该漏洞,根据候选漏洞核的位置对漏洞进行定位并输出漏洞检索报告。本发明为了解决基于控制流图的漏洞检测方法对n‑day漏洞检测准确性不足的问题,提出了核控制流图和循环验证的概念和技术,以及完整的基于核控制流图循环验证的漏洞检测方法。本发明可以提高漏洞挖掘人员在检测n‑day漏洞时的准确度,进而提高安全漏洞挖掘能力。

Description

一种基于核控制流图循环验证的漏洞检测方法
技术领域
本发明属于计算机技术领域,特别涉及一种基于核控制流图循环验证的漏洞检测方法。
背景技术
随着计算机行业的发展,计算机软件已成为生活不可或缺的一部分,各行各业都在广泛地应用计算机***,包括医疗、教育、军事、政治和新零售等领域。在计算机***的迅速发展和普及之下,软件漏洞已然成为威胁计算机***安全的重大问题。在软件生命周期中,各种漏洞频出不穷,容易遭受黑客攻击利用,从而造成财产损失。据MITRE公司发布的数据,截止2018年11月,CVE(Common Vulnerabilities and Exposures,公共漏洞和暴露数据库)中已存在约109000个条目,漏洞数量呈爆发式增长,这些已知的漏洞称为n-day漏洞。n-day漏洞虽然是已知的,但其在计算机***中仍然广泛存在,并具有一定的恶劣影响,因此对n-day漏洞的检测是软件安全领域的热点问题。
目前,对n-day漏洞的检测通常采用基于程序图结构的漏洞检测技术,该技术将待测程序和n-day漏洞代码用图结构进行抽象表示,然后对待测程序与漏洞代码的图结构进行相似性判定,相似性越高则待测程序越有可能存在该漏洞,从而实现n-day漏洞的检测。2010年Pham等在ASE会议上的论文《Detection of recurring softwarevulnerabilities》中通过计算抽象语法树相似度的方式对代码复用造成的重复漏洞进行检测,该方法在检测代码复用引发的漏洞时具有较好效果。2012年Li等在ICSE会议上的论文《CBCD:Cloned Buggy Code Detector》中通过计算程序依赖图相似度的方式进行相似代码的检测,该方法能较好地检测出潜在问题的克隆代码。然而,在这些方法中,如果待测程序在含有n-day漏洞的程序代码段处进行了修改或者二次开发,将导致待测程序中漏洞代码段与原n-day漏洞的图结构存在一定的差异。在这种情况下,图的相似度会降低,从而导致基于图结构的漏洞检测方法的准确率降低。此时,不应仅仅对待测程序和n-day漏洞的图结构进行一次性的验证,而应在待测程序的不同位置进行多次验证,获得综合考量的图结构相似度,进而避免准确率的降低。
发明内容
本发明的技术问题:克服现有技术的不足,提供一种基于核控制流图循环验证的漏洞检测方法,该方法通过构建已知漏洞的核控制流图,采用核控制流图的循环验证算法,准确地对待测程序进行分析处理并输出漏洞检测报告,可以有效地辅助安全分析人员发现待测程序中的漏洞,提高安全人员进行漏洞检测的准确度。
本发明采用如下技术方案:一种基于核控制流图循环验证的漏洞检测方法,其步骤包括:
1)从漏洞信息发布平台中采集一个n-day漏洞,生成该n-day漏洞的原始控制流图,称为漏洞CFG,根据漏洞CFG生成该n-day漏洞的CCFG。CCFG是核控制流图(Core ControlFlow Graph)的简称,其是具有核的控制流图。其中,核定义为漏洞CFG中的连通子图,该连通子图为该漏洞CFG中不可被修改、扩充或归约的最大公共连通子图,所有具有该漏洞的程序的CFG中均包含该连通子图。当漏洞CFG的不可被修改或归约的最大公共连通子图为平凡图时,其核退化为一个节点,此时称该核为平凡核。在待测程序中,n-day漏洞CCFG的核是该漏洞存在的必要非充分条件。将CCFG形式化定义为<GCFG,GC,C>,其中GCFG=<V,E>是n-day漏洞的原始控制流图,V是控制流图的节点集,E是控制流图的边集,
Figure BDA0001917365270000021
为CCFG的核,C为节点代码的集合,每个Cv∈C指向v节点中的具体代码,其中v∈V。
2)将即将检测的未知漏洞的程序称为待测程序,对待测程序生成CFG将对待测程序生成的CFG称为待测程序CFG,在待测程序CFG中搜索该n-day漏洞CCFG的核。定义待测程序CFG中与该n-day漏洞CCFG的核匹配的子图为待测程序候选漏洞核,由于漏洞CCFG的核存在是该漏洞存在的必要条件,所以在待测程序候选漏洞核处才有可能构成该n-day漏洞,以此缩小循环验证的范围,进而提高循环验证的速度。
3)将该n-day漏洞的CCFG围绕该候选漏洞核在待测程序CFG上进行循环验证,计算每次验证时的权重和分值。其中,循环验证是将漏洞CFG与待测程序CFG以不同节点映射进行多次比对的过程,并将每次比对的结果进行综合计算,进而考虑到更加全面的待测程序信息,提高漏洞检测准确度。在循环验证完毕之后,根据每次验证的权重对分值进行加权平均,获得此待测程序的漏洞率。定义漏洞率为度量待测程序存在该n-day漏洞的可能性的数字量,漏洞率的数值越大,则该待测程序中存在该n-day漏洞的可能性越高。
4)将待测程序漏洞率与阈值进行比较,大于阈值则判定该待测程序存在该n-day漏洞,否则判定该待测程序不存在该n-day漏洞,并根据候选漏洞核在待测程序中的位置对待测程序中的n-day漏洞进行初步定位,输出漏洞检测报告。
进一步地,步骤1)中,包括以下步骤:
a)从漏洞信息发布平台中采集一个n-day漏洞信息,包括漏洞编号、种类、涉及项目名称以及涉及的漏洞代码段。
b)根据该n-day漏洞的漏洞代码段生成该漏洞的控制流图,将该控制流图记为GV,GV=<VV,EV>,其中下标V是漏洞(Vulnerability)的简称。定义Cv为v节点中的具体代码,其中v∈VV,C为代码(Code)的简称。定义
Figure BDA0001917365270000031
为GV的节点代码集。
c)采集已知的、具有该n-day漏洞的程序,对这些程序的漏洞代码段分别生成CFG,记为CFGS,CFGS={CFG1,CFG2,…,CFGn},计算GV,CFG1,CFG2,…,CFGn的最大公共子图,将该最大公共子图作为n-day漏洞CCFG的核,记为GC,其中
Figure BDA0001917365270000038
d)构建三元组<GV,GC,C>作为该n-day漏洞的CCFG。
进一步地,步骤2)中,在待测程序CFG中搜索该n-day漏洞CCFG的核GC包括以下步骤:
a)将待测程序生成CFG,将待测程序CFG记为GP,GP=<VP,EP>,其中下标P是程序(Program)的简称。
b)设该n-day漏洞CCFG=<GV,GC,C>,其中GV=<VV,EV>,GC=<VC,EC>,
Figure BDA00019173652700000310
在GP中搜索与GC同构的子图。
c)设待测程序CFG中与GC同构的子图为G′C,G′C=<V′C,E′C>,f:V′C→VC为该同构的节点映射。对每对节点映射f(v′c)=vc,其中v′c∈V′c,vc∈VC,通过以下方法计算两者节点是否匹配:设v′c和vc节点的具体代码分别为
Figure BDA0001917365270000032
Figure BDA0001917365270000033
如果
Figure BDA0001917365270000034
Figure BDA0001917365270000035
的子串,则判定两个节点匹配,否则判定两个节点不匹配。如果每对节点都匹配,则代表在待测程序CFG中成功搜索到该n-day漏洞CCFG的核,将待测程序CFG中该子图标记为待测程序候选漏洞核。
进一步地,步骤3)中,将n-day漏洞CCFG围绕待测程序候选漏洞核在待测程序CFG上进行循环验证,并计算每次验证时的权重和分值,包括以下步骤:
a)设候选漏洞核为G′C,G′C=<V′C,E′C>,n-day漏洞CCFG为<GV,GC,C>,其中GV=<VV,EV>,GC=<VC,EC>,由于G′C与GC同构,又因为
Figure BDA0001917365270000039
因此可得|V′C|≤|VV|。
b)在待测程序CFG中选择一个包含该候选漏洞核G′C、节点数为|VV|的连通子图,将该连通子图称为此次验证的覆盖子图,记为G′V,G′V=<V′V,E′V>。
c)计算此次验证的权重。设候选漏洞核G′C与n-day漏洞核GC同构时的节点映射为g:V′C→VC,定义双射函数f:V′V→VV,其中
Figure BDA0001917365270000041
计算在每个双射函数f:V′V→VV下G′v与GV的边相似度ES(G′V,GV,f),即:
Figure BDA0001917365270000042
其中ES是边相似度(Edge Similarity)的简称。取得最大的边相似度作为G′V与GV的最终图相似度,并将图相似度作为此次验证的权重w,即:
w=Similarity(G′V,GV)=max(ES(G′V,GV,f))。
d)计算此次验证的分值。将取得最大图相似度的双射函数f,将其记为fmax。设fmax(v′v)=vv,v′v∈V′V,vv∈VV
Figure BDA0001917365270000043
为v′v节点的代码,
Figure BDA0001917365270000044
为vv节点的代码,计算
Figure BDA0001917365270000045
Figure BDA0001917365270000046
的最长公共子序列,将最长公共子序列长度除以
Figure BDA0001917365270000047
长度进行归一化,将归一化后的最长公共子序列长度记为
Figure BDA0001917365270000048
其中LCS是最长公共子序列(Longest CommonSequence)的简称。将每对v′v和vv节点的归一化后的最长公共子序列长度进行平均处理,作为此次验证的分值s,即:
Figure BDA0001917365270000049
e)判断待测程序CFG中是否仍具有未验证的包含候选漏洞核G′C、节点数为|VV|的连通子图,若有则继续对剩余连通子图进行验证,并计算每次验证时的权重和分值。
f)循环验证完毕之后,计算此待测程序的漏洞率。设n-day漏洞的CCFG围绕该候选漏洞核G′C共进行了n次验证,且每次验证时的权重为w1,w2…wn,分值为s1,s2…sn,计算待测程序的漏洞率vr,即:
Figure BDA00019173652700000410
进一步地,步骤4)中,包括以下步骤:
a)对已知存在该漏洞的程序实施本方法,并根据通过本方法获得的漏洞率与真值进行统计分析,进而获得经验性阈值。
b)将待测程序的漏洞率与阈值进行比较,漏洞率大于阈值则判定该待测程序具有该漏洞,否则判定该待测程序不具有该漏洞。
c)根据待测程序候选漏洞核的位置,对待测程序中的n-day漏洞进行定位。
d)根据漏洞判定结果和漏洞定位结果输出漏洞检测报告。
本发明与现有技术相比的优点在于:当今现有技术普遍通过将待测程序图结构与漏洞图结构进行一次性的相似度比对,如果待测程序在含有n-day漏洞的程序代码段处进行了修改或者二次开发,将导致待测程序中漏洞代码段与原n-day漏洞的图结构存在一定的差异,在这种情况下,图的相似度会降低,从而导致基于图结构的漏洞检测方法的准确率降低。本发明通过生成n-day漏洞的核控制流图,将n-day漏洞的核控制流图与待测程序控制流图进行多次循环验证的方式,提高了基于图结构的漏洞检测方法的准确率,进而提高安全漏洞挖掘能力。
附图说明
图1是基于核控制流图循环验证的漏洞检测方法的流程图;
图2是n-day漏洞核控制流图生成方法的流程图;
图3是在待测程序CFG中搜索该n-day漏洞CCFG的核的流程图;
图4是将n-day漏洞CCFG在待测程序CFG上进行循环验证的流程图;
图5是根据漏洞率判定待测程序是否存在n-day漏洞并输出漏洞检测报告的流程图。
具体实施方式
下面结合附图,对本发明做进一步的说明。
如图1所示,本发明基于核控制流图循环验证的漏洞检测方法,主要包括以下步骤:
1)从漏洞信息发布平台中采集一个n-day漏洞,生成该n-day漏洞的CCFG,其中采集n-day漏洞并生成CCFG的流程如图2所示,具体说明如下:
1a)从漏洞信息发布平台中采集一个n-day漏洞信息,包括漏洞编号、种类、涉及项目名称以及涉及的漏洞代码段,转到1b)。
1b)根据该n-day漏洞的漏洞代码段生成该漏洞的控制流图,将该控制流图记为GV,GV=<VV,EV>,其中下标V是漏洞(Vulnerability)的简称。定义Cv为v节点中的具体代码,其中v∈VV,C为代码(Code)的简称。定义
Figure BDA0001917365270000051
为GV的节点代码集,转到1c)。
1c)采集已知的、具有该n-day漏洞的程序的漏洞代码段,转到1d)。
1d)对已知的、具有该n-day漏洞的程序的漏洞代码段分别生成CFG,记为CFGS,CFGS={CFG1,CFG2,…,CFGn},转到1e)。
1e)计算GV,CFG1,CFG2,…,CFGn的最大公共子图,将该最大公共子图作为n-day漏洞CCFG的核,记为GC,其中
Figure BDA0001917365270000052
转到1f)。
1f)构建三元组<GV,GC,C>作为该n-day漏洞的CCFG。
2)对待测程序生成CFG,在待测程序CFG中搜索该n-day漏洞CCFG的核,其中在待测程序CFG中搜索该n-day漏洞CCFG的核的流程如图3所示,具体说明如下:
2a)将待测程序生成CFG,将待测程序CFG记为GP,GP=<VP,EP>,其中下标P是程序(Program)的简称,设该n-day漏洞CCFG=<GV,GC,C>,其中GV=<VV,EV>,GC=<VC,EC>,转到2b)。
2b)判断待测程序CFG中是否存在与n-day漏洞CCFG的核同构的子图,若是,则转到2c),若否,则转到2g)。
2c)设待测程序CFG中与GC同构的子图为G′C,G′C=<V′C,E′C>,f:V′C→VC为该同构的节点映射。取其中一对节点映射v′c→vc,其中v′c∈V′C,vc∈VC,转到2d)。
2d)设v′c和vc节点的具体代码分别为
Figure BDA0001917365270000061
Figure BDA0001917365270000062
如果
Figure BDA0001917365270000063
Figure BDA0001917365270000064
的子串,则判定两个节点匹配,则转到2e),如果
Figure BDA0001917365270000065
不是
Figure BDA0001917365270000066
的子串,则判定两个节点不匹配,则转到2g)。
2e)判断该同构子图中是否对所有节点映射都已进行过处理,若是,则转到2f),若否,则转到2c)。
2f)将待测程序CFG中该子图标记为待测程序候选漏洞核。
2g)判定待测程序不具有该漏洞。
3)将该n-day漏洞的CCFG围绕该候选漏洞核在待测程序CFG上进行循环验证并计算每次验证时的权重和分值,在循环验证完毕之后,根据每次验证的权重对分值进行加权平均,获得此待测程序的漏洞率,其中将n-day漏洞CCFG在待测程序CFG上进行循环验证的流程如图4所示,具体说明如下:
3a)设待测程序候选漏洞核为G′C,G′C=<V′C,E′C>,n-day漏洞CCFG为<GV,GC,C>,其中GV=<VV,EV>,GC=<VC,EC>。判断待测程序CFG中是否存在包含该候选漏洞核G′C、节点数为|VV|的连通子图,若是,转到3b),若否,则转到3j)。
3b)将该连通子图记为G′V,G′V=<V′V,E′V>,设候选漏洞核G′C与n-day漏洞核GC同构时的节点映射为g:V′C→VC,定义双射函数f:V′V→VV,其中
Figure BDA0001917365270000068
转到3c)。
3c)计算在该双射函数f下,连通子图G′V与GV的边相似度ES(G′V,GV,f),其中
Figure BDA0001917365270000067
转到3d)。
3d)判断该连通子图中是否仍有未定义过的双射函数f:V′V→VV,若有,则转到3b),若否,则转到3e)。
3e)计算获得使边相似度取到最大值的双射函数,记为fmax,并将该边相似度作为此次验证的权重w,w=Similarity(G′V,GV)=max(ES(G′V,GV,f)),转到3f)。
3f)获取fmax中一对节点映射v′v→vv,v′v∈V′V,vv∈VV,转到3g)。
3g)设
Figure BDA0001917365270000078
为v′v节点的代码,
Figure BDA0001917365270000071
为vv节点的代码,计算
Figure BDA0001917365270000072
Figure BDA0001917365270000073
的最长公共子序列,将最长公共子序列长度除以
Figure BDA0001917365270000074
长度进行归一化,将归一化后的最长公共子序列长度记为
Figure BDA0001917365270000075
转到3h)。
3h)判断是否对fmax中所有节点映射均已处理,若是,则转3i),若否,则转到3f)。
3i)将每对v′v和vv节点的归一化后的最长公共子序列长度进行平均处理,作为此次验证的分值s,
Figure BDA0001917365270000076
转到3a)。
3j)设n-day漏洞的CCFG围绕该候选漏洞核G′C共进行了n次验证,且每次验证时的权重为w1,w2…wn,分值为s1,s2…sn,用权重对分值加权平均,计算待测程序的漏洞率vr,其中
Figure BDA0001917365270000077
4)将待测程序漏洞率与阈值进行比较,判断该待测程序是否存在该n-day漏洞,并根据候选漏洞核的位置对待测程序中的n-day漏洞进行初步定位,输出漏洞检测报告,其中根据漏洞率判定待测程序是否存在该n-day漏洞,并输出漏洞检测报告的流程如图5所示,具体说明如下:
4a)对已知存在该漏洞的程序实施本方法,并根据通过本发明获得的漏洞率与真值进行统计分析,进而获得经验性阈值,转到4b)。
4b)判断未知漏洞的待测程序的漏洞率是否大于上述经验性阈值,若是,则转到4c),若否,则转到4e)。
4c)判定该待测程序存在该n-day漏洞,并将其作为漏洞判定结果,转到4d)。
4d)获得该待测程序候选漏洞核在待测程序中的具***置,精确到代码行,并将其作为漏洞定位结果,转到4f)。
4e)判定该待测程序不存在该n-day漏洞,并将其作为漏洞判定结果,转到4f)。
4f)综合漏洞判定结果和漏洞定位结果输出漏洞检测报告。
以上虽然描述了本发明的具体实施方法,但是本领域的技术人员应当理解,这些仅是举例说明,在不背离本发明原理和实现的前提下,可以对这些实施方案做出多种变更或修改,因此,本发明的保护范围由所附权利要求书限定。

Claims (7)

1.一种基于核控制流图循环验证的漏洞检测方法,其特征在于,包括以下步骤:
步骤1:从漏洞信息发布平台中采集一个n-day漏洞,生成该n-day漏洞的原始控制流图,称为漏洞CFG,根据漏洞CFG生成所述n-day漏洞的核控制流图CCFG,将所述核控制流图CCFG形式化定义为<GCFG,GC,C>,其中GCFG=<V,E>是n-day漏洞的原始控制流图,即漏洞CFG,V是控制流图的节点集,E是控制流图的边集,
Figure FDA0002860509500000012
为CCFG的核,C为节点代码的集合,每个Cv∈C指向v节点中的具体代码,其中v∈V;
步骤2:将待检测的未知漏洞的程序称为待测程序,对待测程序生成CFG,将对待测程序生成的CFG称为待测程序CFG,在待测程序CFG中搜索所述n-day漏洞CCFG的核,定义待测程序CFG中与该n-day漏洞CCFG的核匹配的子图为待测程序候选漏洞核;
步骤3:将所述n-day漏洞的CCFG围绕该候选漏洞核在待测程序CFG上进行循环验证并计算每次验证时的权重和分值,在循环验证完毕之后,根据每次验证的权重对分值进行加权平均,获得此待测程序的漏洞率;
步骤4:将待测程序漏洞率与设定阈值进行比较,判断待测程序是否具有该n-day漏洞,并根据候选漏洞核在待测程序中的位置对n-day漏洞进行初步定位,得到漏洞检测结果;
所述步骤3中,在每次循环验证时的权重和分值,以及最终加权平均的计算包括以下步骤:
步骤31:设候选漏洞核为G'C,G'C=<V'C,E'C>,n-day漏洞CCFG为<GV,GC,C>,其中n-day漏洞的漏洞代码段生成该漏洞的控制流图GV,GV=<VV,EV>,GC=<VC,EC>,由于G'C与GC同构,又因为
Figure FDA0002860509500000013
得到|V'C|≤|VV|,
步骤32:在待测程序CFG中选择一个包含该候选漏洞核G'C、节点数为|VV|的连通子图,连通子图是任意两个节点之间均具有路径相连通的子图,将该连通子图称为此次验证的覆盖子图,记为G'V,G'V=<V'V,E'V>;
步骤33:计算此次验证的权重,设候选漏洞核G'C与n-day漏洞核GC同构时的节点映射为g:V'C→VC,定义双射函数f:V'V→VV,其中
Figure FDA0002860509500000011
计算在每个双射函数f:V'V→VV下G'V与GV的边相似度ES(G'V,GV,f),即:
Figure FDA0002860509500000021
其中ES是边相似度,取得最大的边相似度作为G'V与GV的最终边相似度,并将边相似度作为此次验证的权重w,即:
w=Similarity(G′V,GV)=max(ES(G′V,GV,f));
步骤34:计算此次验证的分值,将取得最大边相似度的双射函数f,将其记为fmax,设fmax(v'v)=vv,v'v∈V'V,vv∈VV
Figure FDA0002860509500000022
为v'v节点的代码,
Figure FDA0002860509500000023
为vv节点的代码,计算
Figure FDA0002860509500000024
Figure FDA0002860509500000025
的最长公共子序列,将最长公共子序列长度除以
Figure FDA0002860509500000026
长度进行归一化,将归一化后的最长公共子序列长度记为length,即
Figure FDA0002860509500000027
其中LCS是最长公共子序列,将每对v'v和vv节点的归一化后的最长公共子序列长度进行平均处理,作为此次验证的分值s,即:
Figure FDA0002860509500000028
步骤35:判断待测程序CFG中是否仍具有未验证的包含候选漏洞核G′C、节点数为|VV|的连通子图,若有则继续对剩余连通子图进行验证,并计算每次验证时的权重和分值;
步骤36:循环验证完毕之后,计算此待测程序的漏洞率,设n-day漏洞的CCFG围绕该候选漏洞核G'C共进行了n次验证,且每次验证时的权重为w1,w2…wn,分值为s1,s2...sn,计算待测程序的漏洞率vr,即:
Figure FDA0002860509500000029
2.根据权利要求1所述的方法,其特征在于:所述步骤1中,待测程序是已知源代码的项目、源文件或代码段。
3.根据权利要求1所述的方法,其特征在于:当n-day漏洞的原始控制流图的不可被修改、扩充和归约的最大公共连通子图为平凡图时,该n-day漏洞CCFG的核退化为一个节点。
4.根据权利要求1所述的方法,其特征在于:所述步骤1中,漏洞信息发布平台包括美国国家漏洞数据库、美国软件保障参考数据集或中国国家信息安全漏洞库。
5.根据权利要求1所述的方法,其特征在于:所述步骤2中,在待测程序CFG上搜索该n-day漏洞CCFG的核的方法是:判断待测程序CFG的子图与n-day漏洞CCFG核是否同构并且对应节点是否匹配。
6.根据权利要求1所述的方法,其特征在于:所述步骤3中,在每次循环验证时需综合计算边相似度和节点代码相似度。
7.根据权利要求1所述的方法,其特征在于:所述步骤4中,漏洞检测结果包括漏洞判定结果、漏洞定位结果、本次测试的配置信息;所述漏洞判定结果包括:漏洞判定、漏洞率、每次循环验证的权重和分值;所述漏洞定位结果为漏洞所在的代码行;所述本次测试的配置信息包括:本次测试的日期时间,运行测试所需的时间,测试用机的型号、配置信息。
CN201811578979.5A 2018-12-24 2018-12-24 一种基于核控制流图循环验证的漏洞检测方法 Active CN109670318B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201811578979.5A CN109670318B (zh) 2018-12-24 2018-12-24 一种基于核控制流图循环验证的漏洞检测方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201811578979.5A CN109670318B (zh) 2018-12-24 2018-12-24 一种基于核控制流图循环验证的漏洞检测方法

Publications (2)

Publication Number Publication Date
CN109670318A CN109670318A (zh) 2019-04-23
CN109670318B true CN109670318B (zh) 2021-03-02

Family

ID=66145976

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201811578979.5A Active CN109670318B (zh) 2018-12-24 2018-12-24 一种基于核控制流图循环验证的漏洞检测方法

Country Status (1)

Country Link
CN (1) CN109670318B (zh)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110286891B (zh) * 2019-06-25 2020-09-29 中国科学院软件研究所 一种基于代码属性张量的程序源代码编码方法
CN110598417B (zh) * 2019-09-05 2021-02-12 北京理工大学 一种基于图挖掘的软件漏洞检测方法
CN110990277A (zh) * 2019-11-29 2020-04-10 珠海豹趣科技有限公司 一种漏洞挖掘方法、装置及计算机可读存储介质
CN113221127B (zh) * 2021-07-07 2021-12-14 鹏城实验室 程序的漏洞检测方法、装置、终端设备以及存储介质
CN114785574B (zh) * 2022-04-07 2023-09-29 国网浙江省电力有限公司宁波供电公司 一种基于ai辅助的远程漏洞精确验证方法
CN115145633A (zh) * 2022-07-25 2022-10-04 杭州师范大学 一种基于控制流图的代码错误自动检出方法

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101727391B (zh) * 2009-12-14 2011-11-09 北京理工大学 一种软件漏洞特征操作序列的提取方法
WO2016168428A1 (en) * 2015-04-15 2016-10-20 Qatar Foundation For Education, Science And Community Development Cross-site scripting detection method
CN107229563B (zh) * 2016-03-25 2020-07-10 中国科学院信息工程研究所 一种跨架构的二进制程序漏洞函数关联方法

Also Published As

Publication number Publication date
CN109670318A (zh) 2019-04-23

Similar Documents

Publication Publication Date Title
CN109670318B (zh) 一种基于核控制流图循环验证的漏洞检测方法
Cheng et al. Deepwukong: Statically detecting software vulnerabilities using deep graph neural network
CN108491228B (zh) 一种二进制漏洞代码克隆检测方法及***
Ji et al. Buggraph: Differentiating source-binary code similarity with graph triplet-loss network
US11048798B2 (en) Method for detecting libraries in program binaries
US20180278635A1 (en) Apparatus, method, and computer program for detecting malware in software defined network
EP3311311A1 (en) Automatic entity resolution with rules detection and generation system
CN111400719A (zh) 基于开源组件版本识别的固件脆弱性判别方法及***
Jie et al. Survey on software vulnerability analysis method based on machine learning
Liu et al. Vfdetect: A vulnerable code clone detection system based on vulnerability fingerprint
CN111914260B (zh) 一种基于函数差分的二进制程序漏洞检测方法
US20220279045A1 (en) Global iterative clustering algorithm to model entities&#39; behaviors and detect anomalies
CN112115326B (zh) 一种以太坊智能合约的多标签分类和漏洞检测方法
CN113326187A (zh) 数据驱动的内存泄漏智能化检测方法及***
CN111881300A (zh) 面向第三方库依赖的知识图谱构建方法及***
CN113722719A (zh) 针对安全拦截大数据分析的信息生成方法及人工智能***
CN116305158A (zh) 一种基于切片代码依赖图语义学习的漏洞识别方法
CN114036531A (zh) 一种基于多尺度代码度量的软件安全漏洞检测方法
CN112817877B (zh) 异常脚本检测方法、装置、计算机设备和存储介质
CN112905370A (zh) 拓扑图生成方法、异常检测方法、装置、设备及存储介质
KR102318991B1 (ko) 유사도 기반의 악성코드 진단 방법 및 장치
CN113722711A (zh) 基于大数据安全漏洞挖掘的数据添加方法及人工智能***
Liu et al. Vmpbl: Identifying vulnerable functions based on machine learning combining patched information and binary comparison technique by lcs
Pham et al. Detecting recurring and similar software vulnerabilities
CN115859307A (zh) 基于树型注意力和加权图匹配的相似漏洞检测方法

Legal Events

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