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

一种基于脆弱性分析的固件未知漏洞检测方法

文献发布时间:2023-06-19 10:48:02


一种基于脆弱性分析的固件未知漏洞检测方法

技术领域

本发明属于漏洞检测领域,具体涉及一种基于脆弱性分析的固件未知漏洞检测方法。

背景技术

在利用静态分析方法的固件漏洞检测方法中,主要依赖漏洞的特征构建漏洞特征数据集来实现对固件漏洞的识别,不会直接配置具体环境来运行固件程序,虽然具有快速、适用面大的优点,但由于未考虑物联网设备中固件程序之间的路径约束问题,如数据约束,使得纯粹的静态固件漏洞检测方法有误报的问题。此外,对于静态检测方法利用二进制程序分析技术得出固件脆弱点位置后,缺少对漏洞进一步的验证,只能给出可能的脆弱位置,而没有完全确认固件当中的漏洞。

发明内容

本发明提供一种基于脆弱性分析的固件未知漏洞检测方法,在于克服现有基于静态分析的固件漏洞检测方法存在的不足之处。

本发明通过以下技术方案实现:

一种基于脆弱性分析的固件未知漏洞检测方法,所述检测方法包括以下步骤:

步骤1:物联网设备固件目标二进制程序获取,即固件分析工具Binwalk实现对嵌入式设备固件程序的提取;

步骤2:基于步骤1的物联网设备固件目标二进制程序获取,确定物联网设备固件样本中交互二进制程序;

步骤3:基于步骤2的物联网设备固件样本中交互二进制程序,进行程序依赖图的构建;

步骤4:基于步骤3的程序依赖图进行物联网设备固件二进制程序的数据流追踪;

步骤5:基于步骤4的数据流追踪及固件脆弱性分析实现二进制程序不安全交互行为检测,并确定物联网设备固件中的未知漏洞;

步骤6:验证检测存在脆弱性的二进制程序中的未知漏洞。

进一步的,所述步骤2的二进制程序具体为,发现固件样本目标程序中的与用户交互的网络边界二进制程序集。

进一步的,所述步骤3种程序依赖图的构建具体包括以下步骤:

步骤3.1:从已确定的边界二进制文件开始:将污点数据与网络相关的关键字进行比较,并进行污点分析以检测二进制文件是否依赖IPC范式共享数据;

步骤3.2:从通过一组名为通信范式CPF的模块检测进程间通信过程;

步骤3.3:通过为每个数据键在setter和getter之间创建边来构建BDG,得到一个用户输入的数据在二进制文件之间传播的有向图。其中,setter指产生数据的二进制程序,getter指处理数据的二进制程序。

进一步的,所述步骤4固件二进制程序的数据流追踪包括静态污点分析和二进制程序数据流分析;所述静态污点分析基于污点分析模块;所述二进制程序数据流分析基于二进制数据流分析模块;

所述静态污点分析具体为污点分析模块识别污点信息在程序中的产生点并对污点信息进行标记,利用进程间通信的共享数据键跟踪分析污点信息在程序中的传播过程在关键的程序点检测关键的操作是否会受到污点信息的影响;

系统的污点引擎基于BootStomp,给定污点源Source和程序点p,污点分析引擎会从程序点p开始执行符号路径探索,并且每次遇到污点源Source时,污点引擎都会分配一个新的污点ID或标签到从接收数据的存储位置;

污点分析引擎会在程序数据流之后传播污点信息,并且当存储位置被未污点的数据覆盖或可能的值受到限制时它将污点存储位置;

其中,路径优先级策略通过优先处理更有价值的路径,解决了隐性问题,该问题会在处理隐式控制流时基于路径探索影响污点引擎;在污点分析的范围内,如果变量在路径p1中被标记为污点而在p2中未被标记为污点,则路径p1被认为比路径p2更有价值。

进一步的,所述二进制程序数据流分析具体为二进制数据流分析模块需要在BDG中恢复二进制文件的数据流详细信息,使用BDG查找从setter传播到getter的数据约束。

进一步的,所述步骤5具体为,从二进制程序中识别出潜在脆弱点;

二进制程序潜在的脆弱具体包括内存冲突类漏洞、堆栈漏洞、堆溢出漏洞和拒绝服务类的漏洞。

进一步的,所述内存冲突类漏洞具体为,利用静态污点分析检测由攻击者控制的数据是否地到达了内存复制类函数,然后分析其目标缓存区的边界大小和污点信息的被约束后的大小,进而判断是否存在缓冲区溢出的问题。

进一步的,所述堆栈漏洞和堆溢出漏洞即为整数溢出具体为,跟踪污点数据的传播,收集污点数据的路径约束,并检查在接收器中使用污点值时路径是否具有足够的约束条件以防止整数溢出问题,从而判断固件是否存在脆弱性。

进一步的,所述拒绝服务类的漏洞即为存在的循环,需要识别出是否存在循环。这些循环的发现可以基于上述步骤中获取的二进制程序依赖有向图,判断图中是否存在循环;在完成这些循环的识别之后,需要进一步确认这些循环是否会使得固件触发漏洞。

