CN111914260B - 一种基于函数差分的二进制程序漏洞检测方法 - Google Patents

一种基于函数差分的二进制程序漏洞检测方法 Download PDF

Info

Publication number
CN111914260B
CN111914260B CN202010574987.3A CN202010574987A CN111914260B CN 111914260 B CN111914260 B CN 111914260B CN 202010574987 A CN202010574987 A CN 202010574987A CN 111914260 B CN111914260 B CN 111914260B
Authority
CN
China
Prior art keywords
function
vulnerability
patch
target
functions
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
CN202010574987.3A
Other languages
English (en)
Other versions
CN111914260A (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.)
Xian Jiaotong University
Original Assignee
Xian Jiaotong University
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 Xian Jiaotong University filed Critical Xian Jiaotong University
Priority to CN202010574987.3A priority Critical patent/CN111914260B/zh
Publication of CN111914260A publication Critical patent/CN111914260A/zh
Application granted granted Critical
Publication of CN111914260B publication Critical patent/CN111914260B/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
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • G06F11/3608Software analysis for verifying properties of programs using formal methods, e.g. model checking, abstract interpretation
    • 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)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Computer Security & Cryptography (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Computing Systems (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明公开了一种基于函数差分的二进制程序漏洞检测方法,针对已知漏洞函数提取补丁特征,并在嫌疑目标函数中进行特征匹配,识别其中是否打过相应补丁,判断是否包含已知漏洞。首先,确定漏洞相关函数,收集包含漏洞函数及修复后函数的二进制代码并进行反汇编处理;其次,利用差分分析技术确定同一函数两个版本间的变化并生成补丁特征;最后,在目标程序中筛选出嫌疑目标函数并定位和表征其中局部关键区域,再通过相似度计算进行特征匹配以检测目标函数是否包含漏洞,并依此完成对目标程序的漏洞检测。本方法的目标是在给定待搜索的已知漏洞后,快速准确地检测出目标程序中是否包含该漏洞,解决了现有基于函数匹配的漏洞检测方法误报率高的问题。

Description

一种基于函数差分的二进制程序漏洞检测方法
技术领域
本发明属于二进制程序分析及漏洞检测技术领域,特别涉及一种基于函数差分的二进制程序漏洞检测方法。
背景技术
已知漏洞是指那些已发布补丁的漏洞。随着组件化的开发形式日益成熟,各类第三方类库的完备和支持,极大提高了开发效率,然而这样会导致开发者可能无法详细的了解软件的所有组成部分,并且开发人员可能更加注重程序功能逻辑的实现,使用了旧版本的类库,或未能及时更新一些组件,如果这些类库或组件中存在已被发现过、报告过的漏洞,则这些漏洞会继续影响着所开发的程序,形成安全隐患。随着软件产业体系的壮大和完善,各类商业软件和程序得到大力发展,封闭源代码的闭源软件和程序越来越多,二进制代码成为软件的主要存在形式之一,并且使用和依赖这些程序的情况并不少见。因此,在对程序进行漏洞检测时,需要处理无法获得其源码及版本等信息的情况。
目前已有的二进制漏洞检测方法多是基于函数粒度的二进制程序相似性检测技术。以含有已知漏洞的函数作为搜索目标,在待检测文件中进行搜索相似函数,并将有包含相似函数的程序判定为含有漏洞。但此类方法存在明显缺陷,首先,当有漏洞函数与无漏洞函数本身就高度相似时,很容易造成误报,将无漏洞函数判定为有漏洞;其次,随着版本更迭,同一函数在不同版本中可能包含着多处改动(如函数功能更新),在函数中形成与漏洞无关的改动(可视为噪音),给函数整体相似性判断造成影响,从而干扰对漏洞的判断,导致错误的判断结果。
发明内容
为了解决上述现有方法误报率高的问题,本发明提供了一种基于函数差分的二进制程序漏洞检测方法,通过构建补丁特征以精确判断二进制程序中是否存在已知漏洞或是否已存在相应补丁。
为了实现上述目的,本发明采用的技术方案是:
一种基于函数差分的二进制程序漏洞检测方法,包括如下步骤:
S1:构建特征提取对象漏洞函数VF与修复后函数PF;
S2:利用二进制函数差分分析技术生成补丁特征,用于补丁识别;
S3:以漏洞函数作为对象,基于二进制函数相似性检测技术在目标程序中筛选出与漏洞函数相似的函数作为嫌疑目标函数TF;
S4:根据依靠目标函数TF生成的有效路径集合与补丁特征的相似性关系对目标函数TF进行补丁识别,若目标函数中能够识别到补丁,则认为该函数中不存在该漏洞,否则认为该函数中仍包含漏洞,包括利用二进制函数差分分析技术确定出目标函数TF中与漏洞相关的局部关键区域,有效路径生成与约减,以及在目标函数TF中进行补丁识别;
S5:判断是否还有尚未分析的漏洞相关函数,若一个漏洞仅影响一个函数,则方法向下继续进行,若一个漏洞影响多个函数,且仍有尚未分析的漏洞相关函数,则方法返回步骤S1继续迭代;
S6:根据对目标二进制程序中与待搜索漏洞相关的全部函数的实际判定情况,对目标二进制程序中是否包含此漏洞进行判定,若一个漏洞仅影响一个函数,对函数的判断结果与对漏洞的判断结果一致;若一个漏洞影响多个函数,则在这些函数中只要有多于一个被判断为含有漏洞的函数或被判断为含有漏洞的函数数量大于或等于被判断为已修复的函数数量时,认为此程序仍然包含此漏洞,否则认为此漏洞已经被修复。
本发明进一步的改进在于:所述步骤S1中,根据待搜索的已知漏洞的相关信息确定与漏洞相关函数,并收集相关函数最后一个含有漏洞版本VF及首个修复后版本PF的二进制代码,并通过反汇编工具进行反汇编处理,分别构建出函数VF和PF以汇编代码表示的控制流图作为特征提取对象。
所述步骤S2中,利用二进制差分分析技术将输入的漏洞函数及其修复后函数进行差分分析,基于得到的两个函数的差分分析结果,定位出两个函数中所有变化的基本块CBB的边界基本块BBB,并依此构建补丁特征,其中,变化的基本块是指函数间增加、删除或发生过修改的基本块;边界基本块是指变化基本块的邻居节点,但其本身也可以是变化基本块。
所述步骤S2中,将变化基本块及边界基本块相连接可在函数中形成多个局部控制流图,通过遍历这些局部控制流图,可得到函数中全部的有效路径集合,其中,一条有效路径VT是一条以边界基本块开始和结束的连续的基本块序列,并至少包含一个变化基本块,且不含循环,若存在循环,则对其进行展平处理,漏洞函数生成的有效路径集合为T1,修复后函数的有效路径集合为T2,将边界基本块与有效路径集合作为补丁特征。
所述步骤S2中,对于每一条有效路径,首先移除基本块间的跳转指令,将路径中的基本块连接成为一个指令序列,再将有效路径中的指令进行标准化处理,包括:
1)地址标准化:将具体的地址替换为“address”;
2)内存标准化:将内存寻址替换为“mem”;
3)寄存器标准化:将具体的寄存器替换为“reg”。
所述步骤S4中,将判断一个目标函数是否已经打过补丁,若目标函数已打过补丁,则认为目标函数中相应漏洞已被修复,否则认为目标函数中依然存在该漏洞,步骤S4具体包括:
S401:目标函数有效路径生成:首先使用二进制差分分析方法将目标函数TF分别与漏洞函数VF及修复后函数PF进行差分分析,对于TF与VF的差分分析结果,使用基本块匹配算法将特征中PF的边界基本块BBB在目标函数TF中进行匹配,通过连接TF中的CBB与那些在TF中匹配到的且和CBB邻接的边界基本块BBB可构建出一个或多个局部控制流图,认为这些局部控制流图是补丁或漏洞行为的体现,称作局部关键区域,并通过遍历这些局部控制流图来生成有效路径集合T3,类似地,通过连接VF中的CBB与相应VF中的BBB来生成有效路径集合T4,通过对TF和PF的差分分析,对于TF与PF的差分分析结果,使用基本块匹配算法将特征中VF的边界基本块BBB在目标函数TF中进行匹配,通过连接TF中的CBB与那些在TF中匹配到的且和CBB邻接的边界基本块BBB可构建出一个或多个局部控制流图,并通过遍历这些局部控制流图来生成有效路径集合T5,类似地,通过连接PF中的CBB与相应PF中的BBB来生成有效路径集合T6,生成有效路径集合后,将首尾相连的有效路径进行合并,然后对于每一条有效路径,首先移除基本块间的跳转指令,将路径中的基本块连接成为一个指令序列,再将有效路径中的指令进行标准化处理,包括:
1)地址标准化:将具体的地址替换为“address”;
2)内存标准化:将内存寻址替换为“mem”;
3)寄存器标准化:将具体的寄存器替换为“reg”。
S402:目标函数路径约减:对于T4中的每一个有效路径t,若T1中不存在与t含有公共CBB的路径,那么这条有效路径t就会从T4中删除,从而形成一个约减的有效路径集合T41,类似地,也会通过T6与T2中的路径进行对比来从T6中约减无关路径,形成约减的有效路径集合T62
S403:判定算法:根据函数间差异的相似性关系来推断函数之间的关系,以判断目标函数是否打过补丁,进而完成漏洞检测,其中Sim(T,T’)表示路径集合间的相似度,具体包括三种情况:
情况1:T1和T2都不为空:若目标函数已被修复,则TF与VF之间的差异T3应比TF与PF之间的差异T5更加显著,且T3应与补丁特征中的T2更相似;若目标函数仍含有漏洞,则TF与PF之间的差异T5应比TF与VF之间的差异T3更加显著,且T5应与补丁特征中的T1更相似,因此在此情况下,如果Sim(T3,T2)>Sim(T5,T1)则认为目标函数已被修补,否则认为其仍含有漏洞;
情况2:T1为空,T2不为空:T1为空意味着补丁添加了一些新的代码,若目标函数已被修补,那么T3会与T2更相似,且T62应为空;若目标函数仍包含漏洞,则T62与T2应更相似,T3应为空,因此在此情况下,如果Sim(T2,T3)>Sim(T2,T62)则认为目标函数已被修补,否则认为其仍含有漏洞;
情况3:T2为空,T1不为空:T2为空意味着补丁删除了一些代码,与情况2类似,如果Sim(T1,T41)>Sim(T1,T5)则认为目标函数已被修补,否则认为其仍含有漏洞。
本发明进一步的改进在于:所述步骤S403中,为了计算每一对路径集合间的相似度得分,首先需要计算路径间的相似度,通过对比两条路径的指令序列来计算相似度得分,采用的具体计算公式如下所示:
Figure BDA0002551006640000041
其中,t1和t2为待计算相似度得分的两条路径,edit(t1,t2)为两路径间的编辑距离,len(t1)和len(t2)分别为路径t1和t2的长度;
在计算完每一对路径相似度后,两个集合间的最终相似度有如下公式计算:
Figure BDA0002551006640000042
其中,T1和T2为待计算相似度得分的两个路径集合,t1和t2分别为来自集合T1和T2的两条路径,Sim(t1,t2)为两路径间的相似度,|T1|和|T2|分别为集合T1和T2中的路径数量,len(T1)和len(T2)分别为集合T1和T2中路径总长度。
与现有技术相比,本发明的有益效果是:
(1)提供了一种基于函数差分的二进制程序漏洞检测方法,通过构建补丁特征以精确判断二进制程序中是否已存在相应补丁进而判断是否存在已知漏洞,解决了现有基于函数匹配的漏洞检测方法误报率高的问题,提高了检测准确率;
(2)可直接分析二进制程序,不依赖程序源码;
(3)仅使用了少量的基本块进行特征生成和补丁识别,提高了补丁识别的速度和准确性,也使本方法具备分析真实场景中大型程序的能力;
(4)利用了边界基本块在目标函数中定位了局部关键区域,形成局部控制流图,减少了目标函数中与漏洞无关修改所带来的影响,提高了抗干扰能力;
(5)可在函数粒度及二进制程序粒度验证目标对象是否存在已知漏洞。
附图说明
图1为本发明方法整体流程图;
图2为VF与PF差分结果示意图,图2(a)和图2(b)分别表示OpenSSL1.0.1f及OpenSSL1.0.1g中函数dtls1_process_heartbeat()控制流图;
图3为TF与VF差分结果示意图,图3(a)和图3(b)分别表示OpenSSL1.0.1e及OpenSSL1.0.1f中函数dtls1_process_heartbeat()控制流图;
图4为TF与PF差分结果示意图,图4(a)和图4(b)分别表示OpenSSL1.0.1e及OpenSSL1.0.1g中函数dtls1_process_heartbeat()控制流图。
具体实施方式
为使得本发明的发明目的、特征、优点能够更加的明显和易懂,下面结合附图和实施例详细说明本发明的实施方式。
以已知漏洞CVE-2014-0160为例,以类库OpenSSL1.0.1e的二进制程序为待检测的目标二进制程序进行此漏洞的检测。
如图1所示,一种基于函数差分的二进制程序漏洞检测方法,包括如下步骤:
步骤S1:根据补丁等相关信息,确定与已知漏洞CVE-2014-0160相关的函数为dtls1_process_heartbeat(),tls1_process_heartbeat(),先选择dtls1_process_heartbeat()进行分析;收集最后一个漏洞版本函数,即OpenSSL1.0.1f中的函数dtls1_process_heartbeat()的二进制代码,收集首个修复后版本函数,即OpenSSL1.0.1g中的函数dtls1_process_heartbeat()的二进制代码;利用反汇编工具对两个函数进行反汇编,得到二者以汇编代码表示的控制流图VF和PF。
步骤S2:将输入的漏洞函数VF及其修复后函数PF进行差分分析,其中,二进制差分分析技术不做具体限定;基于两个函数的差分分析结果,可以定位出两个函数中所有变化的基本块CBB的边界基本块BBB,图2(a)和图2(b)分别表示OpenSSL1.0.1f及OpenSSL1.0.1g中函数dtls1_process_heartbeat()控制流图;图2展示了两个函数差分分析结果,其中基本块A,C,D,F及基本块A’,C’,D’,E’,F’,G’,I’,L’,M’,N’为CBB,基本块B,E,K,G及基本块B’,H’,P’,J’,U’为BBB;
将变化基本块及边界基本块相连接可在函数中形成多个局部控制流图,例如图2(a)中,基本块E,F,G可构成一个局部控制流图,遍历此控制流图,可得到一条有效路径“E->F->G”;构建并遍历所有局部控制流图,可得到函数中全部的有效路径,构成有效路径集合T1,如下所示:
A->B; B->C->D->E;
A->C->D->E; B->C->D->G;
A->C->D->G; B->C->K;
A->C->K; E->F->G;
同样,可以在图2(b)中,可构建有效路径集合T2,如下所示:
A′->B′; A′->C′->L′->U′;
A′->C′->D′->M′->′; A′->C′->D′->E′->F′->N′->U′;
A′->C′->D′->E′->F′->G′->H′; A′->C′->D′->E′->F′->G′->J′;
A′->C′->D′->E′->P′; B′->C′->L′->U′;
B′->C′->D′->M′->U′; B′->C′->D′->E′->F′->N′->U′;
B′->C′->D′->E′->F′->G′->H′; B′->C′->D′->E′->F′->G′->J′;
B′->C′->D′->E′->P′;H′->I′->J′;
接着,对于每一条有效路径,移除基本块间的跳转指令,将路径中的基本块连接成为一个指令序列,再根据标准化规则将所有有效路径中的指令进行标准化处理,例如一条有效路径A->B的指令序列片段,经过标准化的前后改变如下所示:
Figure BDA0002551006640000061
生成有效路径集合后,再将首尾相连的有效路径进行合并优化处理,例如,有效路径“A->B”,“B->C->D->E”可合并优化为“A->B->C->D->E”;
最后,将边界基本块与有效路径集合作为补丁特征。
步骤S3:以漏洞函数作为对象,基于二进制函数相似性检测技术在目标程序OpenSSL1.0.1e中寻找与漏洞函数相似的函数,得到OpenSSL1.0.1e中的函数dtls1_process_heartbeat()作为嫌疑目标函数,此步骤用于缩小搜索空间,其中,二进制函数相似性检测技术不做具体限定。
步骤S4:此步骤将针对嫌疑目标函数进行漏洞检测,具体步骤如下:
步骤S401:首先使用二进制差分分析方法将目标函数TF与漏洞函数VF进行差分分析,如图3所示为TF与VF的分析结果,由于OpenSSL1.0.1e中的函数dtls1_process_heartbeat()与OpenSSL1.0.1f中的完全一致,因此无发生变化的基本块;接着,使用基本块匹配算法将特征中PF中的边界基本块BBB在目标函数TF中进行匹配,匹配到图3(a)中的基本块B,E,K,G,J;此时,CBB与BBB并不能构成局部控制流图,即没有产生有效路径集合,T3为空集;同理,VF中也没有发生变化的基本块,CBB与BBB并不能构成局部控制流图,即没有产生有效路径集合,T4为空集;
再使用二进制差分分析方法将目标函数TF与修复后函数PF进行差分分析,如图4所示为TF与PF的分析结果,基本块A,C,D,F及基本块A’,C’,D’,E’,F’,G’,I’,L’,M’,N’为发生变化的基本块;接着,使用基本块匹配算法将特征中VF中的边界基本块BBB在目标函数TF中进行匹配,匹配到图4(a)中的基本块B,E,K,G;通过连接CBB与BBB可形成局部控制流图,并通过遍历这些局部控制流图来生成有效路径集合T5,如下所示:
A->B; B->C->D->E;
A->C->D->E; B->C->D->G;
A->C->D->G; B->C->K;
A->C->K; E->F->G;
类似地,通过连接PF中的CBB与相应PF中的BBB来生成有效路径集合T6,如下所示:
A′->B′; A′->C′->L′->U′;
A′->C′->D′->M′->U′; A′->C′->D′->E′->F′->N′->U′;
A′->C′->D′->E′->F′->G′->H′; A′->C′->D′->E′->F′->G′->J′;
A′->C′->D′->E′->P′; B′->C′->L′->U′;
B′->C′->D′->M′->U′; B′->C′->D′->E′->F′->N′->U′;
B′->C′->D′->E′->F′->G′->H′; B′->C′->D′->E′->F′->G′->J′;
B′->C′->D′->E′->P′;H′->I′->J′;
生成有效路径集合后,再将首尾相连的有效路径进行合并优化处理;
最后,对所有路径集合中的有效路径进行指令连接,并按照标准化规则进行标准化处理;
步骤S402:在本例中,由于T4为空集,无需进行约减,在T6中,对于每一个有效路径t,在T2中都存在一条路径与其包含相同CBB,因此没有无关路径被约减,构成有效路径集合T62
步骤S403:在本例中,符合情况一的条件,因此依据情况一进行判断:分别依据公式计算路径间的相似度及路径集合间的相似度,最终得到Sim(T3,T2)<Sim(T5,T1),因此,判定目标函数TF仍然包含漏洞。
步骤S5:由于还有未分析的相关函数tls1_process_heartbeat(),则返回步骤S1,以函数tls1_process_heartbeat()为对象在目标程序中进行漏洞检测;待分析完函数tls1_process_heartbeat()后再次进入此步骤时,已无未分析的相关函数,则进入步骤S6。
步骤S6:经上述步骤的判定,认为在OpenSSL1.0.1e的二进制程序中的存在与函数dtls1_process_heartbeat()和函数tls1_process_heartbeat()高度相似的函数且均包含漏洞,则判定二进制程序OpenSSL1.0.1e中包含漏洞CVE-2014-0160,算法结束。
总结:本发明的方法,较现有方法,在给定输入下,基于函数差分分析方法构建特征,可判断目标二进制程序中的相关函数是否打过补丁,实现已知漏洞的检测,降低了误报率,提高了准确率。

