CN114500043B - 基于同源性分析的物联网固件漏洞检测方法及系统 - Google Patents
基于同源性分析的物联网固件漏洞检测方法及系统 Download PDFInfo
- Publication number
- CN114500043B CN114500043B CN202210086936.5A CN202210086936A CN114500043B CN 114500043 B CN114500043 B CN 114500043B CN 202210086936 A CN202210086936 A CN 202210086936A CN 114500043 B CN114500043 B CN 114500043B
- Authority
- CN
- China
- Prior art keywords
- function
- vulnerability
- executable file
- detected
- instruction
- 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
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/14—Network architectures or network communication protocols for network security for detecting or protecting against malicious traffic
- H04L63/1433—Vulnerability analysis
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/12—Protocols specially adapted for proprietary or special-purpose networking environments, e.g. medical networks, sensor networks, networks in vehicles or remote metering networks
Landscapes
- Engineering & Computer Science (AREA)
- Computing Systems (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer Security & Cryptography (AREA)
- Health & Medical Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Medical Informatics (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Debugging And Monitoring (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了基于同源性分析的物联网固件漏洞检测方法,包括:建立函数漏洞库;提取待检测固件的可执行文件集合以及对应的指令架构,将在函数漏洞库中存在同名同架构的可执行文件作为待检测可执行文件;对待检测可执行文件进行反汇编,获取待检测可执行文件的函数集合,将在函数漏洞库中存在同名的函数作为待检测函数;对待检测函数的二进制文件进行反汇编,提取待检测函数的汇编代码,形成待检测函数指令集合,计算待检测函数指令集合与漏洞函数的指令集合的相似度。本发明还提供了基于同源性分析的物联网固件漏洞检测系统。本发明能够更加高效、精确地检测固件中存在的同源性漏洞。
Description
技术领域
本发明涉及固件安全相关技术领域。更具体地说,本发明涉及一种基于同源性分析的物联网固件漏洞检测方法及系统。
背景技术
21世纪以来,随着物联网技术的广泛应用,物联网产品层出不穷,多种多样,随处可见,例如手机、智能音箱、智能摄像头、家用路由器等都是常用的物联网设备。越来越多的物联网产品被投入到生活中使用,安全隐患问题日益突出。固件是指写入到存储设备中的电可擦除只读存储器EEPROM或FLASH芯片中的可执行程序,通俗的理解就是固件是物联网设备的“驱动程序”,是工作在最底层的,固化在硬件上的软件,因此固件也就决定着物联网设备的功能和性能。由于固件经常被暴露出各种安全漏洞,引发安全事件,因此固件漏洞检测技术已经成为安全研究人员分析物联网设备安全性能的主要方向之一。
物联网设备的制造过程研产分离,导致不同固件可能包含相同的第三方组件,进而导致相同设备不同版本甚至不同设备的固件中包含大量相同的已知漏洞。由于物联网设备属于商业产品,厂家往往不会公开设备源代码,不同厂家编译源码所选择的指令集架构、编译器以及优化选项也不尽相同,最终厂家将编译的二进制文件发布在官网或第三方平台上,导致安全分析人员难以获取源代码,只能从二进制代码入手。固件同源性漏洞检测是指利用已知漏洞检测其他固件中可能存在的同源漏洞。目前根据已知漏洞进行固件漏洞检测技术分为两种:一种是基于二进制文件层面的,通过两个二进制的特征来判断同源性。另一种是基于函数层面的,通过两个函数的特征来判断同源性。但是,现有技术的检测效率、准确率还存在改进空间。
发明内容
本发明的一个目的是提供一种基于同源性分析的物联网固件漏洞检测方法及系统,能够更加高效、精确地检测固件中存在的漏洞。
为了实现本发明的这些目的和其它优点,根据本发明的一个方面,本发明提供了基于同源性分析的物联网固件漏洞检测方法,包括:建立函数漏洞库,所述函数漏洞库至少包括漏洞及对应的可执行文件的名字、可执行文件的指令架构、可执行文件中的函数集合、可执行文件中的漏洞函数名、漏洞函数的指令集合;提取待检测固件的可执行文件集合以及对应的指令架构,将在所述函数漏洞库中存在同名同架构的可执行文件作为待检测可执行文件;对待检测可执行文件进行反汇编,获取待检测可执行文件的函数集合,将在所述函数漏洞库中存在同名的函数作为待检测函数;对待检测函数的二进制文件进行反汇编,提取待检测函数的汇编代码,将汇编代码按照基本块进行划分,依次按行提取基本块内的汇编指令,形成待检测函数指令集合,计算待检测函数指令集合与漏洞函数的指令集合的相似度,如果相似度大于预设的相似度阈值,则认为待检测函数为漏洞函数的同源函数。
进一步地,在将汇编代码按照基本块进行划分之前,对汇编代码中的寄存器、立即数、地址、函数名和基本块名进行标准化。
进一步地,对汇编代码中的寄存器、立即数、地址、函数名和基本块名进行标准化,具体包括:操作数为立即数的指令进行标准化,把立即数统一替换为immdata;操作数为寄存器的指令进行标准化,寄存器分为两种情况:普通寄存器和指针寄存器,普通寄存器做操作数时转换为:general_reg,,指针寄存器做操作数时转换为:pointer_reg;操作数为内存引用时进行标准化处理,将内存引用转换为o_mem;操作数为基址寄存器加间址寄存器时,将操作数转换为o_phrase;操作数为一个寄存器加数字偏移时,将操作数转换为o_displ;根据调用指令的类型,对调用指令的跳转地址进行标准化处理,如果跳转地址是函数名,则把跳转地址转换为func;如果跳转地址是一个基本块名,则把跳转地址统一为bb。
进一步地,若在所述函数漏洞库中不存在同名的函数,则将差异函数集合中的函数作为待检测函数;差异函数集合Fc=Fa-Fa∩Fb,Fa代表待测可执行文件的函数集合,Fb代表函数漏洞库中的可执行文件中的函数集合,Fa∩Fb代表Fa和Fb中的同名函数。
进一步地,所述函数漏洞库还包括漏洞对应的可执行文件的hash值;计算待检测可执行文件的hash值,若所述函数漏洞库中存在相同hash值,则表明待检测可执行文件存在同源漏洞。
进一步地,若所述函数漏洞库中不存在相同hash值,则对待检测可执行文件进行反汇编,获取待测可执行文件的函数集合。
进一步地,获取各厂家公布的漏洞的物联网设备固件以及漏洞描述详情,提取物联网设备固件的系统文件,提取系统文件的可执行文件,利用可执行文件提取可执行文件的名字、可执行文件的指令架构、可执行文件的hash值、可执行文件中的函数集合、可执行文件中的漏洞函数名、漏洞函数的指令集合,建立所述函数漏洞库。
根据本发明的另一个方面,还提供了基于同源性分析的物联网固件漏洞检测系统,包括:函数漏洞库,所述函数漏洞库至少包括漏洞及对应的可执行文件的名字、可执行文件的指令架构、可执行文件中的函数集合、可执行文件中的漏洞函数名、漏洞函数的指令集合;
提取模块,用于提取待检测固件的可执行文件集合以及对应的指令架构,将在所述函数漏洞库中存在同名同架构的可执行文件作为待检测可执行文件;
筛选模块,用于对待检测可执行文件进行反汇编,获取待检测可执行文件的函数集合,将在所述函数漏洞库中存在同名的函数作为待检测函数,若在所述函数漏洞库中不存在同名的函数,则将差异函数集合中的函数作为待检测函数;差异函数集合Fc=Fa-Fa∩Fb,Fa代表待测可执行文件的函数集合,Fb代表函数漏洞库中的可执行文件中的函数集合,Fa∩Fb代表Fa和Fb中的同名函数;计算模块,用于对待检测函数的二进制文件进行反汇编,提取待检测函数的汇编代码,对汇编代码中的寄存器、立即数、地址、函数名和基本块名进行标准化,将标准化后的汇编代码按照基本块进行划分,依次按行提取基本块内的汇编指令,形成待检测函数指令集合,计算待检测函数指令集合与漏洞函数的指令集合的相似度,如果相似度大于预设的相似度阈值,则认为待检测函数为漏洞函数的同源函数;其中,
进一步地,对汇编代码中的寄存器、立即数、地址、函数名和基本块名进行标准化,具体包括:操作数为立即数的指令进行标准化,把立即数统一替换为immdata;操作数为寄存器的指令进行标准化,寄存器分为两种情况:普通寄存器和指针寄存器,普通寄存器做操作数时转换为:general_reg,,指针寄存器做操作数时转换为:pointer_reg;操作数为内存引用时进行标准化处理,将内存引用转换为o_mem;操作数为基址寄存器加间址寄存器时,将操作数转换为o_phrase;操作数为一个寄存器加数字偏移时,将操作数转换为o_displ;根据调用指令的类型,对调用指令的跳转地址进行标准化处理,如果跳转地址是函数名,则把跳转地址转换为func;如果跳转地址是一个基本块名,则把跳转地址统一为bb。
本发明至少包括以下有益效果:
本发明首先获取待检测可执行文件,对待检测可执行文件进行反汇编,获取待检测函数,对待检测函数的二进制文件进行反汇编,获取待检测函数指令集合,根据待检测函数指令集合与漏洞函数的指令集合的相似度,判断待检测函数为漏洞函数的同源函数。本发明对物联网设备固件漏洞的检测效率和检测准确率相比于现有技术明显提升。
本发明的其它优点、目标和特征将部分通过下面的说明体现,部分还将通过对本发明的研究和实践而为本领域的技术人员所理解。
附图说明
图1为本发明其中一个实施例的流程图;
图2为本发明其中一个实施例提供的函数漏洞库搭建的示意图;
图3为本发明其中一个实施例提供的基于同源性分析的物联网固件漏洞检测方法的流程示意图;
图4为本发明其中一个实施例提供的函数预筛选模块的流程示意图;
图5为本发明其中一个实施例提供的函数相似度匹配模型的流程示意图;
图6为本发明其中一个实施例提供的原始汇编代码的标准化示意图;
图7为本发明其中一个实施例提供的DIR-100V113设备固件webs中的alpha_auth_check函数的部分汇编代码示意图。
具体实施方式
下面结合附图对本发明做进一步的详细说明,以令本领域技术人员参照说明书文字能够据以实施。
应当理解,本文所使用的诸如“具有”、“包含”以及“包括”术语并不排除一个或多个其它元件或其组合的存在或添加。
如图1所示,本申请的实施例提供了基于同源性分析的物联网固件漏洞检测方法,包括:
S1、建立函数漏洞库,所述函数漏洞库至少包括漏洞及对应的可执行文件的名字、可执行文件的指令架构、可执行文件中的函数集合、可执行文件中的漏洞函数名、漏洞函数的指令集合;函数漏洞库根据各厂家公布的漏洞的物联网设备固件以及漏洞描述详情提取以上字段,作为漏洞检测的依据;可选地,函数漏洞库中的每一条记录record<fname,arch,Hash,funcList,bugfunc,Sf,details>代表一个可执行文件的漏洞函数的信息,函数漏洞库中的每条记录都可作为一个样本数据。其中,fname指的是可执行文件的名字,arch是可执行文件的指令架构,Hash指的是可执行文件的hash值,funcList指的是可执行文件中的函数集合,bugfunc指的是可执行文件中的漏洞函数名,Sf指的是漏洞函数的指令集合,details指的是漏洞的描述详情;
S2、提取待检测固件的可执行文件集合以及对应的指令架构,将在所述函数漏洞库中存在同名同架构的可执行文件作为待检测可执行文件;将所有可执行文件在漏洞函数库中按其名字和架构进行查找,得到同名同架构的待检测可执行文件;
S3、对待检测可执行文件进行反汇编,获取待检测可执行文件的函数集合,将在所述函数漏洞库中存在同名的函数作为待检测函数;将所有函数在漏洞函数库中按其名字进行查找,得到同名的待检测函数;
S4、对待检测函数的二进制文件进行反汇编,提取待检测函数的汇编代码,将汇编代码按照基本块进行划分,依次按行提取基本块内的汇编指令,形成待检测函数指令集合,计算待检测函数指令集合与漏洞函数的指令集合的相似度,如果相似度大于预设的相似度阈值,则认为待检测函数为漏洞函数的同源函数,例如根据基本块来计算相似度。
在另一些实施例中,相似度其中,k代表函数的基本块数,代表待检测函数的第i个基本块的指令集合,代表漏洞函数的第i个基本块的指令集合,|·|代表集合中元素的个数;sim的取值范围在0和1之间,sim越接近1,说明两个函数越相似;越接近0,两个函数的相似度越低。
在另一些实施例中,原始汇编指令中存在大量的函数名、立即数、地址以及反汇编工具自动识别的变量名,如果程序稍作变动,即使同一份源码经过编译后的汇编指令的地址参数也将发生变化,将会对函数相似度比较产生严重的影响,故在将汇编代码按照基本块进行划分之前,对汇编代码中的寄存器、立即数、地址、函数名和基本块名进行标准化。
在另一些实施例中,对汇编代码中的寄存器、立即数、地址、函数名和基本块名进行标准化,具体包括:操作数为立即数的指令进行标准化,把立即数统一替换为immdata,例如:addiu$v1,2经标准化处理后为:addiu$v1,immdata;操作数为寄存器的指令进行标准化,寄存器分为两种情况:普通寄存器和指针寄存器,普通寄存器做操作数时转换为:general_reg,,指针寄存器做操作数时转换为:pointer_reg,例如:addiu$fp,$a0,1经标准化处理后为:addiu pointer_reg,general_reg,immdata;操作数为内存引用时进行标准化处理,将内存引用转换为o_mem,例如:mov eax,ds:dword_8062E5C转换为mov general_reg,o_mem;操作数为基址寄存器加间址寄存器时,将操作数转换为o_phrase,例如:LDRHR3,[R2,R3]转换为LDRH general_reg,o_phrase;操作数为一个寄存器加数字偏移时,将操作数转换为o_displ,例如:sh$a0,0xD56($sp)转换为sh general_reg,o_displ;根据调用指令的类型,对调用指令的跳转地址进行标准化处理,如果跳转地址是函数名,则把跳转地址转换为func;如果跳转地址是一个基本块名,则把跳转地址统一为bb;原始汇编指令通过标准化处理的前后对比如图5所示。
在另一些实施例中,若在所述函数漏洞库中不存在同名的函数,则将差异函数集合中的函数作为待检测函数;差异函数集合Fc=Fa-Fa∩Fb,Fa代表待测可执行文件的函数集合,Fb代表函数漏洞库中的可执行文件中的函数集合,Fa∩Fb代表Fa和Fb中的同名函数。
在另一些实施例中,所述函数漏洞库还包括漏洞对应的可执行文件的hash值;计算待检测可执行文件的hash值,若所述函数漏洞库中存在相同hash值,则表明待检测可执行文件存在同源漏洞;即可执行文件相同,直接判断为同源漏洞。
在另一些实施例中,若所述函数漏洞库中不存在相同hash值,则对待检测可执行文件进行反汇编,获取待测可执行文件的函数集合;若hash值不同,则转而进行相似度计算。
在另一些实施例中,获取各厂家公布的漏洞的物联网设备固件以及漏洞描述详情,提取物联网设备固件的系统文件,提取系统文件的可执行文件,利用可执行文件提取可执行文件的名字、可执行文件的指令架构、可执行文件的hash值、可执行文件中的函数集合、可执行文件中的漏洞函数名、漏洞函数的指令集合,建立所述函数漏洞库;可执行文件的名字、可执行文件的指令架构、可执行文件的hash值、可执行文件中的函数集合、可执行文件中的漏洞函数名、漏洞函数的指令集合等字段的提取方式与对待检测可执行文件的相同字段的提取方式相同。
基于与检测方法相同的发明构思,本申请的实施例还提供了基于同源性分析的物联网固件漏洞检测系统,包括:函数漏洞库,所述函数漏洞库至少包括漏洞及对应的可执行文件的名字、可执行文件的指令架构、可执行文件中的函数集合、可执行文件中的漏洞函数名、漏洞函数的指令集合;
提取模块,用于提取待检测固件的可执行文件集合以及对应的指令架构,将在所述函数漏洞库中存在同名同架构的可执行文件作为待检测可执行文件;
筛选模块,用于对待检测可执行文件进行反汇编,获取待检测可执行文件的函数集合,将在所述函数漏洞库中存在同名的函数作为待检测函数,若在所述函数漏洞库中不存在同名的函数,则将差异函数集合中的函数作为待检测函数;差异函数集合Fc=Fa-Fa∩Fb,Fa代表待测可执行文件的函数集合,Fb代表函数漏洞库中的可执行文件中的函数集合,Fa∩Fb代表Fa和Fb中的同名函数;计算模块,用于对待检测函数的二进制文件进行反汇编,提取待检测函数的汇编代码,对汇编代码中的寄存器、立即数、地址、函数名和基本块名进行标准化,将标准化后的汇编代码按照基本块进行划分,依次按行提取基本块内的汇编指令,形成待检测函数指令集合,计算待检测函数指令集合与漏洞函数的指令集合的相似度,如果相似度大于预设的相似度阈值,则认为待检测函数为漏洞函数的同源函数;其中,
在另一些实施例中,对汇编代码中的寄存器、立即数、地址、函数名和基本块名进行标准化,具体包括:操作数为立即数的指令进行标准化,把立即数统一替换为immdata;操作数为寄存器的指令进行标准化,寄存器分为两种情况:普通寄存器和指针寄存器,普通寄存器做操作数时转换为:general_reg,,指针寄存器做操作数时转换为:pointer_reg;操作数为内存引用时进行标准化处理,将内存引用转换为o_mem;操作数为基址寄存器加间址寄存器时,将操作数转换为o_phrase;操作数为一个寄存器加数字偏移时,将操作数转换为o_displ;根据调用指令的类型,对调用指令的跳转地址进行标准化处理,如果跳转地址是函数名,则把跳转地址转换为func;如果跳转地址是一个基本块名,则把跳转地址统一为bb。
以下以一个具体实施例说明。
步骤101:函数漏洞库的搭建如图2所示:本实施例采取网络爬虫技术爬取各个厂家公布漏洞的物联网设备固件以及漏洞描述详情。使用固件解析工具(例如binwalk)对固件进行解压,得到系统文件(例如squashfs-root),在系统文件文件中使用find命令搜索含有漏洞的可执行文件,得到该可执行文件的路径,获取可执行文件。首先,对可执行文件提取信息,将提取的信息作为函数漏洞库的字段信息:1)将文件名字作为数据库的字段;2)对可执行文件使用file名字获取其指令架构,将指令架构作为数据库的字段。目的是为了在同一架构下去进行漏洞检测;3)计算可执行文件的hash值,将hash值作为数据库的字段。利用SHA256的性质,如果两个可执行文件的hash值相同,那么他们为同一个文件,提高检测效率。然后,利用逆向工具(例如IDA Pro)对可执行文件反汇编,获取可执行文件的函数集合以及漏洞函数bugFunc。对漏洞函数bugFunc进行函数特征提取,将提取到的指令集合作为函数的特征存入到数据库中。函数特征提取:首先获取函数的原始汇编代码;然后对原始汇编代码进行标准化处理;最后按照基本块进行划分,依次按行提取基本块内经标准化处理后的汇编指令,形成函数指令集合即Sf=(number,insList),number指的是按照基本块在代码中出现的顺序进行编码的序号(number:0,1,2…),insList指的是经标准化处理后的基本块内的指令集合。最终完成数据库的搭建,函数漏洞库中的每一条记录record<fname,arch,Hash,funcList,bugfunc,Sf,details>代表一个可执行文件的漏洞函数的信息,函数漏洞库中的每条记录都可作为一个样本数据。其中,fname指的是可执行文件的名字,arch是可执行文件的指令架构,Hash指的是可执行文件的hash值,funcList指的是可执行文件中的函数集合,bugfunc指的是可执行文件中的漏洞函数名,Sf指的是漏洞函数的指令集合,details指的是漏洞的描述详情。
对上述提到的函数汇编代码标准化处理的原因以及规则如下:
本实施例将函数的汇编代码作为判断两个函数是否相似的依据。原始汇编指令中存在大量的函数名、立即数、地址以及反汇编工具自动识别的变量名,如果程序稍作变动,即使同一份源码经过编译后的汇编指令的地址参数也将发生变化,将会对函数相似度比较产生严重的影响。因此,本发明利用IDA Pro反汇编工具并结合自己编写的IDAPython脚本,对汇编指令中的寄存器、立即数、地址、函数名和基本块名进行分类和归一化。具体的划分标准如下:
1)操作数为立即数的指令进行标准化,把立即数统一替换为immdata,例如:addiu$v1,2经标准化处理后为:addiu$v1,immdata。
2)操作数为寄存器的指令进行标准化,寄存器分为两种情况:普通寄存器和指针寄存器。普通寄存器做操作数时转换为:general_reg,指针寄存器做操作数时转换为:pointer_reg,例如:addiu$fp,$a0,1经标准化处理后为:addiu pointer_reg,general_reg,immdata。
3)操作数为内存引用时进行标准化处理,将内存引用转换为o_mem;例如:moveax,ds:dword_8062E5C转换为mov general_reg,o_mem
4)操作数为基址寄存器加间址寄存器时,将操作数转换为o_phrase;例如:LDRHR3,[R2,R3]转换为LDRH general_reg,o_phrase
5)操作数为一个寄存器加数字偏移时,将操作数转换为o_displ;例如:sh$a0,0xD56($sp)转换为sh general_reg,o_displ
6)根据调用指令的类型,对调用指令的跳转地址进行标准化处理。如果跳转地址是函数名,则把跳转地址转换为func;如果跳转地址是一个基本块名,则把跳转地址统一为“bb”。
综上所述,原始汇编指令通过标准化处理的前后对比如图5所示。
对上述函数漏洞库的搭建进行举例说明。
D-Link路由器厂家公布DIR-100V113设备出现漏洞,漏洞是由可执行文件webs中的alpha_auth_check函数引起的,编号为CVE-2013-6026。本发明爬取DIR-100V113设备的固件,利用binwalk工具解析固件,获取系统文件squashfs-root。在系统文件的目录下执行命令“find./-name webs”得到可执行文件webs的路径“./bin/webs”,得到可执行文件webs。
接下来,本发明执行命令“file webs”得到可执行文件webs的指令架构为MIPS。使用SHA256计算可执行文件webs的hash值,hash为“8169c6984110ca500a2d6c7f388ed22a374047269d50f321c824eb8467191de9”。然后,本发明利用IDA Pro逆向可执行文件webs,得到函数集合(包含_ftext、httpd_initialize、send_mine等函数)以及漏洞函数alpha_auth_check,获取alpha_auth_check的汇编代码如图7所示。对汇编代码进行标准化处理,按照基本块进行划分,依次按行提取基本块内经标准化处理后的汇编指令,形成函数指令集合即Sf(number,insList),number指的是按照基本块在代码中出现的顺序进行编码的(number:0,1,2…),insList指的是经标准化处理后的基本块内的指令集合。最终形成函数漏洞库中的一条记录record<webs,MIPS,Hash,funcList,alpha_auth_check,Sf,details>。
步骤102:使用binwalk工具对物联网设备固件进行解压得到文件系统,在文件系统中对所有文件使用file命令提取可执行文件及其编译架构,得到可执行文件集合execFileList<fname,arch>。具体地,在固件解压后的系统文件的所有文件目录下,比如在bin文件目录下执行命令“file*|grep-iE'executable'”,便可以得到bin文件下的所有可执行文件以及对应的指令架构。遍历execFileList,在漏洞函数库中按其名字和架构进行查找,如果漏洞函数库中存在同名同架构的可执行文件,便将其加入到待检测可执行文件集合detectExecFileList。
步骤103:在步骤102中,我们得到了待检测可执行文件集合detectExecFileList<fname,arch>,然后遍历detectExecFileList<fname,arch>,依次将待测可执行文件输入到函数预筛选模块。如图4所示,在函数预筛选模块中,按照fname和arch字段在函数漏洞库中取出样本文件的信息,本发明使用了SHA256计算待测可执行文件的hash值,将待测可执行文件的hash值与样本文件的hash值进行比较,如果hash值相同,说明两个可执行文件是同一个文件,则待测可执行文件中包含样本文件的漏洞;如果hash值不相同,利用IDA Pro对待测可执行文件进行反汇编,获取待测可执行文件的函数集合detectFuncList<fname、arch、func>。在待测可执行文件的函数集合detectFuncList中查找样本文件的漏洞函数bugFunc,如果detectFuncList含有漏洞函数bugFunc,将待测函数输入函数相似度匹配模型进行相似度比较;
如果detectFuncList中没有漏洞函数bugFunc,考虑到可执行文件在反汇编时没有正确识别出函数名,本发明将detectFuncList和样本文件的funcList进行分类,分类的标准是将同名函数分为一类,不同名的函数分为另一类。本实施例使用公式(1)计算funcList和detectFuncList的差异函数集合,将差异函数集合输入函数相似度匹配模型进行相似度比较,找出待检测可执行文件中的所有可疑漏洞函数;
Fc=Fa-Fa∩Fb (1)
其中,Fa代表待测可执行文件的函数集合,Fb代表函数漏洞库中样本文件的函数集合,Fa∩Fb代表Fa和Fb中的同名函数,Fc代表差异函数集合。
步骤104:将步骤103中输出的待检测函数作为函数相似度匹配模型的输入,输出为可疑漏洞函数。函数相似度匹配模型如图5所示:利用IDA Pro对待检测函数的二进制文件进行反汇编,得到反汇编文件,在反汇编文件中取出待检测函数的原始汇编代码。本发明将函数的汇编代码作为判断两个函数是否相似的依据。本发明利用IDA Pro并结合自己编写的IDAPython脚本,对原始汇编代码进行标准化处理,将汇编代码按照基本块进行划分,依次按行提取基本块内经标准化处理后的汇编指令,形成函数指令集合Sf。我们将待测函数的指令集合和样本文件的漏洞函数指令集合使用公式(2)来计算两个函数的相似度:
其中,k代表函数的基本块数,代表待检测函数的第i个基本块的指令集合。代表漏洞函数的第i个基本块的指令集合。|·|代表集合中元素的个数。sim的取值范围在0和1之间,sim越接近1,说明两个函数越相似;越接近0,两个函数的相似度越低。
如果两个函数的相似度sim大于预设的相似度阈值,则认为待检测函数为漏洞函数的同源函数,待检测函数标记为可疑漏洞函数。如果sim小于预设阈值,则认为待检测函数不是同源函数,将其舍弃。至此经过上述流程,本实施例能够检测到物联网设备固件中的同源漏洞。
这里说明的设备数量和处理规模是用来简化本发明的说明的。对本发明基于同源性分析的物联网固件漏洞检测方法的应用、修改和变化对本领域的技术人员来说是显而易见的。
尽管本发明的实施方案已公开如上,但其并不仅仅限于说明书和实施方式中所列运用,它完全可以被适用于各种适合本发明的领域,对于熟悉本领域的人员而言,可容易地实现另外的修改,因此在不背离权利要求及等同范围所限定的一般概念下,本发明并不限于特定的细节和这里示出与描述的图例。
Claims (9)
1.基于同源性分析的物联网固件漏洞检测方法,其特征在于,包括:
建立函数漏洞库,所述函数漏洞库至少包括漏洞及对应的可执行文件的名字、可执行文件的指令架构、可执行文件中的函数集合、可执行文件中的漏洞函数名、漏洞函数的指令集合;
提取待检测固件的可执行文件集合以及对应的指令架构,将在所述函数漏洞库中存在同名同架构的可执行文件作为待检测可执行文件;
对待检测可执行文件进行反汇编,获取待检测可执行文件的函数集合,将在所述函数漏洞库中存在同名的函数作为待检测函数;
对待检测函数的二进制文件进行反汇编,提取待检测函数的汇编代码,将汇编代码按照基本块进行划分,依次按行提取基本块内的汇编指令,形成待检测函数指令集合,计算待检测函数指令集合与漏洞函数的指令集合的相似度,如果相似度大于预设的相似度阈值,则认为待检测函数为漏洞函数的同源函数;
2.如权利要求1所述的基于同源性分析的物联网固件漏洞检测方法,其特征在于,在将汇编代码按照基本块进行划分之前,对汇编代码中的寄存器、立即数、地址、函数名和基本块名进行标准化。
3.如权利要求2所述的基于同源性分析的物联网固件漏洞检测方法,其特征在于,对汇编代码中的寄存器、立即数、地址、函数名和基本块名进行标准化,具体包括:操作数为立即数的指令进行标准化,把立即数统一替换为immdata;操作数为寄存器的指令进行标准化,寄存器分为两种情况:普通寄存器和指针寄存器,普通寄存器做操作数时转换为:general_reg,指针寄存器做操作数时转换为:pointer_reg;操作数为内存引用时进行标准化处理,将内存引用转换为o_mem;操作数为基址寄存器加间址寄存器时,将操作数转换为o_phrase;操作数为一个寄存器加数字偏移时,将操作数转换为o_displ;根据调用指令的类型,对调用指令的跳转地址进行标准化处理,如果跳转地址是函数名,则把跳转地址转换为func;如果跳转地址是一个基本块名,则把跳转地址统一为bb。
4.如权利要求1所述的基于同源性分析的物联网固件漏洞检测方法,其特征在于,若在所述函数漏洞库中不存在同名的函数,则将差异函数集合中的函数作为待检测函数;
差异函数集合Fc=Fa-Fa∩Fb,Fa代表待测可执行文件的函数集合,Fb代表函数漏洞库中的可执行文件中的函数集合,Fa∩Fb代表Fa和Fb中的同名函数。
5.如权利要求1所述的基于同源性分析的物联网固件漏洞检测方法,其特征在于,所述函数漏洞库还包括漏洞对应的可执行文件的hash值;
计算待检测可执行文件的hash值,若所述函数漏洞库中存在相同hash值,则表明待检测可执行文件存在同源漏洞。
6.如权利要求5所述的基于同源性分析的物联网固件漏洞检测方法,其特征在于,若所述函数漏洞库中不存在相同hash值,则对待检测可执行文件进行反汇编,获取待测可执行文件的函数集合。
7.如权利要求5所述的基于同源性分析的物联网固件漏洞检测方法,其特征在于,获取各厂家公布的漏洞的物联网设备固件以及漏洞描述详情,提取物联网设备固件的系统文件,提取系统文件的可执行文件,进而获取可执行文件的名字、可执行文件的指令架构、可执行文件的hash值、可执行文件中的函数集合、可执行文件中的漏洞函数名、漏洞函数的指令集合,建立所述函数漏洞库。
8.基于同源性分析的物联网固件漏洞检测系统,其特征在于,包括:
函数漏洞库,所述函数漏洞库至少包括漏洞及对应的可执行文件的名字、可执行文件的指令架构、可执行文件中的函数集合、可执行文件中的漏洞函数名、漏洞函数的指令集合;
提取模块,用于提取待检测固件的可执行文件集合以及对应的指令架构,将在所述函数漏洞库中存在同名同架构的可执行文件作为待检测可执行文件;
筛选模块,用于对待检测可执行文件进行反汇编,获取待检测可执行文件的函数集合,将在所述函数漏洞库中存在同名的函数作为待检测函数,若在所述函数漏洞库中不存在同名的函数,则将差异函数集合中的函数作为待检测函数;差异函数集合Fc=Fa-Fa∩Fb,Fa代表待测可执行文件的函数集合,Fb代表函数漏洞库中的可执行文件中的函数集合,Fa∩Fb代表Fa和Fb中的同名函数;
计算模块,用于对待检测函数的二进制文件进行反汇编,提取待检测函数的汇编代码,对汇编代码中的寄存器、立即数、地址、函数名和基本块名进行标准化,将标准化后的汇编代码按照基本块进行划分,依次按行提取基本块内的汇编指令,形成待检测函数指令集合,计算待检测函数指令集合与漏洞函数的指令集合的相似度,如果相似度大于预设的相似度阈值,则认为待检测函数为漏洞函数的同源函数;其中,
9.如权利要求8所述的基于同源性分析的物联网固件漏洞检测系统,其特征在于,对汇编代码中的寄存器、立即数、地址、函数名和基本块名进行标准化,具体包括:操作数为立即数的指令进行标准化,把立即数统一替换为immdata;操作数为寄存器的指令进行标准化,寄存器分为两种情况:普通寄存器和指针寄存器,普通寄存器做操作数时转换为:general_reg,指针寄存器做操作数时转换为:pointer_reg;操作数为内存引用时进行标准化处理,将内存引用转换为o_mem;操作数为基址寄存器加间址寄存器时,将操作数转换为o_phrase;操作数为一个寄存器加数字偏移时,将操作数转换为o_displ;根据调用指令的类型,对调用指令的跳转地址进行标准化处理,如果跳转地址是函数名,则把跳转地址转换为func;如果跳转地址是一个基本块名,则把跳转地址统一为bb。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210086936.5A CN114500043B (zh) | 2022-01-25 | 2022-01-25 | 基于同源性分析的物联网固件漏洞检测方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210086936.5A CN114500043B (zh) | 2022-01-25 | 2022-01-25 | 基于同源性分析的物联网固件漏洞检测方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114500043A CN114500043A (zh) | 2022-05-13 |
CN114500043B true CN114500043B (zh) | 2022-08-26 |
Family
ID=81475480
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210086936.5A Active CN114500043B (zh) | 2022-01-25 | 2022-01-25 | 基于同源性分析的物联网固件漏洞检测方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114500043B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115168856B (zh) * | 2022-07-29 | 2023-04-21 | 山东省计算中心(国家超级计算济南中心) | 二进制代码相似性检测方法及物联网固件漏洞检测方法 |
CN115033892A (zh) * | 2022-08-10 | 2022-09-09 | 北京安普诺信息技术有限公司 | 一种组件漏洞分析方法、装置、电子设备及存储介质 |
CN116032654B (zh) * | 2023-02-13 | 2023-06-30 | 山东省计算中心(国家超级计算济南中心) | 一种固件漏洞检测及数据安全治理方法和系统 |
CN117195227B (zh) * | 2023-09-11 | 2024-04-30 | 暨南大学 | 一种异构的通用软件漏洞执行代码构建方法 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101923618B (zh) * | 2010-08-19 | 2011-12-21 | 中国航天科技集团公司第七一0研究所 | 一种基于隐马尔可夫模型的汇编指令级漏洞检测方法 |
US9824214B2 (en) * | 2014-08-15 | 2017-11-21 | Securisea, Inc. | High performance software vulnerabilities detection system and methods |
CN106295335B (zh) * | 2015-06-11 | 2021-09-24 | 中国科学院信息工程研究所 | 一种面向嵌入式设备的固件漏洞检测方法及系统 |
CN112149136A (zh) * | 2020-09-23 | 2020-12-29 | 北京顶象技术有限公司 | loT设备固件漏洞的检测方法、系统及电子设备 |
-
2022
- 2022-01-25 CN CN202210086936.5A patent/CN114500043B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN114500043A (zh) | 2022-05-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN114500043B (zh) | 基于同源性分析的物联网固件漏洞检测方法及系统 | |
CN107659570B (zh) | 基于机器学习与动静态分析的Webshell检测方法及系统 | |
Wei et al. | Pivot: learning api-device correlations to facilitate android compatibility issue detection | |
KR101246623B1 (ko) | 악성 애플리케이션 진단 장치 및 방법 | |
CN106295335B (zh) | 一种面向嵌入式设备的固件漏洞检测方法及系统 | |
US20090133126A1 (en) | Apparatus and method for detecting dll inserted by malicious code | |
US20070288899A1 (en) | Iterative static and dynamic software analysis | |
CN103778373A (zh) | 病毒检测方法及装置 | |
CN110716873B (zh) | 一种硬件兼容性知识库构建方法 | |
CN112149136A (zh) | loT设备固件漏洞的检测方法、系统及电子设备 | |
Habib et al. | Neural bug finding: A study of opportunities and challenges | |
CN112948828A (zh) | 一种二进制程序恶意代码检测方法、终端设备及存储介质 | |
CN113468525A (zh) | 针对二进制程序的相似漏洞检测方法及装置 | |
CN112328259A (zh) | 一种编译时长的处理方法和装置 | |
US20160055074A1 (en) | Program analysis device, program analysis method, and program analysis program | |
CN111090593A (zh) | 确定崩溃归属的方法、装置、电子设备及存储介质 | |
CN110851830A (zh) | 基于指令格式识别的面向cpu未公开指令发现方法 | |
CN116933267B (zh) | 一种符号执行的智能合约漏洞检测方法、系统和设备 | |
Gong et al. | Incorporating android code smells into java static code metrics for security risk prediction of android applications | |
CN112181479A (zh) | 代码文件版本间差异的确定方法、装置及电子设备 | |
CN112464237B (zh) | 一种静态代码安全诊断方法及装置 | |
US20150007139A1 (en) | Optimizing error parsing in an integrated development environment | |
Khan et al. | Detecting wake lock leaks in android apps using machine learning | |
CN114462043A (zh) | 基于强化学习的Java反序列化漏洞检测系统及方法 | |
Lu et al. | A hybrid interface recovery method for Android kernels fuzzing |
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 |