CN110502423A - 固件的漏洞识别方法、装置、设备和存储介质 - Google Patents

固件的漏洞识别方法、装置、设备和存储介质 Download PDF

Info

Publication number
CN110502423A
CN110502423A CN201910548246.5A CN201910548246A CN110502423A CN 110502423 A CN110502423 A CN 110502423A CN 201910548246 A CN201910548246 A CN 201910548246A CN 110502423 A CN110502423 A CN 110502423A
Authority
CN
China
Prior art keywords
dangerous function
loophole
reference address
under
parameter
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
Application number
CN201910548246.5A
Other languages
English (en)
Other versions
CN110502423B (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.)
Hangzhou Hikvision Digital Technology Co Ltd
Original Assignee
Hangzhou Hikvision Digital Technology Co Ltd
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 Hangzhou Hikvision Digital Technology Co Ltd filed Critical Hangzhou Hikvision Digital Technology Co Ltd
Priority to CN201910548246.5A priority Critical patent/CN110502423B/zh
Publication of CN110502423A publication Critical patent/CN110502423A/zh
Application granted granted Critical
Publication of CN110502423B publication Critical patent/CN110502423B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3636Software debugging by tracing the execution of the program
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/366Software debugging using diagnostics

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

本发明提供一种固件的漏洞识别方法、装置、设备和存储介质。该方法包括:从所述固件中提取待识别的目标文件;定位所述目标文件中所包含的危险函数的至少一个引用地址;根据所述危险函数的至少一个引用地址以及危险函数对应的漏洞类型,追溯所述危险函数在各个所述引用地址下的参数来源;根据所述危险函数在各个所述引用地址下的参数来源,确定所述危险函数在各个所述引用地址下是否存在漏洞。本发明实施例提高了漏洞的识别率。

Description

