CN114065227A - 一种漏洞定位分析*** - Google Patents
一种漏洞定位分析*** Download PDFInfo
- Publication number
- CN114065227A CN114065227A CN202210051216.5A CN202210051216A CN114065227A CN 114065227 A CN114065227 A CN 114065227A CN 202210051216 A CN202210051216 A CN 202210051216A CN 114065227 A CN114065227 A CN 114065227A
- Authority
- CN
- China
- Prior art keywords
- function
- patch
- patching
- vulnerability
- program
- 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.)
- Granted
Links
Images
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/57—Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
- G06F21/572—Secure firmware programming, e.g. of basic input output system [BIOS]
-
- 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/57—Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
- G06F21/577—Assessing vulnerabilities and evaluating computer system security
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2221/00—Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/03—Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
- G06F2221/033—Test or assess software
Landscapes
- Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种漏洞定位分析***,相较于现有技术的处理方式,该***不依赖任何源代码信息,只需要收集原始程序二进制文件,和与之对应的升级过后的二进制文件,就可以自动分析两个文件的差别并确认这些差别中哪些是漏洞补丁,因此,该专利极大的减少了数据收集上的困难程度,对于软件市场绝大多数程序来讲,二进制文件更容易获取,特别是对于闭源商业程序,其源代码是不能从外界获取的,因此,该专利相较于现有技术,可以从更多更广的程序中收集漏洞信息。
Description
技术领域
本发明涉及信息收集处理相关技术领域,具体是一种漏洞定位分析***。
背景技术
程序漏洞是软件安全的主要威胁之一,但在程序开发中,漏洞的存在是几乎无法避免的,且这些漏洞往往在诱发运行错误之前,很难被程序员所察觉,现有技术中,为了尽可能的查找解决这些漏洞,通常利用动态模糊测试,符号执行,或静态代码审计的方法来执行,然而,这些技术都不能提供完整的解决方案来精确的寻找漏洞;动态模糊测试存在代码覆盖问题和初始种子选择上的问题;符号执行由于路径***和约束解决问题,不能很好地扩展到现实生活中的程序;静态代码审计通常需要人类的专业知识,并且在程序复杂性增加时无法很好地进行扩展。
现有技术中在二进制级别的漏洞补丁分析技术具有代表性的有BinDiff,该方案会对比两个相同二进制函数的不同版本,自动提取其中有差异的基本块并标注报告给用户,在一定程度上实现对二进制补丁检测的辅助工作,方便工作人员对这些差异函数的人工确认,BinDiff提供了对函数之间基本块差异的定位工作,但是他不是一个完整的补丁搜索方案,并不能对差异的点进行下一步分析。
因此,现有技术的存在的缺点主要可以概括为两点,分别是:大多数现有的漏洞补丁分析方法都只适用于源代码级别,即封装代码级别,而对于二进制级别的补丁分析,由于只能对没有符号的闭源程序的机器指令进行理解,由于这种复杂性,这通常严重依赖于很多安全专家人工的努力和专业知识或繁重的程序分析技术,对于现实世界的程序来说是不可行的;现有的漏洞补丁分析工具会依赖与漏洞在网络上公布的补丁信息识别漏洞,然而,大部分软件生产厂家可以在不应用CVE编号(一种国际公认的漏洞编号方式)的情况下对漏洞进行秘密修补,这些漏洞补丁信息是未公开发布的,这样,对与现有工具产生很大的阻碍。
发明内容
本发明的目的在于提供一种漏洞定位分析***,以解决上述背景技术中提出的问题。
为实现上述目的,本发明提供如下技术方案:
一种漏洞定位分析***,包括:
定位修补模块,用于获取原始函数以及修补程序,通过预设的反汇编工具以及二进制比较工具BinDiff获取并比对所述原始函数以及所述修补程序中的匹配函数对,并对所述匹配函数对进行分析,生成候选对;
识别修补模块,用于通过预设的成对基本块对所述候选对中的修补函数进行匹配识别,获取所述修补函数中对修补基本块,通过所述修补基本块构建程序执行路径并获取补丁对应所述原始函数中的原始位置;
补丁识别模块,用于根据程序执行路径以及原始函数执行路径对候选对进行变化判定,生成变化判定结果,所述变化判定用于判断造成所述候选对变化的所述补丁的类型,所述变化判定结果的类型包括安全补丁引起以及非安全补丁引起;
分析总结模块,用于响应所述变化判定结果,若所述变化判定结果类型为安全补丁,则对所述补丁进行污点分析以生成相对应的补丁模式以及漏洞模式,所述漏洞模式用于搜索二进制程序中的同类型补丁或漏洞。
作为本发明的进一步方案:所述函数对F={fp,fo|f是二进制程序中的函数},其中fo(即所述原始函数)在修补过程中更改为fp(即修补后的函数),所述F为一组候选对,所述定位修补模块包括:
反汇编匹配单元,用于通过所述反汇编工具以及所述二进制比较工具BinDiff匹配所述原始函数以及所述修补程序中的函数对,并为每个所述函数对构建CFG,通过函数名以及预设的BinDiff函数匹配功能执行匹配,生成初始候选对,所述CFG为函数控制流图;
过滤单元,用于通过基于3D-CFG的哈希技术计算所述fp与所述fo的哈希值,若所述fp与所述fo具有相同哈希值,则删除候选对F中的所述fp与所述fo。
作为本发明的再进一步方案:所述识别修补模块具体包括:
基本块获取单元,用于通过在所述原始函数fo中搜索与所述修补后函数fp中的每个基本块bp等效的基本块bo,若不存在所述基本块bo,则所述基本块bp为已修补基本块;
链接建立单元,用于建立所述基本块之间的链接,建立所述程序执行路径。
作为本发明的再进一步方案:所示补丁识别模块包括用于进行变化判定的公式:
δd=Sp−So
其中,δd为变化判定结果,Sp为修补后的执行路径tp的语义摘要,So为原始执行路径to in{t1o,...,tno}的语义摘要。
作为本发明再进一步的方案,所述分析总结模块涉及一种轻量级的程序分析技术,所述程序分析技术用于识别处所述修补过的所述程序执行路径中新增的安全敏感指令。
与现有技术相比,本发明提出了一个可扩展的二进制级别补丁分析框架,以自动识别安全补丁并总结补丁模式和它们对应的漏洞模式,从而可以在二进制文件中大规模提取隐藏的漏洞信息;具体来讲,给定二进制程序的原始版本和升级后版本,该分析框架可以定位函数中的被修改过的基本块,并以此来构建二级制函数中虚拟的执行路径,随后,该分析框架会虚拟执行这些路径并捕捉语义在原始版本和升级后版本中的变化,通过分析语义变化的大小来确定该变化是否是二进制补丁,随后,通过对打补丁的污点分析来总结模式漏洞的职能,并收集漏洞信息,随着我们运行更多的二进制程序的漏洞收集,我们可以维护并不断丰富拥有不同模式的漏洞数据库,最终分析各种漏洞的出现和演变,其具有以下的有益效果:
(1)该***不依赖任何源代码信息,只需要收集原始程序二进制文件,和与之对应的升级过后的二进制文件,就可以自动分析两个文件的差别并确认这些差别中哪些是漏洞补丁,因此,该专利极大的减少了数据收集上的困难程度,对于软件市场绝大多数程序来讲,二进制文件更容易获取,特别是对于闭源商业程序,其源代码是不能从外界获取的,因此,该专利相较于现有技术,可以从更多更广的程序中收集漏洞信息;
(2)该专利拥有较高的漏洞补丁判别的准确性;
(3)该专利采用了轻量级的代码虚拟执行技术,因此较现有技术更适合大规模漏洞补丁扫描;
(4)通过该专利我们可以总结漏洞信息,并且基于该信息寻找新的相似漏洞,现有技术只停留在判断函数是否存在漏洞,我们的专利由于使用了污点分析,可以更好的提取漏洞以及补丁特征,因此可以生成更好的漏洞签名。
附图说明
图1为一种漏洞定位分析***的结构组成框图。
图2为一种漏洞定位分析***中跳转指令执行效果展示图。
图3为一种漏洞定位分析***中算法2的展示原理图。
图4为一种漏洞定位分析***中识别安全补丁步骤前后的代码效果展示图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
以下结合具体实施例对本发明的具体实现方式进行详细描述。
如图1所示,作为本发明一个实施例提供的一种漏洞定位分析***,包括:
定位修补模块100,用于获取原始函数以及修补程序,通过预设的反汇编工具以及二进制比较工具BinDiff获取并比对所述原始函数以及所述修补程序中的匹配函数对,并对所述匹配函数对进行分析,生成候选对。
识别修补模块300,用于通过预设的成对基本块对所述候选对中的修补函数进行匹配识别,获取所述修补函数中对修补基本块,通过所述修补基本块构建程序执行路径并获取补丁对应所述原始函数中的原始位置。
补丁识别模块500,用于根据程序执行路径以及原始函数执行路径对候选对进行变化判定,生成变化判定结果,所述变化判定用于判断造成所述候选对变化的所述补丁的类型,所述变化判定结果的类型包括安全补丁引起以及非安全补丁引起。
分析总结模块700,用于响应所述变化判定结果,若所述变化判定结果类型为安全补丁,则对所述补丁进行污点分析以生成相对应的补丁模式以及漏洞模式,所述漏洞模式用于搜索二进制程序中的同类型补丁或漏洞。
本实施例中,对本***提供的漏洞定位分析方案进行了概括性描述,主要包括对应定位修补函数、识别修补的基本块、识别安全补丁以及总结安全补丁和漏洞模式四个步骤的四个***模块,分别为定位修补模块、识别修补模块、补丁识别模块以及分析总结模块;这里所使用的反汇编工具为具有代表性的IDA Pro(能够实现相同功能效果的其他反汇编工具同样可以实现方案的需求);定位修补函数也就是定位修补模块的作用是,首先使用反汇编工具IDA Pro和二进制比较工具BinDiff来获取给定的二进制程序的原始版本和修补版本中匹配的函数对(即匹配函数对),函数对中包含了原始函数,和改变过后的升级版函数,如两个版本中函数一样,模块会自动筛除这些函数,不会进行下一步的分析,我们把这些有变化的函数对被称为候选对,这其中可能包含安全或非安全漏洞的补丁,与其他不相关的函数升级补丁,为了减少候选对的数量以供进一步分析,从而提高可扩展性,该工具从候选对中删除由于编译器在编译过程中引入的变化的函数对,只保留由于人为代码删减引入变化的函数对;然后,识别修补模块首先利用成对基本块匹配来识别修补函数内的修补基本块,通过这些修补基本块之间的关系来构建程序执行路径并捕获补丁具体的位置,并最终确定与每个补丁相关的原始函数中的原始修改的位置;而补丁识别模块则会基于对比打补丁的程序执行路径及其对应的原始程序执行路径,来决定函数对的改变是由安全补丁还是非安全补丁引起的。它是通过语义分析来计算修补后的程序执行路径与每个原始程序执行路径之间的语义差异来实现的。我们认为安全补丁不太可能引入新的语义,因此相对于非安全补丁(例如,功能升级)会有更小的语义差异;一旦识别出一个安全补丁后,分析总结模块便会通过补丁中的安全敏感指令的污点分析来总结补丁模式和相应的漏洞模式,通过这些漏洞模式我们可以在二进制程序中搜索类似的补丁或漏洞。
如图2所示,作为本发明另一个优选的实施例,所述函数对F={fp,fo|f是二进制程序中的函数},其中fo(即所述原始函数)在修补过程中更改为fp(即修补后的函数),所述F为一组候选对,所述定位修补模块包括:
反汇编匹配单元,用于通过所述反汇编工具以及所述二进制比较工具BinDiff匹配所述原始函数以及所述修补程序中的函数对,并为每个所述函数对构建CFG,通过函数名以及预设的BinDiff函数匹配功能执行匹配,生成初始候选对,所述CFG为函数控制流图。
过滤单元,用于通过基于3D-CFG的哈希技术计算所述fp与所述fo的哈希值,若所述fp与所述fo具有相同哈希值,则删除候选对F中的所述fp与所述fo。
本实施例中,对定位修补模块进行了进一步的说明,当然首先需要首先定位匹配的函数对F={fp,fo|f是二进制程序中的函数},其中fo(即原始函数)在修补过程中更改为fp(即修补后的函数),F是一组候选对,可能包含安全或非安全补丁;定位修补函数的步骤首先通过反汇编匹配单元利用反汇编工具IDA Pro和二进制比较工具BinDiff来匹配二进制程序的原始版本和补丁版本中的函数,我们使用IDA Pro来提取汇编指令并为每个函数构建CFG(control flow graph,函数控制流图),然后,对于开源二进制文件(即带有符号表的项目),我们直接使用函数名来执行匹配。而对于闭源二进制文件(即没有符号表),我们利用BinDiff的函数匹配功能,最后,我们得到初始候选对,其中每个函数由其CFG表示;然后由过滤单元筛选并过滤掉一部分函数对,以减少对的大小以供进一步分析,从而提高可算法的效率,为此,我们应用基于3D-CFG的哈希技术,来计算fp和fo的哈希值,如果fp和fo具有相同的哈希值,则从候选对F中删除fp,fo这一对函数,此外,在源码编译到二进制码过程中,由于程序语义上下文或编译器优化选项设置的不同,编译器会引入了一些二进制代码上的更改,一种常见的情况是编译器可能会将一个基本块拆分为两个基本块,图2中的基本块(a),在不同的编译环境下,变成了图2中通过跳转(jmp)指令连接的两个基本块(b),但是,这两个版本的基本块在语义上彼此相等,因此,对于任何只有一个后继且其后继只有一个前驱的基本块,我们将其与其后继合并并删除额外的jmp指令,来消除不同编译器对同一段代码带来的不同影响。
另一种常见情况是编译器可能会在不同的运行中更改指令的操作数。例如,操作数之一,内存地址,会与二进制程序中的函数位置相关联,如果函数位置改变,内存地址就会改变,这发生在不同的编译过程中。为了消除这种编译器引入的变化,我们对每个基本块进行了规范化,如算法1所示。它将一个基本块作为输入并返回规范化的基本块。它重复性地正规化基本块(第2行)中的每个汇编指令。汇编指令由一个操作符和最多2个操作数组成,其中操作符表示指令执行的特定操作,而操作数是可变长度的元素序列。因此,我们提取操作符(第3行)并根据每个指令的操作数类型(第6-9行)对每个指令的操作数进行正规化。一个操作数可以是一个寄存器、一个立即数或一个内存访问地址,它们分别被归一化为它的类型reg、imm或mem。例如,mov eax,0x40被规范化为mov reg,imm。在对F中的每个函数的基本块进行合并和归一化之后,我们使用相同的哈希技术来处理,然后删除只拥有一些由编译器引入的更改的对,具体的,算法1如下:
输入:基本块。
输出:正规化后的基本块。
1、b`=<> //初始化正规化后的基本块中指令序列。
2、for each instruction i in b: //对于每条指令。
3、m=GetMnemonic(i) //提取i的操作符。
4、if m not=‘nop’then //如果操作符不为空。
5、op’=<> //集合op’储存了每一个操作数。
6、for each operand o in operand(i): //对于每条指令中的操作数。
7、t=GetOperandType(o) //提取操作数的类型。
8、op’=op’+t //更新集合op’。
9、End
10、i’=<m,op’> //更新正规化后的指令。
11、b’=b’+i’
11、End
12、End
13、return b’ //返回正规化后的基本块。
如图3所示,作为本发明另一个优选的实施例,所述识别修补模块具体包括:
基本块获取单元,用于通过在所述原始函数fo中搜索与所述修补后函数fp中的每个基本块bp等效的基本块bo,若不存在所述基本块bo,则所述基本块bp为已修补基本块。
链接建立单元,用于建立所述基本块之间的链接,建立所述程序执行路径。
本实施例中,安全补丁和非安全补丁(程序升级)都可能导致各种二进制函数中基本块的修改,在最坏的情况下,这些修改后的基本块可能分散在整个函数中。因此,我们继续研究候选对F以识别补丁中被修改的基本块。根据程序执行路径,我们构建这些修补的基本块之间的关系,并识别它们与原始函数中对应基本块的关系,算法2给出了基本块获取单元以及链接建立单元的全过程,它根据对比原始函数fo与修补函数fp,从而计算匹配的执行路径对。首先我们利用成对基本块匹配来识别修补函数中的修补基本块(第2-13行)。特别地,对于修补函数fp中的每个基本块bp,我们在原始函数fo中搜索等效的基本块bo。如果fo中不存在这样匹配的基本块bo,则将bp识别为修补过的基本块。一旦确定了修补的基本块,我们下一步需要确定这些基本块之间的链接(第14行),从而构建一条执行路径。具体来讲,对于每个打补丁的基本块,我们利用前驱和后继的信息来连接相关的补丁块;即,当b1p和b2p之间存在前驱/后继关系时,我们把他们连接起来。以这种方式,我们可以构建了修补的一条执行路径(即tp)。对于每一条修改后的执行路径,我们提取其每个基本块。对于每个修改的基本块,我们从原始函数中识别与修改基本块相邻的块(第16行)。这些未修改的相邻基本块有助于在原始函数中定位与修改基本块相对应的基本块(第17行)。以这种方式,对于每个包含修补块的执行路径,我们识别原始函数中相应的基本块,并以与构造修补的局部执行路径的方式构造原始执行路径{t1o,...,tno}(第18行);算法2的具体内容包括:
输入:修补的函数fp与原始函数fo。
输出:匹配的执行路径对。
1、T={} //初始化执行路径对集合。
2、Bp={} //初始化被修补(修改过)的基本块集合。
3、for each basic block bp in fp do
4、for each basic block bo in fo do
5、if bp=bo then
6、Match=True //将flag设置为真。
7、break
8、End
9、End
10、If not Match then
11、Bp=Bp+bp //更新被修补(修改过)的基本块集合。
12、End
13、End
14、Tp=GnerateTrace(Bp) //找的所有的包含Bp的执行路径。
15、for each patched trace tp in Tp do
16、neighbors=getNeighbors(tp,fp) //找到tp在fp中附近的基本块。
17、Bo=GetOriginalBlocks(neighbors,fo) //定位到在fo中对应的基本块。
18、To=GnerateTrace(Bo) //找的所有的包含Bo的执行路径。
19、T=T+<tp,To> //更新执行路径对集合。
20、End
21、return T
这里通过一个示例进行说明,考虑图3中的原始函数(a)和修补函数(b),其中每个字母代表一个基本块。我们可以看到,在被修补后的函数中,原始函数的基本块b被修改为b’并添加一个新的基本块g’。在修改后的函数中,存在一两个被修补的基本块,即b’,g’,其中他们的未修改的邻居基本块是{a,c,d}。通过分析原始函数与之对应的邻居块,我们可以推断出只有原始函数的基本块b是对应b’和g’的基本块,并且只能构造一条原始执行路径,即b。因此,在这种情况下,修补后的部分轨迹{b’到g’}仅与一个原始部分轨迹{b}相关。
如图4所示,作为本发明另一个优选的实施例,所示补丁识别模块包括用于进行变化判定的公式:
δd=Sp−So
其中,δd为变化判定结果,Sp为修补后的执行路径tp的语义摘要,So为原始执行路径to in{t1o,...,tno}的语义摘要。
本实施例中,一旦确定了原始函数中修补的基本块与与其对应的程序执行路径,我们继续分析并确认T中的每一对tp,{t1o,...,tno}的更改是由安全补丁引起的还是非安全补丁引起的,我们语义分析的基本思想是“安全补丁不太可能改变底层函数的语义,而非安全补丁更有可能引入新的语义”,因此,我们通过进行变化判定的公式来比较每一条执行路径在被执行前后的语义差别,在公式中δd是修补后的执行路径tp的语义摘要Sp与原始执行路径to in{t1o,...,tno}的语义摘要So之间的语义差异也就是可变化判定结果,如果在{t1o,...,tno}中存在一条执行路径使得其与tp的语义差异很小,我们将该补丁标记为安全补丁,否则,我们会将补丁标记为非安全补丁;我们利用二进制中虚拟执行技术从部分代码段中生成语义摘要。这里的语义表示为执行部分代码段对机器状态的影响。我们定义机器状态s的特征为一个三元的组{Mem、Reg、Flag},表示Mem表示***内存、Reg表示CPU中的通用寄存器和Flag表示CPU中的标志寄存器。执行部分代码段之前和之后的机器状态分别称为前状态和后状态。我们随机生成执行前状态,并执行一条路径并记录,执行后,与之对应的后状态。
例如在图4中执行前状态(b)中给出了执行图4二进制代码(a)中的代码段之前的一种可能的预状态,其中所有寄存器、标志和内存都被赋值为0;在相应的后状态中,图4中执行后状态(c),寄存器eax和ebx分别保存值0x04和-0x04,而标志寄存器sf由于ebx中的结果为负而保存值1。然后,我们根据这两个状态通过公式S=Spost−Spre来计算语义摘要之间的差异;Spost是执行后的机器状态,Spre是执行前的机器状态。图4中二进制代码(a)所示代码段的语义摘要是eax’=0x04和ebx’=eax’-0x04;在我们的语义分析中,对于补丁和原始的执行路径,我们首先生成各种前状态配置并执行这条路径,并测量相应的后状态值。然后,我们随机生成100组前状态,通过执行后生成与之对应的后状态,并计算他们的Jaccard相似度,并求出平均相似度。最后,我们用1减去平均相似的求得语义差异值。如果语义差异低于预定义的阈值(即<Δd)。我们确定该补丁是安全补丁。否则,它是一个非安全补丁。在我们的实验中,我们凭经验将Δd固定为0.20。
作为本发明另一个优选的实施例,所述分析总结模块涉及一种轻量级的程序分析技术,所述程序分析技术用于识别处所述修补过的所述程序执行路径中新增的安全敏感指令。
本实施例中,一旦确定了安全补丁,该工具就会从原始和补丁部分跟踪中总结补丁模式和相应的漏洞模式。为此,我们引入了一种轻量级的程序分析技术。具体来说,给定一个修补过的程序执行路径tp和相关的原始执行路径{to1,to2,...,ton},该工具会识别出tp中新增的和安全敏感的指令。一般来说,新加入的控制转移指令,尤其是那些依赖于比较指令的控制转移指令,如cmp和test,是安全分析师感兴趣的,它们更可能反映补丁中新引入的安全性检查。下一步,我们将这些值得关注指令的源和汇传递给污点分析引擎,以跟踪它们作为漏洞关键指标的源和汇。例如在指令cmp eax,ebx,寄存器ebx是源,寄存器eax是目标汇。我们会把待分析的安全敏感的指令中的变量作为汇输入给该工具,以使用反向污点分析跟踪它们的起源(或源),而非使用前向污点分析。需要注意的是,污点分析是在修补函数内执行的,即程序内污点分析。最后,将跟踪的源和汇结合起来总结漏洞和安全补丁模式;其中源、汇和健全性检查定义如下:
定义(源):污点源是可以到达修补函数并被那些与安全相关指令使用的用户/外部输入(即受污染的输入)。例如,安全敏感的***API(例如scanf)的外部函数参数或返回值被视为污点源。
定义(汇):污染的汇是对于被污染输入的安全相关的操作。例如,对于污染源的内存解引用操作(例如,mov eax,[taint-source])或算术减法操作(例如,mov eax,[taint-source];sub ebx,eax)被视为污染的汇。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一非易失性计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink) DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
本领域技术人员在考虑说明书及实施例处的公开后,将容易想到本公开的其它实施方案。本申请旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由权利要求指出。
应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限制。
Claims (5)
1.一种漏洞定位分析***,其特征在于,包括:
定位修补模块,用于获取原始函数以及修补程序,通过预设的反汇编工具以及二进制比较工具BinDiff获取并比对所述原始函数以及所述修补程序中的匹配函数对,并对所述匹配函数对进行分析,生成候选对;
识别修补模块,用于通过预设的成对基本块对所述候选对中的修补函数进行匹配识别,获取所述修补函数中对修补基本块,通过所述修补基本块构建程序执行路径并获取补丁对应所述原始函数中的原始位置;
补丁识别模块,用于根据程序执行路径以及原始函数执行路径对候选对进行变化判定,生成变化判定结果,所述变化判定用于判断造成所述候选对变化的所述补丁的类型,所述变化判定结果的类型包括安全补丁引起以及非安全补丁引起;
分析总结模块,用于响应所述变化判定结果,若所述变化判定结果类型为安全补丁,则对所述补丁进行污点分析以生成相对应的补丁模式以及漏洞模式,所述漏洞模式用于搜索二进制程序中的同类型补丁或漏洞。
2.根据权利要求1所述的一种漏洞定位分析***,其特征在于,所述函数对F={fp,fo|f是二进制程序中的函数},其中fo(即所述原始函数)在修补过程中更改为fp(即修补后的函数),所述F为一组候选对,所述定位修补模块包括:
反汇编匹配单元,用于通过所述反汇编工具以及所述二进制比较工具BinDiff匹配所述原始函数以及所述修补程序中的函数对,并为每个所述函数对构建CFG,通过函数名以及预设的BinDiff函数匹配功能执行匹配,生成初始候选对,所述CFG为函数控制流图;
过滤单元,用于通过基于3D-CFG的哈希技术计算所述fp与所述fo的哈希值,若所述fp与所述fo具有相同哈希值,则删除候选对F中的所述fp与所述fo。
3.根据权利要求2所述的一种漏洞定位分析***,其特征在于,所述识别修补模块具体包括:
基本块获取单元,用于通过在所述原始函数fo中搜索与所述修补后函数fp中的每个基本块bp等效的基本块bo,若不存在所述基本块bo,则所述基本块bp为已修补基本块;
链接建立单元,用于建立所述基本块之间的链接,建立所述程序执行路径。
4.根据权利要求3所述的一种漏洞定位分析***,其特征在于,所示补丁识别模块包括用于进行变化判定的公式:
δd=Sp−So
其中,δd为变化判定结果,Sp为修补后的执行路径tp的语义摘要,So为原始执行路径toin{t1o,...,tno}的语义摘要。
5.根据权利要求4所述的一种漏洞定位分析***,其特征在于,所述分析总结模块涉及一种轻量级的程序分析技术,所述程序分析技术用于识别处所述修补过的所述程序执行路径中新增的安全敏感指令。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210051216.5A CN114065227B (zh) | 2022-01-18 | 2022-01-18 | 一种漏洞定位分析*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210051216.5A CN114065227B (zh) | 2022-01-18 | 2022-01-18 | 一种漏洞定位分析*** |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114065227A true CN114065227A (zh) | 2022-02-18 |
CN114065227B CN114065227B (zh) | 2022-05-06 |
Family
ID=80231147
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210051216.5A Active CN114065227B (zh) | 2022-01-18 | 2022-01-18 | 一种漏洞定位分析*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114065227B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115659357A (zh) * | 2022-11-17 | 2023-01-31 | 北京邮电大学 | 基于二进制文件差异的固件漏洞检测方法及装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106815229A (zh) * | 2015-11-30 | 2017-06-09 | 北京计算机技术及应用研究所 | 数据库虚拟补丁防护方法 |
CN109241737A (zh) * | 2018-07-03 | 2019-01-18 | 中国科学院信息工程研究所 | 一种面向多种补丁模式的差异分支识别方法及*** |
CN109359468A (zh) * | 2018-08-23 | 2019-02-19 | 阿里巴巴集团控股有限公司 | 漏洞检测方法、装置及设备 |
CN111914260A (zh) * | 2020-06-22 | 2020-11-10 | 西安交通大学 | 一种基于函数差分的二进制程序漏洞检测方法 |
-
2022
- 2022-01-18 CN CN202210051216.5A patent/CN114065227B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106815229A (zh) * | 2015-11-30 | 2017-06-09 | 北京计算机技术及应用研究所 | 数据库虚拟补丁防护方法 |
CN109241737A (zh) * | 2018-07-03 | 2019-01-18 | 中国科学院信息工程研究所 | 一种面向多种补丁模式的差异分支识别方法及*** |
CN109359468A (zh) * | 2018-08-23 | 2019-02-19 | 阿里巴巴集团控股有限公司 | 漏洞检测方法、装置及设备 |
CN111914260A (zh) * | 2020-06-22 | 2020-11-10 | 西安交通大学 | 一种基于函数差分的二进制程序漏洞检测方法 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115659357A (zh) * | 2022-11-17 | 2023-01-31 | 北京邮电大学 | 基于二进制文件差异的固件漏洞检测方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN114065227B (zh) | 2022-05-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Xu et al. | Spain: security patch analysis for binaries towards understanding the pain and pills | |
Ming et al. | {BinSim}: Trace-based semantic binary diffing via system call sliced segment equivalence checking | |
Li et al. | Vulpecker: an automated vulnerability detection system based on code similarity analysis | |
Jang et al. | Towards automatic software lineage inference | |
Bao et al. | {BYTEWEIGHT}: Learning to recognize functions in binary code | |
Kim et al. | Revisiting binary code similarity analysis using interpretable feature engineering and lessons learned | |
Thummalapenta et al. | Alattin: Mining alternative patterns for detecting neglected conditions | |
Hashimoto et al. | Diff/TS: A tool for fine-grained structural change analysis | |
Hu et al. | Cross-architecture binary semantics understanding via similar code comparison | |
CN104636256A (zh) | 一种内存访问异常的检测方法及装置 | |
CN109460641B (zh) | 一种针对二进制文件的漏洞定位发掘***和方法 | |
CN110147235B (zh) | 一种源代码与二进制代码间的语义比对方法和装置 | |
Bowman et al. | VGRAPH: A robust vulnerable code clone detection system using code property triplets | |
CN111914260B (zh) | 一种基于函数差分的二进制程序漏洞检测方法 | |
Zhang et al. | A survey of software clone detection from security perspective | |
Liu et al. | Vfdetect: A vulnerable code clone detection system based on vulnerability fingerprint | |
CN109241737B (zh) | 一种面向多种补丁模式的差异分支识别方法及*** | |
CN114065227B (zh) | 一种漏洞定位分析*** | |
Dewey et al. | Uncovering use-after-free conditions in compiled code | |
Zhang et al. | Detecting integer overflow in Windows binary executables based on symbolic execution | |
Amme et al. | You look so different: Finding structural clones and subclones in java source code | |
Zhong et al. | Inferring bug signatures to detect real bugs | |
CN114462044A (zh) | 一种基于污点分析的uefi固件漏洞静态检测方法及装置 | |
Sun et al. | Osprey: A fast and accurate patch presence test framework for binaries | |
Gao et al. | How far have we gone in vulnerability detection using large language models |
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 |