CN112199684A - 基于跨语言代码关联的Java补丁存在性检测方法 - Google Patents
基于跨语言代码关联的Java补丁存在性检测方法 Download PDFInfo
- Publication number
- CN112199684A CN112199684A CN202010998365.3A CN202010998365A CN112199684A CN 112199684 A CN112199684 A CN 112199684A CN 202010998365 A CN202010998365 A CN 202010998365A CN 112199684 A CN112199684 A CN 112199684A
- Authority
- CN
- China
- Prior art keywords
- patch
- line
- patches
- java
- 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.)
- Pending
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/577—Assessing vulnerabilities and evaluating computer system security
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/10—Text processing
- G06F40/194—Calculation of difference between files
-
- 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
Abstract
本发明属于安卓平台漏洞对抗技术领域,是基于跨语言代码关联的Java补丁存在性检测方法。本发明利用字节码中的调试信息来关联源代码;引入细粒度分析,以区分目标待测程序中是否存在补丁;引入补丁前的参照版本以及补丁后的参照版本,与待测程序进行关联分析;具体步骤包括:跨语言的行匹配,是基于特征来建立两种语言之间的行关联;Java补丁分析,提取出打补丁前后源码的补丁信息,根据补丁的位置和状态将每一行补丁分类成行添加、行删除和行修改;Java补丁检测,从两张行关联图中查询每一行补丁的存在情况,最后将每一行补丁的存在状况综合起来以考量整个补丁的存在性。本发明能够完全提供行粒度的补丁检测结果,为无源码的字节码补丁检测提供新的手段。
Description
技术领域
本发明属于安卓平台漏洞对抗技术领域,具体涉及一种检测目标程序是否应用了某个漏洞 补丁的方法。
背景技术
软件开发人员常常从开源项目中引用代码,并应用到自己开发的闭源软件中。开源项目中 往往包含大量漏洞,这些漏洞很可能被传播到闭源软件中。常见的补丁是一小段对这些漏洞进 行修复的代码片段,这些代码片段一般被软件开发者应用到含有漏洞的源代码中,从而进行漏 洞的修复,最后发布新的软件版本。但是由于闭源软件没有公开源代码,所以不能通过查看其 对应的源码来判断它们是否打上了最新的补丁。为了评估闭源软件的安全性,检查这些闭源软 件是否及时打上安全补丁是很有必要的。
为了检测目标软件是否存在补丁,一个最为直观的方法是进行漏洞代码搜索。现有的漏洞 搜索技术通过函数级或者文件级的代码相似度来衡量代码差异,但是这些方法无法提供更为细 致的搜索粒度,例如无法确定单行补丁是否存在。另外,现有的漏洞搜索技术主要是利用源码 到源码的搜索,或者二进制到二进制的搜索;而在闭源软件中,需要以源码到二进制的搜索方 法来判断补丁是否存在。所以,现有的漏洞代码搜索方法在闭源软件的补丁存在性检测中存在 较大的局限性。
另外一种知名的补丁存在测试工具FIBER,旨在对C/C++的二进制文件执行补丁存在性测 试,并且能够通过源码来判断二进制文件是否存在补丁。它首先将参照源码编译成二进制文件 并生成二进制级别的签名,然后利用二进制到二进制的测试方式在目标二进制文件中进行签名 匹配。为了在签名的唯一性和稳定性之间衡量,FIBER仅考虑局部很小的补丁生成签名,这种 选择导致FIBER无法反映整体补丁的存在。并且它仅考虑精确的签名匹配,无法应对闭源软件 中存在的代码定制化问题,造成大量的漏报。另外,FIBER需要构建整个项目以从源代码生成 二进制级别的签名,而且需要选择与目标二进制最相似的二进制文件来生成签名,在具体实施 上不够灵活,这限制了FIBER无法测试更多的二进制文件。
基于上述分析,开发针对更加细粒度的、更为精确的Java补丁检测方法是非常有必要的。
参考文献:
1.Eugene,W,Myers.An O(ND)difference algorithm and its variations[J].Algorithmica,1986.。
附录:补丁检测算法伪代码
算法1补丁检测算法t
发明内容
本发明的目的是设计一种更加细粒度、更为精确的基于跨语言代码关联的Java补丁存在 性检测方法,帮助安全分析人员评估漏洞状态。
本发明检测的对象为补丁前的Java源码、补丁后的Java源码和闭源的目标字节码文件; 由于Java可执行程序为字节码格式,补丁文件为源代码格式,因此本发明需要进行跨语言的 代码分析。本发明解决这一问题的思路是,利用字节码中普遍存在的调试信息来关联源代码; 同时,由于补丁文件的修改可能非常微小,本发明引入细粒度的分析,以区分目标待测程序中 是否存在补丁。为了支持这一种类型的细粒度分析,本发明引入补丁前的参照版本以及补丁后 的参照版本,并将他们同时与待测程序进行关联分析,通过对比两个参照版本与待测程序之间 的差异,精确地识别补丁中存在的修改行为是否存在于待测程序中。
本发明提供的基于跨语言代码关联的Java补丁存在性检测方法,整体架构图如附图1所 示。具体步骤为:
(一)跨语言的行匹配,是基于特征来建立两种语言之间的行关联;具体利用Java行和 smali聚合行之间的特征相似度实施行对行的最优映射计算;这一过程需要计算出打补丁前的 Java源码与字节码、打补丁后的Java源码和字节码两张行关联图;
(二)Java补丁分析,通过diff命令提取出打补丁前后源码的补丁信息;根据补丁的位 置和状态将每一行补丁分类成行添加、行删除和行修改;
(三)Java补丁检测,从两张行关联图中查询每一行补丁的存在情况,最后将每一行补 丁的存在状况综合起来以考量整个补丁的存在性。
下面对各个步骤作进一步的描述:
(一)跨语言的行匹配;
将补丁前的参照版本以及补丁后的参照版本同时与待测程序进行比对分析,分析的结果将 导出两张关联图;这两种关联图反映了潜在补丁引入之后表现出来的差异,以便后续进行补丁 检测;
跨语言的行匹配的过程,具体分成两个步骤:(1)首先定义语义特征和特征间相似度; (2)然后利用比对算法生成关联图。
(1)定义语义特征和特征间相似度
本发明调研了Java源码与smali语言中大量的语义特征,并且选取了Java与Smali语言 共享的语义特征来进行Java源码行与smali行的匹配,如果这些语义特征在两种语言的行中 同时出现,那么说明这两种语言行高度匹配。这些共享的语义特征包括:共同出现的常量名、 共同调用的函数名称、相同的变量名、相同的构造对象类名和相同的特殊指令类型。本发明采 用Jaccard距离来衡量特征集合相似度,两种语言行特征集合之间的Jaccard距离越大,代表 Java源码行和smali行之间语义相似度也越大。最后本发明定义了相似度阈值T,如果Jaccard 距离超过这个阈值,则说明Java源码行与smali行等价。设Java源码行Linejava的特征集合 为Cjava,Smali行Linesmali的特征集合为Csmali,那么这两个集合之间的Jaccard距离为:
(2)利用比对算法生成关联图
单行的语义相似度计算方法确定后,需要进行整个方法行的匹配,即Java源码方法与目 标字节码方法之间的行比对。其中,Java源码方法根据源码的行号进行分割,从而组成源码 序列。而smali方法则根据调试信息来进行smali行的分割,如附图2中的smali代码片段所 示,调试信息“.line xx”将smali代码分成不同的samli行序列。接着,本发明采用Myers 算法〔1〕来查找Java源码行序列与目标smali行序列之间的最佳映射图,其中单个序列行的 等价性则采用(1)中所述的Jaccard距离来衡量。
最终,比对算法价将根据上述Myers算法生成补丁前/补丁后源码和目标字节码之间的行 关联图,即补丁前Java源码与目标字节码的行关联图Line2lineMappre,以及补丁后Java源码 与目标字节码的行关联图Line2lineMappost。这两个关联图对之后描述的补丁检测过程来说是 极为关键的。
(二)Java补丁分析
Java补丁分析,是对补丁的位置和类型进行分析。补丁文件一般通过用diff命令对比补 丁前后的源码来生成。一个补丁通常包含多个变更位置。每个补丁以补丁头为开始,这个补丁 头指示了当前的修改在修改前源码和修改后源码中的具体位置。通过解析补丁头,可以快速地 查找补丁所在的Java类和方法。
根据补丁所在的位置,将补丁区分为两种形式:方法外补丁和方法内补丁。这两种补丁需 要经过筛选才能进行后续的补丁检测:
(1)筛除方法外补丁:方法外补丁是在方法外部发生更改的代码区域(例如,类添加新 的成员变量),而方法内补丁则直接影响方法的具体实现。由于大多数Java漏洞是逻辑缺陷, 因此应通过修改方法内逻辑来解决。本发明对194个实际安全补丁的研究表明,将近80%的补 丁更改属于方法内更改,所以本发明不考虑方法外补丁;
(2)筛除补丁中的注释:生成的补丁文件可能包含与代码更改无关的信息,例如注释的 更改,这些注释的改变不会反映到Java字节码中,所以本发明将更改的注释进行筛除。
对上述两种补丁进行筛除后,对方法内补丁进行更加细致的识别和分类。如附图3所示, 补丁的形式包含代码行的添加和代码行的移除,行的添加对应以“+”开始的行,行的移除对 应以“-”开头的行。本发明通过解析补丁文件中所有的“+”和“-”开头的源码行,分别定 义三种不同类型的补丁,它们分别是行添加补丁、行删除补丁和行修改补丁:
(a)行添加补丁
如附图3补丁示例图展示的一段补丁代码的第4行、第7行和第8行,以“+”开头的补丁行被定义为补丁添加行;
(b)行删除补丁
如附图3的第3行和第6行展示了以“-”开头的补丁行,这些以“-”开头的补丁行被定 义为补丁删除行;
(c)行修改补丁
在另外一种情况中,相邻的补丁在语义上极为相似,如附图中的第12行和第13行代码所 示,第12行在补丁应用之前的源码中出现,第13行在补丁应用之后的源码中出现,它们之间 的微小区别是参数的数量不同。这使得在补丁应用前后,这种微小修改的源码行都能够映射到 目标字节码行中,从而误导补丁检测器生成错误的检测结果。为了更为精确地区分这些微小的 修补行为,本发明将其定义为行修改补丁;
为了识别行修改补丁,遍历整个补丁文件,如果两条相邻的删除和添加行之间的语义特征 相似度大于阈值T,该补丁行被视为修改行。另外,本发明还将识别的范围从一行拓展到多行, 以便识别出一系列的修改行。
(三)Java补丁检测
Java补丁检测,即对最后的补丁存在性进行检测。从补丁前后的两种比对图中查询每一 行补丁的存在性,并且对查询结果进行综合判断,如果最终的结果大于某一阈值,则说明整个 补丁存在;否则补丁不存在。
本发明定义了三种不同类型的补丁,它们的查询策略也有所不同,本发明对补丁中的添加、 删除和修改分别定义了三种不同的查询来进行相应补丁的检测:
(1)行添加补丁。为了检测添加行是否存在,查询修补后源代码和目标字节码之间的行 比对图Line2lineMappost。如果能够在这张Map中找到同补丁行匹配的Java字节码聚合行,则 此行补丁存在于目标字节码中;
(2)行删除补丁。为了检测删除行的存在,查询修补前源代码和目标字节码之间的行比 对图Line2lineMappre。如果此行不匹配,则此目标字节码进行了删除操作;
(3)行修改补丁。为了检测修改行的存在,查询补丁前/补丁后源代码和目标字节码之间 的行比对图Line2lineMappre和Line2lineMappost。如果此行在补丁后源代码和字节码比对图中 的匹配相似度高于补丁前源代码和字节码比对图中的匹配相似度,则目标字节码进行了修改操 作。
检测算法伪代码如附录所示,检测算法在遍历的过程中将维持两个变量:记录所有匹配补 丁的特征累加值的found,和记录所有补丁的特征累加值的total。每条补丁的特征数由FeaturesIn()函数计算得到,通过补丁的特征数量,本算法可以直观地为特征数多的补丁行赋 予更多的权重。
最后的补丁检测结果由found与total的比值给出,如果这两者的比值越大,说明目标字 节码中包含的补丁行越多,整体补丁的存在概率也越高。根据大量补丁检测实验的效果,本算 法给两者的比值确定一个阈值TPatchPresenceRatio,若比值超过了阈值,那么本算法判定整体的补丁 存在,否则不存在。
本发明还涉及基于上述检测方法的基于跨语言代码关联的Java补丁存在性检测系统。该 检测系统包括三个模块:(一)跨语言的行匹配模块,(二)Java补丁分析模块,(三)Java 补丁检测模块;三个模块执行上述三的步骤内容的操作。
综上所述,本发明提供了一种直接从源代码解析补丁,并且直接在Java字节码中查询补 丁,返回更加细粒度(补丁行)存在结果的方法。与现有的最优补丁检测方法相比,本发明直 接执行源码到二进制的补丁查询,为安卓平台上的闭源软件和系统提供了更加精准的补丁检测 方法。
附图说明
图1为补丁存在性检测整体架构图。
图2为smali调试信息样例。
图3为补丁类型样例图。
具体实施方式
本发明设计了一个基于跨语言代码关联的Java补丁存在性检测系统,该系统的输入为补 丁前的Java源码、补丁后的Java源码和闭源的目标字节码文件。首先,跨语言比对器逐行提 取出这三种文件的共享特征,接着利用语义特征相似度计算出两张行关联图,分别是补丁前的 Java源码与目标字节码的行关联图Line2lineMappre以及补丁后的Java源码与目标字节码的行 关联图Line2lineMappost。补丁分析器根据补丁文件提取出三种不同类型的补丁行,补丁检测 器将利用不同的补丁类型分别在两个比对图中检查其存在性,最终整合所有补丁行的存在结果 来输出整个补丁的存在性判断。本章节介绍特征提取、行匹配和补丁检测的具体实施过程。
一、特征提取——提取不同语言的语义特征
本发明采用开源的Spoon工具来提取Java语义特征,它能够提供强大的Java语言解析功 能。它首先从Java源文件生成抽象语法树(AST),然后给定需要查询的Java行,遍历AST结 构以抽取出所需要的语义特征。
另一方面,本发明使用开源工具dexlib解析smali指令,这个工具能够直接解析Java字 节码文件,并且遍历字节码文件中的每一条smali指令,从而直接提取前述的5中语义特征。 但是,对于常量特征的提取需要额外处理:常量一般会存放在寄存器中,smali指令再引用这 些寄存器来访问相关的常量信息。为了从smali指令中提取常量值,本发明利用常量传播分析 来构造常量与寄存器之间的关系。这一过程首先扫描整个方法中的常量值和寄存器,并且构建 出常量与寄存器之间的映射关系。当扫描的smali指令中的操作数中包含寄存器时,仅需要查 找提前构造的映射表来判断是否有对应的常量值。
二、跨语言的行级匹配器——建立行对行的比对图
本过程的输入是提取特征之后的Java方法源码和目标字节码,行级匹配器将对不同语言 之间的方法行进行匹配。在发明内容中已经提到,这一过程可以看作一种最长公共子序列问题, 本过程将采用开源Mayers算法来进行匹配。
在匹配之前,需要对smali方法中所有的smali指令聚合行进行适当的处理以简化匹配的 过程。字节码反汇编工具baksmali根据“.line”标记将原始的连续smali指令分成多个块, 这些连续的smali指令是一个smali聚合行。少部分聚合行需要进行特殊的处理:
(1)部分聚合行出现重复的情况。例如,baksmali为每个try语句块中的返回指令生成 一个相同的finally块;由于源代码中只有一个finally块,因此本模块在smali代码中消除 多余的finally块,只保留一个;
(2)部分聚合行不同但是共享同一个行号的情况。这是因为编译器将单条Java语句编译 成几个行块,例如switch语句;本模块简单地将这些行块合并为同一个。
利用Java方法源码和smali中聚合的行号信息,本模块可以进行精确匹配。匹配的过程 如下:
(1)首先,本发明按照smali调试信息中的行号对这些聚合行进行序列排序;
(2)接着利用Myers算法进行最优的匹配求解。
比对器将生成两种比对图,分别是补丁前的Java源码和目标字节码的Line2lineMappre以 及补丁后的Java源码和目标字节码的Line2lineMappost。
三、Java补丁检测算法
本算法根据第二步生成的两种比对图来实施具体的补丁检测。首先,本发明提取补丁文件 中三种不同的修改类型:行添加、行删除和行修改。接着,对于每一种补丁行,检测算法将采 取不同的查询方法来确定补丁行的存在性。算法将遍历每一条补丁行:
(1)如果此补丁行是添加操作,那么需要在Line2lineMappost中查询这条补丁行是否存在 映射,如果有,则说明目标字节码中已经打上了相应的补丁;
(2)如果此补丁行是添加操作,那么需要在Line2lineMappre中查询这条补丁行是否存在 映射,如果无法匹配,则说明补丁前包含了被删除的行,但是目标字节码并不包含被删除的行, 说明这条补丁也被修复;
(3)如果该补丁行是修改操作,那么两个图都可能有相应的匹配行,本算法比较这条补 丁行在两个比对图中的相似度来判断其存在性;若这条补丁在Line2lineMappost中的相似度高 于Line2lineMappre中的相似度,说明目标字节码实施了相应的修改。
最后,本发明根据每个补丁行的存在状态给出最终结果补丁检测结果。由于一个补丁中可 能包含多处行的更改,本发明使用每个补丁行中提取的特征数作为这个补丁行的权重。整体补 丁的存在性则由所有匹配的补丁行的权重之和与所有补丁行的权重和之间的比率来表示,如果 最终的比率大于TPatchPresenceRatio,则说明补丁存在,否则补丁不存在。
Claims (4)
1.一种基于跨语言代码关联的Java补丁存在性检测方法,检测的对象为补丁前的Java源码、补丁后的Java源码和闭源的目标字节码文件;其特征在于,利用字节码中普遍存在的调试信息来关联源代码;同时引入细粒度分析,以区分目标待测程序中是否存在补丁;为了支持细粒度分析,引入补丁前的参照版本以及补丁后的参照版本,并将他们同时与待测程序进行关联分析,通过对比两个参照版本与待测程序之间的差异,精确地识别补丁中存在的修改行为是否存在于待测程序中;具体步骤为:
(一)跨语言的行匹配,是基于特征来建立两种语言之间的行关联;具体利用Java行和smali聚合行之间的特征相似度实施行对行的最优映射计算;得到打补丁前的Java源码与字节码、打补丁后的Java源码和字节码两张行关联图;
(二)Java补丁分析,是通过diff命令提取出打补丁前后源码的补丁信息;根据补丁的位置和状态将每一行补丁分类成行添加、行删除和行修改;
(三)Java补丁检测,从两张行关联图中查询每一行补丁的存在情况,最后将每一行补丁的存在状况综合起来以考量整个补丁的存在性。
2.根据权利要求1所述的方法,其特征在于,步骤(一)中所述跨语言的行匹配,具体分成两个步骤:
(1)定义语义特征和特征间相似度
通过调研Java源码与smali语言中大量的语义特征,选取Java与Smali语言共享的语义特征来进行Java源码行与smali行的匹配,如果这些语义特征在两种语言的行中同时出现,那么说明这两种语言行高度匹配;这些共享的语义特征包括:共同出现的常量名、共同调用的函数名称、相同的变量名、相同的构造对象类名和相同的特殊指令类型;
采用Jaccard距离来衡量特征集合相似度,两种语言行特征集合之间的Jaccard距离越大,代表Java源码行和smali行之间语义相似度也越大;最后定义相似度阈值T,如果Jaccard距离超过这个阈值,则说明Java源码行与smali行等价;设Java源码行Linejava的特征集合为Cjava,Smali行Linesmali的特征集合为Csmali,那么这两个集合之间的Jaccard距离为:
(2)利用比对算法生成关联图;
语义相似度计算方法确定后,进行整个方法行的匹配,即Java源码方法与目标字节码方法之间的行比对;其中,Java源码方法根据源码行进行分割,从而组成源码序列;而目标字节码则利用现有的调试信息“.line xx”将smali代码分成不同的samli行序列;接着,采用Myers算法查找Java源码行序列与目标smali行序列之间的最佳映射图,并且通过语义相似度来衡量序列元素之间的等价性;
最后,通过比对算法生成补丁前/补丁后源码和目标字节码之间的行关联图,即补丁前源码与目标字节码的行关联图,记为Line2lineMappre,以及补丁后源码与目标字节码的行关联图,记为Line2lineMappost。
3.根据权利要求2所述的方法,其特征在于,步骤(二)中所述Java补丁分析,是对补丁的位置和类型进行分析;由于补丁文件通过用diff命令对比补丁前后的源码来生成,一个补丁通常包含多个变更位置;每个补丁以补丁头为开始,这个补丁头指示当前的修改在修改前源码和修改后源码中的具体位置;通过解析补丁头,可以快速地查找补丁所在的Java类和方法;
根据补丁所在的位置,将补丁区分为两种形式:方法外补丁和方法内补丁;这两种补丁需要经过筛选才能进行后续的补丁检测:
(1)筛除方法外补丁:方法外补丁是在方法外部发生更改的代码区域,而方法内补丁则直接影响方法的具体实现;由于大多数Java漏洞是逻辑缺陷,因此通过修改方法内逻辑来解决;通过对实际安全补丁的研究表明,将近80%的补丁更改属于方法内更改,所以不考虑方法外补丁,予于筛除;
(2)筛除补丁中的注释:生成的补丁文件可能包含与代码更改无关的信息,这些注释的改变不会反映到Java字节码中,所以将更改的注释予于筛除;
对上述两种补丁进行筛除后,对方法内补丁进行更加细致的识别和分类;补丁的形式包含代码行的添加和代码行的移除,行的添加对应以“+”开始的行,行的移除对应以“-”开头的行;通过解析补丁文件中所有的“+”和“-”开头的源码行,分别定义三种不同类型的补丁,它们分别是行添加补丁、行删除补丁和行修改补丁:
(a)行添加补丁,以“+”开头的补丁行被定义为补丁添加行;
(b)行删除补丁,以“-”开头的补丁行被定义为补丁删除行;
(c)行修改补丁,相邻的补丁在语义上极为相似,它们之间的微小区别是参数的数量不同;为了更为精确地区分这些微小的修补行为,将其定义为行修改补丁;
为了识别行修改补丁,遍历整个补丁文件,如果两条相邻的删除和添加行之间的语义特征相似度大于阈值T,该补丁行被视为修改行;另外,还将识别的范围从一行拓展到多行,以便识别出一系列的修改行。
4.根据权利要求3所述的方法,其特征在于,步骤(三)中所述Java补丁检测,是对最后的补丁存在性进行检测;具体是从补丁前后的两种比对图中查询每一行补丁的存在性,并且对查询结果进行综合判断,如果最终的结果大于某一阈值,则说明整个补丁存在;否则补丁不存在;
对于三种不同类型的补丁,它们的查询策略也有所不同;对补丁中的添加、删除和修改分别定义了三种不同的查询来进行相应补丁的检测:
(1)行添加补丁,为了检测添加行是否存在,查询修补后源代码和目标字节码之间的行比对图Line2lineMappost;如果能够在这张Map中找到同补丁行匹配的Java字节码聚合行,则此行补丁存在于目标字节码中;
(2)行删除补丁,为了检测删除行的存在,查询修补前源代码和目标字节码之间的行比对图Line2lineMappre;如果此行不匹配,则此目标字节码进行了删除操作;
(3)行修改补丁,为了检测修改行的存在,查询补丁前/补丁后源代码和目标字节码之间的行比对图Line2lineMappre和Line2lineMappost;如果此行在补丁后源代码和字节码比对图中的匹配相似度高于补丁前源代码和字节码比对图中的匹配相似度,则目标字节码进行了修改操作;
Java补丁检测算法在遍历的过程中将维持两个变量:记录所有匹配补丁的特征累加值的found,和记录所有补丁的特征累加值的total;每条补丁的特征数由FeaturesIn()函数计算得到,通过补丁的特征数量,可以直观地为特征数多的补丁行赋予更多的权重;
最后的补丁检测结果由found与total的比值给出,如果这两者的比值越大,说明目标字节码中包含的补丁行越多,整体补丁的存在概率也越高;根据大量补丁检测实验的效果,具体给两者的比值确定一个阈值TPatchPresenceRatio,若比值超过了阈值,那么本算法判定整体的补丁存在,否则不存在。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010998365.3A CN112199684A (zh) | 2020-09-21 | 2020-09-21 | 基于跨语言代码关联的Java补丁存在性检测方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010998365.3A CN112199684A (zh) | 2020-09-21 | 2020-09-21 | 基于跨语言代码关联的Java补丁存在性检测方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112199684A true CN112199684A (zh) | 2021-01-08 |
Family
ID=74014675
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010998365.3A Pending CN112199684A (zh) | 2020-09-21 | 2020-09-21 | 基于跨语言代码关联的Java补丁存在性检测方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112199684A (zh) |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20150089656A1 (en) * | 2013-09-25 | 2015-03-26 | Veracode, Inc. | System and method for automated remedying of security vulnerabilities |
CN109460641A (zh) * | 2018-11-15 | 2019-03-12 | 成都网域复兴科技有限公司 | 一种针对二进制文件的漏洞定位发掘系统和方法 |
CN111177733A (zh) * | 2019-12-30 | 2020-05-19 | 北京航空航天大学 | 一种基于数据流分析的软件补丁检测方法及装置 |
-
2020
- 2020-09-21 CN CN202010998365.3A patent/CN112199684A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20150089656A1 (en) * | 2013-09-25 | 2015-03-26 | Veracode, Inc. | System and method for automated remedying of security vulnerabilities |
CN109460641A (zh) * | 2018-11-15 | 2019-03-12 | 成都网域复兴科技有限公司 | 一种针对二进制文件的漏洞定位发掘系统和方法 |
CN111177733A (zh) * | 2019-12-30 | 2020-05-19 | 北京航空航天大学 | 一种基于数据流分析的软件补丁检测方法及装置 |
Non-Patent Citations (1)
Title |
---|
JIARUN DAI,ET AL: "{BScout}:Direct Whole Patch Presence Test for Java Executables", 《29TH USENIX SECURITY SYMPOSIUM(USENIX SECURITY 20)》 * |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108614707B (zh) | 静态代码检查方法、装置、存储介质和计算机设备 | |
Li et al. | Vulpecker: an automated vulnerability detection system based on code similarity analysis | |
Tian et al. | Automatically diagnosing and repairing error handling bugs in C | |
US8549635B2 (en) | Malware detection using external call characteristics | |
CN111400724B (zh) | 基于代码相似性分析的操作系统脆弱性检测方法、系统及介质 | |
CA3060085A1 (en) | Method for determining defects and vulnerabilities in software code | |
US10346287B1 (en) | Detection of degenerate software forms in object oriented code | |
CN111914260B (zh) | 一种基于函数差分的二进制程序漏洞检测方法 | |
CN112214399B (zh) | 基于序列模式匹配的api误用缺陷检测系统 | |
Li et al. | Incremental clone detection and elimination for erlang programs | |
CN116578980A (zh) | 基于神经网络的代码分析方法及其装置、电子设备 | |
Richter et al. | Tssb-3m: Mining single statement bugs at massive scale | |
CN112115053A (zh) | 基于序列模式匹配的api误用缺陷检测方法 | |
CN114510722A (zh) | 增量代码的静态检测方法及检测系统 | |
KR100968267B1 (ko) | 컴파일러 구분에 의한 악성코드 진단장치 및 방법 | |
CN116383833A (zh) | 软件程序代码的测试方法及其装置、电子设备、存储介质 | |
Alomari et al. | Clone detection through srcClone: A program slicing based approach | |
Sun et al. | Propagating bug fixes with fast subgraph matching | |
Di Angelo et al. | Consolidation of ground truth sets for weakness detection in smart contracts | |
CN111966578A (zh) | 一种安卓兼容性缺陷修复效果的自动化评估方法 | |
Ufuktepe et al. | Tracking code bug fix ripple effects based on change patterns using markov chain models | |
Black et al. | Evolved similarity techniques in malware analysis | |
Greenan | Method-level code clone detection on transformed abstract syntax trees using sequence matching algorithms | |
CN112199684A (zh) | 基于跨语言代码关联的Java补丁存在性检测方法 | |
Liu et al. | More precise regression test selection via reasoning about semantics-modifying changes |
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 | ||
WD01 | Invention patent application deemed withdrawn after publication | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20210108 |