基于模糊匹配的固件函数相似性检测方法及系统

文档序号:26050899发布日期:2021-07-27 15:25阅读:186来源:国知局
基于模糊匹配的固件函数相似性检测方法及系统
本发明属于物联网设备安全
技术领域
,特别涉及一种基于模糊匹配的固件函数相似性检测方法及系统。
背景技术
:当今世界软件是无处不在,日常生活中随处可见的设备,如路由器、打印机、摄像头甚至儿童手表中都有软件的存在。开源社区是一个公布软件源代码的网络平台,在社区中有各种功能的开源代码,软件开发人员为了节省时间和精力,会从社区中寻找所需要的功能代码进行重用。这种代码重用现象在软件开发领域十分常见,但代码重用是一把双刃剑,在缩短软件开发周期,为社会和个人带来社会效益和商业利益的同时,也增加了潜在风险,易受攻击的代码可能被应用于任何程序中,加速了漏洞的传播。openssl中的心脏流血漏洞(heartbleedbug)是影响最大的代码重用事件之一,google、yahoo、youtube、百度等大公司都受其影响,因为大多数网站的服务器中都使用了包含该漏洞的openssl版本进行加密。代码重用现象在物联网领域也很普遍,它带来的危害更加严重。近年来,接入互联网的嵌入式设备呈指数倍增加,据strategyanalytics公司最新研究报告显示,2018年底,全球联网设备数量约为70亿台,到2025年,联网设备的总数量预计将达到220亿台。物联网的目标是将连接从标准计算机扩展到每一个物理设备,它为互联网的发展增添了新的维度。然而,随着物联网设备高速扩张和无处不在的部署,大量潜在的敏感目标也暴露在外部世界。与快速增长的物联网设备相比,物联网安全防护技术的发展相对缓慢,针对物联网设备的攻击呈现逐年递增趋势,危害范围也越来越大,物联网领域的安全形势不容乐观。二进制代码相似性分析是代码重用的一个重要应用,在海量二进制程序中查找与指定代码语义等价的相似代码,该技术在恶意代码检测、漏洞挖掘、软件剽窃检测等领域已经成功应用,并发挥着巨大作用。近年来随着计算能力的提升和硬件支持的发展,该技术被引入到物联网安全领域,并取得了一定的成果。在物联网安全领域,二进制代码相似性分析的目标是设备固件,ieee把固件定义为“硬件设备以及作为只读软件驻留在设备中的计算机指令和数据的集合”。固件中包含了设备的大部分代码,包括设备内核代码、文件系统、功能代码等,联网设备的安全漏洞大多出现在固件代码中,固件的安全性在一定程度上可以反映出设备的安全性。因此,亟需一种漏洞检测方案来满足物联网固件应用安全需求。技术实现要素:为此,本发明提供一种基于模糊匹配的固件函数相似性检测方法及系统,针对基于机器学习的代码相似性分析方法中存在的模型实现复杂、扩展性弱、无法定位固件补丁等不足,可以根据已知漏洞判断固件是否存在相似漏洞,并可实现在无脆弱性函数详细信息情况下的补丁定位。按照本发明所提供的设计方案,提供一种基于模糊匹配的固件函数相似性检测方法,包含如下内容:对待比较固件二进制文件进行解析提取固件元信息和函数特征;针对固件函数特征,利用simhash生成用于计算不同函数之间hamming距离的simhash值,并根据hamming距离度量函数之间相似度;依据相似度对函数基本块进行语义等价性和转移关系分析,依据块内和块间相似度定位固件漏洞位置。作为本发明基于模糊匹配的固件函数相似性检测方法,进一步地,针对待比较的固件二进制文件,利用文件分析工具对固件二进制文件进行初步解析获取固件元信息,该元信息至少包含固件处理器架构、操作系统及文件系统信息。作为本发明基于模糊匹配的固件函数相似性检测方法,进一步地,利用二进制分析工具提取固件二进制文件中的固件函数控制流特征和数据依赖图特征。作为本发明基于模糊匹配的固件函数相似性检测方法,进一步地,利用ida插件工具提取固件函数控制流特征,利用angr工具提取固件函数数据依赖图特征。作为本发明基于模糊匹配的固件函数相似性检测方法,进一步地,利用simhash生成每一个函数特征的simhash值,利用抽屉原理对函数特征simhash值进行存储和查询。作为本发明基于模糊匹配的固件函数相似性检测方法,进一步地,针对固件函数每个特征,利用特征选择算法赋予不同的权重,将所有加权特征相加获取加权特征序列,并通过对加权特征序列进行降维获取固件函数的simhash值。作为本发明基于模糊匹配的固件函数相似性检测方法,进一步地,将基本块内指令转换为中间表示,并通过符号执行和约束求解判断基本块之间的语义等价性。作为本发明基于模糊匹配的固件函数相似性检测方法,进一步地,对基本块间转移关系分析中,遍历固件函数控制流图所有路径,将基本块所在的局部控制流图用字符串表示,通过比较字符串相似性获取基本块间相似度。作为本发明基于模糊匹配的固件函数相似性检测方法,进一步地,利用cityhash来获取基本块所在的局部控制流图字符串哈希值,通过比较不同基本块间的哈希值来获取基本块间相似度。进一步地,本发明还提供一种基于模糊匹配的固件函数相似性检测系统,包含:文件解析模块、特征分析模块和检测定位模块,其中。文件分析模块,用于对待比较固件二进制文件进行解析提取固件元信息和函数特征;特征分析模块,用于针对固件函数特征,利用simhash生成用于计算不同函数之间hamming距离的simhash值,并根据hamming距离度量函数之间相似度;检测定位模块,用于依据相似度对函数基本块进行语义等价性和转移关系分析,依据块内和块间相似度定位固件漏洞位置。本发明的有益效果:本发明利用simhash技术进行固件函数相似性分析,可以实现固件函数的大规模安全检查,并进行基本块级相似性分析,实现在无脆弱性函数详细信息情况下的固件补丁定位;在函数控制流图的技术上,通过提取数据依赖图中的数据流特征,丰富固件代码特征,更全面的表达固件函数,并利用relieff的特征赋权算法,根据特征重要程度赋予不同权值,弥补机器学习方法模型训练带来时间开销过大的不足,为提高物联网设备安全性提供帮助,具有较好的应用前景。附图说明:图1为实施例中基于模糊匹配的固件函数相似性检测方法流程示意;图2为实施例中固件多维特征示意;图3为实施例中relieff算法特征赋权示意;图4为实施例中固件相似性检测算法流程示意;图5为实施例中固件函数生成simhash原理示意;图6为实施例中基本块指令图示意;图7为实施例中基本块指令ir图示意;图8为实施例中输入输出符号表示图示意。具体实施方式:为使本发明的目的、技术方案和优点更加清楚、明白,下面结合附图和技术方案对本发明作进一步详细的说明。本发明实施例,提供一种基于模糊匹配的固件函数相似性检测方法,参见图1所示,包含如下内容:s101、对待比较固件二进制文件进行解析提取固件元信息和函数特征;s102、针对固件函数特征,利用simhash生成用于计算不同函数之间hamming距离的simhash值,并根据hamming距离度量函数之间相似度;s103、依据相似度对函数基本块进行语义等价性和转移关系分析,依据块内和/或块间相似度定位固件漏洞位置。利用simhash技术进行固件函数相似性分析,并通过基本块级相似性,分析弥补机器学习方法模型训练带来时间开销过大的不足,可以实现固件函数的大规模安全检查,并进行基本块级相似性分析,实现在无脆弱性函数详细信息情况下的固件补丁定位,为提高物联网设备安全性提供帮助。进一步地,针对待比较的固件二进制文件,可利用binwalk对固件进行初步分析,得到固件处理器架构、操作系统等基本信息,并解压固件得到固件的文件系统。并进一步,利用ida、angr等二进制分析工具,对固件中重要的二进制文件进行进一步分析,提取有用的固件函数特征。为了更加全面的表示固件函数,需要提取多维度固件函数特征。利用ida从固件函数中提取了50个控制流特征,可以比较完备的表示一个固件函数的控制流属性,在此基础上,利用angr从固件函数中提取5个数据特征,综合控制特征和数据特征可以更好的表示固件函数。共提取了55个固件函数多维度特征,如图2所示。不同的固件函数特征在相似性分析中发挥的作用不同,如果为每个特征分配相同的权重则会导致分析准确率降低。设计了基于relieff算法的固件函数特征赋权算法,如图3所示,计算所获取控制特征和数据特征的权重。作为本发明实施例中基于模糊匹配的固件函数相似性检测方法,进一步地,利用simhash生成每一个函数特征的simhash值,利用抽屉原理对函数特征simhash值进行存储和查询。进一步地,针对固件函数每个特征,利用特征选择算法赋予不同的权重,将所有加权特征相加获取加权特征序列,并通过对加权特征序列进行降维获取固件函数的simhash值。simhash生成模型可以将固件函数赋权特征映射为128位simhash值,并利用hamming距离来度量不同固件函数simhash之间的相似度,hamming距离越小相似度越高,hamming距离越大则差异性越大。固件函数样本库中函数基数很大,随着分析固件数量增多,样本库会不断增长,造成相似性分析效率下降,采用抽屉原理实现函数simhash值的海量存储和快速查询,满足固件函数大规模分析的要求。作为本发明实施例中基于模糊匹配的固件函数相似性检测方法,进一步地,将基本块内指令转换为中间表示,并通过符号执行和约束求解判断基本块之间的语义等价性。进一步地,对基本块间转移关系分析中,遍历固件函数控制流图所有路径,将基本块所在的局部控制流图用字符串表示,通过比较字符串相似性获取基本块间相似度。进一步地,利用cityhash来获取基本块所在的局部控制流图字符串哈希值,通过比较不同基本块间的哈希值来获取基本块间相似度。基本块级的细粒度相似性分析可以挖掘更多的代码特征,将不同函数基本块的指令转换为中间表示(ir),在统一的中间表示下实现对不同isa固件的块分析。利用符号执行表达基本块的输入和输出,并利用约束求解器来判断两个基本块的语义是否等价;对基本块间转移关系的相似性进行分析,计算局部cfg的cityhash64,通过比较不同基本块间的cityhash64来得到块间关系的相似度。基本块的相似性分析可以在无脆弱性函数详细信息情况下定位固件补丁的位置。进一步地,基于上述的方法,本发明实施例还提供一种基于模糊匹配的固件函数相似性检测系统,包含:文件解析模块、特征分析模块和检测定位模块,其中。文件分析模块,用于对待比较固件二进制文件进行解析提取固件元信息和函数特征;特征分析模块,用于针对固件函数特征,利用simhash生成用于计算不同函数之间hamming距离的simhash值,并根据hamming距离度量函数之间相似度;检测定位模块,用于依据相似度对函数基本块进行语义等价性和转移关系分析,依据块内和/或块间相似度定位固件漏洞位置。为验证本案方案有效性,下面结合相关算法内容做进一步解释说明:参见图4所示,输入两个待比较的固件二进制文件;利用binwalk对固件进行初步分析,得到固件处理器架构、操作系统等基本信息,并解压固件得到固件的文件系统;选择感兴趣的二进制文件,利用ida插件提取固件函数的控制流特征,利用angr提取固件函数的数据依赖图(ddg)特征;利用relieff算法计算所获取控制特征和数据特征的权重,并为不同的特征赋权;利用simhash生成模型将函数赋权特征转换为128位simhash值,并simhash值计算不同函数之间的hamming距离,利用hamming距离度量两个函数之间的相似度;对相似度在一定范围内的函数进行基本块级的分析,将基本块内的指令表示为ir,并通过符号执行和约束求解判断两个基本块的语义等价性;分析基本块的转移关系,计算基本块间局部关系的相似度,通过分析块内和块间的相似性可以定位固件补丁位置。其中,固件函数simhash相似性分析种,simhash可以用来表示固件函数,相似度高的函数将被映射到更近的地方,而相似度低的函数将被映射到更远的地方。利用ida提取固件函数的特征,然后计算函数的simhash值。simhash的计算原理如图5所示,计算过程如下:1.提取固件函数特征,如图5第二列;2.计算每一个特征的hash值,特征的hash值由128位的’0’和’1’组成,如图4第三列;3.利用relieff算法计算每一类特征的权重,如图5第四列;4.为每一类特征加上权重,加权的规则是,如果特征hash的当前位是’1’,则将当前位置为该特征的权重值;若特征hash的当前位是’0’,则将当前位置为该特征的权重值的负值。例如,特征′firmware′的哈希值为”101100001010”,权重为w1=2,那么特征′firmware′的加权为w(firmware)=101100001010·w1=w1-w1w1w1-w1-w1-w1-w1w1-w1w1w1=2-222-2-2-2-22-22-2,如图5第五列;5.将所有加权特征相加,整合到一个序列中,例如,特征′similarity′的加权值为7-7-7777-77-77-77,特征′firmware′的加权值为2-222-2-2-2-22-22-2,那么特征′firmware′和特征′similarity′的结合为99995955595555555;6.最后一步是对上一步的结果序列降维,在上一步得到的128位特征序列中,有的位大于0有的位小于0,对于大于0的位全部置1,对于小于等于0的位全部置0。例如,上一步得到的序列为9999595559555595,通过降维得到的结果为100111010111。降维后得到的就是该函数的simhash。用hamming距离来计算不同固件函数simhash之间的相似度,计算公式如下simbit(f1,f2)=hamming(simhash(f1),simhash(f2))当利用simhash进行文本比较时,hamming距离3是一个比较合适的距离点,小于等于3的认为两个文本相似,高于3认为不相似。固件函数有大有小,距离3对于基本块较多的大函数适用,但对于基本块较少的小函数不适用,实验证明,如果以距离为3作为函数相似的评判界线,误报率比较高。经过实验验证,固件函数的128位hamming距离选择7比较合适,7以内的函数相似度比较高。两个函数的相似度计算可以表示为:sim(f1,f2)=simbit(f1,f2)/128固件函数块级相似性分析中,利用simhash可以实现固件代码的高效相似性分析以及固件的大规模安全检查,但需要提前获取脆弱性函数详细信息,生成脆弱性函数的simhash。然而,很多时候无法得到脆弱性函数的详细信息,厂商也不会公布补丁信息,而且补丁代码通常很小,例如边界条件的改变、判断条件的改变等,这时cfg和cg的特征不会改变,根据simhash值无法定位补丁的位置,需要更细粒度的基本块级分析。基本块语义相似性分析可以细粒度的分析函数之间的相似性,利用符号执行的方法来表示基本块的输入和输出,并通过约束求解器来比较基本块的输出是否等价,进而判断两基本块语义是否相同。通过一个基本块实例来描述基本块语义分析的过程,图6为angr分析得到的函数控制流图中一个基本块的截图,共有14条指令。图7为该基本块中指令的中间表示,共有83个中间变量,75行代码,由于篇幅限制只列出了11行代码。图8为基本块输入和输出的符号表示。固件的处理器架构多种多样,所使用的寄存器、变量、偏移等有很多不同,中间表示将变量表示为符号的形式,可以实现固件的跨架构分析。在图6中有三个输入变量,分别是[rbp-0x20],[rbp-0x24],和[rbp-0x28],在中间表示中[rbp-0x20]被表示为中间变量t24,另外两个变量被表示为t45和t60,利用变量的符号表示在基本块中执行,将基本块的最终输出用符号来表示,在图7中输出的变量是esi和edi,在中间表示中是临时变量t74和t77,用符号表示分别是x1∧x2和3x0+x1。符号执行在实际应用过程中经常会面临路径爆炸、约束求解等挑战,但本发明是在基本块内部进行符号执行,所以不会出现这些问题,而且效率很高。当基本块中的所有变量用符号表示后,利用约束求解器来判断两个基本块是否语义等价。为两个待比较基本块提供相同的输入,待比较的基本块可能使用不同的寄存器和变量,因此无法确定为输入符号的赋值。因此,需要遍历所有的可能,以图8为例,三种符号输入,可以得到6种输出。判断是否存在一种输入,使得两个基本块的输出相同,如果存在,则两个基本块功能等价,如果无法得到这样一个输入,则两个基本块语义不等价。基本块内的语义等价分析可以判断基本块内部的功能变化,有些补丁可能不会改变基本块语义,而是改变了基本块间的判断条件或跳转路径,这时只判断基本块的语义就不能识别此类补丁。为了得到基本块路径的相似性,需要分析基本块之间的转移关系。在生成固件函数cfg控制流图时为每一个基本块按照地址进行编号,并遍历统计cfg的所有路径。将基本块所在的局部cfg用字符串表示,通过比较字符串的相似性可以得到基本块所在局部cfg的相似性。x86下调用指令为call,而arm,ppc下调用指令为bl,mips下调用指令为jal、jalr。统计基本块中调用指令统一用call来表示,则基本块的局部cfg可表示为字符串的形式。局部控制流图(lcfg)的字符串表示如表1所示。表1lcfg字符串表示项目第一列第二列第三列第四列第五列第六列字符串nodecallnum_of_fathernodefathernodenum_of_childnodechildnode表1中的第一项是基本块的索引,第二项是基本块中的调用指令,如果没有调用指令,则该项为空。第三项是第一项节点的父节点个数,第四项是父节点的索引。第五项是第一项节点的子节点个数,第六项是子节点的索引。lcfg有两层父节点和两层子节点。对于cfg的第一层节点,没有父节点,而cfg的第二层节点只有单层父节点。cfg的最后一层没有子节点,而cfg的倒数第二层只有单层子节点。每个基本块和周围节点都可以表示为如下字符串:strbbn-2-strbbn-1-strbbn-strbbn+1-strbbn+2通过对大量固件函数的分析,可以看出包含漏洞的脆弱性函数的代码量一般都比较大,基本块的数量比较多,因此在实际分析中,lcfg的字符串表示一般比较长。谷歌的cityhash64的速度很快,用于查找字符串表示的64位哈希值。通过计算jaccard距离计算两个lcfg哈希的相似度:除非另外具体说明,否则在这些实施例中阐述的部件和步骤的相对步骤、数字表达式和数值并不限制本发明的范围。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。最后应说明的是:以上所述实施例,仅为本发明的具体实施方式,用以说明本发明的技术方案,而非对其限制,本发明的保护范围并不局限于此,尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本
技术领域
的技术人员在本发明揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的精神和范围,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1