固件的漏洞识别方法、装置、设备和存储介质
技术领域
本发明涉及计算机技术领域,尤其涉及一种固件的漏洞识别方法、装置、设备和存储介质。
背景技术
伴随着物联网的发展,物联网设备被广泛应用在生产和生活中。由于传统的物联网设备厂商普遍缺乏安全意识,近年来有关物联网设备固件的漏洞不断被曝光。这些漏洞涉及的设备包括工业控制器、安防摄像头、路由器、数字电话、汽车控制器等。固件是写入可擦写只读存储器(Eraseable Read Only Memory,简称EROM)或电可擦可编程只读存储器(Electrically-Erasable Programmable Read-Only Memory,简称EEPROM)中的程序。固件是用于设备内部保存的设备“驱动程序”。通过固件,操作系统才能按照标准的设备驱动实现特定设备的运行动作。
目前针对物联网设备固件的漏洞挖掘方法一般是对固件进行解码与反汇编得到固件的汇编函数,提取固件中的汇编函数的指纹,将汇编函数的指纹与已知的漏洞函数的指纹进行匹配,若指纹的相似度大于预设阈值,则将该汇编函数的作为疑似漏洞函数。上述方案漏洞识别率不高。
发明内容
本发明提供一种固件的漏洞识别方法、装置、设备和存储介质,以提高固件漏洞的识别率。
第一方面,本发明提供一种固件的漏洞识别方法,包括:
从所述固件中提取待识别的目标文件;
定位所述目标文件中所包含的危险函数的至少一个引用地址;
根据所述危险函数的至少一个引用地址以及所述危险函数对应的漏洞类型,追溯所述危险函数在各个所述引用地址下的参数来源;
根据所述危险函数在各个所述引用地址下的参数来源,确定所述危险函数在各个所述引用地址下是否存在漏洞。
在一种可能的实现方式中,根据所述危险函数的至少一个引用地址以及所述危险函数对应的漏洞类型,追溯所述危险函数在各个所述引用地址下的参数来源,包括:
若所述危险函数对应的漏洞类型为格式化字符串漏洞类型或命令注入漏洞类型,则直接追溯所述危险函数在各个所述引用地址下的各个参数的参数来源;
相应的,所述根据所述危险函数在各个所述引用地址下的参数来源,确定所述危险函数在各个所述引用地址下是否存在漏洞,包括:
针对各个所述引用地址,根据所述危险函数在所述引用地址下的各个参数的参数来源,判断所述危险函数在所述引用地址下的各个参数是否为常量或常量的引用;
若存在至少一个参数不是常量或常量的引用,则确定所述危险函数在所述引用地址下存在漏洞。
在一种可能的实现方式中,根据所述危险函数的至少一个引用地址以及所述危险函数对应的漏洞类型,追溯所述危险函数在各个所述引用地址下的参数来源,包括:
若所述危险函数对应的漏洞类型为栈溢出漏洞类型,则根据所述危险函数的各个参数之间的关系,从所述各个参数中确定待追溯的目标参数;所述目标参数为所述各个参数中用于确定所述危险函数在各个所述引用地址下是否存在漏洞的参数;
追溯所述危险函数在各个所述引用地址下的目标参数的参数来源;
相应的,所述根据所述危险函数在各个所述引用地址下的参数来源,确定所述危险函数在各个所述引用地址下是否存在漏洞,包括:
针对各个所述引用地址,根据所述危险函数在所述引用地址下的所述目标参数的参数来源,判断所述危险函数在所述引用地址下的所述目标参数是否为常量或常量的引用;
若所述目标参数不是常量或常量的引用,则确定所述危险函数在所述引用地址下存在漏洞。
在一种可能的实现方式中,所述确定所述危险函数在所述引用地址下存在漏洞之后,还包括:
输出漏洞识别结果,以根据所述漏洞识别结果对所识别漏洞的有效性进行校验;
所述漏洞识别结果至少包括下述信息中的一种或多种:
所述危险函数对应的漏洞类型、所述危险函数的名称、所述危险函数的函数地址、所述引用地址。
在一种可能的实现方式中,所述确定所述危险函数在所述引用地址下存在漏洞之后,还包括:
根据所述危险函数对应的预设条件,对所述危险函数在所述引用地址下存在漏洞的有效性进行验证;所述预设条件用于验证所述危险函数在所述引用地址下是否存在漏洞。
在一种可能的实现方式中,所述根据预设条件,对所述危险函数在所述引用地址下存在漏洞的有效性进行验证,包括:
确定所述危险函数对参数的调用方式中是否对参数进行限制;若否,则确定所述危险函数在所述引用地址下存在漏洞;或,
确定所述危险函数的外部传入参数是否可控;若是,则确定所述危险函数在所述引用地址下存在漏洞;或,
确定所述危险函数的参数在传递过程中是否进行校验;若否,则确定所述危险函数在所述引用地址下存在漏洞。
在一种可能的实现方式中,所述追溯所述危险函数在各个所述引用地址下的各个参数的参数来源,包括:
根据对所述目标文件进行反汇编处理得到的汇编指令,确定所述危险函数的参数对应的寻址方式;
根据所述寻址方式,追溯所述危险函数在各个所述引用地址下的各个参数的参数来源。
在一种可能的实现方式中,所述追溯所述危险函数在各个所述引用地址下的目标参数的参数来源,包括:
根据对所述目标文件进行反汇编处理得到的汇编指令,确定所述危险函数的参数对应的寻址方式;
根据所述寻址方式,追溯所述危险函数在各个所述引用地址下的目标参数的参数来源。
在一种可能的实现方式中,在确定危险函数是否存在漏洞之后,或者在不存在危险函数的情况下,所述方法还包括:
对所述目标文件的字符串值进行解析,确定所述字符串值是否为密钥信息;
若是,则确定所述字符串值存在漏洞。
在一种可能的实现方式中,所述从所述固件中提取待识别的目标文件,包括:
根据所述固件中各个文件的特征值所在地址以及各个所述文件的特征值所在地址之间的偏移,从所述固件中提取各个所述文件,并对提取出的各个所述文件进行解压,得到解压后的文件;
从所述解压后的文件中提取所述目标文件。
第二方面,本发明提供一固件的漏洞识别装置,包括:
提取模块,用于从所述固件中提取待识别的目标文件;
定位模块,用于确定所述目标文件中所包含的危险函数的至少一个引用地址;
追溯模块,还用于根据所述危险函数的至少一个引用地址以及所述危险函数对应的漏洞类型,追溯所述危险函数在各个所述引用地址下的参数来源;
处理模块,用于根据所述危险函数在各个所述引用地址下的参数来源,确定所述危险函数在各个所述引用地址下是否存在漏洞。
第三方面,本发明实施例提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现第一方面中任一项所述的方法。
第四方面,本发明实施例提供一种电子设备,包括:
处理器;以及
存储器,用于存储所述处理器的可执行指令;
其中,所述处理器配置为经由执行所述可执行指令来执行第一方面中任一项所述的方法。
本发明实施例提供的固件的漏洞识别方法、装置、设备和存储介质,从所述固件中提取待识别的目标文件;定位所述目标文件中所包含的危险函数的至少一个引用地址;进一步,根据所述危险函数的至少一个引用地址以及所述危险函数对应的漏洞类型,追溯所述危险函数在各个所述引用地址下的参数来源;根据所述危险函数在各个所述引用地址下的参数来源,确定所述危险函数在各个所述引用地址下是否存在漏洞,对于可能出现漏洞的危险函数进行分析,根据该些危险函数在各个引用地址下的参数来源,最终实现了漏洞的识别,漏洞识别率较高。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。
图1是本发明提供的固件的漏洞识别方法一实施例的流程示意图;
图2是本发明提供的一实施例的漏洞识别的原理示意图;
图3是本发明提供的一实施例的固件预处理流程示意图;
图4是本发明提供的一实施例的提取文件原理示意图;
图5是本发明提供的固件的漏洞识别方法另一实施例的流程示意图;
图6是本发明提供的固件的漏洞识别装置一实施例的结构示意图;
图7是本发明提供的电子设备实施例的结构示意图。
通过上述附图,已示出本公开明确的实施例,后文中将有更详细的描述。这些附图和文字描述并不是为了通过任何方式限制本公开构思的范围,而是通过参考特定实施例为本领域技术人员说明本公开的概念。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。
本发明的说明书和权利要求书及所述附图中的术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。
首先对本发明所涉及的名词和应用场景进行介绍:
函数地址表示该函数在目标文件中的实际地址,引用地址表示该函数在实际代码中调用的地址,两者的关系为:引用地址处的汇编代码会以显式的方式调用函数地址,因此,可以通过对函数地址的分析来获取引用地址。
本发明实施例提供的固件的漏洞识别方法,应用于对电子设备中的固件的漏洞进行识别的场景中,以提高漏洞的识别率。其中,电子设备例如包括物联网设备等嵌入式设备。
相关技术中,通过已知的漏洞函数的指纹进行匹配,漏洞识别率不高,而且不能够全面识别漏洞。
下面以具体的实施例对本发明的技术方案进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例不再赘述。
图1是本发明提供的固件的漏洞识别方法一实施例的流程示意图。如图1所示,本实施例提供的方法,包括:
步骤101、从固件中提取待识别的目标文件。
具体的,首先获取需进行漏洞识别的固件,固件中可能包括多个文件,可以将该些文件中具有关键功能的文件作为目标文件,关键功能例如为网络服务功能。预先获取到具有关键功能的文件的名称,建立白名单。根据白名单中包括的文件的名称提取固件中待识别的目标文件。目标文件的格式例如为可执行连接格式(Executable and LinkableFormat,简称ELF)。
步骤102、定位目标文件中所包含的危险函数的至少一个引用地址。
具体的,大部分二进制漏洞,如缓冲区溢出、命令执行、拒绝服务等漏洞均是由于固件中使用了不自查的危险函数对变量直接进行处理,在调用这些危险函数的前后没有对变量的长度、内容进行检测和过滤。因此,这些危险函数在使用这些变量时可能会产生漏洞。
本发明实施例中对于目标文件中包含的危险函数进行分析,识别可能存在的漏洞。
如图2所示,需要对提取的目标文件进行反编译处理,得到该目标文件对应的调试信息和动态链接信息,根据调试信息和动态链接信息确定该目标文件包括的危险函数,并定位危险函数的函数地址,并通过函数地址定位出该危险函数的至少一个引用地址,危险函数对应的漏洞类型可以根据危险函数的作用以及可能导致的漏洞分为以下几类,漏洞类型与危险函数的对应关系,如下表1所示:
表1
步骤103、根据危险函数的至少一个引用地址以及危险函数对应的漏洞类型,追溯危险函数在各个引用地址下的参数来源。
具体的,并不是所有的危险函数调用都存在漏洞。比如system(“ifconfig”),该函数的参数是硬编码的,即将该参数直接以常量的方式写在程序代码中,无法被攻击者控制,不存在命令注入漏洞。而且,通常情况下,一个目标文件可能会有多个地方调用这些危险函数(如strcpy函数),单纯定位危险函数名会导致大量的误报,同时增加后期人工分析的开销。因此,本发明实施例中使用静态程序前向分析技术,通过追溯危险函数的参数来源而减少误报率。
步骤104、根据危险函数在各个引用地址下的参数来源,确定危险函数在各个引用地址下是否存在漏洞。
具体的,针对各个引用地址,分别根据危险函数在各个引用地址下的参数来源,确定危险函数在各个引用地址下是否存在漏洞。例如,若参数来源是硬编码值,如字符串常量,则确定危险函数在该引用地址下不存在漏洞。
其中,对于不同漏洞类型的危险函数,确定危险函数在各个引用地址下是否存在漏洞的方式可能不同。
例如格式化字符串漏洞类型、命令注入漏洞类型,以及栈溢出漏洞类型可以采用不同的方式确定是否存在漏洞。
进一步的,在确定危险函数在引用地址下存在漏洞之后,还可以进行如下操作:
输出漏洞识别结果,以根据漏洞识别结果对所识别漏洞的有效性进行校验;
漏洞识别结果至少包括下述信息中的一种或多种:危险函数对应的漏洞类型、危险函数的名称、危险函数的函数地址、引用地址。
具体的,上述分析过程可能存在代码覆盖率不高,定位危险函数的参数来源的回溯层数有限,可能存在误报,因此如图2所示,可以对漏洞识别结果进行输出,在输出漏洞识别结果之后,可以通过固件维护人员进行人工校验,从而减少误报。
人工根据漏洞识别结果中的引用地址在目标文件的汇编指令中查找到该危险函数,并分析该危险函数在该引用地址下的参数的合法性,例如将该危险函数的参数回溯到最上层后确定是否为常量,若为常量则漏洞不存在;或,可以分析危险函数对参数的调用方式,若调用方式中对参数的长度与类型等信息进行了限制,则漏洞不存在;或,确定该危险函数的参数是否为可控的外部传入参数,即该参数例如是通过I/O操作读取的参数值,若是通过I/O操作读取的参数值则为外部可控,则存在漏洞;或,确定危险函数的参数在传递过程中是否进行校验,例如对该参数的长度、类型、参数值等进行校验,若进行了校验,则不存在漏洞。
本实施例的方法,从所述固件中提取待识别的目标文件;定位所述目标文件中所包含的危险函数的至少一个引用地址;进一步,根据所述危险函数的至少一个引用地址以及所述危险函数对应的漏洞类型,追溯所述危险函数在各个所述引用地址下的参数来源;根据所述危险函数在各个所述引用地址下的参数来源,确定所述危险函数在各个所述引用地址下是否存在漏洞,对于可能出现漏洞的危险函数进行分析,根据该些危险函数在各个引用地址下的参数来源,最终实现了漏洞的识别,漏洞识别率较高,而且能够全面识别出目标文件中可能存在的漏洞。
在上述实施例的基础上,如图5所示,步骤101中从固件中提取待识别的目标文件具体可以通过如下方式实现:
根据所述固件中各个所述文件的特征值所在地址,从固件中提取各个文件,并对提取出的各个文件进行解压,得到解压后的文件;
从解压后的文件中提取所述目标文件。
具体的,获取到待漏洞识别的固件,可以对固件进行预处理,预处理例如包括识别固件是否加密、从固件中提取文件、对文件进行解压。其中若固件为加密固件,则对加密的固件进行解密处理。
对固件进行解密处理,可以通过利用预先收集到的密钥和加密方法对加密固件进行解密。即在解密处理之前,可以收集或者人工分析一些加密固件的加密方法、密钥等重要的信息。
进一步,对于解密处理后的固件或未加密的固件,从固件中提取文件,首先可以根据固件中包括的各个文件的特征值所在的地址之间的偏移,提取固件中的各个文件,并对提取出的各个文件进行解压,得到解压后的文件,然后从解压后的文件中提取目标文件。
从固件中提取各个文件
如图3所示,对固件中的特征值进行搜索,若有特征值,则记录该特征值的地址,并查找下一个文件的特征值的地址,根据两个特征值所在地址之间的偏移提取出该文件。
如图4所示,根据当前文件和下一个文件的特征值(Magic Number)所在地址之间的偏移,即差值,可以提取出该当前文件。其中,文件的特征值可以从文件的文件头中获取到。
各个文件的特征值如下表2所示:
表2
进一步,对固件中提取出的各个文件进行解压,具体可以通过如下方式实现:
若文件是文件系统格式的文件,则采用与文件对应的文件系统对文件进行解压;
若文件不是文件系统格式的文件,则根据文件的压缩格式对文件进行解压。
具体的,如图3所示,确定文件是否为预设的压缩格式的文件,压缩格式例如包括zip、rar、gz、7z、be2等格式,若为预设的压缩格式的文件,则根据该压缩格式对该文件进行解压,若不是预设的压缩格式的文件,则进一步确定该文件是否是文件系统格式的文件,若该文件是文件系统格式的文件,则采用与该文件对应的文件系统格式对该文件进行解压。
其中,若该文件为预设的压缩格式的文件,则对于解压得到的文件,若该文件中还包括多个文件,如图3所示,可以继续根据前述方法获取文件大小,进行递归解压。
进一步的,对于预处理后的固件需要提取待识别的目标文件,对目标文件进行漏洞识别,作为一种可实施的方式,对于从解压后的文件中提取目标文件,具体可以通过如下方式实现:
根据预设的白名单从解压后的文件中提取所述目标文件;所述白名单中包括待提取的文件的标识信息。
具体的,可以预先根据文件的特征,确定具有关键功能的文件,根据该些具有关键功能的文件的名称建立白名单,根据预设的白名单从解压后的文件中提取目标文件;白名单中包括的待提取的文件的标识信息例如包括文件的名称,属性等信息。
进一步的,如图5所示,在提取目标文件之后,还可以进行如下操作:
确定目标文件是否加壳;
若目标文件加壳,则对目标文件进行脱壳处理。
具体的,可以根据目标文件的文件格式、文件头结构或预先获取到的可执行文件壳的特征中的至少一项信息,确定该目标文件是否加壳,对于加壳的目标文件可以使用通用脱壳工具进行脱壳处理。
本实施例的方法,通过对固件进行预处理,并提取出固件中的目标文件,以便于对固件中的目标文件进行漏洞识别。
在上述实施例的基础上,进一步的,步骤103可通过如下方式实现:
根据对所述目标文件进行反汇编处理得到的汇编指令,确定所述危险函数的参数对应的寻址方式;
根据所述寻址方式,追溯所述危险函数在各个所述引用地址下的参数来源。
具体的,根据对目标文件进行反汇编处理得到的汇编指令,确定危险函数在各个引用地址下的参数对应的寻址方式;不同的引用地址下寻址方式可能不同。
例如,对于ARM架构下存在多种寻址方式,如立即寻址、寄存器寻址、寄存器移位寻址、寄存器间接寻址、堆栈寻址等,导致参数的来源方式也多种多样。
对于参数为字符串常量或字符串常量的引用,对应的寻址方式为立即寻址。
对于危险函数中汇编指令为mov reg1,sp的形式,认为参数reg1指向的数据来自栈,即从栈上追溯引用地址下的参数来源,因为栈中数据一般是局部变量或局部参数,所以认为参数来源可能是可变的,对应的寻址方式为寄存器寻址。
对于危险函数中汇编指令为add reg1,reg2,reg1的形式,对应的寻址方式为相对偏移寻址。
对于以LDMFD指令开始的危险函数,对应的寻址方式为堆栈寻址。
对于危险函数中汇编指令为mov reg1,reg2的形式时,继续递归追溯参数reg2的来源。
其中,对于离引用地址最近的STMFD指令认为是该危险函数的开始,一般可以只在该危险函数内分析参数的来源,若追溯参数来源到达该危险函数的边界,则认为该危险函数的参数由外部传入,即是从I/O操作或是由非本函数之外的函数中读取的参数值。
本实施例中,通过寻址方式,追溯所述危险函数在各个引用地址下的参数来源,效率较高。
在上述实施例的基础上,对于不同的漏洞类型对应的危险函数,可以通过如下几种方式进行漏洞识别:
一种实现方式:
若危险函数对应的漏洞类型为格式化字符串漏洞类型或命令注入漏洞类型,则直接追溯所述危险函数在各个所述引用地址下的各个参数的参数来源;
针对各个所述引用地址,根据所述危险函数在所述引用地址下的各个参数的参数来源,判断所述危险函数在所述引用地址下的各个参数是否为常量或常量的引用;
若存在至少一个参数不是常量或常量的引用,则确定所述危险函数在所述引用地址下存在漏洞。
具体的,若危险函数对应的漏洞类型为格式化字符串漏洞类型或者命令注入漏洞类型,判断该危险函数的至少一个参数是否为常量或常量的引用,例如为字符串常量或字符串常量的引用。
若存在一个参数不是常量或常量的引用,则确定该危险函数在该引用地址下存在漏洞。
另一种实现方式:
若危险函数对应的漏洞类型为栈溢出漏洞类型;则根据所述危险函数的各个参数之间的关系,从所述各个参数中确定待追溯的目标参数;所述目标参数为所述各个参数中用于确定所述危险函数在各个所述引用地址下是否存在漏洞的参数;
追溯所述危险函数在各个所述引用地址下的目标参数的参数来源。
具体的,若危险函数对应的漏洞类型为栈溢出漏洞类型,则根据不同的危险函数的各个参数之间的关系,确定目标参数,对目标参数的参数来源进行追溯。
其中,确定所述危险函数在各个所述引用地址下的目标参数的参数来源,可以通过上述实施例中根据寻址方式确定出来,此处不再赘述。
例如,函数strcpy(char*des,const char*source),其中的第二个参数source可以是目标参数。source长度过长就可能会导致溢出漏洞。
进一步的,漏洞识别具体可以通过如下方式实现:
针对各个所述引用地址,根据所述危险函数在所述引用地址下的所述目标参数的参数来源,判断所述危险函数在所述引用地址下的目标参数是否为常量或常量的引用;
若目标参数不是常量或常量的引用,则确定所述危险函数在所述引用地址下存在漏洞。
具体的,对于各个引用地址,判断危险函数在引用地址下的目标参数是否为常量或常量的引用,例如为字符串常量或字符串常量的引用。
若该目标参数不是常量或常量的引用,则确定该危险函数在该引用地址下存在漏洞。
本实施例中,对于可能出现漏洞的危险函数进行分析,根据该些危险函数在各个引用地址下的参数来源以及对应的漏洞类型,最终实现了漏洞的识别,漏洞识别率较高,而且能够全面识别出目标文件中可能存在的漏洞。
在上述实施例的基础上,进一步的,为了降低漏洞识别的误报率,本实施例的方法中,在确定危险函数在引用地址下存在漏洞之后,还包括:
根据危险函数对应的预设条件,对危险函数在引用地址下存在漏洞的有效性进行验证;预设条件用于验证所述危险函数在所述引用地址下是否存在漏洞。
进一步的,具体可以通过如下几种方式进行漏洞的有效性验证:
确定所述危险函数对参数的调用方式中是否对参数进行限制;若否,则确定所述危险函数在所述引用地址下存在漏洞;或,
确定所述危险函数的外部传入参数是否可控;若是,则确定所述危险函数在所述引用地址下存在漏洞;或,
确定所述危险函数的参数在传递过程中是否进行校验;若否,则确定所述危险函数在所述引用地址下存在漏洞。
具体的,可以分析危险函数对参数的调用方式,若调用方式中对参数的长度与类型等信息进行了限制,则漏洞不存在,否则存在漏洞;或,确定该危险函数的参数是否为可控的外部传入参数,即该参数例如是通过I/O操作读取的参数值,若是通过I/O操作读取的参数值则为可控,则存在漏洞;或,确定危险函数的参数在传递过程中是否进行校验,例如对该参数的长度、类型、参数值等进行校验,若进行了校验,则不存在漏洞。
进一步,还可以输出漏洞识别结果,与上述实施例类似,此处不再赘述。
本实施例中,在确定出危险函数在引用地址下存在漏洞后,可以进一步对漏洞的有效性进行验证,减少误报,从而减少后续人工分析的成本。
在上述实施例的基础上,进一步的,在确定危险函数是否存在漏洞之后,或者在不存在危险函数的情况下,本实施例的方法还可以包括如下步骤:
对所述目标文件的字符串值进行解析,确定所述字符串值是否为密钥信息;
若是,则确定所述字符串值存在漏洞。
具体的,如图5所示,除了对危险函数进行漏洞识别,还可以对目标文件中的字符串值进行解析,或者是在对危险函数进行漏洞识别之后对目标文件中的字符串值进行解析,即确定是否为密钥信息等敏感信息,若是则确定该目标文件中的字符串值存在漏洞。密钥信息例如为常用的弱密钥等敏感信息,这些弱密钥可以由白名单预置。
进一步,还可以对固件中的配置文件进行分析,确定是否存在敏感信息泄露。
图5中除了在不存在危险函数时执行对目标文件中的字符串值进行解析实现漏洞识别,还可以在进行危险函数的漏洞识别后还可以对目标文件中的字符串值进行解析实现漏洞识别。最后还可以进行人为分析,确定结果是否为误报。
本实施例中,根据该些危险函数在各个引用地址下的参数来源以及对应的漏洞类型,实现了漏洞的识别,漏洞识别率较高,还可以对目标文件的字符串值进行解析识别漏洞,因此能够更全面的识别出目标文件中可能存在的漏洞。
图6为本发明提供的固件的漏洞识别装置一实施例的结构图,如图6所示,本实施例的固件的漏洞识别装置,包括:
提取模块601,用于从所述固件中提取待识别的目标文件;
定位模块602,用于定位所述目标文件中所包含的危险函数的至少一个引用地址;
追溯模块603,还用于根据所述危险函数的至少一个引用地址以及所述危险函数对应的漏洞类型,追溯所述危险函数在各个所述引用地址下的参数来源;
处理模块604,用于根据所述危险函数在各个所述引用地址下的参数来源,确定所述危险函数在各个所述引用地址下是否存在漏洞。
在一种可能的实现方式中,追溯模块603,具体用于:
若所述危险函数对应的漏洞类型为格式化字符串漏洞类型或命令注入漏洞类型,直接追溯所述危险函数在各个所述引用地址下的各个参数的参数来源;
所述处理模块604,具体用于:
针对各个所述引用地址,根据所述危险函数在所述引用地址下的各个参数的参数来源,判断所述危险函数在所述引用地址下的各个参数是否为常量或常量的引用;
若存在至少一个参数不是常量或常量的引用,则确定所述危险函数在所述引用地址下存在漏洞。
在一种可能的实现方式中,所述追溯模块603,具体用于:
若所述危险函数对应的漏洞类型为栈溢出漏洞类型,则根据所述危险函数的各个参数之间的关系,从所述各个参数中确定待追溯的目标参数;所述目标参数为所述各个参数中用于确定所述危险函数在各个所述引用地址下是否存在漏洞的参数;
追溯所述危险函数在各个所述引用地址下的目标参数的参数来源。
在一种可能的实现方式中,所述处理模块604,具体用于:
针对各个所述引用地址,根据所述危险函数在所述引用地址下的所述目标参数的参数来源,判断所述危险函数在所述引用地址下的所述目标参数是否为常量或常量的引用;
若所述目标参数不是常量或常量的引用,则确定所述危险函数在所述引用地址下存在漏洞。
在一种可能的实现方式中,所述处理模块604,还用于:
在确定所述危险函数在所述引用地址下存在漏洞之后,输出漏洞识别结果,以根据所述漏洞识别结果对所识别漏洞的有效性进行校验;
所述漏洞识别结果至少包括下述信息中的一种或多种:
所述危险函数对应的漏洞类型、所述危险函数的名称、所述危险函数的函数地址、所述引用地址。
在一种可能的实现方式中,所述处理模块604,还用于:
在确定所述危险函数在所述引用地址下存在漏洞之后,根据所述危险函数对应的预设条件,对所述危险函数在所述引用地址下存在漏洞的有效性进行验证;所述预设条件用于验证所述危险函数在所述引用地址下是否存在漏洞。
在一种可能的实现方式中,所述处理模块604,具体用于:
确定所述危险函数对参数的调用方式中是否对参数进行限制;若否,则确定所述危险函数在所述引用地址下存在漏洞;或,
确定所述危险函数的外部传入参数是否可控;若是,则确定所述危险函数在所述引用地址下存在漏洞;或,
确定所述危险函数的参数在传递过程中是否进行校验;若否,则确定所述危险函数在所述引用地址下存在漏洞。
在一种可能的实现方式中,所述追溯模块603,具体用于:
根据对所述目标文件进行反汇编处理得到的汇编指令,确定所述危险函数的参数对应的寻址方式;
根据所述寻址方式,追溯所述危险函数在各个所述引用地址下的参数来源。
在一种可能的实现方式中,在确定危险函数是否存在漏洞之后,或者在不存在危险函数的情况下,所述处理模块604,还用于:
对所述目标文件的字符串值进行解析,确定所述字符串值是否为密钥信息;
若是,则确定所述字符串值存在漏洞。
在一种可能的实现方式中,所述提取模块601,具体用于:
根据所述固件中各个所述文件的特征值所在地址以及各个所述文件的特征值所在地址之间的偏移,从所述固件中提取各个所述文件,并对提取出的各个所述文件进行解压,得到解压后的文件;
从所述解压后的文件中提取所述目标文件。
在一种可能的实现方式中,所述提取模块601,具体用于:
根据预设的白名单从解压后的文件中提取所述目标文件;所述白名单中包括待提取的文件的标识信息。
在一种可能的实现方式中,所述提取模块601,具体用于:
若所述文件是文件系统格式的文件,则采用与所述文件对应的文件系统格式对所述文件进行解压;
若所述文件不是文件系统格式的文件,则根据所述文件的压缩格式对所述文件进行解压。
在一种可能的实现方式中,所述提取模块601,还用于:
若所述固件为加密固件,则对所述固件进行解密处理。
在一种可能的实现方式中,所述提取模块601,还用于:
在提取目标文件之后,确定所述目标文件是否加壳;
若是,则对所述目标文件进行脱壳处理。
本实施例的装置,可以用于执行上述方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
图7为本发明提供的电子设备实施例的结构图,如图7所示,该电子设备包括:
处理器701,以及,用于存储处理器701的可执行指令的存储器702。
可选的,还可以包括:通信接口703,用于实现与其他设备的通信。
上述部件可以通过一条或多条总线进行通信。
其中,处理器701配置为经由执行所述可执行指令来执行前述方法实施例中对应的方法,其具体实施过程可以参见前述方法实施例,此处不再赘述。
本发明实施例中还提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现前述方法实施例中对应的方法,其具体实施过程可以参见前述方法实施例,其实现原理和技术效果类似,此处不再赘述。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其它实施方案。本发明旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求书指出。
应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求书来限制。

