基于控制流和数据流分析的MIPS架构漏洞挖掘方法

文档序号:26947454发布日期:2021-10-12 20:00阅读:221来源:国知局
基于控制流和数据流分析的MIPS架构漏洞挖掘方法
基于控制流和数据流分析的mips架构漏洞挖掘方法
技术领域
1.本发明涉及网络安全技术领域,尤其涉及基于控制流和数据流分析的mips架构漏洞挖掘方法。


背景技术:

2.随着万物互联(iot)的时代到来,物联网产业规模不断扩大,但相关安全标准未能跟上发展的步伐,再加上厂商对设备安全意识的淡薄,导致目前物联网存在严重的安全隐患。
3.根据cncert运营的cnvd漏洞平台统计报告,2020收录的通用型物联网设备漏洞数目达到3047个(同比增长28%),事件型漏洞2141个,其中包括因设备程序对从客户端传输的数据处理不当导致的缓冲区溢出漏洞和命令注入漏洞,一旦这些漏洞被恶意用户合理利用就可能造成服务器破坏,甚至达到远程控制的效果。
4.缓冲区溢出漏洞是指攻击者向缓冲区内填充数据的大小超过了缓冲区本身容量,导致数据溢出从而劫持程序控制流的漏洞;在物联网设备中,命令注入漏洞通常是指攻击者在web页面输入的参数未经过滤,而直接拼接成系统命令被设备执行造成的漏洞。目前针对缓冲区溢出漏洞的挖掘方法主要有源代码和二进制两个层面。源代码层面主要是采取静态分析的方案;二进制层面,由于程序可执行,可将其分为基于静态、动态和动静结合的分析方案。动态分析主要是采取模糊测试的方案,静态分析则是采取数据流分析,污点分析,符号执行等,动静结合主要是将静态分析结果辅助动态分析。而针对命令注入漏洞的挖掘方法主要是通过白盒测试以及代码审计的方式。但对于物联网设备而言,目前设备厂商开源代码较少,且物联网设备中的部分命令注入漏洞是由二进制程序触发,当前大部分物联网设备漏洞挖掘是基于二进制程序进行的。
5.davidson等在2013年提出基于 klee 符号执行引擎构建的开源工具 fie, 可用于 msp430 微处理固件的自动化漏洞检测。该工具针对的漏洞类型是内存破坏类和外围 i/o 误用两类漏洞。
6.shoshitaishvili 等在2015年提出基于程序分析的物联网设备认证绕过漏洞的挖掘方法。该方法通过定义程序特权点(主要包括未经认证就可输出的数据以及未经认证就能执行系统操作等),基于此构建固件代码的控制流图以及数据依赖关系。然后利用符号执行求解到特权点的路径,从而发现认证绕过漏洞。
7.cheng等人在2018年提出了一种针对固件静态二进制分析工具dtaint,该工具不需要源码同时也不依赖于程序的动态执行,而是通过静态污点分析来检测污点类型漏洞。
8.综上所述,目前针对物联网设备漏洞的挖掘方法主要有两种,人工静态分析和模糊测试。人工静态分析准确率高,但效率很低,并不适用于大规模漏洞挖掘。模糊测试需要程序动态执行,但物联网设备程序架构种类繁多,对其进行模糊测试依赖于特定的上下文运行环境。


技术实现要素:

9.为解决上述技术问题,本发明提出了一种基于控制流和数据流分析的mips架构漏洞挖掘方法,用以解决现有技术中人工挖掘效率低和模糊测试仿真难度大的问题。为了及时发现缓冲区溢出漏洞与命令注入漏洞,本发明提出了一种针对mips架构物联网设备的基于控制流和数据流分析的漏洞挖掘方法,针对的漏洞类型为命令注入和缓冲区溢出。
10.根据本发明的第一方面,提供一种基于控制流和数据流分析的mips架构漏洞挖掘方法,所述方法包括以下步骤:步骤s101:基于回溯层级,确定直接或间接调用污点引入函数及漏洞触发函数的二进制程序函数,确定所述二进制程序函数为潜在危险函数;所述污点引入函数用于接收外界的输入作为污点源;所述污点引入函数用于识别客户端传递的web请求报文中的关键字并读取对应的值,所述漏洞触发函数是指由于执行会产生命令执行漏洞或缓冲区溢出漏洞的函数;步骤s102:将所述潜在危险函数转化为控制流图,每个所述潜在危险函数对应一个所述控制流图;步骤s103:设置基于vex语言的污点检验规则;步骤s104:获取数据流,基于所述控制流图以及所述基于vex语言的污点检验规则,对所述数据流进行分析,判断从所述污点引入函数到所述漏洞触发函数是否存在可达路径,若存在可达路径,则对所述污点引入函数参数进行标记;通过数据流分析,检测漏洞触发函数的参数是否带有污点标记。
11.根据本发明的上述方案,为解决上述问题,提高物联网设备漏洞挖掘效率,本发明提出了一种基于数据流和控制流分析的mips架构物联网设备漏洞挖掘方法。通过将汇编语言转化为vex中间语言,对vex语言进行语法语义分析进而构建控制流图,并建立vex中间语言的污点传播规则,自动化检测缓冲区溢出漏洞和命令执行漏洞。
12.主要实现如下效果:(1)不需要构建整个程序的控制流图,只需要针对指定的潜在危险函数构建控制流图,提高分析效率;(2)可以对一些无影响库函数进行过滤,减少分析的复杂性;(3)可以自动化检测存在缓冲区溢出和命令执行风险的危险函数。(4)可以检测出漏洞触发来源的web前端请求头关键字,方便进一步进行漏洞利用测试。(5)实现高效、准确、低人工干预的mips架构物联网漏洞挖掘,能够检测物联网设备二进制程序中存在的缓冲区溢出和命令注入风险的函数,降低分析过程的复杂性。
13.上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,并可依照说明书的内容予以实施,以下以本发明的较佳实施例并配合附图详细说明如后。
附图说明
14.构成本发明的一部分的附图用来提供对本发明的进一步理解,本发明提供如下附图进行说明。在附图中:图1为本发明一个实施方式的基于控制流和数据流分析的mips架构漏洞挖掘方法流程示意图;图2为本发明一个实施方式的基于控制流和数据流分析的mips架构漏洞挖掘方法架构示意图;
图3为本发明一个实施方式的基于控制流和数据流分析的mips架构漏洞挖掘装置结构示意图。
具体实施方式
15.为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明具体实施例及相应的附图对本发明技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
16.首先结合图1

图2说明为本发明一个实施方式的基于控制流和数据流分析的mips架构漏洞挖掘方法。如图1

图2所示,所述方法包括以下步骤:步骤s101:基于回溯层级,确定直接或间接调用污点引入函数及漏洞触发函数的二进制程序函数,确定所述二进制程序函数为潜在危险函数;所述污点引入函数用于接收外界的输入作为污点源;所述污点引入函数用于识别客户端传递的web请求报文中的关键字并读取对应的值,所述漏洞触发函数是指由于执行会产生命令执行漏洞或缓冲区溢出漏洞的函数;步骤s102:将所述潜在危险函数转化为控制流图,每个所述潜在危险函数对应一个所述控制流图;步骤s103:设置基于vex语言的污点检验规则;步骤s104:获取数据流,基于所述控制流图以及所述基于vex语言的污点检验规则,对所述数据流进行分析,判断从所述污点引入函数到所述漏洞触发函数是否存在可达路径,若存在可达路径,则对所述污点引入函数参数进行标记;通过数据流分析,检测漏洞触发函数的参数是否带有污点标记。
17.所述步骤s101:基于回溯层级,确定直接或间接调用污点引入函数及漏洞触发函数的二进制程序函数,确定所述二进制程序函数为潜在危险函数,包括:在所述污点引入函数中将外界传入的输入作为数据流分析的source点,所述污点引入函数一般不会限制关键字对应内容的长度。所述漏洞触发函数是指由于执行会产生命令执行漏洞或缓冲区溢出漏洞的函数,漏洞触发函数作为数据流分析的sink点。命令执行函数例如为system、popen等命令执行函数,可能产生缓冲区溢出漏洞的函数例如为strcpy、sprintf等内存空间覆盖函数;基于回溯层级,对所述污点引入函数及所述漏洞触发函数进行调用回溯,确定物联网设备二进制程序在执行过程中直接或间接调用所述污点引入函数及所述漏洞触发函数的二进制程序函数,确定所述二进制程序函数为潜在危险函数。
18.传统的控制流图构建是基于整个程序,在程序较大时,会出现控制流图构建时间长的问题,且程序中并不是每个函数都直接或者间接调用污点引入函数及漏洞触发函数。因此,本实施例中,将控制流图的构建对象精确到函数级别,而不是整个程序。通过预先设置回溯层级,对污点引入函数及漏洞触发函数进行调用回溯,确定直接或间接调用污点引入函数及漏洞触发函数的二进制程序函数,将所述二进制程序函数定义为潜在危险函数。
19.所述步骤s102:将所述潜在危险函数转化为控制流图,每个所述潜在危险函数对应一个所述控制流图,其中:
本实施例中,利用angr的cfgemulated对每一潜在危险函数构建控制流图。进一步地,设置cfgemulated的函数参数call_depth为能覆盖到污点引入函数和漏洞触发函数执行的深度。尽可能缩减控制流图大小的同时又满足覆盖到污点引入函数和漏洞触发函数的执行位置。
20.所述步骤s103:设置基于vex语言的污点传播规则,其中,所述污点传播规则包括:基于vex语言实现控制依赖的规则:利用angr的cfgemulated的动态符号执行对识别出的所述潜在危险函数构建控制流图,同时设置函数调用深度,所述函数调用深度满足能够覆盖所述污点引入函数及所述漏洞触发函数的执行;采取到达定值的分析策略,在分析过程中尽可能或完全覆盖潜在危险函数的所有执行路径。
21.本实施例中,控制依赖决定基本块与基本块之间控制流约束,数据依赖决定了在基本块内部变量与变量之间数据的传递。
22.基于vex语言对mips架构汇编语言进行解释的规则:在构建控制流图的过程中,angr已经将物联网设备二进制程序汇编代码转化为vex中间语言,在潜在危险函数入口块中初始化寄存器和内存状态,初始化sp寄存器值;然后以块为单位进行数据流分析,对vex中间文件中的指令,利用python编程语言编写的解释器,对指令进行解释并执行。
23.本实施例中,常见读写内存、寄存器指令,跳转指令,运算指令等利用python编程语言编写解释器,对指令解释执行。解释的指令如下表1。
24.表1本实施例中,由于污点源是指向外界传入数据的指针,因此在本技术中只解释执行对指针控制依赖传播和数据依赖传播可能造成影响的指令。
25.基于vex中间语言的过程间数据流分析规则:为避免过程内分析在数据流分析过
程中不考虑函数调用导致增加误报,因此采取了过程间分析的方式提高分析精度,在进入到子函数之前,采取复制当前寄存器、内存状态然后对该子函数继续进行数据流分析,同时在进入子函数分析前记录下一块的指令地址,使对子函数进行数据流分析后能够返回到父函数;对于库函数的处理,采取编写函数摘要的方式模拟函数功能。
26.所述步骤s104:获取数据流,基于所述控制流图以及所述基于vex语言的污点检验规则,对所述数据流进行分析,判断从所述污点引入函数到所述漏洞触发函数是否存在可达路径,若存在可达路径,则对所述污点引入函数参数进行标记;通过数据流分析,检测漏洞触发函数的参数是否带有污点标记。其中:定义三个处理模块sink_function模块、other_function模块和source_function模块,通过三个模块对潜在危险函数中子函数的调用进行处理, 所述sink_function模块用于进行污点检测,处理的对象是已经定义好的漏洞触发函数;所述source_function模块用于对污点进行标记,包括对引入污点的web请求头关键字识别,处理的对象是已经定义好的污点引入函数;所述other_function模块是针对除污点引入函数和污点引入函数以外的包括主程序函数和库函数的函数。对于主程序函数,采取过程间分析的方式继续进行,库函数是根据对污点传播是否产生影响分别进行处理,例如对污点传播不会产生影响的函数puts、time、exit等,采取步过的方式,不对这些函数进行分析。而对污点传播有影响的函数,则通过编写函数摘要模拟函数功能。
27.本实施例中,所述基于vex语言的污点传播规则的建立目的,主要是从控制依赖转播和数据依赖传播两个方面进行设置。在控制依赖传播上,利用angr的动态符号执行cfgemulated对目标函数构建控制流图,处理循环和判断等分支跳转语句上除了基于数据流分析中状态稳定的规则外对每个块还设置了最大迭代层数,在处理函数调用时,采取过程间分析的方式,保留当前块的下一个块的地址,同时复制当前寄存器和内存状态。数据传播依赖上,基于vex语言的语法规则,针对不同的vex指令定义抽象解释规则,同时对库函数的处理上,结合mips架构特点,以函数摘要的形式进行处理。
28.对vex中间语言利用python编程语言,实现解释执行以解决数据依赖关系,利用angr的cfgemulated构建控制流图以解决控制依赖关系。通过编写函数摘要解决污点标记和污点检测问题。
29.本实施例中,通过对潜在危险函数进行vex中间语言转化,构建控制流图,设置数据传播规则,所述数据传播规则包括控制依赖传播规则、数据依赖传播规则。所述控制依赖传播规则的建立通过构建控制流图,采取到达定值的分析策略。所述数据依赖传播规则建立基于对vex中间语言的抽象解释。基于上述规则的建立,通过sink_function模块、other_function模块和source_function模块对函数、子函数进行处理可以进一步精确定位危险函数的范围。
30.通过对污点引入函数和漏洞触发函数编写函数摘要达到污点标记和漏洞检测的目的,利用到mips架构下的传参寄存器[a0,a1,a2,a3]和返回寄存器[v0],对寄存器进行读取和识别,以达到标记污点、检测漏洞的目的。
[0031]
本实施例中,基于所述控制流图是针对潜在危险函数构建的,也就是说,本实施例中,基于控制流图确定潜在危险函数的从起点到终点对应的执行路径。基于执行路径及污点检验规则,对数据流进行分析。
[0032]
本实施例中,对污点引入函数进行标记,包括:读取污点引入函数参数内容,作为污点标记内容;将污点引入函数的返回值标记为污点。
[0033]
所述污点引入函数,只有一个寄存器a0用于传参,而该寄存器的内容是指向web请求头关键字的指针,函数的返回值是指向web请求头对应内容的指针。因此在编写函数摘要处理时,首先要读取a0寄存器中存放的指针所指向的web请求头关键字作为污点标记内容,然后设置v0寄存器的内容为当前块的地址,即模拟一个返回值,并标记上污点。
[0034]
本实施例中,对传入漏洞触发函数的参数进行识别,包括:识别漏洞函数参数是否带有污点标记;若为内存空间覆盖函数则继续判断目的地址是否在栈上;所述漏洞触发函数如果为命令执行函数,则检查参数寄存器中是否含有污点标记,如果有则表示检测到标记的关键字存在命令注入风险。所述漏洞触发函数如果为内存空间覆盖函数,内存空间覆盖函数的参数一般包含源地址和目的地址,在检测时需检查存放源地址的参数寄存器中是否含有污点标记,同时检查目的地址是否为栈上的地址。如果有则确定检测到标记的关键字存在缓冲区溢出风险。进一步地,在确定存在风险之后,输出对应的关键字存在风险,然后继续沿着控制流图分析,以完成整个潜在危险函数的分析。
[0035]
本实施例中,根据mips架构相关寄存器属性,在处理污点引入函数时,对传参寄存器进行分析,识别传入的web请求头关键字,作为所述污点引入函数返回值的污点标记。通过数据流分析,判断从所述污点引入函数到所述漏洞触发函数是否存在可达路径,并在处理所述漏洞触发函数时,根据所述污点引入函数的属性对传参寄存器进行分析,判断是否存在污点标记。若存在,则可更加精确定义该函数存在漏洞攻击危险。
[0036]
将分析返回的结果中对存在风险的关键字通过在web前端人工构造数据包的方式进行验证,在满足从污点引入函数到漏洞触发函数的路径约束的条件下,例如若该关键字存在缓冲区溢出风险则对该关键字输入若干长度数据,若造成服务宕机,则判断挖掘出缓冲区溢出漏洞;若该关键字存在命令注入风险则对该关键字中拼接reboot命令,若系统重启,则判断挖掘出命令注入漏洞。
[0037]
本发明实施例进一步给出一种基于控制流和数据流分析的mips架构漏洞挖掘装置,所述装置包括:初始化模块:配置为基于回溯层级,确定直接或间接调用污点引入函数及漏洞触发函数的二进制程序函数,确定所述二进制程序函数为潜在危险函数;所述污点引入函数用于接收外界的输入作为污点源;所述污点引入函数用于识别客户端传递的web请求报文中的关键字并读取对应的值,所述漏洞触发函数是指由于执行会产生命令执行漏洞或缓冲区溢出漏洞的函数;控制流图生成模块:配置为将所述潜在危险函数转化为控制流图,每个所述潜在危险函数对应一个所述控制流图;规则设置模块:配置为设置基于vex语言的污点检验规则;检测模块:配置为获取数据流,基于所述控制流图以及所述基于vex语言的污点检验规则,对所述数据流进行分析,判断从所述污点引入函数到所述漏洞触发函数是否存在可达路径,若存在可达路径,则对所述污点引入函数参数进行标记;通过数据流分析,检测
漏洞触发函数的参数是否带有污点标记。
[0038]
提供一种基于控制流和数据流分析的mips架构漏洞挖掘系统,包括:处理器,用于执行多条指令;存储器,用于存储多条指令;其中,所述多条指令,用于由所述存储器存储,并由所述处理器加载并执行如前所述的基于控制流和数据流分析的mips架构漏洞挖掘方法。
[0039]
提供一种计算机可读存储介质,所述存储介质中存储有多条指令;所述多条指令,用于由处理器加载并执行如前所述的基于控制流和数据流分析的mips架构漏洞挖掘方法。
[0040]
需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。
[0041]
在本发明所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
[0042]
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
[0043]
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
[0044]
上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机装置(可以是个人计算机,实体机服务器,或者网络云服务器等,需安装linux操作系统)执行本发明各个实施例所述方法的部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read

only memory,rom)、随机存取存储器(random access memory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。
[0045]
以上所述,仅是本发明的较佳实施例而已,并非对本发明作任何形式上的限制,依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化与修饰,均仍属于本发明技术方案的范围内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1