Claims (7)

1.一种基于函数差分的二进制程序漏洞检测方法,其特征在于,包括如下步骤:
S1:构建特征提取对象漏洞函数VF与修复后函数PF;
S2:利用二进制函数差分分析技术生成补丁特征,用于补丁识别;
S3:以漏洞函数作为对象,基于二进制函数相似性检测技术在目标程序中筛选出与漏洞函数相似的函数作为嫌疑目标函数TF;
S4:根据依靠目标函数TF生成的有效路径集合与补丁特征的相似性关系对目标函数TF进行补丁识别,若目标函数中能够识别到补丁,则认为该函数中不存在该漏洞,否则认为该函数中仍包含漏洞,包括利用二进制函数差分分析技术确定出目标函数TF中与漏洞相关的局部关键区域,有效路径生成与约减,以及在目标函数TF中进行补丁识别;
S5:判断是否还有尚未分析的漏洞相关函数,若一个漏洞仅影响一个函数,则方法向下继续进行,若一个漏洞影响多个函数,且仍有尚未分析的漏洞相关函数,则方法返回步骤S1继续迭代;
S6:根据对目标二进制程序中与待搜索漏洞相关的全部函数的实际判定情况,对目标二进制程序中是否包含此漏洞进行判定,若一个漏洞仅影响一个函数,对函数的判断结果与对漏洞的判断结果一致;若一个漏洞影响多个函数,则在这些函数中只要有多于一个被判断为含有漏洞的函数或被判断为含有漏洞的函数数量大于或等于被判断为已修复的函数数量时,认为此程序仍然包含此漏洞,否则认为此漏洞已经被修复;
步骤S4具体包括:
S401:目标函数有效路径生成:首先使用二进制差分分析方法将目标函数TF分别与漏洞函数VF及修复后函数PF进行差分分析,对于TF与VF的差分分析结果,使用基本块匹配算法将特征中PF的边界基本块BBB在目标函数TF中进行匹配,通过连接TF中的CBB与那些在TF中匹配到的且和CBB邻接的边界基本块BBB可构建出一个或多个局部控制流图,认为这些局部控制流图是补丁或漏洞行为的体现,称作局部关键区域,并通过遍历这些局部控制流图来生成有效路径集合T3,类似地,通过连接VF中的CBB与相应VF中的BBB来生成有效路径集合T4,通过对TF和PF的差分分析,对于TF与PF的差分分析结果,使用基本块匹配算法将特征中VF的边界基本块BBB在目标函数TF中进行匹配,通过连接TF中的CBB与那些在TF中匹配到的且和CBB邻接的边界基本块BBB可构建出一个或多个局部控制流图,并通过遍历这些局部控制流图来生成有效路径集合T5,类似地,通过连接PF中的CBB与相应PF中的BBB来生成有效路径集合T6,生成有效路径集合后,将首尾相连的有效路径进行合并,然后对于每一条有效路径,首先移除基本块间的跳转指令,将路径中的基本块连接成为一个指令序列,再将有效路径中的指令进行标准化处理,包括:
1)地址标准化:将具体的地址替换为“address”;
2)内存标准化:将内存寻址替换为“mem”;
3)寄存器标准化:将具体的寄存器替换为“reg”,
S402:目标函数路径约减:对于T4中的每一个有效路径t,若T1中不存在与t含有公共CBB的路径,那么这条有效路径t就会从T4中删除,从而形成一个约减的有效路径集合T41,类似地,也会通过T6与T2中的路径进行对比来从T6中约减无关路径,形成约减的有效路径集合T62
S403:判定算法:根据函数间差异的相似性关系来推断函数之间的关系,以判断目标函数是否打过补丁,进而完成漏洞检测,其中Sim(T,T’)表示路径集合间的相似度。
2.根据权利要求1所述基于函数差分的二进制程序漏洞检测方法,其特征在于,所述步骤S1中,根据待搜索的已知漏洞的相关信息确定与漏洞相关函数,并收集相关函数最后一个含有漏洞版本VF及首个修复后版本PF的二进制代码,并通过反汇编工具进行反汇编处理,分别构建出函数VF和PF以汇编代码表示的控制流图作为特征提取对象。
3.根据权利要求1所述基于函数差分的二进制程序漏洞检测方法,其特征在于,所述步骤S2中,利用二进制差分分析技术将输入的漏洞函数及其修复后函数进行差分分析,基于得到的两个函数的差分分析结果,定位出两个函数中所有变化的基本块CBB的边界基本块BBB,并依此构建补丁特征,其中,变化的基本块是指函数间增加、删除或发生过修改的基本块;边界基本块是指变化基本块的邻居节点,但其本身也可以是变化基本块。
4.根据权利要求3所述基于函数差分的二进制程序漏洞检测方法,其特征在于,所述步骤S2中,将变化基本块及边界基本块相连接可在函数中形成多个局部控制流图,通过遍历这些局部控制流图,可得到函数中全部的有效路径集合,其中,一条有效路径VT是一条以边界基本块开始和结束的连续的基本块序列,并至少包含一个变化基本块,且不含循环,若存在循环,则对其进行展平处理,漏洞函数生成的有效路径集合为T1,修复后函数的有效路径集合为T2,将边界基本块与有效路径集合作为补丁特征。
5.根据权利要求4所述基于函数差分的二进制程序漏洞检测方法,其特征在于,所述步骤S2中,对于每一条有效路径,首先移除基本块间的跳转指令,将路径中的基本块连接成为一个指令序列,再将有效路径中的指令进行标准化处理,包括:
1)地址标准化:将具体的地址替换为“address”;
2)内存标准化:将内存寻址替换为“mem”;
3)寄存器标准化:将具体的寄存器替换为“reg”。
6.根据权利要求1所述基于函数差分的二进制程序漏洞检测方法,其特征在于,所述步骤S4中,包括三种情况:
情况1:T1和T2都不为空:若目标函数已被修复,则TF与VF之间的差异T3应比TF与PF之间的差异T5更加显著,且T3应与补丁特征中的T2更相似;若目标函数仍含有漏洞,则TF与PF之间的差异T5应比TF与VF之间的差异T3更加显著,且T5应与补丁特征中的T1更相似,因此在此情况下,如果Sim(T3,T2)>Sim(T5,T1)则认为目标函数已被修补,否则认为其仍含有漏洞;
情况2:T1为空,T2不为空:T1为空意味着补丁添加了一些新的代码,若目标函数已被修补,那么T3会与T2更相似,且T62应为空;若目标函数仍包含漏洞,则T62与T2应更相似,T3应为空,因此在此情况下,如果Sim(T2,T3)>Sim(T2,T62)则认为目标函数已被修补,否则认为其仍含有漏洞;
情况3:T2为空,T1不为空:T2为空意味着补丁删除了一些代码,与情况2类似,如果Sim(T1,T41)>Sim(T1,T5)则认为目标函数已被修补,否则认为其仍含有漏洞。
7.根据权利要求6所述基于函数差分的二进制程序漏洞检测方法,其特征在于,所述步骤S403中,为了计算每一对路径集合间的相似度得分,首先需要计算路径间的相似度,通过对比两条路径的指令序列来计算相似度得分,采用的具体计算公式如下所示:
Figure FDA0003976041930000031
其中,t1和t2为待计算相似度得分的两条路径,edit(t1,t2)为两路径间的编辑距离,len(t1)和len(t2)分别为路径t1和t2的长度;
在计算完每一对路径相似度后,两个集合间的最终相似度有如下公式计算:
Figure FDA0003976041930000032
其中,T1和T2为待计算相似度得分的两个路径集合,t1和t2分别为来自集合T1和T2的两条路径,Sim(t1,t2)为两路径间的相似度,|T1|和|T2|分别为集合T1和T2中的路径数量,len(T1)和len(T2)分别为集合T1和T2中路径总长度。
CN202010574987.3A 2020-06-22 2020-06-22 一种基于函数差分的二进制程序漏洞检测方法 Active CN111914260B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010574987.3A CN111914260B (zh) 2020-06-22 2020-06-22 一种基于函数差分的二进制程序漏洞检测方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010574987.3A CN111914260B (zh) 2020-06-22 2020-06-22 一种基于函数差分的二进制程序漏洞检测方法

