CN112685745B - 一种固件检测方法、装置、设备及存储介质 - Google Patents

一种固件检测方法、装置、设备及存储介质 Download PDF

Info

Publication number
CN112685745B
CN112685745B CN202011637639.2A CN202011637639A CN112685745B CN 112685745 B CN112685745 B CN 112685745B CN 202011637639 A CN202011637639 A CN 202011637639A CN 112685745 B CN112685745 B CN 112685745B
Authority
CN
China
Prior art keywords
function
calling
detected
behavior
firmware
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202011637639.2A
Other languages
English (en)
Other versions
CN112685745A (zh
Inventor
阚志刚
呂文昊
李洋
卢佐华
陈彪
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Bangcle Technology Co ltd
Original Assignee
Beijing Bangcle Technology Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Bangcle Technology Co ltd filed Critical Beijing Bangcle Technology Co ltd
Priority to CN202011637639.2A priority Critical patent/CN112685745B/zh
Publication of CN112685745A publication Critical patent/CN112685745A/zh
Application granted granted Critical
Publication of CN112685745B publication Critical patent/CN112685745B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

本申请实施例公开了一种固件检测方法,以解决现有技术难以有效检测固件在执行层面上暴露的问题的缺陷,该方法包括:在待检测的固件处于运行状态时,向用于运行所述待检测的固件的进程中注入操作***的应用程序接口文件;所述应用接口文件中包含钩子函数,以及stub函数;所述钩子函数,用于挂钩所述固件中的待检测函数;所述stub函数,用于模拟生成所述待检测函数被调用执行后的第一执行结果;利用钩子函数,截获针对所述待检测函数的调用行为的调用命令参数;根据所述调用命令参数,判断所述调用行为是否存在异常;基于所述stub函数,产生与所述调用行为相应的第一执行结果。本申请实施例中还提供一种固件检测装置及电子设备和存储介质。

Description

一种固件检测方法、装置、设备及存储介质
技术领域
本申请涉及工控安全技术领域,尤其涉及一种固件检测方法、装置、计算机设备及存储介质。
背景技术
固件(Firmware)作为工控和物联网设备的核心部件,其含有设备运行的操作***、协议栈、配置文件、可执行脚本和应用组件等各类信息和程序。黑客通过获取和逆向分析设备固件,能够分析出设备的运行流程和网络行为,获得口令、密钥等敏感信息,并能够对设备进行漏洞利用和攻击。
现有技术中,用户可以利用固件脆弱性分析工具(如FirmTool),在工控和物联网设备入网使用前,对设备固件开展安全检测、发现安全漏洞并做相应防范,其工作原理为,提取固件中静态的元信息,然后对提取出的元信息做进一步安全性分析以及组件漏洞分析,即可发现固件在文件、组件和函数层面的安全漏洞及隐患。
虽然FirmTool可对固件脆弱性进行分析,但该工具的分析范围仅局限于对代码层、函数层以及组件的等内容的脆弱性进行静态分析,对于固件在执行层面上才会暴露的问题难以有效检测。
发明内容
本申请实施例提供一种固件检测方法,用以解决现有技术存在的难以有效检测固件在执行层面上暴露的问题的缺陷。
本申请实施例还提供一种固件检测装置、设备及存储介质。
本申请实施例采用下述技术方案:
第一方面,提供了一种固件检测方法,该方法包括:
在待检测的固件处于运行状态时,向用于运行所述待检测的固件的进程中注入操作***的应用程序接口文件;所述应用接口文件中包含钩子函数,以及stub函数;所述钩子函数,用于挂钩所述固件中的待检测函数;所述stub函数,用于模拟产生所述待检测函数被调用执行后的第一执行结果;所述应用程序接口文件注入所述进程中时,所述stub函数的调用地址覆盖所述待检测函数的调用地址;
利用钩子函数,截获针对所述待检测函数的调用行为的调用命令参数;
根据所述调用命令参数,判断所述调用行为是否存在异常;
基于所述stub函数,产生与所述调用行为相应的第一执行结果。
第二方面,提供了一种固件检测装置,该装置包括:
注入模块,用于在待检测的固件处于运行状态时,向用于运行所述待检测的固件的进程中注入操作***的应用程序接口文件;所述应用接口文件中包含钩子函数,以及stub函数;所述钩子函数,用于挂钩所述固件中的待检测函数;所述stub函数,用于模拟产生所述待检测函数被调用执行后的第一执行结果;所述应用程序接口文件注入所述进程中时,所述stub函数的调用地址覆盖所述待检测函数的调用地址;
截获模块,用于利用钩子函数,截获针对所述待检测函数的调用行为的调用命令参数;
判断模块,用于根据所述调用命令参数,判断所述调用行为是否存在异常;
执行结果产生模块,用于基于所述stub函数,产生与所述调用行为相应的第一执行结果。
第三方面,提供了一种电子设备,包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如所述的固件检测方法的步骤。
第四方面,提供了一种存储介质,所述存储介质上存储计算机程序,所述计算机程序被处理器执行时实现如所述的固件检测方法的步骤。
本申请实施例采用的上述至少一个技术方案能够达到以下有益效果:
在本申请实施例中,由于向运行的待检测固件的进程中注入钩子函数以及stub函数,利用钩子函数勾取待检测函数,利用stub函数模拟待检测函数被调用后的第一执行结果,进而,利用钩子函数截获待检测函数的调用行为的调用命令参数,判断调用行为是否存在异常,基于stub函数和调用行为是否异常,得到相应的阻断或放行的执行结果,因此,解决现有技术中难以有效检测固件在执行层面上暴露的问题的缺陷。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1a为本申请实施例一提供的一种固件检测方法的实施流程示意图;
图1b为本申请实施例一提供的一种固件感染蠕虫病毒从而存在漏洞的实施流程示意图;
图2a为本申请实施例二提供的一种固件检测方法的实施流程示意图;
图2b为本申请实施例二提供的一种Command编辑界面显示样式示意图;
图2c为本申请实施例二提供的一种模拟异常行为界面显示样式示意图;
图2d为本申请实施例二提供的命令拦截界面显示样式示意图;
图2e为本申请实施例二提供的HEX数据界面显示样式示意图;
图3为本申请实施例三提供的一种固件检测装置的结构示意图;
图4为本申请实施例四提供的一种电子设备的硬件结构示意图。
具体实施方式
实施例1
为解决现有技术存在的难以有效检测固件在执行层面上暴露的问题的缺陷,本申请实施例1提供一种固件检测方法。
该方法的执行主体可以是用户所使用的电子设备或电子设备上运行的软件***,或者,可以是服务器或服务器上运行的软件***,等等。
为便于描述本申请实施例1,以下以待检测是否存在漏洞的固件为PLC固件、方法执行主体为用户使用的用于进行固件检测的PCL仿真器为例,对该方法进行介绍。
本领域技术人员可以理解的是,本申请实施例提供的该方法也可以应用于对其他类型的待检测固件进行漏洞检测,且,该方法的执行主体也不限于是PCL仿真器。
请参见说明书附图1a,为本申请实施例1提供的该固件检测方法的具体流程示意图,该流程具体包括如下步骤:
步骤11,PCL仿真器在待检测的PLC固件处于运行状态时,向用于运行所述PLC固件的进程中注入操作***的应用程序接口文件;
为检验本申请实施例提供的方法是否可行,发明人采用了如图1b所示的模拟流程,使一个固件感染蠕虫病毒从而存在漏洞。
图1b所示的流程大致包括如下步骤:
为运行有PCL仿真器的电子设备指定一个可提供蠕虫病毒的服务器的IP地址;
电子设备基于该IP地址与所述的服务器建立连接;若连接建立失败,则关闭连接,即取消发送连接请求,并重新连接另一个可提供蠕虫病毒的服务器的IP地址;若连接建立成功,则下载蠕虫病毒感染PLC固件;
判断PLC固件是否存在感染状态;若不存在感染状态,则停止运行PLC固件,并等待病毒完成感染后,再次激活PLC固件;若存在感染状态,则关闭连接。
发明人通过对固件感染蠕虫病毒后的行为进行分析获知,通常而言,上述连接建立后,所述服务器上的蠕虫病毒会通过调用数据传送命令TSEND和/或数据接收命令TRCV进行传播。
数据传送命令TSEND,会对PLC固件中的send函数(网络发送函数)进行调用;数据接收命令TRCV,则会对PLC固件中的网络接收函数进行调用。
类似地,其他类似病毒也会调用这两种命令中的至少一种进行传播。从而,固件在执行层面的漏洞,很可能从这两种命令对网络发送/网络接收函数的调用行为上得以体现。
当然,本发明实施例提供的该方法,也适用于病毒使用其他命令对除网络发送函数和网络接收函数函数以外的其他函数进行调用的情况,本发明实施例对该方法的适用范围不做限定。
基于上述分析,为至少实现对感染了上述病毒或类似病毒的PLC固件在执行层面的漏洞进行有效检测,在步骤11中,PCL仿真器在PLC固件处于运行状态时,向用于运行该PLC固件的进程中注入操作***的应用程序接口文件——以windows操作***为例,该应用程序接口文件可以是Wsock32.dll文件。
注入的应用接口文件中,可以包含钩子函数,以及stub函数。这两个函数各自的功能如下:
钩子函数,用于挂钩PLC固件中的待检测函数,如网络发送函数和/或网络接收函数。利用钩子函数,可以截获针对待检测函数的调用行为的调用命令参数,如上文所述的用于调用网络发送函数/网络接收函数的数据传送命令TSEND/数据接收命令TRCV。
stub函数(称桩函数或存根函数),它用于模拟产生待检测函数被调用执行后的执行结果。
本申请实施例中,应用程序接口文件注入所述进程中时,stub函数的调用地址会覆盖待检测函数的调用地址。从而,以数据传送命令TSEND或数据接收命令TRCV为例,因为stub函数的调用地址覆盖了待检测函数的调用地址,数据传送命令TSEND或数据接收命令TRCV对PLC固件中的待检测函数(网络发送/网络接收函数)进行的调用,会转变为对该stub函数进行调用。
步骤12,PCL仿真器利用所述进程中注入的操作***的应用程序接口文件所包含的钩子函数,截获针对待检测函数的调用行为的调用命令参数;
以基于数据传送命令TSEND调用网络发送函数为例,利用钩子函数,可以截获调用网络发送函数的数据传送命令TSEND的参数。该些参数可以但不限于包括下述参数中的至少一种:
待利用网络发送函数发送的数据的目的IP地址、目的端口号、数据的内容、数据所属文件的信息(如文件名和/或文件的存储位置等)。
以基于数据接收命令TRCV调用网络接收函数为例,利用钩子函数,可以截获调用网络接收函数的数据传送命令TRCV的参数。该些参数可以但不限于包括下述参数中的至少一种:
待利用所述网络接收函数接收的数据的源IP地址、源端口号、数据的内容、数据将要写入的文件的信息(如文件名和/或文件的存储位置等)。
步骤13,PCL仿真器根据钩子函数截获的调用命令参数,判断针对待检测函数的调用行为是否存在异常;无论是否异常,均执行步骤14;
本申请实施例中,PCL仿真器可以通过解析钩子函数截获的调用命令参数是否存在异常,来判断所述调用行为是否存在异常;若存在异常,则判定固件存在漏洞;若不存在异常,则可以判定固件不存在漏洞。
举例来说,可以基于预先保存的调用命令参数黑名单/白名单,与钩子函数截获的调用命令参数进行比较,若比较结果为钩子函数截获的调用命令参数中存在命中黑名单中调用命令参数的参数——如命中黑名单中的源IP地址和端口号,则可以判定调用行为存在异常,进而判定固件存在漏洞。
又比如,以比较对象为数据内容为例,可以基于预先保存的历史调用行为涉及的数据内容,与钩子函数截获的调用命令参数中的数据内容进行比较,来得出固件是否存在漏洞的结论。举例来说,若历史调用行为均是调用send函数向局域网内的目的IP地址172.1.1.52发送固定的数据内容AAAAAA,而当前这次向该目的IP地址发送的数据为BBBBAAA,则可以判定调用行为存在异常,进而判定固件存在漏洞。
本申请实施例中,为避免对异常调用行为的漏检,还可以综合历史发生的调用行为的一些信息,来判断是否存在异常的调用行为。
比如,在一种实施方式中,可以将调用命令参数、待检测函数的函数名、调用行为的发生时机、调用上下文,存储至指定存储空间。所述的指定存储空间,是预先指定的、用于存储针对待检测的PLC固件中的函数的各调用行为的调用命令参数、函数名、发生时机、调用上下文的存储空间。
基于这样的存储机制,后续可以根据已经存储于指定存储空间的调用命令参数、函数名、发生时机、调用上下文,判断是否有存在异常的调用行为。
举例来说,若多次历史调用行为均是调用PLC固件的send函数在12:00~13:00这一时间段,向局域网内的目的IP地址172.1.1.52发送数据,而当前这次调用该send函数向该目的IP地址发送数据是在17:00~18:00,则也可以判定调用行为存在异常,进而判定固件存在漏洞。
针对上述“调用上下文”,为便于对调用上下文进行回溯分析,在一种实施方式中,调用行为的调用上下文,可以以堆栈的形式存储在所述存储空间中。
其中,调用上下文是对一个函数在经多次调用后所构成的函数调用记录。
其中,堆栈是一种要求数据项按序排列的数据结构,只能在一端(称为栈顶(top))对数据项进行***和删除。
本发明实施例中,利用堆栈进行调用上下文的存储,目的是期望利用堆栈天然能够体现数据压入堆栈的先后顺序的特点,来确定相应调用行为的发生先后顺序。
具体来说,在先发生的调用行为的调用上下文,与在后发生的调用行为的调用上下文,在堆栈中总是会按调用行为发生的时间先后顺序有序排列。从而,在分析堆栈中的调用上下文时,根据调用上下文在堆栈中的相对位置关系,就可以确定出不同调用行为的先后发生顺序。基于确定出的不同调用行为的先后发生顺序,可以判断是否存在发生顺序异常的调用行为。
比如,可以与预先规定的可信的调用行为发生顺序相比,若与可信的调用行为发生顺序不一致,则可以判定调用行为存在异常,进而判定固件可能存在漏洞。
步骤14,基于stub函数,产生与针对待检测函数的调用行为相对应的执行结果。
如前文所述,PCL仿真器根据钩子函数截获的调用命令参数,判断针对待检测函数的调用行为是否存在异常;无论是否异常,均执行步骤14;
但在具体执行步骤14时,视调用行为是否存在异常,步骤14的具体执行过程有所不同:
若判断调用行为不存在异常,则基于针对待检测函数的调用行为的调用命令参数执行stub函数。
被执行的stub函数实现如下操作:
将调用上下文,压入预先指定的用于存储调用上下文的前述堆栈中;
基于待检测函数的当前调用地址,以及针对待检测函数的调用行为的调用命令参数,调用待检测函数;
获取待检测函数基于该调用行为的调用命令参数的执行结果,作为stub函数的执行结果。
若判断所述调用行为存在异常,则基于针对所述待检测函数的调用行为的调用命令参数,执行stub函数后,stub函数会返回默认的错误值,作为stub函数的执行结果。
在一种实施方式中,可以在stub函数中设置阻断标识。基于该阻断标识的存在,当stub函数执行至阻断标识时,会返回默认的错误值,作为stub函数的执行结果。
本申请实施例中,向运行的待检测固件的进程中注入钩子函数以及stub函数,利用钩子函数勾取待检测函数,利用stub函数模拟待检测函数被调用后的第一执行结果,进而,利用钩子函数截获待检测函数的调用行为的调用命令参数,判断调用行为是否存在异常,基于stub函数和调用行为是否异常,得到相应的阻断或放行的执行结果,因此,解决现有技术中难以有效检测固件在执行层面上暴露的问题的缺陷。
实施例2
以下结合实际场景,说明本申请实施例提供的方法在实际场景中如何应用。
本申请实施例中,以snap7工控模拟器为宿主进程,将宿主进程中的“send”行为模拟为异常的“send”行为。
请参见图2a,为本申请实施例提供一种固件检测方法的实施流程示意图。该流程具体包括如下步骤:
S21:Snap7工控模拟器加载Serverdemo.exe作为测试进程exe。
Serverdemo.exe是西门子的仿真器提供的仿真客户端。
S22:***客户端对Clientdemo.exe端进行拦截检测。
Clientdemo.exe是西门子的仿真器提供的仿真服务端。
同时,***客户端还可以对Serverdemo.exe端进行拦截,在本申请实施例中,重点阐述使用***客户端对Clientdemo.exe端进行拦截的过程。
S23:假设用户通过对***客户端中的“Command”栏进行设置,以使得***客户端对Wsock32.dll中的“send”行为进行拦截操作,进而***客户端拦截Wsock32.dll中异常“send”行为。
如图2b所示,用户可修改“Command”对应的命令,以修改拦截点为“bp send”;
如图2c所示,假设用户模拟的异常的“send”行为命令为“$00B2”,“send”行为在调用的过程中若使用了“$00B2”命令,则***客户端会对包含“$00B2”命令的行为进行拦截;
如图2d所示,***客户端中显示拦截到“send”发送行为,获取并分析异常“send”行为对应的调用命令参数、待检测函数的函数名、调用行为的发生时机、调用上下文,同时,将获取到上述信息存储至指定存储空间。
其中,调用命令参数具体包括:IP地址、目的端口号、第一数据的内容、第一数据所属文件的信息调用命令参数。
S24:***客户端解析在指定存储空间的调用命令参数,将解析后的数据与预设黑白名单对比,从而判断调用命令参数中是否存在异常。
基于在存储空间中保存的IP地址、目的端口号、第一数据的内容、第一数据所属文件的信息调用命令参数等信息,经解析后,如图2b所示,得到该“send”行为中存在异常的参数的“size”为0X21,基于解析后的数据长度,如图2e所示,进一步去寻找对应该数据长度的数据参数,在“HEX数据”界面中进行数据参数排查后可知,“00b2”数据指令与预先设置的调用命令参数黑名单中的内容相匹配,因此,包含“00b2”指令的“send”行为异常行为。
S25:经判断后,***客户端对异常的“send”行为执行拦截操作,对正常的“send”行为执行放行操作。
本申请中实施例中,向运行的待检测固件的进程中注入钩子函数以及stub函数,利用钩子函数勾取待检测函数,利用stub函数模拟待检测函数被调用后的第一执行结果,进而,利用钩子函数截获待检测函数的调用行为的调用命令参数,判断调用行为是否存在异常,基于stub函数和调用行为是否异常,得到相应的阻断或放行的执行结果,因此,解决现有技术中难以有效检测固件在执行层面上暴露的问题的缺陷。
实施例3
为解决现有技术中存在的难以有效检测固件在执行层面上暴露的问题的缺陷,本申请实施例提供一种固件检测装置,该装置的具体结构示意图如图3所示,包括注入模块31、截获模块32、判断模块33、执行结果产生模块34,各模块的功能如下:
注入模块31,用于在待检测的固件处于运行状态时,向用于运行所述待检测的固件的进程中注入操作***的应用程序接口文件;所述应用接口文件中包含钩子函数,以及stub函数;所述钩子函数,用于挂钩所述固件中的待检测函数;所述stub函数,用于模拟产生所述待检测函数被调用执行后的第一执行结果;所述应用程序接口文件注入所述进程中时,所述stub函数的调用地址覆盖所述待检测函数的调用地址。
截获模块32,用于利用钩子函数,截获针对所述待检测函数的调用行为的调用命令参数;
可选的,所述截获模块32,具体包括:
若所述待检测函数包括网络发送函数;则所述调用命令参数,包括下述参数中的至少一种:
待利用所述网络发送函数发送的第一数据的目的IP地址、目的端口号、所述第一数据的内容、所述第一数据所属文件的信息;
若所述待检测函数包括网络接收函数;则所述调用命令参数,包括下述参数中的至少一种:
待利用所述网络接收函数接收的第二数据的源IP地址、源端口号、所述第二数据的内容、所述第二数据将要写入的文件的信息。
可选的,所述固件检测装置还包括:
存储模块,用于将所述调用命令参数、所述待检测函数的函数名、所述调用行为的发生时机、调用上下文,存储至指定存储空间;所述指定存储空间,是预先指定的、用于存储针对所述待检测的固件中的函数的各调用行为的调用命令参数、函数名、发生时机、调用上下文的存储空间;
异常调用行为判断模块,用于根据已经存储于所述指定存储空间的调用命令参数、函数名、发生时机、调用上下文,判断是否有存在异常的调用行为。
可选的,所述stub函数中设置有阻断标识;则,所述执行结果产生模块34,还用于:
若判断所述调用行为存在异常,则基于针对所述待检测函数的调用行为的调用命令参数,执行所述stub函数,其中,当所述stub函数执行至所述阻断标识时,返回默认的错误值作为所述第一执行结果。
判断模块33,用于根据所述调用命令参数,判断所述调用行为是否存在异常;
执行结果产生模块34,用于基于所述stub函数,产生与所述调用行为相应的第一执行结果。
可选的,针对所述待检测函数的调用行为的调用上下文,以堆栈的形式存储在所述存储空间中;所述执行结果产生模块34,具体包括:
若判断所述调用行为不存在异常,则基于所述针对所述待检测函数的调用行为的调用命令参数,执行所述stub函数,其中,被执行的所述stub函数实现如下操作:
压入单元,用于将所述调用上下文,压入预先指定的用于存储调用上下文的堆栈中;
待检测函数调用单元,用于基于所述待检测函数的当前调用地址,以及针对所述待检测函数的调用行为的调用命令参数,调用所述待检测函数;
第二执行结果获取单元,用于获取第二执行结果作为所述第一执行结果;所述第二执行结果,为所述待检测函数基于针对所述待检测函数的调用行为的调用命令参数的执行结果。
本申请实施例中,向运行的待检测固件的进程中注入钩子函数以及stub函数,利用钩子函数勾取待检测函数,利用stub函数模拟待检测函数被调用后的第一执行结果,进而,利用钩子函数截获待检测函数的调用行为的调用命令参数,判断调用行为是否存在异常,基于stub函数和调用行为是否异常,得到相应的阻断或放行的执行结果,因此,解决现有技术中难以有效检测固件在执行层面上暴露的问题的缺陷。
实施例4
请参阅图4,图4是本申请实施例应用的网络侧设备的结构图,能够实现实施例1至实施例3中所述方法的细节,并达到相同的效果。
本实施例4涉及一种电子设备,如图4所示。在硬件层面,电子设备包括处理器,可选地还包括内部总线、网络接口、存储器。其中,存储器可能包含内存,例如高速随机存取存储器(Random-Access Memory,RAM),也可能还包括非易失性存储器(non-volatilememory),例如至少1个磁盘存储器等。当然,该电子设备还可能包括其他业务所需要的硬件。
处理器、网络接口和存储器可以通过内部总线相互连接,该内部总线可以是ISA(Industry Standard Architecture,工业标准体系结构)总线、PCI(PeripheralComponentInterconnect,外设部件互连标准)总线或EISA(Extended IndustryStandardArchitecture,扩展工业标准结构)总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图4仅用一个双向箭头表示,但并不表示仅有一根总线或一种类型的总线。
存储器,用于存放程序。具体地,程序可以包括程序代码,所述程序代码包括计算机操作指令。存储器可以包括内存和非易失性存储器,并向处理器提供指令和数据。
处理器从非易失性存储器中读取对应的计算机程序到内存中然后运行,在逻辑层面上形成固件检测装置。处理器,执行存储器所存放的程序,并具体用于执行以下操作:
在待检测的固件处于运行状态时,向用于运行所述待检测的固件的进程中注入操作***的应用程序接口文件;所述应用接口文件中包含钩子函数,以及stub函数;所述钩子函数,用于挂钩所述固件中的待检测函数;所述stub函数,用于模拟产生所述待检测函数被调用执行后的第一执行结果;所述应用程序接口文件注入所述进程中时,所述stub函数的调用地址覆盖所述待检测函数的调用地址;
利用钩子函数,截获针对所述待检测函数的调用行为的调用命令参数;
根据所述调用命令参数,判断所述调用行为是否存在异常;
基于所述stub函数,产生与所述调用行为相应的第一执行结果。
上述如本说明书提供的一种固件检测方法可以应用于处理器中,或者由处理器实现。处理器可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器可以是通用处理器,包括中央处理器(CentralProcessing Unit,CPU)、网络处理器(NetworkProcessor,NP)等;还可以是数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific IntegratedCircuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本说明书实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
结合本说明书实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器,处理器读取存储器中的信息,结合其硬件完成上述方法的步骤。
本说明书实施例还提出了一种计算机可读存储介质,该计算机可读存储介质存储一个或多个程序,该一个或多个程序包括指令,该指令当被包括多个应用程序的电子设备执行时,能够使该电子设备执行一种固件检测方法,并具体用于执行:
在待检测的固件处于运行状态时,向用于运行所述待检测的固件的进程中注入操作***的应用程序接口文件;所述应用接口文件中包含钩子函数,以及stub函数;所述钩子函数,用于挂钩所述固件中的待检测函数;所述stub函数,用于模拟产生所述待检测函数被调用执行后的第一执行结果;所述应用程序接口文件注入所述进程中时,所述stub函数的调用地址覆盖所述待检测函数的调用地址;
利用钩子函数,截获针对所述待检测函数的调用行为的调用命令参数;
根据所述调用命令参数,判断所述调用行为是否存在异常;
基于所述stub函数,产生与所述调用行为相应的第一执行结果。
上述实施例阐明的***、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。
为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本说明书时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
本领域内的技术人员应明白,本说明书的实施例可提供为方法、装置、或计算机程序产品。因此,本说明书可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本说明书可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本说明书是参照根据本说明书实施例的方法、设备(***)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制时,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于***实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

Claims (8)

1.一种固件检测方法,其特征在于,包括:
在待检测的固件处于运行状态时,向用于运行所述待检测的固件的进程中注入操作***的应用程序接口文件;所述应用程序接口文件中包含钩子函数,以及stub函数;所述钩子函数,用于挂钩所述待检测的固件中的待检测函数;所述stub函数,用于模拟产生所述待检测函数被调用执行后的第一执行结果;所述应用程序接口文件注入所述进程中时,所述stub函数的调用地址覆盖所述待检测函数的调用地址;
利用钩子函数,截获针对所述待检测函数的调用行为的调用命令参数;
根据所述调用命令参数,判断所述调用行为是否存在异常;
基于所述stub函数,产生与所述调用行为相应的第一执行结果;
若所述待检测函数包括网络发送函数,则所述调用命令参数,包括下述参数中的至少一种:
待利用所述网络发送函数发送的第一数据的目的IP地址、目的端口号、所述第一数据的内容、所述第一数据所属文件的信息;
若所述待检测函数包括网络接收函数;则所述调用命令参数,包括下述参数中的至少一种:
待利用所述网络接收函数接收的第二数据的源IP地址、源端口号、所述第二数据的内容、所述第二数据将要写入的文件的信息;
将所述调用命令参数、所述待检测函数的函数名、所述调用行为的发生时机、调用上下文,存储至指定存储空间;所述指定存储空间,是预先指定的、用于存储针对所述待检测的固件中的函数的各调用行为的调用命令参数、函数名、发生时机、调用上下文的存储空间;
根据已经存储于所述指定存储空间的调用命令参数、函数名、发生时机、调用上下文,判断是否有存在异常的调用行为。
2.根据权利要求1所述的方法,其特征在于,所述stub函数中设置有阻断标识;则,
基于所述stub函数,产生与所述调用行为相应的第一执行结果,包括:
若判断所述调用行为存在异常,则基于针对所述待检测函数的调用行为的调用命令参数,执行所述stub函数,其中,当所述stub函数执行至所述阻断标识时,返回默认的错误值作为所述第一执行结果。
3.根据权利要求2所述的方法,其特征在于,针对所述待检测函数的调用行为的调用上下文,以堆栈的形式存储在所述指定存储空间中;
基于所述stub函数,产生与所述调用行为相应的第一执行结果,包括:
若判断所述调用行为不存在异常,则基于所述针对所述待检测函数的调用行为的调用命令参数,执行所述stub函数,其中,被执行的所述stub函数实现如下操作:
将所述调用上下文,压入预先指定的用于存储调用上下文的堆栈中;
基于所述待检测函数的当前调用地址,以及针对所述待检测函数的调用行为的调用命令参数,调用所述待检测函数;
获取第二执行结果作为所述第一执行结果;所述第二执行结果,为所述待检测函数基于针对所述待检测函数的调用行为的调用命令参数的执行结果。
4.一种固件检测装置,其特征在于,包括:
注入模块,用于在待检测的固件处于运行状态时,向用于运行所述待检测的固件的进程中注入操作***的应用程序接口文件;所述应用程序接口文件中包含钩子函数,以及stub函数;所述钩子函数,用于挂钩所述待检测的固件中的待检测函数;所述stub函数,用于模拟产生所述待检测函数被调用执行后的第一执行结果;所述应用程序接口文件注入所述进程中时,所述stub函数的调用地址覆盖所述待检测函数的调用地址;
截获模块,用于利用钩子函数,截获针对所述待检测函数的调用行为的调用命令参数;
判断模块,用于根据所述调用命令参数,判断所述调用行为是否存在异常;
执行结果产生模块,用于基于所述stub函数,产生与所述调用行为相应的第一执行结果;
所述截获模块,具体包括:
若所述待检测函数包括网络发送函数,则所述调用命令参数,包括下述参数中的至少一种:
待利用所述网络发送函数发送的第一数据的目的IP地址、目的端口号、所述第一数据的内容、所述第一数据所属文件的信息;
若所述待检测函数包括网络接收函数;则所述调用命令参数,包括下述参数中的至少一种:
待利用所述网络接收函数接收的第二数据的源IP地址、源端口号、所述第二数据的内容、所述第二数据将要写入的文件的信息;
所述装置还包括:
存储模块,用于将所述调用命令参数、所述待检测函数的函数名、所述调用行为的发生时机、调用上下文,存储至指定存储空间;所述指定存储空间,是预先指定的、用于存储针对所述待检测的固件中的函数的各调用行为的调用命令参数、函数名、发生时机、调用上下文的存储空间;
异常调用行为判断模块,用于根据已经存储于所述指定存储空间的调用命令参数、函数名、发生时机、调用上下文,判断是否有存在异常的调用行为。
5.根据权利要求4所述的装置,其特征在于,所述stub函数中设置有阻断标识;则,
所述执行结果产生模块,还用于:
若判断所述调用行为存在异常,则基于针对所述待检测函数的调用行为的调用命令参数,执行所述stub函数,其中,当所述stub函数执行至所述阻断标识时,返回默认的错误值作为所述第一执行结果。
6.根据权利要求5所述的装置,其特征在于,针对所述待检测函数的调用行为的调用上下文,以堆栈的形式存储在所述指定存储空间中;
所述执行结果产生模块,包括:
若判断所述调用行为不存在异常,则基于所述针对所述待检测函数的调用行为的调用命令参数,执行所述stub函数,其中,被执行的所述stub函数实现如下操作:
压入单元,用于将所述调用上下文,压入预先指定的用于存储调用上下文的堆栈中;
待检测函数调用单元,用于基于所述待检测函数的当前调用地址,以及针对所述待检测函数的调用行为的调用命令参数,调用所述待检测函数;
第二执行结果获取单元,用于获取第二执行结果作为所述第一执行结果;所述第二执行结果,为所述待检测函数基于针对所述待检测函数的调用行为的调用命令参数的执行结果。
7.一种电子设备,其特征在于,包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如权利要求1至3中任一项所述的固件检测方法的步骤。
8.一种存储介质,其特征在于,所述存储介质上存储计算机程序,所述计算机程序被处理器执行时实现如权利要求1至3中任一项所述的固件检测方法的步骤。
CN202011637639.2A 2020-12-31 2020-12-31 一种固件检测方法、装置、设备及存储介质 Active CN112685745B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011637639.2A CN112685745B (zh) 2020-12-31 2020-12-31 一种固件检测方法、装置、设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011637639.2A CN112685745B (zh) 2020-12-31 2020-12-31 一种固件检测方法、装置、设备及存储介质

Publications (2)

Publication Number Publication Date
CN112685745A CN112685745A (zh) 2021-04-20
CN112685745B true CN112685745B (zh) 2023-11-21

Family

ID=75456564

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011637639.2A Active CN112685745B (zh) 2020-12-31 2020-12-31 一种固件检测方法、装置、设备及存储介质

Country Status (1)

Country Link
CN (1) CN112685745B (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114756871A (zh) * 2022-04-22 2022-07-15 Oppo广东移动通信有限公司 漏洞检测方法、装置、电子设备及存储介质
CN115422091B (zh) * 2022-11-03 2023-04-14 合肥康芯威存储技术有限公司 一种固件调试方法及装置、电子设备、存储介质
CN116561768B (zh) * 2023-05-19 2024-05-28 国家计算机网络与信息安全管理中心 设备固件漏洞检测方法、装置、设备及存储介质

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108259478A (zh) * 2017-12-29 2018-07-06 中国电力科学研究院有限公司 基于工控终端设备接口hook的安全防护方法
CN109117664A (zh) * 2018-07-19 2019-01-01 北京明朝万达科技股份有限公司 应用程序的访问控制方法和装置
CN109635523A (zh) * 2018-11-29 2019-04-16 北京奇虎科技有限公司 应用程序检测方法、装置及计算机可读存储介质
CN111382440A (zh) * 2018-12-27 2020-07-07 北京奇虎科技有限公司 基于虚拟机实现的cpu漏洞检测方法及***
CN111597109A (zh) * 2020-04-24 2020-08-28 清华大学 一种跨架构固件堆内存的缺陷检测方法及***

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108259478A (zh) * 2017-12-29 2018-07-06 中国电力科学研究院有限公司 基于工控终端设备接口hook的安全防护方法
CN109117664A (zh) * 2018-07-19 2019-01-01 北京明朝万达科技股份有限公司 应用程序的访问控制方法和装置
CN109635523A (zh) * 2018-11-29 2019-04-16 北京奇虎科技有限公司 应用程序检测方法、装置及计算机可读存储介质
CN111382440A (zh) * 2018-12-27 2020-07-07 北京奇虎科技有限公司 基于虚拟机实现的cpu漏洞检测方法及***
CN111597109A (zh) * 2020-04-24 2020-08-28 清华大学 一种跨架构固件堆内存的缺陷检测方法及***

Also Published As

Publication number Publication date
CN112685745A (zh) 2021-04-20

Similar Documents

Publication Publication Date Title
CN112685745B (zh) 一种固件检测方法、装置、设备及存储介质
Xu et al. Attacking the brain: Races in the {SDN} control plane
US10055585B2 (en) Hardware and software execution profiling
TWI603600B (zh) 利用運行期代理器及網路探查器判定漏洞之技術
Lu et al. Chex: statically vetting android apps for component hijacking vulnerabilities
EP2513793B1 (en) Method and system of runtime analysis
CN108664793B (zh) 一种检测漏洞的方法和装置
CN111400722B (zh) 扫描小程序的方法、装置、计算机设备和存储介质
CN108989355B (zh) 一种漏洞检测方法和装置
CN109101815B (zh) 一种恶意软件检测方法及相关设备
EP3270319B1 (en) Method and apparatus for generating dynamic security module
Bai et al. Towards model checking android applications
US9507933B2 (en) Program execution apparatus and program analysis apparatus
US10586045B2 (en) System and method for detecting malware in mobile device software applications
US20240121261A1 (en) Automated Security Analysis of Software Libraries
CN109255240B (zh) 一种漏洞处理方法和装置
US11055416B2 (en) Detecting vulnerabilities in applications during execution
Falkenberg et al. A new approach towards DoS penetration testing on web services
CN108959936B (zh) 一种基于路径分析的缓冲区溢出漏洞自动利用方法
Micskei et al. Robustness testing techniques and tools
US20240160748A1 (en) Method And System For Data Flow Monitoring To Identify Application Security Vulnerabilities And To Detect And Prevent Attacks
CN110851838A (zh) 一种基于互联网的云测试***及安全测试方法
Wang et al. {MetaSymploit}:{Day-One} Defense against Script-based Attacks with {Security-Enhanced} Symbolic Analysis
CN106529342B (zh) 基于安全芯片的虚拟机监控器动态完整性检测方法
Dong et al. A comprehensive client-side behavior model for diagnosing attacks in ajax applications

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant