首页 / 专利库 / 企业组织 / 流程图 / 一种面向嵌入式设备的固件漏洞检测方法及系统

一种面向嵌入式设备的固件漏洞检测方法及系统

阅读:183发布:2020-09-10

专利汇可以提供一种面向嵌入式设备的固件漏洞检测方法及系统专利检索,专利查询,专利分析的服务。并且本 发明 提出了一种面向嵌入式设备的 固件 漏洞检测方法及系统,涉及嵌入式设备固件的漏洞挖掘与分析。本发明可利用固件中的函数之间的关联性,将已挖掘到的固件漏洞自动扩散到其他固件。其方法流程主要包括:固件爬取与漏洞收集,设备信息提取,固件的解码与反汇编,函数的指纹提取与匹配以及漏洞验证等步骤。本发明通过属性计数型指纹配合结构度量型指纹的方法兼顾了匹配的速度与 精度 ,同时所用到的指纹特征均具有跨编译器和跨处理器平台的特性,因此保证了匹配时的强鲁棒性。,下面是一种面向嵌入式设备的固件漏洞检测方法及系统专利的具体信息内容。

1.一种面向嵌入式设备的固件漏洞检测方法,包括以下步骤:
1)收集嵌入式设备的固件并存入到固件库;
2)对收集到的固件进行设备信息识别,得到该固件的编码算法和使用的指令集;
3)对固件进行解码与反汇编得到固件的汇编函数,并提取漏洞函数的函数指纹;
4)将固件函数指纹与提取得到的已知漏洞的漏洞函数指纹进行逐一匹配,将函数相似度大于设定阈值的固件函数指纹对应的函数作为疑似漏洞函数;
5)对疑似漏洞函数进行漏洞验证,完成面向嵌入式设备的固件漏洞检测。
2.如权利要求1所述的面向嵌入式设备的固件漏洞检测方法,其特征在于,步骤1)中收集嵌入式设备的固件的方法包括:利用网页爬虫定期爬取各厂家在其固件更新网站上公开的固件。
3.如权利要求1所述的面向嵌入式设备的固件漏洞检测方法,其特征在于,步骤2)包括在已有的知识库对收集到的固件进行设备信息识别,查询得到该固件的编码算法和使用的指令集;或者对收集得到的固件的编码算法和使用的指令集进行自动识别后,将该固件的设备信息连同对应的编码算法和指令集存入知识库中;所述知识库中包括厂家产品系列与编码算法指令集间的映射关系。
4.如权利要求3所述的面向嵌入式设备的固件漏洞检测方法,其特征在于,步骤3)中,利用同厂商同产品系列的固件编码与使用指令集的延续性,结合已有的知识库来选择解码算法和反汇编软件对固件进行解码和反汇编。
5.如权利要求1所述的面向嵌入式设备的固件漏洞检测方法,其特征在于,步骤3)和
4)中,所述函数指纹包括属性计数型指纹和结构度量型指纹,所述属性计数型指纹是指从函数程序中提取出数个软件度量特征,计算每个函数的n个不同的软件度量指标,将程序映射到一个n维的笛卡尔空间,然后利用向量空间模型来度量程序代码的相似性;所述结构度量型指纹是指通过对函数的指令序列、函数内部代码结构、函数外部调用关系结构进行特征向量提取,并针对每个特征向量选用相应的匹配算法来计算相似性,然后将各个特性向量上的相似性进行加权相加得到函数的整体相似性。
6.如权利要求5所述的面向嵌入式设备的固件漏洞检测方法,其特征在于,所述属性计数指纹包括:函数容量、函数栈大小、函数变量读写次数、函数控制流图的圈复杂度、函数在调用链中的深度;所述结构度量型指纹包括:去除依赖关系后的抽象操作码序列、函数控制流程图、函数调用图。
7.如权利要求5所述的面向嵌入式设备的固件漏洞检测方法,其特征在于,步骤4)中,首先使用属性计数型指纹对匹配函数进行筛选,然后使用结构度量型指纹对筛选后的函数进行深度匹配得到最终的函数相似度。
8.一种面向嵌入式设备的固件漏洞检测系统,包括:
固件收集模块,用于收集嵌入式设备的固件并存入到固件库;
设备信息识别模块,用于识别收集得到的固件的设备信息,得到该固件的编码算法和使用的指令集;以及将固件的设备信息连同对应的编码算法和指令集存入知识库;
固件解码与反汇编模块,用于对固件进行解码与反汇编得到固件的汇编函数;
函数指纹提取与匹配模块,用于提取汇编函数的函数指纹,将其存入到固件函数指纹库中;用于提取漏洞函数的函数指纹,并将其存入到漏洞函数指纹库中;以及用于将漏洞函数指纹与固件函数指纹进行逐一匹配,将函数相似度大于设定阈值的固件函数指纹对应的函数存入疑似漏洞库;
漏洞验证模块,用于对疑似漏洞库中的漏洞函数进行漏洞验证,将验证成功的函数存入到漏洞库。
9.如权利要求8所述的面向嵌入式设备的固件漏洞检测系统,其特征在于,还包括漏洞收集模块和漏洞函数定位模块,所述漏洞收集模块,用于挖掘和搜集到已知漏洞并存入漏洞库;所述漏洞函数定位模块,用于对漏洞库中的漏洞进行漏洞分析,定位到触发漏洞的漏洞函数。
10.如权利要求8所述的面向嵌入式设备的固件漏洞检测系统,其特征在于,所述固件解码与反汇编模块还包括解码子模块和固件反汇编子模块,所述解码子模块用于将固件的压缩算法经过解码框架处理后得到二进制代码并保存到二进制代码库;所述固件反汇编子模块用于从二进制代码库中取出二进制代码,然后输入到一个反汇编框架中进行反汇编,并将经过反汇编处理后的信息输出到汇编代码库。

说明书全文

一种面向嵌入式设备的固件漏洞检测方法及系统

技术领域

[0001] 本发明涉及漏洞挖掘与分析领域,具体涉及一种面向嵌入式设备的固件漏洞检测方法及系统。

背景技术

[0002] 随着物联网和工业4.0的稳步推进,嵌入式设备被广泛应用在生产和生活之中,并且发挥着越来越重要的作用。然而,由于传统的嵌入式设备厂商普遍缺乏安全意识,近年来有关嵌入式固件的漏洞不断被曝光。这些漏洞涉及的设备包括工业控制器、安防摄像头、路由器、数字电话、汽车控制器等。由嵌入式固件漏洞而引发的安全事件也不断被报导。目前针对嵌入式设备的漏洞挖掘方法主要是靠人工对某特定设备的固件进行挖掘。但是由于代码的模化设计和开源共享等原因,嵌入式固件漏洞有着强关联的特点,即存在于某固件中的某函数的漏洞往往也会存在于其他固件中。目前缺少一种利用固件中的函数之间的关联性,将已挖掘到的固件漏洞自动扩散到其他固件的方法。

发明内容

[0003] 有鉴于此,本发明致于提供一种面向嵌入式设备的固件漏洞检测方法及系统。
[0004] 本发明涉及的方法流程主要包括:固件收集与漏洞挖掘,设备信息提取,固件的解码与反汇编,函数的指纹提取与匹配以及漏洞验证等步骤。本发明的技术创新点在于通过属性计数型指纹配合结构度量型指纹的方法兼顾了匹配的速度与精度,同时所用到的指纹特征均具有跨编译器和跨处理器平台的特性,因此保证了匹配时的强鲁棒性。
[0005] 为了实现上述目的,本发明采用以下技术方案:
[0006] 一种面向嵌入式设备的固件漏洞检测方法,包括以下步骤:
[0007] 1)收集嵌入式设备的固件并存入到固件库;
[0008] 2)对收集到的固件进行设备信息识别,得到该固件的编码算法和使用的指令集;
[0009] 3)对固件进行解码与反汇编得到固件的汇编函数,并提取汇编函数的函数指纹;
[0010] 4)将固件函数指纹与提取得到的已知漏洞的漏洞函数指纹进行逐一匹配,将函数相似度大于设定阈值的固件函数指纹对应的函数作为疑似漏洞函数;
[0011] 5)对疑似漏洞函数进行漏洞验证,完成面向嵌入式设备的固件漏洞检测。
[0012] 进一步地,步骤1)中收集嵌入式设备的固件的方法包括:利用网页爬虫定期爬取各厂家在其固件更新网站上公开的固件。
[0013] 进一步地,步骤2)包括在已有的知识库对收集到的固件进行设备信息识别,查询得到该固件的编码算法和使用的指令集;或者对收集得到的固件的编码算法和使用的指令集进行自动识别后,将该固件的设备信息连同对应的编码算法和指令集存入知识库中;所述知识库中主要保存了厂家产品系列与编码算法指令集间的映射关系。
[0014] 进一步地,所述设备信息包括厂家信息,产品信息,固件版本号等。
[0015] 进一步地,步骤3)中,利用同厂商同产品系列的固件编码与使用指令集的延续性,结合已有的知识库来选择解码算法和反汇编软件对固件进行解码和反汇编。
[0016] 进一步地,步骤3)和4)中,所述函数指纹包括属性计数型指纹和结构度量型指纹,所述属性计数型指纹是指从函数程序中提取出数个软件度量特征,计算每个函数的n个不同的软件度量指标,以便将程序映射到一个n维的笛卡尔空间,然后利用向量空间模型来度量程序代码的相似性;所述结构度量型指纹是指通过对函数的指令序列、函数内部代码块结构、函数外部调用关系结构进行特征向量提取,并针对每个特征向量选用相应的匹配算法来计算相似性,然后将各个特性向量上的相似性进行加权相加得到函数的整体相似性。
[0017] 进一步地,所述属性计数指纹包括但不限于:函数容量、函数栈大小、函数变量读写次数、函数控制流图(CFG)的圈复杂度、函数在调用链中的深度等。所述结构度量型指纹包括但不限于:去除依赖关系后的抽象操作码序列、函数控制流程图(CFG)、函数调用图(CG)等。
[0018] 进一步地,步骤4)中,首先使用属性计数型指纹对匹配函数进行筛选,然后使用结构度量型指纹对筛选后的函数进行深度匹配得到最终的函数相似度。
[0019] 一种面向嵌入式设备的固件漏洞检测系统,包括:
[0020] 固件收集模块,用于收集嵌入式设备的固件并存入到固件库;
[0021] 设备信息识别模块,用于识别收集得到的固件的设备信息,得到该固件的编码算法和使用的指令集;以及将固件的设备信息连同对应的编码算法和指令集存入知识库;
[0022] 固件解码与反汇编模块,用于对固件进行解码与反汇编得到固件的汇编函数;
[0023] 函数指纹提取与匹配模块,用于提取汇编函数的函数指纹,将其存入到固件函数指纹库中;用于提取漏洞函数的函数指纹,并将其存入到漏洞函数指纹库中;以及用于将漏洞函数指纹与固件函数指纹进行逐一匹配,将函数相似度大于设定阈值的固件函数指纹对应的函数存入疑似漏洞库;
[0024] 漏洞验证模块,用于对疑似漏洞库中的漏洞函数进行漏洞验证,将验证成功的函数存入到漏洞库。
[0025] 进一步地,上述系统还包括漏洞收集模块和漏洞函数定位模块,所述漏洞收集模块,用于挖掘和搜集到已知漏洞并存入漏洞库;所述漏洞函数定位模块,用于对漏洞库中的漏洞进行漏洞分析,定位到触发漏洞的漏洞函数。
[0026] 进一步地,上述固件解码与反汇编模块还包括解码子模块和固件反汇编子模块,所述解码子模块用于将固件的压缩算法经过解码框架处理后得到二进制代码并保存到二进制代码库;所述固件反汇编子模块用于从二进制代码库中取出二进制代码,然后输入到一个反汇编框架中进行反汇编,并将经过反汇编处理后的信息输出到汇编代码库。
[0027] 本发明的有益效果如下:
[0028] 由于嵌入式系统中使用的处理器和编译器种类繁多,而且大多数使用的是RISC精简指令集,指令顺序容易被编译器进行打乱优化,综上,嵌入式固件中的函数体现出了比PC端软件更多的异构性。本发明通过提取函数中跨编译器和跨处理器平台的特征作为函数指纹,克服了上述异构性带来的挑战。
[0029] 本发明采用先进行属性计数型指纹匹配然后进行结构度量型指纹匹配的方法提高了指纹匹配的速度和精度。
[0030] 本发明可利用固件中的函数之间的关联性,将已挖掘到的固件漏洞自动扩散到其他固件。附图说明
[0031] 图1为本发明中的方法总体流程框图
[0032] 图2为本发明中的基于先验知识库的固件解码和反汇编流程示意图;
[0033] 图3为本发明中的属性计数型指纹和结构度量性指纹的提取和匹配流程示意图;
[0034] 图4为本发明中的系统结构框架图;
[0035] 图5为本发明系统中固件收集流程示意图;
[0036] 图6为本发明从固件库中识别设备信息的流程示意图;
[0037] 图7为本发明对二进制代码进行反汇编处理的流程示意图。

具体实施方式

[0038] 下面结合具体实施例对本发明进行详细说明。
[0039] 该方法的总体框图如图1所示。包括:
[0040] a)利用网页爬虫定期爬取各厂家在其固件更新网站上公开的固件,并存入到固件库;
[0041] b)对固件库中的固件进行设备信息识别,若该固件的设备信息不在知识库中,则继续步骤c),否则从知识库中查询得到该固件的编码算法和使用的指令集后跳转到步骤d);
[0042] 同厂家同产品系列的嵌入式设备往往具有相同的编码算法,拥有相同的处理器,使用相同的指令集。知识库中主要保存了厂家产品系列与编码算法指令集间的映射关系。
[0043] c)对收集得到的固件的编码算法和使用的指令集进行自动识别,并将该固件的设备信息连同对应的编码算法和指令集存入知识库中;
[0044] d)对其进行解码与反汇编得到固件的汇编函数;
[0045] e)提取汇编函数的函数指纹,并将其存入到固件函数指纹库中;
[0046] 提取汇编函数函数指纹的方法采用公知技术手段便可实现,即通过分析反汇编软件(IDA)的输出文件来提取函数指纹。
[0047] f)将挖掘和搜集到的已知漏洞(如0day漏洞)存入漏洞库中;
[0048] g)对漏洞库中的漏洞进行漏洞分析,定位到触发漏洞的漏洞函数;
[0049] 漏洞分析与定位漏洞函数采用的公知技术手段便可实现,即:通过二进制补丁分析的方法将漏洞定位到某个函数。
[0050] h)提取漏洞函数的函数指纹,并将其存入到漏洞函数指纹库中;
[0051] i)将漏洞函数指纹与固件函数指纹进行逐一匹配,若相似度大于设定的阈值则将固件函数指纹对应的函数存入疑似漏洞库中;
[0052] 属性计数型函数指纹的一种定义方式为:
[0053] AF={CodeLen,FrameSize,DataRf,CalltoNum,CallfromNum,CycComplex}[0054] 式中CodeLen为函数代码长度,FrameSize为函数栈帧大小,DataRf为数据引用的数量,CalltoNum为调用其他函数的数量,CallfromNum为被其他函数所调用的数量,CycComplex为函数的圈复杂度。
[0055] 结构度量型函数指纹的一种定义方式为:
[0056] SF={CFG,CF,StrRf}
[0057] 式中CFG为函数的控制流程图,CF为函数的调用图,StrRf为函数中所引用的字符串。
[0058] 例如,计算出固件函数A与漏洞函数B的属性计数型指纹的相似度Sim_af=0.88。计算出函数A与函数B的结构度量型指纹的相似度Sim_sf=0.76。综合相似度Sim=0.5*Sim_af+0.5*Sim_sf=0.82。相似度阈值设为δ=0.8。在该实例下Sim>δ,所以需要将该函数A存入疑似漏洞库中。
[0059] j)对疑似漏洞库中的漏洞函数进行漏洞验证,若验证成功则存入到漏洞库中。
[0060] 漏洞验证过程采用公知技术手段便可实现,即:通过判断针对该漏洞函数的漏洞利用代码是否有效来进行漏洞验证。如果有效则验证成功,否则验证失败。
[0061] 本发明在进行固件解码与反汇编时利用了同厂商同产品系列的固件编码与使用指令集的延续性,结合知识库中的已有的先验知识来选择解码算法和反汇编模块对固件进行自动解码和反汇编。相应的工作流程如图2所示。
[0062] 函数的属性计数型指纹是指从函数程序中提取出数个软件度量特征,计算每个函数的n个不同的软件度量指标,以便将程序映射到一个n维的笛卡尔空间,然后利用向量空间模型来度量程序代码的相似性。属性计数型指纹具有匹配速度快的特点,但准确性较差。本发明使用该指纹对待匹配的函数样本进行初步筛选,排除掉相似度低于设定阈值的函数,高于阈值的函数进入结构度量型指纹匹配阶段。
[0063] 函数的结构度量型指纹是指通过对函数的指令序列、函数内部代码块结构、函数外部调用关系结构进行特征向量提取,并针对每个特征向量选用相应的匹配算法来计算相似性,然后将各个特性向量上的相似性进行加权相加得到函数的整体相似性。结构度量型指纹具有匹配精度高的特点,但匹配速度较慢。本发明使用该指纹对经过筛选后的样本函数进行结构度量型指纹匹配,得到最终的函数相似性。
[0064] 由于嵌入式系统中使用的处理器和编译器种类繁多,而且大多数使用的是RISC精简指令集,指令顺序容易被编译器进行打乱优化,综上,嵌入式固件中的函数体现出了比PC端软件更多的异构性。本发明通过提取函数中跨编译器和跨处理器平台的特征作为函数指纹,克服了上述异构性带来的挑战。整个指纹提取和匹配流程如图3所示。
[0065] 本发明的系统结构图如图4所示,主要包括:固件收集模块,漏洞收集模块,设备信息识别模块,固件解码与反汇编模块,漏洞函数定位模块,函数指纹提取与匹配模块以及漏洞验证模块。其中:
[0066] 该实例中的固件收集模块包括一个使用名为pyspider的开源爬虫软件和一个用户提交界面,收集后的固件存储在固件库中,如图4所示。
[0067] 嵌入式固件通常通过采用某种压缩算法进行压缩处理,“解码”是指使用对应该压缩算法的解码算法进行解压。该实例中的设备信息识别和解码模块以Binary Analysis Toolkit(二进制代码分析套件)为核心。通过插件的方式,扩展对新的解码算法的支持,以及对设备信息识别的支持。经过解码框架处理后得到的二进制代码输出给固件反汇编框架。由设备信息识别插件识别到的设备信息输出到知识库中,如图5所示。
[0068] 该实例中的固件反汇编模块从二进制代码库中取出二进制代码,然后输入到一个反汇编框架中进行反汇编。该反汇编框架以IDA为核心,通过IDC或Python脚本插件的方式扩展处理器模块和辅助功能模块(如:函数基址定位、加载基址定位、符号表关联与去匿名化等)。经过反汇编处理后的信息输出到汇编代码库中,如图6所示。
[0069] 该实例中使用的属性计数型指纹包括函数容量、函数栈帧大小、函数变量读写次数、函数控制流图(CFG)的圈复杂度、函数在调用链中的深度。
[0070] 其中:
[0071] 函数容量定义为:V=N log2n,式中N为函数中的指令总数,n为函数中出现的指令的种类数;
[0072] 函数栈帧大小指的是函数局部变量和函数参数的总大小;
[0073] 函数控制流程图(CFG)的圈复杂度是一种为程序逻辑复杂性提供定量测度的软件度量方法,用于计算程序的基本的独立路径数目,该方法首先将程序代码转换为一个带有唯一入口和出口结点的控制流图,在程序控制流程图中,节点表示程序中一个顺序代码单元,边表示程序中的分支。一个有e条边和n个节点的控制流程图G,其圈复杂度定义为V(G)=e-n+2p式中:p=控制流图中的模块数,圈复杂度越大代表程序逻辑越复杂。
[0074] 函数在调用链的深度表征了该函数所处的层次。若深度低,则该函数可能是上层应用函数,若深度深,则该函数可能是底层api函数。
[0075] 该实例中使用的结构度量型指纹包括:去除依赖关系后的抽象操作码序列、函数控制流程图(CFG)、函数调用图(CG)。
[0076] 函数调用图(CG:call graph):函数调用图描述了函数之间的调用关系,并以有向图的形式进行表达,有向图的节点为函数,有向图边的始点为作为调用方的函数,有向图边的终点为作为被调用方的函数。
[0077] 函数控制流程图(CFG:control flow graph):函数控制流程图描述了函数内部连续程序块的传递和流向,并以有向图的形式进行表达,有向图的节点为连续程序块,有向图的边表示程序块的流向。
[0078] 其中:
[0079] 去除依赖关系后的抽象操作码序列指的是将无依赖关系的连续指令操作码按照字典顺序生成一个偏序,而有依赖关系的指令保持原顺序,然后将指令分布情况作为函数特征向量,以此来解决函数指令乱序的问题。另外这里所说的抽象指令是指将不同处理器平台的指令进行抽象统一(例如数据加载指令,调用指令等),目的是屏蔽不同处理器平台的机器码不一致的问题。还有使用操作码而不用操作数的原因是操作数非常容易变化。
[0080] 综上所述,本发明公开了一种面向嵌入式设备的固件漏洞检测方法及系统。上面描述的应用场景和实施例,并非用于限定本发明,任何本领域技术人员,在不脱离本发明的精神和范围内,可做各种的更动和润饰,因此本发明的保护范围视权利要求范围所界定。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