Publications (2)

Publication Number Publication Date
CN111914260A CN111914260A (zh) 2020-11-10
CN111914260B true CN111914260B (zh) 2023-03-31

Family

ID=73226949

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010574987.3A Active CN111914260B (zh) 2020-06-22 2020-06-22 一种基于函数差分的二进制程序漏洞检测方法

Country Status (1)

Country Link
CN (1) CN111914260B (zh)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113626820B (zh) * 2021-06-25 2023-06-27 中国科学院信息工程研究所 针对网络设备的已知漏洞定位方法及装置
CN114021146B (zh) * 2021-11-15 2022-07-05 杭州戎戍网络安全技术有限公司 一种基于值集分析的非结构化差异补丁分析方法
CN114065227B (zh) * 2022-01-18 2022-05-06 思探明信息科技(南京)有限公司 一种漏洞定位分析***
CN115510451B (zh) * 2022-09-20 2023-09-19 中国人民解放军国防科技大学 一种基于随机游走的固件补丁存在性判定方法和***

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101154257A (zh) * 2007-08-14 2008-04-02 电子科技大学 基于漏洞特征的动态执行补丁方法
CN103198260A (zh) * 2013-03-28 2013-07-10 中国科学院信息工程研究所 一种二进制程序漏洞自动化定位方法
CN107229563A (zh) * 2016-03-25 2017-10-03 中国科学院信息工程研究所 一种跨架构的二进制程序漏洞函数关联方法
CN109241737A (zh) * 2018-07-03 2019-01-18 中国科学院信息工程研究所 一种面向多种补丁模式的差异分支识别方法及***
CN109359468A (zh) * 2018-08-23 2019-02-19 阿里巴巴集团控股有限公司 漏洞检测方法、装置及设备

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101568224B1 (ko) * 2014-12-26 2015-11-11 고려대학교 산학협력단 소프트웨어 취약점 분석방법 및 분석장치
KR101995285B1 (ko) * 2018-10-31 2019-07-02 한국인터넷진흥원 취약점이 존재하는 바이너리 패치 방법 및 그 장치

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101154257A (zh) * 2007-08-14 2008-04-02 电子科技大学 基于漏洞特征的动态执行补丁方法
CN103198260A (zh) * 2013-03-28 2013-07-10 中国科学院信息工程研究所 一种二进制程序漏洞自动化定位方法
CN107229563A (zh) * 2016-03-25 2017-10-03 中国科学院信息工程研究所 一种跨架构的二进制程序漏洞函数关联方法
CN109241737A (zh) * 2018-07-03 2019-01-18 中国科学院信息工程研究所 一种面向多种补丁模式的差异分支识别方法及***
CN109359468A (zh) * 2018-08-23 2019-02-19 阿里巴巴集团控股有限公司 漏洞检测方法、装置及设备

