基于关键基本块的补丁存在检测方法技术

技术编号:35163530 阅读:19 留言:0更新日期:2022-10-12 17:24
本发明专利技术公开一种基于关键基本块的补丁存在检测方法,首先将漏洞函数,补丁函数以及需要检测的目标函数的语义建模为函数静态控制流图,并进行必要的预处理,以最大限度地减少编译混淆造成的影响;然后提出了一种基本块匹配算法,分别对漏洞函数,补丁函数,目标函数两两之间进行基本块匹配,生成匹配基本块对集合;然后分析与补丁有关的特征基本块的变化程度,选择排名前N位的特征基本块作为有效的补丁存在性测试的关键基本块;最后,在目标函数中分别搜索补丁函数和漏洞函数的关键基本块,判断该目标函数是否更相似于补丁函数,即漏洞是否已经被修补。通过以上方法,可以快速准确地判断大规模的待检测函数中的漏洞是否已经被修补。被修补。被修补。

【技术实现步骤摘要】
基于关键基本块的补丁存在检测方法


[0001]本专利技术涉及二进制程序语义分析,二进制代码相似性分析以及二进制代码安全性检测,特别涉及二进制代码补丁存在检测。

技术介绍

[0002]随着开源软件的普及,第三方库的代码重用激增,大大提高了不同工业领域的软件开发效率。然而,开源软件经常对软件安全造成严重威胁,因为漏洞可以很容易地通过代码重用传播。实际上,这种繁重的代码重用由于管理不善,难以跟踪。对于漏洞修补,即使已经发布了相应的补丁,但如何确保对大量受影响的软件产品及时进行所有漏洞的修补,依然是一项挑战。2020年的一份分析报告发现,在报告的所有漏洞中,超过一半涉及2002年至2018年发布的补丁的已知漏洞。漏洞的延迟修补使软件产品更容易受到严重的攻击和安全威胁。因此,高效、准确地检测所有易受攻击的漏洞是否被修补是至关重要的,尤其是对大型软件项目。
[0003]目前的漏洞检测方法是将所有的待检测目标函数都转换成数值特征向量,然后通过与特定漏洞函数的特征向量进行比较来对目标函数进行检测。如果目标函数与漏洞函数相似,则确定为漏洞函数。但是,这些方法无法提供足够细的粒度来区分漏洞函数和修补后的补丁函数,由于漏洞的补丁引入的代码修改较少,导致误报率较高。因此,这种方法需要通过人工检测来验证检测结果,最终找到未打补丁的漏洞函数。显然,这种方法的效率非常低。
[0004]为了能够准确检测出的漏洞函数是否已被修补,国内外的研究人员提出了补丁检测方法。
[0005]但是,这些补丁检测方法存在一系列的局限性:/>[0006]1)目前大部分补丁检测方法都需要获取源代码,无法满足大多数情况下源代码无法获取的检测需要;
[0007]2)编译技术的发展增加补丁检测的难度,会使得一部分的检测技术失效;
[0008]3)现有的补丁检测技术很难同时做到高检测精度和低时间开销,阻碍其实际应用。

技术实现思路

[0009]本专利技术的内容在于提出一种基于关键基本块的补丁存在检测方法,以解决上述技术问题。
[0010]本方法首先将漏洞函数,补丁函数以及需要检测的目标函数的语义建模为函数静态控制流图,并进行必要的预处理,以最大限度地减少编译混淆造成的影响;然后提出了一种基本块匹配算法,分别对漏洞函数,补丁函数,目标函数两两之间进行基本块匹配,生成匹配基本块对集合;然后分析与补丁有关的特征基本块的变化程度,选择排名前N位的特征基本块作为有效的补丁存在性测试的关键基本块;最后,在目标函数中分别搜索补丁函数
和漏洞函数的关键基本块,判断该目标函数是否更相似于补丁函数,即漏洞是否已经被修补。
[0011]为了实现上述目的,本专利技术采用以下技术方案:
[0012]基于关键基本块的补丁存在检测方法,包括如下步骤:
[0013]步骤S101:基于反汇编技术,对漏洞函数VF,VF对应的补丁函数PF,及待检测函数TF对应的可执行二进制文件进行反汇编,获得函数的静态信息(与函数,基本块,汇编指令,函数内静态控制流等有关的静态信息),构建函数静态控制流图CFG
V
,CFG
P
,CFG
T
,并对CFG
V
,CFG
P
,CFG
T
,进行预处理;
[0014]步骤S102:分别对静态控制流图CFG
P
和CFG
V
,CFG
P
和CFG
T
,CFG
V
和CFG
T
进行基本块匹配,生成匹配基本块对集合BB
PV
,BB
PT
,和BB
VT