本发明的有益效果是:

本发明能够以静态的方式对固件中存在的跨二进制程序的可能存在的漏洞进行定位,并能利用静态脆弱性分析方法对获取的固件潜在脆弱点进行漏洞验证,即利用由结合污点分析模块和数据流分析模块获取到的路径上的与脆弱性分析相关的程序特性(变量值、路径约束条件),进行路径敏感性分析和约束求解操作,从而确认上述详细的路径是否能触发漏洞。

附图说明

图1本发明的方法流程图。

具体实施方式

下面将结合本发明实施例中的附图对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

一种基于脆弱性分析的固件未知漏洞检测方法,所述检测方法包括以下步骤:

步骤1:物联网设备固件目标二进制程序获取,即固件分析工具Binwalk实现对嵌入式设备固件程序的提取;其中,Binwalk用于分析,逆向工程和提取固件映像,可从固件映像中提取嵌入式文件系统;主要步骤包括固件输入、固件格式分析、固件程序提取、目标程序分析与提取;

步骤2:基于步骤1的物联网设备固件目标二进制程序获取,确定物联网设备固件样本中交互二进制程序;

步骤3:基于步骤2的物联网设备固件样本中交互二进制程序,进行程序依赖图的构建;

步骤4:基于步骤3的程序依赖图进行物联网设备固件二进制程序的数据流追踪;

步骤5:基于步骤4的数据流追踪及固件脆弱性分析实现二进制程序不安全交互行为检测,并确定物联网设备固件中的未知漏洞;

步骤6:验证检测存在脆弱性的二进制程序中的未知漏洞。

进一步的,所述步骤2的二进制程序具体为,直接面向网络的二进制固件程序可以用于接收和解析用户提供的数据,这类二进制程序被称为网络边界二进制程序;显然,攻击者可以通过网络利用这些二进制程序,当固件内其他的二进制程序存在脆弱点时,通过二进制程序间的使用不严格的约束条件的数据流路径,可以触发固件的脆弱点,从而可以达到攻击者获取控制权、机密信息等;发现固件样本目标程序中的与用户交互的网络边界二进制程序集

进一步的,所述步骤3种程序依赖图的构建具体包括以下步骤:

步骤3.1:从已确定的边界二进制文件开始:将污点数据与网络相关的关键字进行比较,并进行污点分析以检测二进制文件是否依赖IPC范式共享数据;

步骤3.2:从通过一组名为CPF(Communication Paradigm Finders)的模块检测进程间通信范式;

步骤3.3:通过为每个数据键在setter和getter之间创建边来构建BDG,得到一个用户输入的数据在二进制文件之间传播的有向图。其中,setter指产生数据的二进制程序,getter指处理数据的二进制程序。

其中,有向图的点是筛选出的进行通信的二进制文件,有向图的边e定义如下:

e=([block1,location1,cpf1],[block 2,location2,cpf2],key);其表示二进制文件block1的在location1的位置(比如setenv函数)通过cpf1的方法(比如共享环境变量key)与二进制文件block 2进行通信;block在location2处通过cpf2的方法进行了接收数据。

进一步的,所述步骤4固件二进制程序的数据流追踪包括静态污点分析和二进制程序数据流分析;所述静态污点分析基于污点分析模块;所述二进制程序数据流分析基于二进制数据流分析模块;

所述静态污点分析具体为污点分析模块识别污点信息在程序中的产生点(Source点)对污点信息进行标记,利用进程间通信的共享数据键跟踪分析污点信息在程序中的传播过程在关键的程序点(Sink点)检测关键的操作是否会受到污点信息的影响;污点信息不仅可以通过数据依赖传播,还可以通过控制依赖传播;通过数据依赖传播的信息流被称为显式信息流,将通过控制依赖传播的信息流称为隐式信息流;

系统的污点引擎基于BootStomp,给定污点源Source和程序点p,污点分析引擎会从程序点p开始执行符号路径探索,并且每次遇到污点源时,污点引擎都会分配一个新的污点ID或标签到从接收数据的存储位置;

污点分析引擎会在程序数据流之后传播污点信息,并且当存储位置被未污点的数据覆盖(即删除其污点标签)或可能的值受到限制时它将存储位置标记为污点。

系统使用的污点分析引擎在具有两项优点:

(1)包括路径优先级策略;

(2)引入了污点标签依赖项的概念。

其中,路径优先级策略通过优先处理更有价值的路径,解决了隐性问题,该问题会在处理隐式控制流时基于路径探索影响污点引擎。在污点分析的范围内,如果变量在路径1中被标记为污点而在路径2中未被标记为污点,则路径1被认为比路径2更有价值。此外,在污点引擎中可以在具有不同标签的污点变量之间创建依赖关系,跟踪这些依赖关系对于在多标签污点跟踪系统中制定有效的污点策略具有重要作用。此外,数据流分析模块需要在二进制依赖图中恢复二进制文件的数据流详细信息。