Non-Patent Citations (4)

* Cited by examiner, † Cited by third party
Title
VMPBL: Identifying Vulnerable Functions Based on Machine Learning Combining Patched Information and Binary Comparison Technique by LCS;Danjun Liu等;《2018 17th IEEE International Conference On Trust, Security And Privacy In Computing And Communications/ 12th IEEE International Conference On Big Data Science And Engineering (TrustCom/BigDataSE)》;20180906;全文 *
一种利用补丁的未知漏洞发现方法;李赞等;《软件学报》;20180515(第05期);全文 *
一种基于补丁比对和静态污点分析的漏洞定位技术研究;达小文等;《信息网络安全》;20170910(第09期);全文 *
基于同源性分析的嵌入式设备固件漏洞检测;李登等;《计算机工程》;20170131;全文 *

Also Published As

Publication number Publication date
CN111914260A (zh) 2020-11-10

Similar Documents

Publication Publication Date Title
CN111914260B (zh) 一种基于函数差分的二进制程序漏洞检测方法
US10558805B2 (en) Method for detecting malware within a linux platform
Alrubaye et al. On the use of information retrieval to automate the detection of third-party java library migration at the method level
CN107608732B (zh) 一种基于bug知识图谱的bug搜索定位方法
CN109670318B (zh) 一种基于核控制流图循环验证的漏洞检测方法
WO2017181286A1 (en) Method for determining defects and vulnerabilities in software code
CN109308415B (zh) 一种面向二进制的导向性模糊测试方法与***
CN112214399B (zh) 基于序列模式匹配的api误用缺陷检测***
CN111782460A (zh) 大规模日志数据的异常检测方法、装置和存储介质
CN110851830B (zh) 基于指令格式识别的面向cpu未公开指令发现方法
CN112115053A (zh) 基于序列模式匹配的api误用缺陷检测方法
CN113326187A (zh) 数据驱动的内存泄漏智能化检测方法及***
CN115129591A (zh) 面向二进制代码的复现漏洞检测方法及***
CN114969084A (zh) 异常操作行为检测方法、装置、电子设备及存储介质
CN114398069B (zh) 一种基于交叉指纹分析的公共组件库精确版本识别方法及***
CN116578980A (zh) 基于神经网络的代码分析方法及其装置、电子设备
CN112905370A (zh) 拓扑图生成方法、异常检测方法、装置、设备及存储介质
CN108228232B (zh) 一种针对程序中循环问题的自动修复方法
Liu et al. Vmpbl: Identifying vulnerable functions based on machine learning combining patched information and binary comparison technique by lcs
CN108804308B (zh) 新版本程序缺陷检测方法及装置
CN114065227B (zh) 一种漏洞定位分析***
CN115408700A (zh) 基于二进制程序模块化的开源组件检测方法
CN115168855A (zh) 基于关键基本块的补丁存在检测方法
CN109002716A (zh) 一种移动应用的恶意代码入侵检测与防范方法
CN111124922A (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