Claims (13)

1.一种固件的漏洞识别方法,其特征在于,包括:
从所述固件中提取待识别的目标文件;
定位所述目标文件中所包含的危险函数的至少一个引用地址;
根据所述危险函数的至少一个引用地址以及所述危险函数对应的漏洞类型,追溯所述危险函数在各个所述引用地址下的参数来源;
根据所述危险函数在各个所述引用地址下的参数来源,确定所述危险函数在各个所述引用地址下是否存在漏洞。
2.根据权利要求1所述的方法,其特征在于,根据所述危险函数的至少一个引用地址以及所述危险函数对应的漏洞类型,追溯所述危险函数在各个所述引用地址下的参数来源,包括:
若所述危险函数对应的漏洞类型为格式化字符串漏洞类型或命令注入漏洞类型,则直接追溯所述危险函数在各个所述引用地址下的各个参数的参数来源;
相应的,所述根据所述危险函数在各个所述引用地址下的参数来源,确定所述危险函数在各个所述引用地址下是否存在漏洞,包括:
针对各个所述引用地址,根据所述危险函数在所述引用地址下的各个参数的参数来源,判断所述危险函数在所述引用地址下的各个参数是否为常量或常量的引用;
若存在至少一个参数不是常量或常量的引用,则确定所述危险函数在所述引用地址下存在漏洞。
3.根据权利要求1所述的方法,其特征在于,根据所述危险函数的至少一个引用地址以及所述危险函数对应的漏洞类型,追溯所述危险函数在各个所述引用地址下的参数来源,包括:
若所述危险函数对应的漏洞类型为栈溢出漏洞类型,则根据所述危险函数的各个参数之间的关系,从所述各个参数中确定待追溯的目标参数;所述目标参数为所述各个参数中用于确定所述危险函数在各个所述引用地址下是否存在漏洞的参数;
追溯所述危险函数在各个所述引用地址下的目标参数的参数来源;
相应的,所述根据所述危险函数在各个所述引用地址下的参数来源,确定所述危险函数在各个所述引用地址下是否存在漏洞,包括:
针对各个所述引用地址,根据所述危险函数在所述引用地址下的所述目标参数的参数来源,判断所述危险函数在所述引用地址下的所述目标参数是否为常量或常量的引用;
若所述目标参数不是常量或常量的引用,则确定所述危险函数在所述引用地址下存在漏洞。
4.根据权利要求1-3任一项所述的方法,其特征在于,所述确定所述危险函数在所述引用地址下存在漏洞之后,还包括:
输出漏洞识别结果,以根据所述漏洞识别结果对所识别漏洞的有效性进行校验;
所述漏洞识别结果至少包括下述信息中的一种或多种:
所述危险函数对应的漏洞类型、所述危险函数的名称、所述危险函数的函数地址、所述引用地址。
5.根据权利要求1-3任一项所述的方法,其特征在于,所述确定所述危险函数在所述引用地址下存在漏洞之后,还包括:
根据所述危险函数对应的预设条件,对所述危险函数在所述引用地址下存在漏洞的有效性进行验证;所述预设条件用于验证所述危险函数在所述引用地址下是否存在漏洞。
6.根据权利要求5所述的方法,其特征在于,所述根据预设条件,对所述危险函数在所述引用地址下存在漏洞的有效性进行验证,包括:
确定所述危险函数对参数的调用方式中是否对参数进行限制;若否,则确定所述危险函数在所述引用地址下存在漏洞;或,
确定所述危险函数的外部传入参数是否可控;若是,则确定所述危险函数在所述引用地址下存在漏洞;或,
确定所述危险函数的参数在传递过程中是否进行校验;若否,则确定所述危险函数在所述引用地址下存在漏洞。
7.根据权利要求2所述的方法,其特征在于,所述追溯所述危险函数在各个所述引用地址下的各个参数的参数来源,包括:
根据对所述目标文件进行反汇编处理得到的汇编指令,确定所述危险函数的参数对应的寻址方式;
根据所述寻址方式,追溯所述危险函数在各个所述引用地址下的各个参数的参数来源。
8.根据权利要求3所述的方法,其特征在于,所述追溯所述危险函数在各个所述引用地址下的目标参数的参数来源,包括:
根据对所述目标文件进行反汇编处理得到的汇编指令,确定所述危险函数的参数对应的寻址方式;
根据所述寻址方式,追溯所述危险函数在各个所述引用地址下的目标参数的参数来源。
9.根据权利要求1-3任一项所述的方法,其特征在于,在确定危险函数是否存在漏洞之后,或者在不存在危险函数的情况下,所述方法还包括:
对所述目标文件的字符串值进行解析,确定所述字符串值是否为密钥信息;
若是,则确定所述字符串值存在漏洞。
10.根据权利要求1-3任一项所述的方法,其特征在于,所述从所述固件中提取待识别的目标文件,包括:
根据所述固件中各个文件的特征值所在地址以及各个所述文件的特征值所在地址之间的偏移,从所述固件中提取各个所述文件,并对提取出的各个所述文件进行解压,得到解压后的文件;
从所述解压后的文件中提取所述目标文件。
11.一种固件的漏洞识别装置,其特征在于,包括:
提取模块,用于从所述固件中提取待识别的目标文件;
定位模块,用于定位所述目标文件中所包含的危险函数的至少一个引用地址;
追溯模块,还用于根据所述危险函数的至少一个引用地址以及所述危险函数对应的漏洞类型,追溯所述危险函数在各个所述引用地址下的参数来源;
处理模块,用于根据所述危险函数在各个所述引用地址下的参数来源,确定所述危险函数在各个所述引用地址下是否存在漏洞。
12.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1-10任一项所述的方法。
13.一种电子设备,其特征在于,包括:
处理器;以及
存储器,用于存储所述处理器的可执行指令;
其中,所述处理器配置为经由执行所述可执行指令来执行权利要求1-11任一项所述的方法。
CN201910548246.5A 2019-06-24 2019-06-24 固件的漏洞识别方法、装置、设备和存储介质 Active CN110502423B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910548246.5A CN110502423B (zh) 2019-06-24 2019-06-24 固件的漏洞识别方法、装置、设备和存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910548246.5A CN110502423B (zh) 2019-06-24 2019-06-24 固件的漏洞识别方法、装置、设备和存储介质