进一步的,所述二进制程序数据流分析具体为二进制数据流分析模块需要在BDG中恢复二进制文件的数据流详细信息,使用BDG查找从setter传播到getter的数据约束;仅考虑最不严格的约束,即防止路径爆炸问题。

遍历二进制依赖图中所有可能的二进制间路径通常会导致路径爆炸问题。因此,系统要检索的路径是更可能导致错误的二进制路径,即那些对用户提供的数据施加较少严格约束的路径。

为了检索此类路径,需要收集二进制文件跨不同程序路径应用于用户提供的数据的约束集,并将仅约束最小的约束集传播到其他二进制文件;然后,创建二进制流图BFG,该图通过对多个二进制文件之间共享的数据施加了最不严格的约束集来扩展BDG。

进一步的,所述步骤5具体为,从二进制程序中识别出潜在脆弱点;

二进制程序潜在的脆弱具体包括内存冲突类漏洞、堆栈漏洞、堆溢出漏洞和拒绝服务类的漏洞。

进一步的,所述内存冲突类漏洞的检测,就这类漏洞中典型的缓冲区溢出漏洞具体为,利用静态污点分析检测由攻击者控制的数据是否地到达了内存复制类函数,然后分析其目标缓存区的边界大小和污点信息的被约束后的大小,进而判断是否存在缓冲区溢出的问题。

进一步的,所述整数溢出所导致堆栈和堆溢出漏洞的漏洞检测具体为,跟踪污点数据的传播,收集污点数据的路径约束,并检查在接收器中使用污点值时路径是否具有足够的约束条件以防止整数溢出问题,从而判断固件是否存在脆弱性。

整数溢出是否有害取决于程序在何处以及如何使用溢出值。在某些敏感点使用溢出值可能导致其他漏洞,而这些敏感点称为污染点。其中,整数溢出的接收点主要是以下方面。

(1)内存分配:溢出的值在内存分配函数(例如,malloc,alloca)中用作大小参数,通常会导致内存分配不足,最终可能成为攻击者缓冲区溢出的跳板。

(2)内存访问:溢出的值用作数组索引或指针偏移量,这可能导致覆盖或读取任意字节的内存(例如,信息泄漏攻击)。

(3)分支语句:分支语句中使用了溢出的值,并且分支语句并非旨在捕获整数溢出。它可能导致绕过安全检查(例如,非控制数据攻击中的一种情况[38])或导致不良执行。

(4)其他与程序有关的敏感点:可能还有其他与程序有关的敏感点,这些敏感点可能会受到溢出值的影响。

最后,固件二进制程序当中存在的循环也是潜在的脆弱点。这类循环复制结构是指在循环体内向不断改变的地址中写入数据。其中,能被攻击者利用的循环可以触发拒绝服务类的漏洞。这类能够为攻击者所利用的循环复制结构往往其执行次数未加约束,可以由外部输入控制。

进一步的,所述拒绝服务类的漏洞即为存在的可被外部输入控制执行次数的能够触发漏洞的循环。要识别二进制程序中存在的循环拷贝漏洞,首先需要识别出是否存在循环。这些循环的发现可以基于上述步骤中获取的二进制程序依赖有向图图,判断图中是否存在循环。在完成这些循环的识别之后,需要进一步确认这些循环是否会使得固件触发漏洞。

对于这些存在脆弱点的循环的确定中,典型方法便是基于相关链的引发缓冲区溢出循环(BOIL)的检测算法。检测算法将循环作为输入,当且仅当输出的循环能够触发缓冲区溢出漏洞时,它返回真(布尔值类型),即代表其为引发缓冲区溢出的循环。该算法基于向后依赖链计算,区分了以下两种不同情况。

(1)自相关链:链中的一个元素取决于自身;

(2)扩展的自相关链:该链终止于循环体外部,或者到达一个变量,从而启动新的自相关链。

算法的具体实现是通过从循环的所有指令开始,向后遍历定义-调用链来计算来执行此检查,直到满足以下条件之一:

(1)若到达一条涉及当前链中已经存在的操作数的指令,则该链为自相关链,此循环为BOIL;

(2)若到达一条涉及ebp或esp的指令,则该链可能是扩展的自相关链,将从该操作数再次开始新的计算;

(3)若到达循环中未包含的指令,则此循环不是BOIL。

针对以上静态检测方法检测出的相关脆弱性点,结合相关反汇编技术定位到二进制程序中,审查这类脆弱性点是否可以为外部用户所利用从而触发固件漏洞。

实施例2

本发明需要提供输入固件样本源路径、固件参数、二进制文件基地址、引入用户输出函数、固件架构信息,此外,还提供固件需要分析的二进制文件列表、网络交互二进制程序的列表、二进制程序之间通信的共享数据键、用户输入的全局变量地址等。

在接受如上的输入后,系统能够完成对输入的固件样本的漏洞检测,当嵌入式设备系统存在能够符合上述能够被攻击者所利用的脆弱点时就会给出报警,相关信息会被写入固件脆弱性分析日志。

相关技术
  • 一种基于脆弱性分析的固件未知漏洞检测方法
  • 一种基于多维度的固件Web漏洞检测方法及系统
技术分类

06120112685366