[0015]步骤S103:基于匹配基本块对集合BB
PV
,确定补丁函数PF和漏洞函数VF的特征基本块集合CBB
P
和CBB
V

[0016]步骤S104:计算CBB
P
和CBB
V
内每一个特征基本块的改变度;选取排名前N位的特征基本块生成PF和VF的关键基本块集合KBB
P
和KBB
V

[0017]步骤S105:基于关键基本块集合KBB
P
和KBB
V
,分别计算函数TF和PF,VF的相似度SIM
TP
以及SIM
TV

[0018]步骤S106:基于SIM
TP
和SIM
TV
,对函数TF的漏洞是否已经被修复进行判断,如果SIM
TP
>SIM
TV
,则TF的漏洞已经被修复;否则,TF的漏洞未被修复;
[0019]步骤S107:输出检测结果。
[0020]进一步的,所述步骤S101具体为使用反汇编工具对二进制程序进行逆向分析,将输入的二进制代码转换为汇编代码。对漏洞函数VF,补丁函数PF和待检测函数TF对应的二进制程序进行反汇编,获得函数的静态信息,包括与函数,基本块,汇编指令,以及函数的静态控制流等有关的静态信息;并基于函数的静态信息,构建静态控制流图CFG
V
,CFG
P
,CFG
T
。函数的控制流图是一个有向图,其中,每个节点都对应一个基本块,基本块是一条没有分支的,连续的汇编指令序列;每一条有向边表示一条控制流,控制流流向下一个需要执行的基本块;
[0021]进一步的,所述步骤S101中对静态控制流图CFG
V
,CFG
P
,CFG
T
进行预处理的具体步骤如下:
[0022]步骤S201:对函数静态控制流图内的每一条指令的操作数进行标准化,标准化的规则如下:
[0023]1)寄存器:如果操作数是具体的寄存器名称,则被抽象为“Reg”;
[0024]2)地址:如果一个操作数是库函数地址,那么该操作数将被替换为具体的库函数名称;
[0025]如果一个操作数是用户定义函数地址,则该操作数被抽象为“UDFunc”;如果一个操作数是一个引用字符串的地址,则该操作数被替换为具体字符串,并将字符串内所有大写字母转换为小写字母;在其他情况下,操作数被抽象为“Addr”;
[0026]3)内存:如果操作数是内存,则被抽象为“Mem”;
[0027]4)常量:如果操作数是常量,则保持不变;
[0028]步骤S202:对函数静态控制流图内的每一个基本块内的指令序列进行简化,如果
基本块内的指令序列除了jmp,nop指令外,还包括其他指令,则将jmp,nop指令省略;
[0029]进一步的,所述步骤S102中匹配基本块的定义是:
[0030]对于两个基本块,如果符合以下其中一个条件,则判定这两个基本块匹配:
[0031]本文档来自技高网...

【技术保护点】