Publications (2)

Publication Number Publication Date
CN110502423A true CN110502423A (zh) 2019-11-26
CN110502423B CN110502423B (zh) 2023-07-18

Family

ID=68585928

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910548246.5A Active CN110502423B (zh) 2019-06-24 2019-06-24 固件的漏洞识别方法、装置、设备和存储介质

Country Status (1)

Country Link
CN (1) CN110502423B (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112149136A (zh) * 2020-09-23 2020-12-29 北京顶象技术有限公司 loT设备固件漏洞的检测方法、系统及电子设备
CN112906004A (zh) * 2021-01-26 2021-06-04 北京顶象技术有限公司 基于汇编代码的漏洞检测方法、装置和电子设备
CN112905374A (zh) * 2021-02-08 2021-06-04 烽火通信科技股份有限公司 一种提高嵌入式软件健壮性的方法与装置
CN113987517A (zh) * 2021-11-03 2022-01-28 北京天融信网络安全技术有限公司 基于物联网固件的漏洞挖掘方法、装置、设备及存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070083933A1 (en) * 2005-10-07 2007-04-12 Microsoft Corporation Detection of security vulnerabilities in computer programs
CN108256335A (zh) * 2018-02-08 2018-07-06 北京百度网讯科技有限公司 用于检测漏洞的方法和装置
CN109871693A (zh) * 2019-02-21 2019-06-11 北京百度网讯科技有限公司 用于检测漏洞的方法和装置

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070083933A1 (en) * 2005-10-07 2007-04-12 Microsoft Corporation Detection of security vulnerabilities in computer programs
CN108256335A (zh) * 2018-02-08 2018-07-06 北京百度网讯科技有限公司 用于检测漏洞的方法和装置
CN109871693A (zh) * 2019-02-21 2019-06-11 北京百度网讯科技有限公司 用于检测漏洞的方法和装置

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112149136A (zh) * 2020-09-23 2020-12-29 北京顶象技术有限公司 loT设备固件漏洞的检测方法、系统及电子设备
CN112906004A (zh) * 2021-01-26 2021-06-04 北京顶象技术有限公司 基于汇编代码的漏洞检测方法、装置和电子设备
CN112905374A (zh) * 2021-02-08 2021-06-04 烽火通信科技股份有限公司 一种提高嵌入式软件健壮性的方法与装置
CN113987517A (zh) * 2021-11-03 2022-01-28 北京天融信网络安全技术有限公司 基于物联网固件的漏洞挖掘方法、装置、设备及存储介质
CN113987517B (zh) * 2021-11-03 2024-07-23 北京天融信网络安全技术有限公司 基于物联网固件的漏洞挖掘方法、装置、设备及存储介质

Also Published As

Publication number Publication date
CN110502423B (zh) 2023-07-18

Similar Documents

Publication Publication Date Title
CN110502423A (zh) 固件的漏洞识别方法、装置、设备和存储介质
CN108985064B (zh) 一种识别恶意文档的方法及装置
Zhu et al. Android malware detection based on multi-head squeeze-and-excitation residual network
CN104021467A (zh) 保护移动终端支付安全的方法和装置以及移动终端
CN112231702B (zh) 应用保护方法、装置、设备及介质
CN109614203B (zh) 一种基于应用数据仿真的安卓应用云数据取证分析系统及方法
CN104346550A (zh) 一种信息处理方法以及一种电子设备
CN112966713A (zh) 基于深度学习的dga域名检测方法、装置及计算机设备
CN111124421B (zh) 区块链智能合约的异常合约数据检测方法和装置
CN106874758A (zh) 一种识别文档代码的方法和装置
CN115964684A (zh) 检测电子档案元数据真实性的方法、系统、设备及介质
CN113326045B (zh) 基于设计文件的界面代码生成方法
US10841099B2 (en) Method for generating a digital signature
KR101833220B1 (ko) 애플리케이션 코드의 역난독화 검증 장치 및 이를 이용한 애플리케이션 코드의 역난독화 검증 방법
EP3510557B1 (en) Image processing system for verification of rendered data
CN109522683A (zh) 软件溯源方法、系统、计算机设备及存储介质
CN110727576B (zh) 一种web页面测试方法、装置、设备及存储介质
CN111143858B (zh) 数据检查方法及装置
CN114996708B (zh) 涉诈手机应用研判方法、装置、电子设备及存储介质
CN106372523A (zh) 一种modem文件安全保护方法及系统
CN110968860A (zh) 应用账号的安全验证方法、计算机设备及计算机可读存储介质
CN115688107A (zh) 一种涉诈app检测系统和方法
Pevný et al. Malicons: Detecting payload in favicons
CN114023331A (zh) 声纹识别系统的性能检测方法、装置、设备和存储介质
Kissner Hacking neural networks: A short introduction

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