一种固件安全分析的方法及装置与流程

文档序号:22796798发布日期:2020-11-04 03:50阅读:147来源:国知局
一种固件安全分析的方法及装置与流程
本发明涉及固件安全测试
技术领域
,尤其涉及一种固件安全分析的方法及装置。
背景技术
:在vxworks(实时操作系统)设备的安全研究中,安全测试前不提供实体设备,看能否通过静态分析的方法来测试设备的固件安全性,从而测试设备固件中的安全问题。对于很多vxworks设备由于各种原因(价格昂贵,渠道问题,运输不便等)不容易获取到,但是固件可以很容易获取到的,这就需要在没有实体设备的条件下进行vxworks设备的静态安全分析。但是vxworks设备的固件静态分析一直是安全研究中的难点,由于vxworks固件相对于其他小型的嵌入式设备的固件相对较大,因此,需要一种快速准确的方法定位固件中的安全问题。技术实现要素:本发明提供了一种固件安全分析的方法及装置,可以实现无需实体设备的情况下,快速识别固件的安全风险,提高设备安全测试的效率,降低安全测试的成本。第一方面,本发明提供了一种固件安全分析的方法,包括:获取固件的内核文件;使用预设的不同架构对应的反汇编引擎对所述内核文件进行反汇编处理,确定出对所述内核文件进行反汇编的反汇编引擎;使用所述对所述内核文件进行反汇编的反汇编引擎对所述内核文件进行反汇编,得到所述内核文件的汇编代码;根据预设的特征码从所述固件的符号表中确定出符号名称、符号名称对应的字符串内存地址以及符号的代码地址;并根据所述字符串内存地址和固件偏移地址,确定出所述固件的加载地址;使用所述符号名称、所述固件的加载地址和所述对所述内核文件进行反汇编的反汇编引擎,进行符号修复,得到修复后的函数名称;根据所述修复后的函数名称、所述内核文件的汇编代码和预设的函数名称与风险点的对应关系,确定出存在安全风险的函数名称的代码位置以及调用所述存在安全风险的函数名称的代码位置。上述技术方案中,通过对固件进行反汇编的方式得到固件的汇编代码,然后从固件的符号表中找到符号名称,进而再依据预设的函数名称与风险点的对应关系,可以快速的确定出固件的汇编代码中存在安全风险的位置,从而实现了在无需测试设备的情况下,快速的识别测试设备的安全风险点,提高了风险测试的效率。可选的,所述使用预设的不同架构对应的反汇编引擎对所述内核文件进行反汇编处理,确定出对所述内核文件进行反汇编的反汇编引擎,包括:使用预设的不同架构对应的反汇编引擎对所述内核文件进行反汇编处理,得到每个架构对应的汇编指令块;将汇编指令块的数量最大的架构,确定为所述固件的架构;将所述汇编指令块的数量最大的架构对应的反汇编引擎,确定为所述对所述内核文件进行反汇编的反汇编引擎。可选的,所述根据所述字符串内存地址和固件偏移地址,确定出所述固件的加载地址,包括:将所述字符串内存地址和固件偏移地址的差值,确定为所述固件的加载地址。可选的,所述使用所述符号名称、所述固件的加载地址和所述对所述内核文件进行反汇编的反汇编引擎,进行符号修复,得到修复后的函数名称,包括:使用所述对所述内核文件进行反汇编的反汇编引擎依据所述固件的加载地址和所述符号名称,编写出根据符号表进行修复符号的代码,得到修复后的函数名称。可选的,所述根据所述修复后的函数名称、所述内核文件的汇编代码和预设的函数名称与风险点的对应关系,确定出存在安全风险的函数名称的代码位置以及调用所述存在安全风险的函数名称的代码位置,包括:根据所述函数名称从所述预设的函数名称与风险点的对应关系,确定出存在安全风险的函数名称;根据所述存在安全风险的函数名称,遍历所述汇编代码和所述修复后的函数名称的代码,确定出所述存在安全风险的函数名称的代码位置以及调用所述存在安全风险的函数名称的代码位置。可选的,所述方法还包括:根据所述符号名称查找所述汇编代码中所述固件升级的代码;若所述固件升级的代码不存在签名校验逻辑,则确定所述固件存在安全风险;查找所述汇编代码中存在空指针引用的代码位置;提取所述固件的版本号,确定所述固件是否存在版本过时风险。第二方面,本发明实施例提供一种固件安全分析的装置,包括:获取单元,用于获取固件的内核文件;处理单元,用于使用预设的不同架构对应的反汇编引擎对所述内核文件进行反汇编处理,确定出对所述内核文件进行反汇编的反汇编引擎;使用所述对所述内核文件进行反汇编的反汇编引擎对所述内核文件进行反汇编,得到所述内核文件的汇编代码;根据预设的特征码从所述固件的符号表中确定出符号名称、符号名称对应的字符串内存地址以及符号的代码地址;并根据所述字符串内存地址和固件偏移地址,确定出所述固件的加载地址;使用所述符号名称、所述固件的加载地址和所述对所述内核文件进行反汇编的反汇编引擎,进行符号修复,得到修复后的函数名称;根据所述修复后的函数名称、所述内核文件的汇编代码和预设的函数名称与风险点的对应关系,确定出存在安全风险的函数名称的代码位置以及调用所述存在安全风险的函数名称的代码位置。可选的,所述处理单元具体用于:使用预设的不同架构对应的反汇编引擎对所述内核文件进行反汇编处理,得到每个架构对应的汇编指令块;将汇编指令块的数量最大的架构,确定为所述固件的架构;将所述汇编指令块的数量最大的架构对应的反汇编引擎,确定为所述对所述内核文件进行反汇编的反汇编引擎。可选的,所述处理单元具体用于:将所述字符串内存地址和固件偏移地址的差值,确定为所述固件的加载地址。可选的,所述处理单元具体用于:使用所述对所述内核文件进行反汇编的反汇编引擎依据所述固件的加载地址和所述符号名称,编写所述符号名称对应的函数名称的代码,得到修复后的函数名称。可选的,所述处理单元具体用于:根据所述函数名称从所述预设的函数名称与风险点的对应关系,确定出存在安全风险的函数名称;根据所述存在安全风险的函数名称,遍历所述汇编代码和所述修复后的函数名称的代码,确定出所述存在安全风险的函数名称的代码位置以及调用所述存在安全风险的函数名称的代码位置。可选的,所述处理单元还用于:根据所述符号名称查找所述汇编代码中所述固件升级的代码;若所述固件升级的代码不存在签名校验逻辑,则确定所述固件存在安全风险;查找所述汇编代码中存在空指针引用的代码位置;提取所述固件的版本号,确定所述固件是否存在版本过时风险。第三方面,本发明提供一种计算设备,包括:存储器,用于存储计算机程序;处理器,用于调用所述存储器中存储的计算机程序,按照获得的程序执行上述第一方面所述的方法。第四方面,本发明提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机可执行程序,所述计算机可执行程序用于使计算机执行上述第一方面所述的方法。附图说明为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1为本发明实施例提供的一种系统架构的示意图;图2为本发明实施例提供的一种固件安全分析的方法的流程示意图;图3为本发明实施例提供的一种确定固件的架构的示意图;图4为本发明实施例提供的一种确定符号表的示意图;图5为本发明实施例提供的一种符号表的示意图;图6为本发明实施例提供的一种符号名称的字符串表的示意图;图7为本发明实施例提供的一种修复符号的示意图;图8为本发明实施例提供的一种过滤风险符号的示意图;图9为本发明实施例提供的一种固件安全分析的装置的结构示意图。具体实施方式为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,显然,所描述的实施例仅仅是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。图1为本发明实施例提供的一种系统架构。如图1所示,该系统架构可以为服务器100,包括处理器110、通信接口120和存储器130。其中,通信接口120用于与终端设备进行通信,收发该终端设备传输的信息,实现通信。处理器110是服务器100的控制中心,利用各种接口和线路连接整个服务器100的各个部分,通过运行或执行存储在存储器130内的软件程序/或模块,以及调用存储在存储器130内的数据,执行服务器100的各种功能和处理数据。可选地,处理器110可以包括一个或多个处理单元。存储器130可用于存储软件程序以及模块,处理器110通过运行存储在存储器130的软件程序以及模块,从而执行各种功能应用以及数据处理。存储器130可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序等;存储数据区可存储根据业务处理所创建的数据等。此外,存储器130可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。需要说明的是,上述图1所示的结构仅是一种示例,本发明实施例对此不做限定。基于上述描述,图2示例性的示出了本发明实施例提供的一种固件安全分析的方法的流程,该流程可以由一种固件安全分析的装置执行。如图2所示,该流程具体步骤包括:步骤201,获取固件的内核文件。在本发明实施例中,可以使用魔数(magicnumber)来定位到固件的内核文件,该固件可以是测试设备的升级固件,也可以是从测试设备的内存中获取的固件。由于固件中不仅包含内核文件,还包含各种资源(比如文本,音频,网页,图片等),也有可能经过压缩处理,为了能够准确的提取出内核文件用于安全分析,本发明实施例使用了魔数来识别不同的文件格式,从而定位到关键的内核文件。以获取vxworks设备的固件的内核文件为例,通过魔数可以得到如表1所示的文件,其中,vxworkswindkernelversion表示了vxworks设备的固件的内核文件。表1魔数含义wind\x20version\x20vxworkswindkernelversionvxworks\00vxworksoperatingsystemversionustar\00000posixtararchivepk\003\004ziparchivedata步骤202,使用预设的不同架构对应的反汇编引擎对所述内核文件进行反汇编处理,确定出对所述内核文件进行反汇编的反汇编引擎。通过步骤201中的方式获取固件的内核文件后,就可以尝试对内核文件进行反汇编,以确定出对该内核文件进行反汇编的反汇编引擎。具体的,可以使用预设的不同架构对应的反汇编引擎对所述内核文件进行反汇编处理,得到每个架构对应的汇编指令块,然后将汇编指令块的数量最大的架构,确定为所述固件的架构,既而可以将所述汇编指令块的数量最大的架构对应的反汇编引擎,确定为所述对所述内核文件进行反汇编的反汇编引擎。在具体实施过程中,可以通过依次尝试使用不同的架构(arm,mips,ppc等流行的嵌入式架构),识别出汇编指令block(块)(指的是汇编指令个数>500的汇编指令块)最多的架构,那么就可以确定固件的架构。具体可以通过图3所示的流程来确定出固件的架构,包括:步骤301,遍历架构表,选择架构对应反汇编引擎。步骤302,根据选择的架构对应的反汇编引擎,进行反汇编,获取汇编指令块。步骤303,判断架构表是否遍历结束,若是,则转入步骤305,否则转入步骤304。步骤304,选择下一个架构。步骤305,确定出汇编指令块的数量。统计各种架构对应的反汇编引擎对内核文件进行反汇编处理后得到的汇编指令块的数量。步骤306,输出最大的汇编指令块的数量的架构。当确定出固件的架构后,就可以将该架构对应的反汇编引擎确定为对该内核文件进行反汇编的反汇编引擎。步骤203,使用所述对所述内核文件进行反汇编的反汇编引擎对所述内核文件进行反汇编,得到所述内核文件的汇编代码。通过使用步骤202确定出的反汇编引擎对内核文件进行反汇编处理,就可以得到内核文件的汇编代码。步骤204,根据预设的特征码从所述固件的符号表中确定出符号名称、符号名称对应的字符串内存地址以及符号的代码地址;并根据所述字符串内存地址和固件偏移地址,确定出所述固件的加载地址。每个固件中都有自己的符号表,通过读取符号表可以得到相应的符号名称和符合名称存储的地址等信息。由于符合表有很明显的特征,其中每一条记录(20字节)都符合如表2所示的格式。因此,可以按照表2中的格式,通过图4所示的流程,来寻找固件中的符号表。表2通过上述方式得到固件的符号表之后,就可以对符号表进行分析,得到相应的符号名称。由于符号表是很有规律的排列在一起,可以读取符号表快速的找到对应的符号名称。图5就是为4*5个为一组的符号表(如:b39a50到b39a63),黑色框标注的地方就是一条记录最重要的两个信息(符号名称的字符串内存地址和符号的内存地址),其中,00a12cfc指向了符号名称的字符串内存地址,00b36dd1毫无疑问就是这个符号的内存地址。在找到符号表之后,下一步获取符合名称的字符串表,符号名称的字符串表一般也靠近结尾,在符号表上面,通过特征码(“___x_diab_arm_div_o“)可以定位到符号名称的字符串表的开头地址。符号名称的字符串表如图6所示,框起来地方就是这个符号名称的字符串表的开头部分,0xa11cfc,可以看到符号表的第一条记录的符号名称指向了符号名称的字符串表的第一个字符串。由上述步骤得到的字符串内存地址后,就可以依据固件偏移地址,将字符串内存地址和固件偏移地址的差值,确定为固件的加载地址。即固件的加载地址=字符串内存地址-固件偏移地址,以上述00a12cfc指向的符号名称的字符串内存地址为例,固件的加载地址=0x00a12cfc-0xa11cfc=0x1000。步骤205,使用所述符号名称、所述固件的加载地址和所述对所述内核文件进行反汇编的反汇编引擎,进行符号修复,得到修复后的函数名称。依据上述步骤204中的符号表,可以为固件添加相应的符号,具体的可以使用对内核文件进行反汇编的反汇编引擎依据固件的加载地址和符号名称,编写出根据符号表进行修复符号的代码,得到修复后的函数名称。在具体实施过程中,可以通过如图7所示的算法使用反汇编引擎提供的接口,编写出根据符号表进行修复符号代码实现符号修复,得到函数名称。该算法可以输入3个输入值,分别是固件数据,符号表起始地址和符号表结束地址。步骤206,根据所述修复后的函数名称、所述内核文件的汇编代码和预设的函数名称与风险点的对应关系,确定出存在安全风险的函数名称的代码位置以及调用所述存在安全风险的函数名称的代码位置。在本发明实施例中,函数名称与风险点的对应关系可以如表3所示。表3中还列出了各函数名称对应的风险的解决方案,以供工作人员安全分析时使用。表3通过表3来查找危险函数名称的引用来定位到存在风险的代码位置,如果引用了这些函数(尤其关注最危险和很危险的函数),也说明存在安全风险。因此,可以先根据符号名称从预设的函数名称与风险点的对应关系,确定出存在安全风险的符号,然后根据存在安全风险的函数名称,遍历汇编代码和修复后的函数名称的代码,确定出存在安全风险的函数名称的代码位置以及调用存在安全风险的函数名称的代码位置。需要说明的是,在定位到风险函数之后,为了降低需要分析的数据量,可以查找风险函数的触发路径,即能从攻击面(web端,命令行交互等入口)直接进行触发的风险函数,剔除一些可能无法有效触发的地方。具体实施过程中可以使用如图8所示的代码来剔除无法有效触发的地方。在本发明实施例中,除了通过上述方式识别的安全风险之外,还可以通过下述几种方式识别不同的安全风险,具体包括:方式一:根据符号名称查找汇编代码中所述固件升级的代码;若固件升级的代码不存在签名校验逻辑,则确定固件存在安全风险。通过符号名称符号可以定位到升级固件的代码位置,看是否存在签名校验逻辑,如果不存在,说明存在安全风险。方式二:查找汇编代码中存在空指针引用的代码位置。空指针解引用是比较容易出现的问题,有些开发者在使用某个函数返回值之前没对返回值判空而直接使用,这就可能会导致空指针解引用,引发拒绝服务。如下面的例子,没有对webgetvar的返回值进行判空而直接使用,可以确定存在空指针引用的安全风险。方式三:提取所述固件的版本号,确定固件是否存在版本过时风险。运行strings命令,可以提取固件中包含的关键组件的版本号,如下所示:由于本发明实施例是直接对固件本身进行分析,这就避免了实体设备的依赖,不用购买价格昂贵设备,也不会造成设备在研究过程中的损坏。现有的对设备的安全风险分析方法用的最多的模糊测试技术,在这之前需要对协议花上大量时间进行分析,本发明实施例只需要使用固件中所自带的符号(包括函数符号,字符串常量等)就可以精准有效地对固件中地缺陷点进行定位,这就大大降低了分析时间。因此,本发明实施例具有很好的时间和经济效益,同时降低了在研究过程中损坏设备的风险。此外,本发明实施例还具体以下有益效果:(1)发明实施例直接通过固件的符号进行分析,相比现有的通过黑盒测试的方法,摆脱了设备的依赖,减少了模糊测试在测试之前需要的分析时间。(2)发明实施例提出了在识别危险函数的基础上的触发路径的解决方法,减少了风险误报的机率,提高了识别风险点的准确率。而现有的方法测试效果取决于fuzz生成的数据好坏,有可能长时间运行模糊测试但是无法触发风险点。(3)发明实施例直接通过固件的字符串常量符号来定位组件的版本库,有效的解决原有的方法远程扫描无法准确识别组件库版本的缺点,在识别组件库的后,就能通过已知的漏洞库来识别出固件的风险点。本发明实施例表明,通过获取固件的内核文件,使用预设的不同架构对应的反汇编引擎对所述内核文件进行反汇编处理,确定出对内核文件进行反汇编的反汇编引擎,使用对内核文件进行反汇编的反汇编引擎对内核文件进行反汇编,得到内核文件的汇编代码,根据预设的特征码从所述固件的符号表中确定出符号名称、符号名称对应的字符串内存地址以及符号的代码地址,并根据字符串内存地址和固件偏移地址,确定出固件的加载地址,使用符号名称、固件的加载地址和对内核文件进行反汇编的反汇编引擎,进行符号修复,得到修复后的函数名称,根据修复后的函数名称、内核文件的汇编代码和预设的函数名称与风险点的对应关系,确定出存在安全风险的函数名称的代码位置以及调用存在安全风险的函数名称的代码位置。通过对固件进行反汇编的方式得到固件的汇编代码,然后从固件的符号表中找到符号名称,进而再依据预设的函数名称与风险点的对应关系,可以快速的确定出固件的汇编代码中存在安全风险的位置,从而实现了在无需测试设备的情况下,快速的识别测试设备的安全风险点,提高了风险测试的效率。基于相同的技术构思,图9示例性的示出了本发明实施例提供的一种固件安全分析的装置的结构示意图,该装置可以执行固件安全分析的流程。如图9所示,该装置具体包括:获取单元901,用于获取固件的内核文件;处理单元902,用于使用预设的不同架构对应的反汇编引擎对所述内核文件进行反汇编处理,确定出对所述内核文件进行反汇编的反汇编引擎;使用所述对所述内核文件进行反汇编的反汇编引擎对所述内核文件进行反汇编,得到所述内核文件的汇编代码;根据预设的特征码从所述固件的符号表中确定出符号名称、符号名称对应的字符串内存地址以及符号的代码地址;并根据所述字符串内存地址和固件偏移地址,确定出所述固件的加载地址;使用所述符号名称、所述固件的加载地址和所述对所述内核文件进行反汇编的反汇编引擎,进行符号修复,得到修复后的函数名称;根据所述修复后的函数名称、所述内核文件的汇编代码和预设的函数名称与风险点的对应关系,确定出存在安全风险的函数名称的代码位置以及调用所述存在安全风险的函数名称的代码位置。可选的,所述处理单元902具体用于:使用预设的不同架构对应的反汇编引擎对所述内核文件进行反汇编处理,得到每个架构对应的汇编指令块;将汇编指令块的数量最大的架构,确定为所述固件的架构;将所述汇编指令块的数量最大的架构对应的反汇编引擎,确定为所述对所述内核文件进行反汇编的反汇编引擎。可选的,所述处理单元902具体用于:将所述字符串内存地址和固件偏移地址的差值,确定为所述固件的加载地址。可选的,所述处理单元902具体用于:使用所述对所述内核文件进行反汇编的反汇编引擎依据所述固件的加载地址和所述符号名称,编写出根据符号表进行修复符号的代码,得到修复后的函数名称。可选的,所述处理单元902具体用于:根据所述函数名称从所述预设的函数名称与风险点的对应关系,确定出存在安全风险的函数名称;根据所述存在安全风险的函数名称,遍历所述汇编代码和所述修复后的函数名称的代码,确定出所述存在安全风险的函数名称的代码位置以及调用所述存在安全风险的函数名称的代码位置。可选的,所述处理单元902还用于:根据所述符号名称查找所述汇编代码中所述固件升级的代码;若所述固件升级的代码不存在签名校验逻辑,则确定所述固件存在安全风险;查找所述汇编代码中存在空指针引用的代码位置;提取所述固件的版本号,确定所述固件是否存在版本过时风险。基于相同的技术构思,本发明实施例提供一种计算设备,包括:存储器,用于存储计算机程序;处理器,用于调用所述存储器中存储的计算机程序,按照获得的程序执行上述固件安全分析的方法。基于相同的技术构思,本发明实施例提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机可执行程序,所述计算机可执行程序用于使计算机执行上述固件安全分析的方法。本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。本发明是参照根据本发明的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1