【技术特征摘要】
1.基于关键基本块的补丁存在检测方法,其特征在于,包括如下步骤:步骤S101:基于反汇编技术,对漏洞函数VF,VF对应的补丁函数PF,及待检测函数TF对应的可执行二进制文件进行反汇编,获得函数的静态信息,构建函数静态控制流图CFG
V
,CFG
P
,CFG
T
,并对函数静态控制流图CFG
V
,CFG
P
,CFG
T
,进行预处理;步骤S102:分别对静态控制流图CFG
P
和CFG
V
,CFG
P
和CFG
T
,CFG
V
和CFG
T
进行基本块匹配,生成匹配基本块对集合BB
PV
,BB
PT
,和BB
VT
;步骤S103:基于匹配基本块对集合BB
PV
,确定补丁函数PF和漏洞函数VF的特征基本块集合CBB
P
和CBB
V
;步骤S104:计算CBB
P
和CBB
V
内每一个特征基本块的改变度;选取改变度排名前N位的特征基本块生成PF和VF的关键基本块集合KBB
P
和KBB
V
;步骤S105:基于关键基本块集合KBB
P
和KBB
V
,分别计算函数TF和PF,VF的相似度SIM
TP
以及SIM
TV
;步骤S106:基于SIM
TP
和SIM
TV
,对函数TF的漏洞是否已经被修复进行判断,如果SIM
TP
>SIM
TV
,则TF的漏洞已经被修复;否则,TF的漏洞未被修复;步骤S107:输出检测结果。2.根据根据权利要求1所述的方法,其特征在于,所述步骤S101中反汇编技术是指使用反汇编工具对二进制程序进行逆向分析,将输入的二进制代码转换为汇编代码,对漏洞函数VF,补丁函数PF和待检测函数TF对应的二进制程序进行反汇编,获得函数的静态信息,静态信息包括与函数,基本块,汇编指令,以及函数的静态控制流等有关的静态信息;并基于函数的静态信息,构建静态控制流图CFG
V
,CFG
P
,CFG
T
,函数的控制流图是一个有向图,其中,每个节点都对应一个基本块,基本块是一条没有分支的,连续的汇编指令序列;每一条有向边表示一条控制流,控制流流向下一个需要执行的基本块。3.根据根据权利要求1所述的方法,其特征在于,所述步骤S101中对静态控制流图CFG
V
,CFG
P
,CFG
T
进行预处理的具体步骤如下:步骤S201:对函数静态控制流图内的每一条指令的操作数进行标准化,标准化的规则如下:1)寄存器:如果操作数是具体的寄存器名称,则被抽象为“Reg”;2)地址:如果一个操作数是库函数地址,那么该操作数将被替换为具体的库函数名称;如果一个操作数是用户定义函数地址,则该操作数被抽象为“UDFunc”;如果一个操作数是一个引用字符串的地址,则该操作数被替换为具体字符串,并将字符串内所有大写字母转换为小写字母;在其他情况下,操作数被抽象为“Addr”;1)内存:如果操作数是内存,则被抽象为“Mem”;2)常量:如果操作数是常量,则保持不变;步骤S202:对函数静态控制流图内的每一个基本块内的指令序列进行简化,如果基本块内的指令序列除了jmp,nop指令外,还包括其他指令,则将jmp,nop指令省略。4.根据权利要求1所述的方法,其特征在于,所述步骤S102中匹配基本块的定义是:对于两个基本块,如果符合以下其中一个条件,则判定这两个基本块匹配:1)两个基本块包含完全相同的指令序列;2)除了条件跳转指令,两个基本块包含完全相同的指令序列,且条件跳转指令语义等
价。5.根据权利要求1所述的方法,其特征在于,所述步骤S102中对两个静态控制流图进行基本块匹配的方法是基于函数静态控制流图,使用基本块的上下文关系指导匹配基本块的搜索过程,具体步骤如下:步骤S301:对CFG
P
和CFG
V
内的四类特殊基本块进行标注:1)入口基本块:该基本块是函数开始执行的起始基本块;2)出口基本块:该基本块是函数结束执行的终止基本块;3)字符串引用基本块:该基本块内的指令序列包含至少一条含有字符串引用的指令;4)函数调用基本块:该基本块内的指令序列包含至少一条函数调用指令的指令;步骤S302:比较CFG
P
和CFG
V
内的特殊基本块,根据匹配基本块的定义,识别出匹配基本块对,构建初始匹配基本块集合BB
PV
;步骤S303:对于CFG
P
内的剩余基本块,统计每个基本块已匹配的基本块邻居(前驱基本块和后继基本块)的数量,并根据该数量,对剩余基本块进行排序,选取匹配邻居数量最多的基本块bb
P
;步骤S304:对于bb
P
的每一个前驱基本块bb
A
,如果bb
A
在VF内存在匹配基本块bb
a
,则将bb
a
未匹配的后继基本块加入集合C1;对于bb
P
的每一个后继基本块bb
C
,如果bb
C
在VF内存在匹配基本块bb
c
,则将bb
c
未匹配的前驱基本块加入集合C2;如果C1和C2都不为空,则将C1和C2的交集分配给bb
P
的候选匹配基本块集合C;否则,则将C1和C2的并集分配给C;在C内,搜索唯一与bb
P
相匹配的基本块bb
V
,若存在,将(bb
P
,bb
V
)加入BB
PV
;步骤S306:判断CFG
P
和CFG
V
内所有匹配基本块对都已经被发现,若是,结束匹配,得到CFG
P
和CFG
V
的匹配基本块对集合BB
PV
;若不是,转到步骤S302;步骤S307:重复步骤S301

步骤S306,分别对CFG
...

【专利技术属性】
技术研发人员:徐茜闫峥郑庆华贾昂周朝晖范铭刘烃
申请(专利权)人:西安交通大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1