CN109241737A - 一种面向多种补丁模式的差异分支识别方法及系统 - Google Patents
一种面向多种补丁模式的差异分支识别方法及系统 Download PDFInfo
- Publication number
- CN109241737A CN109241737A CN201810718977.5A CN201810718977A CN109241737A CN 109241737 A CN109241737 A CN 109241737A CN 201810718977 A CN201810718977 A CN 201810718977A CN 109241737 A CN109241737 A CN 109241737A
- Authority
- CN
- China
- Prior art keywords
- difference
- block
- patch
- branch
- node
- 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
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/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
- G06F21/562—Static detection
- G06F21/563—Static detection by source code analysis
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Health & Medical Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Virology (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明提供一种面向多种补丁模式的差异分支识别方法,步骤包括:对补丁前后的二进制程序进行比对,识别出补丁后程序中的差异函数及其包含的差异块,该差异块为新增块或修改块;对于控制流补丁,如果差异块的后继结点中有一个是新增块,且该新增块包含另一侧基本块的所有指令,则将从差异块到该新增块的分支作为差异分支;如果差异块含有两个后继结点,则将从差异块到距离函数退出结点最近的后继结点的分支作为差异分支;对于数据流补丁,如果差异块的前驱结点和后继结点均为匹配块,且前驱结点含有两个后继结点,则将该前驱结点到差异块的分支作为差异分支。
Description
技术领域
本发明涉及漏洞挖掘领域,主要关注基于补丁分析发现漏洞的方向,具体为一种面向多种补丁模式的差异分支识别方法及系统。
背景技术
补丁发布是用于修复计算机程序漏洞的,它同时也透露了漏洞相关信息。漏洞研究者可根据补丁前后二进制代码的差异,结合分析调试,定位漏洞所在。因此基于补丁分析发现漏洞的研究是漏洞挖掘领域重要的组成部分。
补丁分析研究主要集中在两个方面:1)如何对补丁前后二进制程序进行比对,从而提取出差异信息;2)如何通过分析差异构造出能验证补丁前程序中漏洞存在的输入。大部分现有研究的重心在于提高二进制补丁比对的准确性。而目前业界的BinDiff比对工具已经到达较高的准确率,因此,问题的关键在于如何基于比对结果和补丁模式来提取出能验证漏洞的输入需满足的条件,进而基于该条件生成输入、验证漏洞。
现有技术APEG能一定程度解决上述问题,然而它只能针对一种添加输入检查的补丁模式,即只有输入满足检查后才会执行原来代码,从而避免了非法输入触发异常。APEG对于这种模式提取出的验证漏洞的输入条件为:输入不满足新添加检查,因为这样的输入往往是非法的,能触发并验证补丁前程序中的漏洞。由此可见,该方法不能自动应用于多种补丁模式。
SPAIN用于识别安全补丁,并归纳出几种常见补丁模式。它首先找到补丁后程序中的局部轨迹,即由若干个差异块组成的序列;然后提取出补丁前程序中对应的轨迹;根据前后轨迹的语义差异确认是否为安全补丁,并使用污点分析跟踪安全补丁中新增语句对于程序的影响,从而归纳出五种漏洞和补丁模式,但是SPAIN没有解决上述涉及到的输入条件提取问题。
综上,现有的基于补丁发现漏洞的研究未着重解决漏洞验证部分,而相关技术也只能处理某种补丁模式,没有普适性。
发明内容
为了克服现有技术不能应用于多种补丁模式,本发明提供一种面向多种补丁模式的差异分支识别方法及系统,该方法为通用的输入条件提取方法,以识别出差异分支。该差异分支一般为程序控制流图上的边,其满足的特性为:执行经过该分支的输入在补丁后程序中能正常运行,但会导致补丁前程序运行异常,从而验证该差异分支修补了补丁前程序中的漏洞。具体地,本发明通过对控制流及数据流补丁的多种模式进行分析,提取出差异分支的共同特征,并总结成识别规则,根据该规则识别出差异分支,以之作为输入生成的覆盖目标。
本发明解决上述技术问题所采用的技术方案是:
一种面向多种补丁模式的差异分支识别方法,步骤包括:
对补丁前后的二进制程序进行比对,识别出补丁后程序中的差异函数及其包含的差异块,该差异块为新增块或修改块;
对于控制流补丁,如果差异块的后继结点中有一个是新增块,且该新增块包含另一侧基本块的所有指令,则将从差异块到该新增块的分支作为差异分支;如果差异块含有两个后继结点,则将从差异块到距离函数退出结点最近的后继结点的分支作为差异分支;
对于数据流补丁,如果差异块的前驱结点和后继结点均为匹配块,且前驱结点含有两个后继结点,则将该前驱结点到差异块的分支作为差异分支。
其中,通过BinDiff对补丁前后的二进制程序进行比对,找出差异函数。
其中,通过IDA对补丁后的差异函数的每个基本块进行分析,找出差异块。
一种面向多种补丁模式的差异分支识别系统,包括存储器和处理器,该存储器存储计算机程序,该程序被配置为由该处理器执行,该程序包括用于执行上述方法中各步骤的指令。
一种存储计算机程序的计算机可读存储介质,该计算机程序包括指令,该指令当由服务器的处理器执行时使得该服务器执行上述方法中的各个步骤。
通过本发明方法,能够针对控制流补丁和数据流补丁的各种模式进行差异分支识别,识别准确率高,经实验可知,准确率高达83%。
附图说明
图1是实施例中的差异分支识别方法流程图。
图2是实施例中的补丁后差异分支的控制流图。
具体实施方式
为使本发明的上述特征和优点能更明显易懂,下文特举实施例,并配合所附图作详细说明如下。
本发明提供的差异分支识别方法,可以适用于控制流补丁和数据流补丁的多种补丁模式,具体说明如下:
1)对于控制流补丁
控制流补丁通过添加对输入的检查代码实现控制流层面的修补,即输入(不)满足该检查,则采取一定的操作。其中,对于检查代码的类型以及采取的操作,不同的程序会有不同的处理,本发明共总结出以下5种控制流补丁的模式。
模式1:输入满足检查后走向异常处理分支并退出程序。差异分支为满足检查的分支,因为走该分支隐含着输入的非法性,易导致补丁前程序运行异常。
模式2:输入只有满足检查才会执行原来的代码。差异分支为不满足检查的分支,因为走该分支的输入在补丁后不会执行原代码,说明了输入的非法性。
模式3:当检查代码出现在循环中,若输入满足检查,则要么“break”退出循环,要么“continue”直接进入下一次循环。差异分支为满足检查的分支。
模式4:补丁没有添加检查代码,而是修改检查条件,比如补丁前为if(i>n)则执行异常处理,而补丁修改为if(i>=n),经分析可知满足i==n的输入对补丁前而言是非法的。因此,该模式相当于模式1添加了对输入的非法判断,故差异分支与其一致,即满足检查的分支。
模式5:输入满足检查后执行补丁新增的非异常退出代码。差异分支为满足检查的分支,因为在补丁后走该分支可能表示对非法输入先进行数据流相关的控制。
对于控制流补丁的模式1-4,本发明的差异分支识别方法为;从差异块(即补丁前后相差异的基本块)出发,要求该差异块有两个后继结点,选择距离函数退出结点最近的分支为差异分支;而对于模式5,其差异分支应为距离函数退出结点最远的分支,本发明提取出如下识别特征:差异分支的目的结点(后继结点)是一个新增块(即补丁后新增的基本块),且包含另一侧基本块中的所有指令,则选择从差异块到该新增块的分支为差异分支。
2)对于数据流补丁
数据流补丁通过添加赋值等语句来实现数据流层面的修补。比如为Use AfterFree漏洞的补丁往往是在执行完free()操作后将指针置为空,避免后续再次访问该指针时触发异常。根据修补的对象,本发明共总结出了4种数据流补丁模式。
模式1:添加变量赋值、修改变量赋值。差异分支为执行到差异块的分支,因为在补丁后走该分支会修改变量数值,产生差异,可能是对非法输入的异常处理。
模式2:修改变量的类型、数组的大小,如int改成unsigned int。差异分支为执行到被修改变量引用点的分支,由于引用点处也会出现汇编指令的差异,从而被识别为差异块,因此选择能执行到差异的分支即可。
模式3:修改调用的函数名,如strcpy改为strncpy。差异分支为执行到差异块的分支,因为走该分支输入在补丁前后会调用到不同的函数,产生差异。
模式4:删除了一段代码。差异分支为执行到差异块的分支,因为走该分支输入在补丁前会执行被删除的语句,而补丁后不会,产生差异。
对于数据流补丁的模式1-4,本发明的差异分支识别方法为:对于任意一个差异块,如果该基本块的前驱和后继结点均为匹配块(即补丁前后信息完全匹配的基本块),且某个前驱结点有两个后继结点,那么选择该前驱结点到差异块的分支为差异分支。
针对本发明方法,以下列举一具体应用实例予以阐述:
下述代码是整数溢出导致堆缓冲区越界读漏洞对应的补丁的典型例子,属于控制流补丁中的模式1,且其添加的检查是由or连接的两项判断条件组成的(见字体加粗部分)。对于该补丁,差异分支应该为满足该检查的分支(判断任意一处即可),这样的输入在补丁后程序中会进入异常退出逻辑,而在补丁前会执行到memcpy函数,从而触发了越界读异常。
为识别出该差异分支作为输入的满足条件,利用本发明的方法进行识别,如图1所示,包括以下两个步骤:
第一步:补丁比对。已知补丁前后二进制程序P和P’,本发明首先使用BinDiff进行二进制代码比对,提取差异函数。由于BinDiff生成的数据库结果中只有匹配的块以及匹配的指令信息,完全不匹配的块是不会存储的,因此需要结合IDA对补丁后每个差异函数中的每个基本块进行逐个分析:
如果在结果中找不到该基本块的匹配信息,则认为是新增块;
如果能找到该基本块,但基本块中的指令序列和补丁前不完全匹配,则认为是修改块;
如果指令序列也完全匹配,则认为是匹配块。
因此,能识别出补丁后程序中若干个差异函数,以及每个函数中的若干差异块。
第二步:差异分支识别。对于每个差异函数,使用本发明的方法识别出差异分支,作为输入需满足的条件,具体方法如下。
对于控制流补丁:
将差异块视为差异分支的源结点,记为src;
要求该差异块有两个后继结点;
如果一个后继结点A是新增块,且包含另一个后继结点B,则差异分支的源结点为src,目的结点为A,可表示为src->A(此步针对于控制流补丁模式5的情况);
如果不满足上一步情况,则计算src的每个后继结点与函数退出结点之间的距离,选择距离最近的作为差异分支的目的结点dst(此步针对于控制流补丁其他模式的情况)。
对于数据流补丁:
将差异块视为差异分支的目的结点,记为dst;
要求该差异分支的前驱和后继结点都是匹配块;
对于前驱结点,若其有两个后继结点,则选择从该前驱块到差异块的分支为差异分支。
图2是本例中补丁后差异函数的控制流图,包括修改块、新增块和匹配块,图中差异块共有A、B、D三个结点。考虑控制流补丁模型,有两个后继结点的为A和B;对于A结点,选择A->C;对于B结点,选择B->C。考虑数据流补丁模式,没有一个差异块的前驱结点和后继结点都是匹配块的,故无符合的差异分支。因此在这个例子中,共有两个差异分支可作为输入生成需满足的条件,选择其一即可,与上述方法识别出的结果一致。
为了验证本发明方法的有益效果,进行如下实验验证:
本实验采用DAPRA举办的网络防御比赛CGC中的126个程序作为数据集,来评估本发明方法的准确性。每个程序都有补丁前后两个版本,先将其编译成二进制程序,并使用BinDiff进行对比,提取出差异函数和基本块。对于每个函数,结合差异分支的特征进行人工识别作为对照数据,并使用本发明方法进行自动识别。
实验结果为:人工识别出325个差异分支,其中控制流补丁的分支共236个,数据流补丁分支共77个,还有些较为复杂无规律的补丁分支有12个。本发明方法共成功识别出270个分支,其中控制流分支识别出207个,数据流分支识别出54个,其他分支占9个,达到83%的准确率,技术效果理想。
Claims (5)
1.一种面向多种补丁模式的差异分支识别方法,步骤包括:
对补丁前后的二进制程序进行比对,识别出补丁后程序中的差异函数及其包含的差异块,该差异块为新增块或修改块;
对于控制流补丁,如果差异块的后继结点中有一个是新增块,且该新增块包含另一侧基本块的所有指令,则将从差异块到该新增块的分支作为差异分支;如果差异块含有两个后继结点,则将从差异块到距离函数退出结点最近的后继结点的分支作为差异分支;
对于数据流补丁,如果差异块的前驱结点和后继结点均为匹配块,且前驱结点含有两个后继结点,则将该前驱结点到差异块的分支作为差异分支。
2.如权利要求1所述的方法,其特征在于,通过BinDiff对补丁前后的二进制程序进行比对,找出差异函数。
3.如权利要求1所述的方法,其特征在于,通过IDA对补丁后的差异函数的每个基本块进行分析,找出差异块。
4.一种面向多种补丁模式的差异分支识别系统,包括存储器和处理器,该存储器存储计算机程序,该程序被配置为由该处理器执行,该程序包括用于执行上述权利要求1-3任一所述方法中各步骤的指令。
5.一种存储计算机程序的计算机可读存储介质,该计算机程序包括指令,该指令当由服务器的处理器执行时使得该服务器执行上述权利要求1-3任一所述方法中的各个步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810718977.5A CN109241737B (zh) | 2018-07-03 | 2018-07-03 | 一种面向多种补丁模式的差异分支识别方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810718977.5A CN109241737B (zh) | 2018-07-03 | 2018-07-03 | 一种面向多种补丁模式的差异分支识别方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109241737A true CN109241737A (zh) | 2019-01-18 |
CN109241737B CN109241737B (zh) | 2021-07-13 |
Family
ID=65071806
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810718977.5A Active CN109241737B (zh) | 2018-07-03 | 2018-07-03 | 一种面向多种补丁模式的差异分支识别方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109241737B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111914260A (zh) * | 2020-06-22 | 2020-11-10 | 西安交通大学 | 一种基于函数差分的二进制程序漏洞检测方法 |
WO2020248875A1 (zh) * | 2019-06-13 | 2020-12-17 | 晶晨半导体(上海)股份有限公司 | 版本比对方法、系统、计算机设备及可读存储介质 |
CN113626820A (zh) * | 2021-06-25 | 2021-11-09 | 中国科学院信息工程研究所 | 针对网络设备的已知漏洞定位方法及装置 |
CN114065227A (zh) * | 2022-01-18 | 2022-02-18 | 思探明信息科技(南京)有限公司 | 一种漏洞定位分析系统 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20120011493A1 (en) * | 2010-07-08 | 2012-01-12 | Microsoft Corporation | Binary code change vulnerability prioritization |
CN102789419A (zh) * | 2012-07-20 | 2012-11-21 | 中国人民解放军信息工程大学 | 一种使用多样本差异比对的软件故障分析方法 |
CN104035772A (zh) * | 2014-06-09 | 2014-09-10 | 中国科学院软件研究所 | 基于静态分析的源码多版本函数调用关系差异性标识方法 |
US20150089656A1 (en) * | 2013-09-25 | 2015-03-26 | Veracode, Inc. | System and method for automated remedying of security vulnerabilities |
CN105787367A (zh) * | 2016-02-23 | 2016-07-20 | 华中科技大学 | 一种软件更新的补丁安全性检测方法及系统 |
CN105868099A (zh) * | 2015-12-01 | 2016-08-17 | 乐视致新电子科技(天津)有限公司 | 分支提交差异检测方法及装置 |
CN106815229A (zh) * | 2015-11-30 | 2017-06-09 | 北京计算机技术及应用研究所 | 数据库虚拟补丁防护方法 |
CN107315677A (zh) * | 2016-04-26 | 2017-11-03 | 阿里巴巴集团控股有限公司 | 判断应用程序发生异常的方法及装置 |
-
2018
- 2018-07-03 CN CN201810718977.5A patent/CN109241737B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20120011493A1 (en) * | 2010-07-08 | 2012-01-12 | Microsoft Corporation | Binary code change vulnerability prioritization |
CN102789419A (zh) * | 2012-07-20 | 2012-11-21 | 中国人民解放军信息工程大学 | 一种使用多样本差异比对的软件故障分析方法 |
US20150089656A1 (en) * | 2013-09-25 | 2015-03-26 | Veracode, Inc. | System and method for automated remedying of security vulnerabilities |
CN104035772A (zh) * | 2014-06-09 | 2014-09-10 | 中国科学院软件研究所 | 基于静态分析的源码多版本函数调用关系差异性标识方法 |
CN106815229A (zh) * | 2015-11-30 | 2017-06-09 | 北京计算机技术及应用研究所 | 数据库虚拟补丁防护方法 |
CN105868099A (zh) * | 2015-12-01 | 2016-08-17 | 乐视致新电子科技(天津)有限公司 | 分支提交差异检测方法及装置 |
CN105787367A (zh) * | 2016-02-23 | 2016-07-20 | 华中科技大学 | 一种软件更新的补丁安全性检测方法及系统 |
CN107315677A (zh) * | 2016-04-26 | 2017-11-03 | 阿里巴巴集团控股有限公司 | 判断应用程序发生异常的方法及装置 |
Non-Patent Citations (3)
Title |
---|
YANG SONG ET AL.: "Automatic Vulnerability Locating in Binary Patches", 《2009 INTERNATIONAL CONFERENCE ON COMPUTATIONAL INTELLIGENCE AND SECURITY》 * |
ZHENGZI XU ET AL.: "SPAIN: Security Patch Analysis for Binaries towards Understanding the Pain and Pills", 《2017 IEEE/ACM 39TH INTERNATIONAL CONFERENCE ON SOFTWARE ENGINEERING (ICSE)》 * |
达小文等: "一种基于补丁比对和静态污点分析的漏洞定位技术研究", 《信息网络安全》 * |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2020248875A1 (zh) * | 2019-06-13 | 2020-12-17 | 晶晨半导体(上海)股份有限公司 | 版本比对方法、系统、计算机设备及可读存储介质 |
CN111914260A (zh) * | 2020-06-22 | 2020-11-10 | 西安交通大学 | 一种基于函数差分的二进制程序漏洞检测方法 |
CN111914260B (zh) * | 2020-06-22 | 2023-03-31 | 西安交通大学 | 一种基于函数差分的二进制程序漏洞检测方法 |
CN113626820A (zh) * | 2021-06-25 | 2021-11-09 | 中国科学院信息工程研究所 | 针对网络设备的已知漏洞定位方法及装置 |
CN114065227A (zh) * | 2022-01-18 | 2022-02-18 | 思探明信息科技(南京)有限公司 | 一种漏洞定位分析系统 |
Also Published As
Publication number | Publication date |
---|---|
CN109241737B (zh) | 2021-07-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109241737A (zh) | 一种面向多种补丁模式的差异分支识别方法及系统 | |
Gao et al. | Smartembed: A tool for clone and bug detection in smart contracts through structural code embedding | |
Bao et al. | {BYTEWEIGHT}: Learning to recognize functions in binary code | |
US9141806B2 (en) | Mining source code for violations of programming rules | |
CA3060085A1 (en) | Method for determining defects and vulnerabilities in software code | |
US11537502B1 (en) | Dynamic system for active detection and mitigation of anomalies in program code construction interfaces | |
Ivanova et al. | Regularmutator: a mutation testing tool for solidity smart contracts | |
Alakeel | Using fuzzy logic in test case prioritization for regression testing programs with assertions | |
CN106886446B (zh) | 软件源代码的验证方法及装置 | |
CN116305119A (zh) | 基于预测指导原型的apt恶意软件分类方法和装置 | |
Liao et al. | Smartstate: Detecting state-reverting vulnerabilities in smart contracts via fine-grained state-dependency analysis | |
Felderer et al. | Artificial intelligence techniques in system testing | |
So et al. | Smartfix: Fixing vulnerable smart contracts by accelerating generate-and-verify repair using statistical models | |
CN117633808A (zh) | 用于漏洞检测的方法、处理器及机器可读存储介质 | |
US20230394159A1 (en) | A method and system for security risk identification and controlling release management of software application with vulnerable codes | |
CN117081818A (zh) | 基于智能合约防火墙的攻击交易识别与拦截方法及系统 | |
CN110688368B (zh) | 一种构件行为模型挖掘方法与装置 | |
US11556444B1 (en) | Electronic system for static program code analysis and detection of architectural flaws | |
US11983102B2 (en) | Electronic system for machine learning based anomaly detection in program code | |
Mandloi et al. | A machine learning-based dynamic method for detecting vulnerabilities in smart contracts | |
Tsakiltsidis et al. | Towards automated performance bug identification in python | |
Van Thuy et al. | Automated large program repair based on big code | |
Kim et al. | Source code analysis for static prediction of dynamic memory usage | |
CN118171290B (zh) | 基于源代码和字节码的智能合约漏洞检测方法和系统 | |
Gao et al. | Unveiling the Potential of ChatGPT in Detecting Machine Unauditable Bugs in Smart Contracts: A Preliminary Evaluation and Categorization |
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 |