CN114756871A - 漏洞检测方法、装置、电子设备及存储介质 - Google Patents
漏洞检测方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN114756871A CN114756871A CN202210430821.3A CN202210430821A CN114756871A CN 114756871 A CN114756871 A CN 114756871A CN 202210430821 A CN202210430821 A CN 202210430821A CN 114756871 A CN114756871 A CN 114756871A
- Authority
- CN
- China
- Prior art keywords
- function
- target
- functions
- firmware
- vulnerability detection
- 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.)
- Pending
Links
- 238000001514 detection method Methods 0.000 title claims abstract description 141
- 230000006870 function Effects 0.000 claims abstract description 574
- 238000000034 method Methods 0.000 claims abstract description 89
- 230000008569 process Effects 0.000 claims abstract description 38
- 238000004590 computer program Methods 0.000 claims description 11
- 238000004088 simulation Methods 0.000 abstract description 14
- 230000000875 corresponding effect Effects 0.000 description 66
- 238000012360 testing method Methods 0.000 description 34
- 238000010586 diagram Methods 0.000 description 13
- 238000012545 processing Methods 0.000 description 9
- 238000004458 analytical method Methods 0.000 description 7
- 238000004891 communication Methods 0.000 description 5
- 230000007547 defect Effects 0.000 description 5
- 238000005065 mining Methods 0.000 description 5
- 238000005516 engineering process Methods 0.000 description 3
- 238000007726 management method Methods 0.000 description 3
- 230000035772 mutation Effects 0.000 description 3
- 230000002159 abnormal effect Effects 0.000 description 2
- 230000008878 coupling Effects 0.000 description 2
- 238000010168 coupling process Methods 0.000 description 2
- 238000005859 coupling reaction Methods 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 238000000638 solvent extraction Methods 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 206010043431 Thinking abnormal Diseases 0.000 description 1
- 230000002411 adverse Effects 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 238000004883 computer application Methods 0.000 description 1
- 230000001276 controlling effect Effects 0.000 description 1
- 230000002596 correlated effect Effects 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 238000013508 migration Methods 0.000 description 1
- 230000005012 migration Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 238000009877 rendering Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 238000011144 upstream manufacturing Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/57—Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
- G06F21/577—Assessing vulnerabilities and evaluating computer system security
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
- G06F21/562—Static detection
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/602—Providing cryptographic facilities or services
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Health & Medical Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Computing Systems (AREA)
- Virology (AREA)
- Bioethics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本申请公开了漏洞检测方法、装置、电子设备及存储介质,涉及安全技术领域,包括:获取用于实现目标固件的至少一个功能的多个函数,从多个函数中确定至少一个指定函数,获取表示目标设备运行目标固件过程中执行每个指定函数时的运行状态的上下文信息,基于模拟器对每个指定函数执行漏洞检测操作得到漏洞检测结果,漏洞检测操作包括:基于上下文信息更新模拟器运行状态,使模拟器运行状态与目标设备执行每个指定函数的运行状态匹配,用更新后的模拟器对每个指定函数进行漏洞检测。本申请对真实设备执行每个指定函数的运行状态进行模拟,使仿真更准确且接近于真实设备,在仿真和漏洞检测时将指定函数区分开,可针对性地对指定函数进行漏洞检测。
Description
技术领域
本申请涉及安全技术领域,更具体地,涉及一种漏洞检测方法、装置、电子设备及存储介质。
背景技术
随着互联网的高速发展,计算机应用程序多元化发展,诸如电子邮箱、网上银行、即时通讯等应用程序被广泛应用在用户生活和工作的各个方面,网络数据安全泄露事件层出不穷,设备安全防护刻不容缓。然而现在的漏洞检测方式得出的漏洞检测结果准确率较低,无法有效地检测出漏洞。
发明内容
本申请提出了一种漏洞检测方法、装置、电子设备及存储介质,以改善上述缺陷。
第一方面,本申请实施例提供了一种漏洞检测方法,包括:获取目标固件的多个函数,每个函数用于实现所述目标固件的至少一个功能;从所述目标固件的多个函数中确定至少一个指定函数;获取每个所述指定函数对应的上下文信息,所述上下文信息用于表示目标设备运行所述目标固件的过程中,执行每个所述指定函数时的运行状态;基于模拟器对每个所述指定函数执行漏洞检测操作,得到漏洞检测结果,所述漏洞检测操作包括:基于所述上下文信息更新所述模拟器的运行状态,以使所述模拟器的运行状态与所述目标设备运行每个所述指定函数时的运行状态相匹配,使用更新后的所述模拟器对每个所述指定函数进行漏洞检测。
第二方面,本申请实施例还提供了漏洞检测装置,该装置包括:函数获取模块、函数确定模块、信息获取模块和漏洞检测模块。函数获取模块,用于获取目标固件的多个函数,每个函数用于实现所述目标固件的至少一个功能;函数确定模块,用于从所述目标固件的多个函数中确定至少一个指定函数;信息获取模块,用于获取每个所述指定函数对应的上下文信息,所述上下文信息用于表示目标设备运行所述目标固件的过程中,执行每个所述指定函数时的运行状态;漏洞检测模块,用于基于模拟器对每个所述指定函数执行漏洞检测操作,得到漏洞检测结果,所述漏洞检测操作包括:基于所述上下文信息更新所述模拟器的运行状态,以使所述模拟器的运行状态与所述目标设备运行每个所述指定函数时的运行状态相匹配,使用更新后的所述模拟器对每个所述指定函数进行漏洞检测。
第三方面,本申请实施例还提供了一种电子设备,一个或多个处理器;存储器;一个或多个应用程序,其中所述一个或多个应用程序被存储在所述存储器中并被配置为由所述一个或多个处理器执行,所述一个或多个应用程序配置用于执行上述方法。
第四方面,本申请实施例还提供了一种计算机可读存储介质,所述存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由处理器加载并执行上述方法。
第五方面,本申请实施例还提供了一种包含指令的计算机程序产品,所述计算机程序产品中存储有指令,当其在计算机上运行时,使得计算机实现上述方法。
本申请实施例提供的漏洞检测方法、装置、电子设备及存储介质,首先获取目标固件的多个函数,其中每个函数用于实现目标固件的至少一个功能,从目标固件的多个函数中确定至少一个指定函数,并获取每个指定函数对应的上下文信息,该上下文信息用于表示目标设备运行目标固件的过程中,执行每个指定函数时的运行状态。接着可以基于模拟器对每个指定函数执行漏洞检测操作从而得到漏洞检测结果,漏洞检测操作包括:基于上下文信息更新模拟器的运行状态,以使模拟器的运行状态与目标设备运行每个指定函数时的运行状态相匹配,再使用更新后的模拟器对每个指定函数进行漏洞检测。因此,本申请所示的模拟器可以利用每个指定函数对应的上下文信息对真实设备运行固件的过程中执行每个指定函数时的运行状态进行模拟,使得仿真更加准确、更加接近于真实设备,这样在模拟仿真和漏洞检测时将固件中的各个指定函数区分开,可以针对性地对每个指定函数进行漏洞检测,因此可以更加精准而有效地实现对固件中指定函数的漏洞检测。
本申请实施例的其他特征和优点将在随后的说明书阐述,并且,部分地从说明书中变得显而易见,或者通过实施本申请实施例而了解。本申请实施例的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1示出了本申请一实施例提供的漏洞检测方法的一种应用环境示意图;
图2示出了本申请一实施例提供的漏洞检测方法的方法流程图;
图3示出了本申请一实施例提供的确定指定函数的方法流程图;
图4示出了本申请一实施例提供的控制流图的示意图;
图5示出了本申请又一实施例提供的漏洞检测方法的方法流程图;
图6示出了本申请另一实施例提供的确定指定函数的方法流程图;
图7示出了本申请一实施例提供的上下文信息的获取过程的方法流程图;
图8示出了本申请一实施例提供的目标设备执行信息获取指令的示意图;
图9示出了本申请一实施例提供的IOT仿真平台的示意图;
图10示出了本申请实施例提供的一种漏洞检测装置的结构框图;
图11示出了本申请实施例提供的一种电子设备的结构框图;
图12示出了本申请实施例提供一种计算机可读存储介质的结构框图;
图13示出了本申请实施例提供的一种计算机程序产品的结构框图。
具体实施方式
下面将结合本申请实施例中附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本申请实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的范围,而是仅仅表示本申请的选定实施例。基于本申请的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。同时,在本申请的描述中,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
固件是固化在设备硬件内的程序代码,负责控制和协调设备硬件以保证设备正常运行。可通过出厂预设、维护人员手动上传或从设备官方网站下载等方式将固件保存到设备中。漏洞是在硬件、软件、协议等的具体实现或系统安全策略上存在的弱点或缺陷,漏洞可能来自硬件、软件或协议等设计时的缺陷或编码时产生的错误,也可能来自业务在交互处理过程中的设计缺陷或逻辑流程上的不合理之处。这些缺陷、错误或不合理之处可能被有意或无意地利用,从而对设备运行或数据安全造成不利影响,如设备被攻击或控制,重要资料被窃取,用户数据被篡改,设备被作为入侵其他设备的跳板。通过漏洞挖掘可以发现固件中可能存在的漏洞,方便对固件中发现的漏洞进行修复,进而从根源上排除这些漏洞带来的安全隐患。
相关技术方案中,有如下N种设备固件的漏洞挖掘方式:
(1)基于引入的开源工具版本分析的漏洞挖掘方法。软件工程中开源工具和SDK(Software Development Kit,软件开发工具包)的引入是软件产生安全问题及漏洞的主要原因之一。目前主流的开源合规治理软件在处理开源合规安全问题时候,可以通过固件所在开源组件的版本号来匹配漏洞库中的漏洞。在有源码的情况下,该技术能够较好的发现设备中通过开源组件引入的已知安全漏洞。
(2)固件逆向及调试分析,基于符号执行的静态分析方法。一些供应商通常会给固件进行加密和加壳保护,在此场景下无法直接对设备固件引入的安全问题进行管控。因此,通过对上游供应商提供的固件进行逆向分析和调试来进一步识别和挖掘安全漏洞的方式应运而生。在该方式中,首先可以对加密和加壳保护的固件进行解密和脱壳操作,接着获取固件的文件系统和二进制程序,甚至是源码,然后通过逆向分析获取运行该固件的设备的操作系统的关键函数流,最后可以通过基于符号执行的静态代码分析技术对这些关键函数流进行漏洞挖掘和风险点的检测。对关键函数流进行漏洞挖掘和风险点检测的过程依赖于人工和专家经验,需要对汇编级代码进行审计和调试。
(3)基于APP(Application,应用程序)的固件后门及协议漏洞挖掘。设备官方应用程序在设备控制和管理方面具有丰富的API(Application Programming Interface,应用程序编程接口)和接口,它们包含有关设备的丰富信息,其中包含:特殊协议的解析;关键管理函数(命令执行和信息收集);后门功能。通过对官方APP进行应用分析,遍历该APP的UI组件并对其相应的功能,并对该APP对应的功能进行模糊测试(Fuzzing),在模糊测试过程中通过检测设备的状态及分析日志,可获取漏洞详情信息。
(4)基于仿真环境的固件模拟方法。该方法可以运行已知的漏洞利用作为Metasploit模块和概念验证(Proof of Concept,POC)来手动发现漏洞。运行一组已知的漏洞有助于发现已知漏洞,但它无法有效地发现新漏洞,因为在不同类别的设备和供应商中出现同一漏洞的可能性很低。
在固件未开源的情况下,使用基于仿真环境的固件模拟方法来挖掘漏洞存在许多问题。首先,固件的准确测试需要基于真实设备,大规模并行测试需要相当多的真实硬件。而固件模拟的方案是计算资源密集型的,并且使用与实际设备运行环境不同的仿真环境。此外,由于设备固件对于硬件的依赖性,仿真环境有时会在遇到崩溃时因缺乏硬件而难以确认漏洞挖掘的有效性。此外,漏洞检测通常通过在设备中运行固件来对固件整体进行检测,进而在固件中定位出漏洞所在的位置,这样将固件作为一个整体进行漏洞检测的方式可能会忽略部分漏洞,因此也会导致漏洞检测的有效性较低。
在本实施例中,提出了一种漏洞检测方法、装置、电子设备及存储介质,可以针对性地对设备所运行的固件中的每个指定函数进行漏洞检测,从而更加精准而有效地实现对设备固件中指定函数的漏洞检测。为了更好理解本申请实施例提供的漏洞检测方法、装置、电子设备及存储介质,下面先对适用于本申请实施例的应用环境进行描述。
请参阅图1,图1示出了本申请一实施例提供的漏洞检测方法的一种应用环境示意图。示例性地,本申请实施例提供的漏洞检测方法、装置、电子设备及存储介质可以应用于电子设备中,例如可以在如图1中所示的电子设备110中运行,电子设备110可以通过网络与目标设备120相连。其中,网络用以在电子设备110和目标设备120之间提供通信链路的介质。网络可以包括各种连接类型,例如有线通信链路、无线通信链路等等,本申请实施例对此不作限制。可选地,在另一些实施例中,电子设备也可以是台式机、笔记本电脑、服务器等等。目标设备可以为路由器等物联网(Internet Of Things,IOT)设备,本申请实施例目标设备的类型不作限制。
应该理解,图1中的电子设备110、网络和目标设备120仅仅是示意性的。根据实现需要,可以具有任意数目的电子设备、网络和目标设备。可以理解的是,本申请的实施例还可以允许多台目标设备120同时接入电子设备110,即是说,电子设备110可以采用本申请实施例的漏洞检测方法对多台目标设备120的目标固件进行漏洞检测,而这多台目标设备120可以为同一类型的设备,也可以为不同类型的设备,本申请实施例对此不作限制。
上述应用环境仅为方便理解所作的示例,可以理解的是,本申请实施例不仅局限于上述应用环境。
下面将通过具体实施例对本申请实施例提供的漏洞检测方法、装置、电子设备及存储介质进行详细说明。
请参阅图2,图2示出了本申请一实施例提供的漏洞检测方法的方法流程图。具体地,该方法包括:S210至S240。
S210:获取目标固件的多个函数,每个函数用于实现所述目标固件的至少一个功能。
在一些实施方式中,可以在设备出厂前对设备预装的固件进行漏洞检测,也可以在设备升级固件前,对待升级的固件进行漏洞检测,还可以在设备运行中对设备正在运行的固件进行漏洞检测。其中,目标固件为需要进行漏洞检测的固件。因此,目标固件可以是在目标设备的任何一个生命周期的各个阶段提取的设备固件,既可以是目标设备预装的固件,也可以是目标设备的待升级固件,还可以是目标设备正在运行的固件等等。目标固件可以直接从目标设备中获取,也可以从目标设备对应的官方网站下载。
在本申请的实施例中,目标固件可以具有至少一个功能,每个功能可以由目标固件的函数来完成,也就是说,目标固件中可以包括多个函数,而每个函数可以用于实现目标固件的至少一个功能。可以以负责控制的设备硬件的不同对目标固件进行功能划分,从而得到目标固件的多个函数。在一些实施方式中,目标固件的多个函数可以是目标固件的固件代码中的多个函数,该固件代码可以是目标固件的源代码、伪代码或汇编级代码等等,本申请实施例对此不作限制。
例如,在对某型号路由器正在运行的固件进行漏洞检测时,可以将同型号的任一路由器中获取得到的固件作为目标固件。而对于开源的目标固件而言,可以将目标固件的源代码中的多个函数作为目标固件的多个函数,例如目标固件的源代码可以从目标设备的官方网站或开源网站下载得到等等;对于未开源的目标固件而言,在获取到目标固件后,可以对目标固件进行逆向分析得到目标固件的源代码。
S220:从所述目标固件的多个函数中确定至少一个指定函数。
S230:获取每个所述指定函数对应的上下文信息,所述上下文信息用于表示目标设备运行所述目标固件的过程中,执行每个所述指定函数时的运行状态。
作为一种实施方式,目标设备可以运行该目标固件。需要说明的是,由于目标设备的类型、厂家各有不同,其所支持的固件也各不相同。因此,在进行漏洞检测时,目标设备能够兼容该目标固件,也就是说,即使目标固件的固件版本与目标设备正在运行的固件版本不一致(如目标固件的固件版本高于或低于目标设备正在运行的固件版本),目标设备仍可正常运行该目标固件。
由前述实施例可知,目标固件的每个功能可以分别控制和协调目标设备的不同硬件。可以理解的是,在目标设备运行目标固件时,各个函数所实现的功能各有不同,因此目标设备在执行各个函数时的运行状态也各不相同。需要说明的是,目标设备的运行状态可以包括目标设备的硬件架构及各个硬件的状态值,其中,硬件的状态值例如可以为硬件的工作参数,如内存读取次数、内存空间、处理器的使用率等等。
在一种实施方式中,可以对目标固件的所有函数均进行漏洞检测,此时可以将目标固件的每个函数均作为指定函数。在另一种实施方式中,可以对目标固件的部分函数进行漏洞检测,这部分函数可以用户特别关心的函数,如对其中漏洞风险较高的函数或者目标固件中的核心功能对应的函数进行漏洞检测。此时,指定函数可以是预先设置的;也可以通过计算各个函数出现漏洞的概率来确定;还可以将指定函数确定为核心功能对应的函数,如将指定函数确定为控制CPU的函数等等。
可选地,每个指定函数对应的上下文信息可以为目标设备运行目标固件的过程中,执行该指定函数时的运行状态。进一步地,执行该指定函数时的运行状态可以包括执行该指定函数时目标设备的硬件架构及各个硬件的状态值。根据每个指定函数对应的上下文信息可确定每个指定函数可控制和协调哪些硬件以及执行该指定函数时目标设备的这些硬件所处的状态。
可选地,在目标设备运行目标固件时,若有多个指定函数,可以通过调试工具对目标固件进行调试,如通过调试工具控制目标设备逐个运行指定函数,并在运行每个指定函数时获取目标设备的硬件架构和各个硬件的状态值,将硬件架构和各个硬件的状态值与指定函数对应存储,即可得到每个指定函数对应的上下文信息。例如,在执行各个指定函数时,可以得到包含有目标设备执行各个指定函数时的硬件架构和各个硬件的状态值的文档。
S240:基于模拟器对每个所述指定函数执行漏洞检测操作,得到漏洞检测结果,所述漏洞检测操作包括:基于所述上下文信息更新所述模拟器的运行状态,以使所述模拟器的运行状态与所述目标设备运行每个所述指定函数时的运行状态相匹配,使用更新后的所述模拟器对每个所述指定函数进行漏洞检测。
模拟器是指通过软件模拟硬件设备的功能和指令系统的程序。在本申请的实施例中,模拟器可以通过软件模拟真实设备的硬件架构以及运行每个指定函数时各个硬件的状态,模拟器还可以模拟真实设备运行目标固件的过程以及在运行目标固件的过程中执行每个指定函数的过程。在进行漏洞检测前,模拟器的运行状态处于初始状态,因此在根据上下文信息更新模拟器的运行状态时,可以根据每个指定函数对应的上下文信息将模拟器的运行状态从初始状态更新为目标设备运行该指定函数时的运行状态。
可选地,若上下文信息为目标设备运行指定函数时的硬件架构及各个硬件的状态值,则可以根据上下文信息将模拟器所模拟的硬件架构设置为目标设备运行对应的指定函数时的硬件架构。进一步地,可以使模拟器所模拟的各个硬件的状态值与目标设备执行该指定函数时各个硬件的状态值之间的误差小于或等于预设误差阈值。其中,预设误差阈值可以预先设置。作为一种可替代的实施方式,预设误差阈值可以为0,即根据上下文信息可以将模拟器所模拟的各个硬件的状态值调整为目标设备运行对应的指定函数时各个硬件的状态值。
作为一种可替代的实施方式,上述上下文信息可以包括目标设备的寄存器状态、内存段以及CPU架构信息中的一个或多个。
应当理解,一个上下文信息对应一个指定函数。也就是说,在基于模拟器对每个指定函数执行漏洞检测操作,得到漏洞检测结果时,可以分别基于每个指定函数对应的上下文信息更新模拟器的运行状态,再使用更新后的模拟器对该指定函数进行漏洞检测。示例性地,在对指定函数A进行漏洞检测时,使用指定函数A对应的上下文信息更新模拟器的运行状态,此时用更新后的模拟器对指定函数A进行漏洞检测;而对另一个指定函数B进行漏洞检测时,使用指定函数B对应的上下文信息更新模拟器的运行状态,此时用更新后的模拟器对指定函数B进行漏洞检测。
可选地,可以使模拟器采用模糊测试的方式对每个指定函数进行漏洞检测。例如,预先对每个指定函数设置多个测试用例,在对每个指定函数进行模糊测试过程中,使模拟器使用多个测试用例对指定函数进行测试,测试过程中监控和记录模拟器的运行状态,基于模拟器的运行状态确定模拟器是否发生程序崩溃,若发生程序崩溃,基于程序崩溃时的测试用例确定指定函数中的漏洞的位置,得到漏洞检测结果。可选地,对不同指定函数所设置的多个测试用例可以相同,也可以不相同,本申请实施例对此不作限制。
在本申请的实施例中,可以将上述基于上下文信息更新模拟器的运行状态以及使用更新后的模拟器对每个指定函数进行漏洞检测的操作统称为漏洞检测操作。因此,在对每个指定函数执行漏洞检测操作后,即可得到该指定函数的漏洞检测结果。
进一步地,可以根据每个指定函数的漏洞检测结果确定目标固件的漏洞检测结果。示例性地,若任一个指定函数检测出漏洞,可以判定目标固件中存在漏洞;若对所有指定函数均未检测出漏洞,可以判定目标固件中不存在漏洞。示例性地,指定函数可以是用户特别关心的函数,比如核心功能对应的函数,比如出现漏洞风险较高的函数等等,当确定所有指定函数里都不存在漏洞的时候,即使固件中除这些指定函数以外的函数中存在漏洞,但这些漏洞对目标固件的影响较小,可以认为目标固件的漏洞检测结果为目标固件中不存在漏洞。
在本申请实施例中,模拟器可以对真实设备运行每个指定函数时的运行状态进行模拟,使得仿真更加准确、更加接近于真实设备,这样在模拟仿真和漏洞检测时将固件中的各个指定函数区分开,可以针对性地对每个指定函数进行漏洞检测,因此可以更加精准而有效地实现对固件中指定函数的漏洞检测。
请参阅图3,图3示出了本申请一实施例提供的确定指定函数的方法流程图。在上述实施例的基础上,从目标固件的多个函数中确定至少一个指定函数的过程可以包括:S310至S320。
S310:在所述目标固件的多个函数内,分别确定每个所述函数出现漏洞的概率。
对于一个函数来说,复杂度越高,函数逻辑越复杂,该函数出现漏洞的概率越大。此外,一个函数对内存的操作次数越频繁,其出现漏洞的概率也越大。因此,在本申请的实施方式中,可以确定目标固件的每个函数的复杂度以及运行每个函数时对内存的操作次数,再根据每个函数的复杂度及运行每个函数时对内存的操作次数确定每个函数出现漏洞的概率。其中,函数的复杂度及对内存的操作次数均与该函数出现漏洞的概率呈正相关关系。即每个函数的复杂度越大,该函数出现漏洞的概率越大;每个函数对内存的操作次数越多,该函数出现漏洞的概率也越大。
作为一种实施方式,可以根据每个函数的圈复杂度及每个函数被调用的次数确定每个函数的复杂度。可选地,每个函数被调用的次数可以包括被该函数本身调用的次数以及被目标固件中除该函数以外的其他函数调用的次数。可选地,函数的圈复杂度与函数中所包含的分支语句的个数呈正相关关系,可以基于每个函数对应的控制流图中边的数量及节点的数量确定该函数的圈复杂度。每个函数对应的控制流图为该函数执行流程的有向图,函数中所包含的分支语句的个数越多,该函数对应的控制流图中边的数量及节点的数量也越多。分支语句例如可以包括if-else语句、switch-case语句、循环语句等等。其中,圈复杂度越大表示函数的判断逻辑越复杂,函数质量较低且难于测试和维护,因此每个函数的复杂度与圈复杂度呈正相关关系。可选地,每个函数的复杂度可以为V(G)=E-N+2+C,其中,E代表在该函数对应的控制流图中边的数量,N代表在该函数对应的控制流图中节点的数量(包括起点和终点),C代表该函数被调用的次数。
示例性地,以包含一个if-else语句的函数为例,其对应的控制流图可以如图4所示,该控制流图中边的数量E为4,节点的数量N也为4(包括起点、终点、if节点和else节点),若该函数被调用的次数C为2,则这个函数的复杂度V(G)为4。
作为一种实施方式,运行各个函数时对内存的操作可以包括运行各个函数时对内存的数据存取操作,则运行每个函数时对内存的操作次数可以为内存的存取操作的次数之和。
作为一种实施方式,可以基于每个函数的复杂度及运行该函数时对内存的操作次数与该函数出现漏洞的概率之间的预设函数关系,确定每个函数出现漏洞的概率。
可选地,可以将每个函数的复杂度以及运行该函数时对内存的操作次数进行归一化之后,将归一化后的复杂度及对内存的操作次数进行加权求和得到该函数出现漏洞的概率。其中,加权求和的过程中复杂度的权重及对内存的操作次数的权重均可以预先设置。
S320:根据概率从所述目标固件的多个函数中确定至少一个指定函数。
在一些实施方式中,可以将概率大于指定概率阈值的函数作为指定函数,例如若概率在0~1之间,数值越大表示该函数出现漏洞的概率越大,则可以将概率大于0.8的函数作为指定函数。在另一些实施方式中,还可以将概率最大的函数作为指定函数。可以理解的是,指定函数可以有多个。在对多个指定函数进行漏洞检测时,还可以按照概率的大小顺序对这些指定函数执行漏洞检测操作,例如按照概率从高到低或者从低到高的顺序对这些指定函数执行漏洞检测操作等等。
本申请实施例中,可以根据概率从目标固件的多个函数中确定至少一个指定函数。通过每个函数出现漏洞的概率可以确定对目标固件中哪些函数进行漏洞检测。若将指定函数确定为出现漏洞的概率大于指定概率阈值的函数或概率最大的函数,则可以实现对目标固件中最易受攻击的函数进行漏洞检测。由此可见,在根据每个指定函数的漏洞检测结果确定目标固件的漏洞检测结果时,可以根据目标固件中最易受攻击的函数的漏洞检测结果得到目标固件的漏洞检测结果,从而提高固件漏洞检测的有效性。
请参阅图5,图5示出了本申请又一实施例提供的漏洞检测方法的方法流程图。可选地,可以将目标固件的多个函数划分为至少一个函数组,再从每个函数组内确定至少一个指定函数,此时,该漏洞检测方法可以包括如下步骤:S510至S540。
S510:获取目标固件的多个函数,每个函数用于实现所述目标固件的至少一个功能。
步骤S510的处理过程可以参考前述S210所示的内容,本申请实施例在此不再赘述。
S520:将所述目标固件的多个函数划分为至少一个函数组,每个所述函数组内包括至少一个函数。
作为一种实施方式,在目标固件的多个函数内,可以根据每个函数的复杂度对目标固件的多个函数进行分组,从而得到至少一个函数组,并且每个函数组内的每个函数的复杂度位于该函数组对应的复杂度范围内,或者每个函数组内所有函数的复杂度相同。具体地,在目标固件的每个函数的复杂度精度相同的情况下,例如每个函数的复杂度均为整数,则可以将复杂度相同的函数划分为同一个函数组。而在目标固件的每个函数的复杂度精度不同的情况下,例如复杂度既有整数、也有小数,此时若将复杂度相同的函数划分为同一个函数组,则会使函数组过多,难以达到按照复杂度对多个函数进行分组目的。若目标固件的每个函数的复杂度精度不同的情况下,可以将目标固件的各个函数的复杂度从高到低划分为不同的复杂度范围,接着将处于同一复杂度范围内的函数划分为同一个函数组。应当理解,在目标固件的每个函数的复杂度精度相同的情况下,也可以将处于同一个复杂度范围的函数划分到同一个函数组。可以理解的是,经过函数划分后,每个函数组可以包括一个或多个函数。
示例性地,若复杂度在0~10之间,数值越大函数复杂度越高,则可以将复杂度范围划分为:范围1为0~x1、范围2为x1~x2、范围3为x3~10,且0<x1<x2<10,每个复杂度范围可以包括右端点值而不包括左端点值。则可以将复杂度处于范围1内的函数划分为一个函数组(如函数组1),将复杂度处于范围2内的函数划分为另一个函数组(如函数组2),将复杂度处于范围3内的函数划分为又一个函数组(如函数组3),从而得到3个函数组。例如x1为3,x2为7,目标固件有5个函数,每个函数对应的复杂度分别为5.4,2.5,3,3.5,8,则可以将复杂度2.5和3对应的函数划分到函数组1,将复杂度3.4和5.4对应的函数划分到函数组2,将复杂度7对应的函数组划分为函数组3。
示例性地,若复杂度在0~10之间,数值越大函数复杂度越高,且复杂度均为整数,则可以将复杂度相同的函数划分为同一个函数组。例如目标固件有5个函数,每个函数对应的复杂度分别为函数A的复杂度为2,函数B的复杂度为8,函数C的复杂度为5,函数D的复杂度为2,函数E的复杂度为5,则可以将函数A和函数D划分为一个函数组(如函数组1),将函数B划分为另一个函数组(如函数组2),将函数C和函数E划分为又一个函数组(如函数组3)。
通过将目标固件的各个函数划分为多个函数组,这样在基于复杂度对函数进行分组后,则可以对处于不同复杂度范围的函数组中挑选出指定函数来进行漏洞检测,不仅可以对高中低等各个复杂度范围的函数进行漏洞检测,同时还可以提高漏洞检测的效率。
S530:从每个所述函数组内确定至少一个指定函数。
在本申请的实施例中,在划分得到多个函数组后,可以从每个函数组内的至少一个函数中确定一个或多个指定函数。请参见图6,其示出了本申请另一实施例提供的确定指定函数的方法流程图。可选地,从每个函数组内确定至少一个指定函数的过程具体可以包括:S610至S620。
S610:在每个所述函数组内,分别确定每个所述函数出现漏洞的概率。
由前述实施例可知,对于每个函数来说,它的复杂度越高,函数逻辑越复杂,该函数出现漏洞的概率越大。此外,若一个函数对内存的操作次数越频繁,其出现漏洞的概率也越大。因此,在申请的实施方式中,可以每个函数组内,确定各个函数的复杂度以及运行各个函数时对内存的操作次数,再根据各个函数的复杂度及运行各个函数时对内存的操作次数确定每个函数出现漏洞的概率。同样地,每个函数的复杂度及对内存的操作次数均与该函数出现漏洞的概率呈正相关关系。
可选地,每个函数组内的各个函数的复杂度及对内存的操作次数的确定过程可以参考前述实施例中步骤S310中的对应内容,本申请实施例在此不在赘述。可选地,本申请实施例也可以将每个函数的复杂度以及运行该函数时对内存的操作次数进行归一化之后,将归一化后的复杂度及对内存的操作次数进行加权求和得到该函数出现漏洞的概率。
S620:将每个所述函数组内出现漏洞的概率最大的函数确定为所述指定函数。
与前述实施例中确定指定函数的过程不同,在本申请的实施例中,可以根据概率从每个函数组中各自确定一个或多个指定函数。在一些实施方式中,可以将每个函数组内概率大于指定概率阈值的函数作为该函数组对应的指定函数,也可以将每个函数组内概率最大的函数作为该函数组对应的指定函数;还可以将每个函数组内按照概率从大到小的顺序对每个函数排序,将概率排名的前N个函数作为指定函数,N为正整数;还可以将每个函数组内按照概率小到大的顺序对每个函数排序,将概率排名的后N个函数作为指定函数,N为正整数。除此之外,在执行漏洞检测操作时,还可以按照概率的大小顺序对指定函数进行漏洞检测,例如按照概率从高到低或者从低到高的顺序对指定函数进行漏洞检测等等。
本申请实施例可以从每个函数组中确定出现漏洞概率较高的函数,即检测出目标固件中最易受攻击的功能,这样在漏洞检测可以提高漏洞检测的速度。
S540:获取每个所述指定函数对应的上下文信息,所述上下文信息用于表示目标设备运行所述目标固件的过程中,执行每个所述指定函数时的运行状态。
步骤S520的处理过程可以参考前述S220所示的内容,本申请实施例在此不再赘述。需要说明的是,本实施例可以对每个函数组内确认的指定函数分别获取对应的上下文信息。
S550:基于模拟器对每个所述指定函数执行漏洞检测操作。
在本申请的实施例中,在确定得到每个指定函数对应的上下文信息后,可以对每个指定函数分别执行漏洞检测操作。可选地,漏洞检测操作可以包括根据每个指定函数对应的上下文信息更新模拟器的运行状态,以使模拟器的运行状态与目标设备执行该指定函数时的运行状态相匹配,再使用更新后的模拟器对该指定函数进行漏洞检测。可选地,还可以按照每个指定函数对应概率的大小顺序对每个指定函数执行漏洞检测操作,例如按照概率从高到低或者从低到高的顺序对每个指定函数执行漏洞检测操作等等。
如图7所示,图7示出了本申请一实施例提供的上下文信息的获取过程的方法流程图。具体地,在前述任一实施例的基础上,获取每个指定函数对应的上下文信息的过程可以包括:S710至S720。
S710:获取所述目标设备的命令执行接口。
S720:在所述目标设备执行每个所述指定函数时,将每个所述指定函数对应的信息获取指令通过所述命令执行接口发送至所述目标设备,以使所述目标设备执行所述信息获取指令,得到每个所述指定函数对应的上下文信息。
可以理解的是,上下文信息可以从运行目标固件的目标设备中获取。在本申请的实施方式中,可以通过目标设备的命令执行接口获取每个指定函数的上下文信息。
可选地,目标设备的命令执行接口可以为目标设备的命令解释程序,可以接收指令并使目标设备执行该指令对应的操作内容。目标设备的操作系统的不同,目标设备的命令执行接口也各不相同,如DOS操作系统下的COMMAND.COM、Windows操作系统的cmd.exe以及Unix/Linux操作系统的shell等等。
作为一种实施方式,可以基于telnet和ssh等远程登录服务获取目标设备的命令执行接口,例如调用ssh登录Linux操作系统即可获取Linux的shell。也可以基于目标设备的调试接口获取目标设备的命令执行接口,例如对目标设备的硬件进行分析,找到通用异步收发器(uart)接口,将目标设备的rxd、txd、gnd引脚拉出并设置预设的波特率,然后通过uart口获取目标设备的shell。还可以在固件的版本更新过程中获取目标设备的命令执行接口,例如若目标设备的固件版本高风险过程中待升级固件未通过验证,则可以修改目标设备的开机启动脚本rcs,以使目标设备开机时可以提供telnet或ssh服务,再通过telnet或ssh登录目标设备以获取目标设备的命令执行接口。固件重新打包,修改后的固件最终更新到设备上。
通过命令执行接口可以将每个指定函数对应的信息获取指令发送至目标设备,使目标设备通过命令执行接口获取到该信息获取指令后,目标设备可以执行该信息获取指令以得到与该指定函数对应的上下文信息。可选地,信息获取指令的参数可以根据对应的指定函数而设置,例如将信息获取指令的参数设置为对应指定函数的相关字段等等,因此在目标设备执行该信息获取指令后可以得到目标设备执行该信息获取指令对应的指定函数时的运行状态,即该指定函数对应的上下文信息。示例性地,可以通过调试工具调试目标设备,控制目标设备逐个运行指定函数,并在目标设备运行到每个指定函数的入口点时执行该指定函数对应的信息获取指令,从而将硬件架构和各个硬件的状态值与指定函数对应存储,即可得到每个指定函数对应的上下文信息。在使用调试工具调试目标设备的过程中,以gdb调试工具为例,可以通过目标设备的命令执行接口,例如shell,上传一个静态链接的gdbserver地址到目标设备,然后通过gdbserver地址指定gdb调试工具的远程调试端口,以使目标设备能够接收gdb调试工具的调试指令,接着使用gdb调试工具通过gdbserver地址连接到目标设备的远程调试端口并执行调试指令,以使目标设备可以运行指定函数,并在目标设备运行到每个指定函数的入口点时执行该指定函数对应的信息获取指令以转储上下文信息。
可选地,上述信息获取指令可以为hexdump指令。如图8所示,通过hexdump指令可以获取与telink功能相关的指定函数的上下文信息。
在得到每个指定函数对应的上下文信息后,可以基于模拟器对每个指定函数执行漏洞检测操作,得到漏洞检测结果。在执行漏洞检测操作的过程中,可以基于每个指定函数对应的上下文信息更新模拟器的运行状态,例如可以根据每个指定函数对应的上下文信息将模拟器的运行状态从初始状态更新为目标设备运行该指定函数时的运行状态,该过程可以称为模拟器的初始化过程。在一些实施方式中,上下文信息是一些二进制代码,模拟器无法直接破译这些二进制代码所代表的含义。因此,在使用CPU模拟器对指定函数进行漏洞检测之前,可以从模拟器的指令集中确定与上下文信息对应的目标指令,再基于上下文信息更新目标指令中的指令参数,最后基于更新后的目标指令更新模拟器的运行状态。
需要说明的是,模拟器的指令集可以为模拟器的系统指令集,用于设置模拟器的硬件架构及各个硬件的状态值。可选地,模拟器的指令集可以根据创建模拟器的仿真工具而确定。例如若采用支持QEMU的Unicorn Engine作为仿真工具,则模拟器的指令集可以为QEMU的系统指令集。示例性地,若模拟器是基于Unicorn Engine而创建,则可以通过Unicorn Engine API,调用reg_write指令将上下文信息中的寄存器状态写入到模拟器,此时reg_write指令的指令参数可以基于每个指定函数对应的上下文信息中的寄存器状态而设置。类似地,通过mem_map指令按照每个指定函数对应的上下文信息中的内存段为模拟器的内存分配栈空间,此时mem_map指令的指令参数可以基于每个指定函数对应的上下文信息中的内存段而设置。通过mem_write指令将每个指定函数对应的上下文信息中各个内存段中的数据导入模拟器,此时mem_write指令的指令参数也可以基于每个指定函数对应的上下文信息中的内存段而设置。接着可以将指定函数输入到模拟器中进行漏洞检测,由此可以完成从真实设备到模拟器的迁移,从而在与真实设备的运行状态一致的模拟器中实现对目标固件的漏洞检测。此外,由于Unicorn Engine支持多种CPU架构,因此使用该模拟器可以实现对各种不同类型的目标设备的仿真和模拟,从而对各种不同类型的目标设备的固件进行漏洞检测。
在执行漏洞检测操作的过程中,若已基于每个指定函数对应的上下文信息更新模拟器的运行状态,可以使用更新后的模拟器每个指定函数进行漏洞检测。
在一些实施方式中,可以使模拟器采用模糊测试的方式对每个指定函数进行漏洞检测。如图9所示,可以将本申请实施例所示的漏洞检测方法集成于IOT仿真平台中,该IOT仿真平台可以基于上下文信息更新模拟器的运行状态,即根据上下文信息对模拟器进行初始化更新,还可以使用更新后的模拟器采用模糊测试的方式对每个指定函数进行漏洞检测。
具体地,模糊测试中的测试用例可以基于变异或基于生成的方法生成。其中,基于变异的方法可以对预先设置的测试样本进行变异来创建更多的测试用例,而基于生成的方法生成测试用例则可以通过对目标设备使用的协议或数据格式进行建模的方式生成测试用例。在模糊测试过程中,本申请实施例支持用户创建大量的测试用例,并基于变异的方法对目标程序进行模糊测试。可选地,通过生成的测试用例,可以劫持一个基于hook模块的指定函数,屏蔽指定函数中各种数据输入方式的差异,提供统一的接口,方便指定函数读入测试用例。例如,在DLink路由器的测试中,通过劫持getenv函数,物联网设备可以通过getenv函数获取CGI环境变量。为适应各种固件,本申请具有可扩展性,从而支持用户自定义劫持功能。
进一步地,在模糊测试的过程中还可以监控和记录模拟器的运行状态,并提供一个可以使模拟器崩溃的测试用例,当模拟器发生程序崩溃时,则可以基于程序崩溃时的测试用例确定指定函数中的漏洞的位置,得到漏洞检测结果。为了实现这一点,使模拟器崩溃的测试用例可以是使内存损坏的测试用例。由于部分物联网设备的MMU(MemoryManagement Unit,内存管理单元)没有内存破坏检查模块,存在发生溢出但程序未崩溃的情况,可被称为无声记忆损坏。为了解决这个问题,在基于使内存损坏的测试用例运行指定函数之后,可以通过监控检查内存堆栈数据以查看是否存在内存溢出。此外,本申请实施例还可以在每个指定函数的执行过程中监控模拟器的异常情况,并对异常情况进行识别,以确定模拟器是否发生程序崩溃。示例性地,上述IOT仿真平台可以通过Crash模块来监控模拟器的运行状态,当监控到程序崩溃后,Crash模块记录产生崩溃的测试用例,以确定每个指定函数存在漏洞的具体位置并生成.crash文件。
本申请实施例通过上下文信息从模拟器的指令集中确定出目标指令,再根据上下文信息更新目标指令的参数,接着根据更新后的目标指令更新模拟器的运行状态,使模拟器的运行状态与执行该上下文信息对应的指定函数时目标设备的运行状态相匹配,则可以使模拟器对真实设备的仿真更加准确。其次,通过模拟器对目标固件的运行环境进行模拟,让漏洞检测摆脱了对硬件的依赖,从而可以实现对不同硬件架构下运行的固件的检测,提高了漏洞检测的灵活性。
需要说明的是,上述步骤未详细描述的部分,可以参考前述实施例,在此不再赘述。
请参阅图10,其示出了本申请实施例提供的一种漏洞检测装置的结构框图,该装置可以包括:函数获取模块1010、函数确定模块1020、信息获取模块1030以及漏洞检测模块1040。
固件获取模块1010,用于获取目标固件的多个函数,每个函数用于实现所述目标固件的至少一个功能;
函数确定模块1020,用于从所述目标固件的多个函数中确定至少一个指定函数;
信息获取模块1030,用于获取每个所述指定函数对应的上下文信息,所述上下文信息用于表示目标设备运行所述目标固件的过程中,执行每个所述指定函数时的运行状态;
漏洞检测模块1040,用于基于模拟器对每个所述指定函数执行漏洞检测操作,得到漏洞检测结果,所述漏洞检测操作包括:基于所述上下文信息更新所述模拟器的运行状态,以使所述模拟器的运行状态与所述目标设备运行每个所述指定函数时的运行状态相匹配,使用更新后的所述模拟器对每个所述指定函数进行漏洞检测。
进一步地,上述函数确定模块1020可以包括:第一概率确定模块,用于在所述目标固件的多个函数内,分别确定每个所述函数出现漏洞的概率;第一函数确定模块,用于根据概率从所述目标固件的多个函数中确定至少一个指定函数。
可选地,上述函数确定模块1020还可以包括:函数分组模块,用于将所述目标固件的多个函数划分为至少一个函数组,每个所述函数组内包括至少一个函数;指定函数确定模块,用于从每个所述函数组内确定至少一个指定函数。
进一步地,上述函数分组模块可以包括:分组子模块,用于在所述目标固件的多个函数内,根据每个所述函数的复杂度对所述目标固件的多个函数进行分组,得到所述至少一个函数组,每个函数组内的每个函数的复杂度位于该函数组对应的复杂度范围内或每个函数组内所有函数的复杂度相同。
进一步地,该装置还可以包括:复杂度确定模块,用于根据每个所述函数的圈复杂度及每个所述函数被调用的次数确定每个所述函数的复杂度。
进一步地,上述指定函数确定模块可以包括:第二概率确定模块,用于在每个所述函数组内,分别确定每个所述函数出现漏洞的概率;第二函数确定模块,用于将每个所述函数组内出现漏洞的概率最大的函数确定为所述指定函数。
可选地,上述第一概率确定模块及第二概率确定模块均可以包括概率确定子模块,用于基于每个所述函数的复杂度及运行每个所述函数时对内存的操作次数确定每个所述函数出现漏洞的概率,其中,函数的复杂度及对内存的操作次数与该函数出现漏洞的概率呈正相关关系。
可选地,上述信息获取模块1030可以包括:接口获取模块,用于获取所述目标设备的命令执行接口;上下文信息获取模块,用于在所述目标设备执行每个所述指定函数时,将每个所述指定函数对应的信息获取指令通过所述命令执行接口发送至所述目标设备,以使所述目标设备执行所述信息获取指令,得到每个所述指定函数对应的上下文信息。
作为一种实施方式,上述漏洞检测模块1040可以包括:目标指令确定模块,用于从所述模拟器的指令集中确定与所述上下文信息对应的目标指令;参数更新模块,用于基于所述上下文信息更新所述目标指令中的指令参数;状态更新模块,用于基于更新后的所述目标指令更新所述模拟器的运行状态。
可选地,上述上下文信息包括所述目标设备的寄存器状态、内存段以及CPU架构信息。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述装置和模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,模块相互之间的耦合可以是电性,机械或其它形式的耦合。
另外,在本申请各个实施例中的各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。
请参考图11,其示出了本申请实施例提供的一种电子设备的结构框图。该电子设备1100可以是智能手机、平板电脑、电子书等能够运行应用程序的电子设备。本申请中的电子设备1100还可以是服务器或操作设备。具体地,电子设备1100可以包括一个或多个如下部件:处理器1110、存储器1120、以及一个或多个应用程序,其中一个或多个应用程序可以被存储在存储器1120中并被配置为由一个或多个处理器1110执行,一个或多个程序配置用于执行如前述方法实施例所描述的方法。
处理器1110可以包括一个或者多个处理核。处理器1110利用各种接口和线路连接整个电子设备1100内的各个部分,通过运行或执行存储在存储器1120内的指令、程序、代码集或指令集,以及调用存储在存储器1120内的数据,执行电子设备1100的各种功能和处理数据。可选地,处理器1110可以采用数字信号处理(Digital Signal Processing,DSP)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)、可编程逻辑阵列(Programmable Logic Array,PLA)中的至少一种硬件形式来实现。处理器1110可集成中央处理器(Central Processing Unit,CPU)、图像处理器(Graphics Processing Unit,GPU)和调制解调器等中的一种或几种的组合。其中,CPU主要处理操作系统、用户界面和应用程序等;GPU用于负责显示内容的渲染和绘制;调制解调器用于处理无线通信。可以理解的是,上述调制解调器也可以不集成到处理器1110中,单独通过一块通信芯片进行实现。
存储器1120可以包括随机存储器(Random Access Memory,RAM),也可以包括只读存储器(Read-Only Memory)。存储器1120可用于存储指令、程序、代码、代码集或指令集。存储器1120可包括存储程序区和存储数据区,其中,存储程序区可存储用于实现操作系统的指令、用于实现至少一个功能的指令(比如触控功能、声音播放功能、图像播放功能等)、用于实现下述各个方法实施例的指令等。存储数据区还可以存储电子设备在使用中所创建的数据(比如电话本、音视频数据、聊天记录数据)等。
请参考图12,其示出了本申请实施例提供的一种计算机可读存储介质的结构框图。该计算机可读存储介质1200中存储有程序代码,所述程序代码可被处理器调用执行上述方法实施例中所描述的方法。
计算机可读存储介质1200可以是诸如闪存、EEPROM(电可擦除可编程只读存储器)、EPROM、硬盘或者ROM之类的电子存储器。可选地,计算机可读存储介质1200包括非易失性计算机可读存储介质(non-transitory computer-readable storage medium)。计算机可读存储介质1200具有执行上述方法中的任何方法步骤的程序代码1210的存储空间。这些程序代码可以从一个或者多个计算机程序产品中读出或者写入到这一个或者多个计算机程序产品中。程序代码1210可以例如以适当形式进行压缩。
请参考图13,其示出了本申请实施例提供的一种计算机程序产品的结构框图,该计算机程序产品1300中存储有计算机程序/指令1310,当其在计算机上运行时,使得计算机程序/指令1310上述方法中的任何方法步骤。
最后应说明的是:以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不驱使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。
Claims (14)
1.一种漏洞检测方法,其特征在于,所述方法包括:
获取目标固件的多个函数,每个函数用于实现所述目标固件的至少一个功能;
从所述目标固件的多个函数中确定至少一个指定函数;
获取每个所述指定函数对应的上下文信息,所述上下文信息用于表示目标设备运行所述目标固件的过程中,执行每个所述指定函数时的运行状态;
基于模拟器对每个所述指定函数执行漏洞检测操作,得到漏洞检测结果,所述漏洞检测操作包括:基于所述上下文信息更新所述模拟器的运行状态,以使所述模拟器的运行状态与所述目标设备运行每个所述指定函数时的运行状态相匹配,使用更新后的所述模拟器对每个所述指定函数进行漏洞检测。
2.根据权利要求1所述的方法,其特征在于,所述从所述目标固件的多个函数中确定至少一个指定函数,还包括:
在所述目标固件的多个函数内,分别确定每个所述函数出现漏洞的概率;
根据概率从所述目标固件的多个函数中确定至少一个指定函数。
3.根据权利要求1所述的方法,其特征在于,所述从所述目标固件的多个函数中确定至少一个指定函数,包括:
将所述目标固件的多个函数划分为至少一个函数组,每个所述函数组内包括至少一个函数;
从每个所述函数组内确定至少一个指定函数。
4.根据权利要求3所述的方法,其特征在于,所述将所述目标固件的多个函数划分为至少一个函数组,包括:
在所述目标固件的多个函数内,根据每个所述函数的复杂度对所述目标固件的多个函数进行分组,得到所述至少一个函数组,每个函数组内的每个函数的复杂度位于该函数组对应的复杂度范围内或每个函数组内所有函数的复杂度相同。
5.根据权利要求4所述的方法,其特征在于,所述在所述目标固件的多个函数内,根据每个所述函数的复杂度对所述目标固件的多个函数进行分组,得到所述至少一个函数组之前,还包括:
根据每个所述函数的圈复杂度及每个所述函数被调用的次数确定每个所述函数的复杂度。
6.根据权利要求3所述的方法,其特征在于,所述从每个所述函数组内确定至少一个指定函数,包括:
在每个所述函数组内,分别确定每个所述函数出现漏洞的概率;
将每个所述函数组内出现漏洞的概率最大的函数确定为所述指定函数。
7.根据权利要求2或6所述的方法,其特征在于,所述分别确定每个所述函数出现漏洞的概率,包括:
基于每个所述函数的复杂度及运行每个所述函数时对内存的操作次数确定每个所述函数出现漏洞的概率,其中,函数的复杂度及对内存的操作次数与该函数出现漏洞的概率呈正相关关系。
8.根据权利要求1所述的方法,其特征在于,所述获取每个所述指定函数对应的上下文信息,包括:
获取所述目标设备的命令执行接口;
在所述目标设备执行每个所述指定函数时,将每个所述指定函数对应的信息获取指令通过所述命令执行接口发送至所述目标设备,以使所述目标设备执行所述信息获取指令,得到每个所述指定函数对应的上下文信息。
9.根据权利要求1所述的方法,其特征在于,所述基于所述上下文信息更新所述模拟器的运行状态,包括:
从所述模拟器的指令集中确定与所述上下文信息对应的目标指令;
基于所述上下文信息更新所述目标指令中的指令参数;
基于更新后的所述目标指令更新所述模拟器的运行状态。
10.根据权利要求1所述的方法,其特征在于,所述上下文信息包括所述目标设备的寄存器状态、内存段以及CPU架构信息。
11.一种漏洞检测装置,其特征在于,所述装置包括:
函数获取模块,用于获取目标固件的多个函数,每个函数用于实现所述目标固件的至少一个功能;
函数确定模块,用于从所述目标固件的多个函数中确定至少一个指定函数;
信息获取模块,用于获取每个所述指定函数对应的上下文信息,所述上下文信息用于表示目标设备运行所述目标固件的过程中,执行每个所述指定函数时的运行状态;
漏洞检测模块,用于基于模拟器对每个所述指定函数执行漏洞检测操作,得到漏洞检测结果,所述漏洞检测操作包括:基于所述上下文信息更新所述模拟器的运行状态,以使所述模拟器的运行状态与所述目标设备运行每个所述指定函数时的运行状态相匹配,使用更新后的所述模拟器对每个所述指定函数进行漏洞检测。
12.一种电子设备,其特征在于,包括处理器、存储器,所述存储器存储有计算机程序,所述处理器通过调用所述计算机程序,用于执行如权利要求1至10任一项所述的方法。
13.一种计算机可读存储介质,其特征在于,所述存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由处理器加载并执行以实现如权利要求1至10任一项所述的方法。
14.一种包含指令的计算机程序产品,其特征在于,所述计算机程序产品中存储有指令,当其在计算机上运行时,使得计算机实现如权利要求1至10任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210430821.3A CN114756871A (zh) | 2022-04-22 | 2022-04-22 | 漏洞检测方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210430821.3A CN114756871A (zh) | 2022-04-22 | 2022-04-22 | 漏洞检测方法、装置、电子设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114756871A true CN114756871A (zh) | 2022-07-15 |
Family
ID=82332216
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210430821.3A Pending CN114756871A (zh) | 2022-04-22 | 2022-04-22 | 漏洞检测方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114756871A (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20200089893A1 (en) * | 2018-08-01 | 2020-03-19 | Vdoo Connected Trust Ltd. | Firmware Verification |
CN112134761A (zh) * | 2020-09-23 | 2020-12-25 | 国网四川省电力公司电力科学研究院 | 基于固件分析的电力物联网终端脆弱性检测方法及系统 |
CN112417444A (zh) * | 2020-12-03 | 2021-02-26 | 南京邮电大学 | 一种基于固件模拟的攻击诱捕系统 |
CN112685745A (zh) * | 2020-12-31 | 2021-04-20 | 北京梆梆安全科技有限公司 | 一种固件检测方法、装置、设备及存储介质 |
CN112800423A (zh) * | 2021-01-26 | 2021-05-14 | 北京航空航天大学 | 一种二进制代码授权漏洞检测方法 |
-
2022
- 2022-04-22 CN CN202210430821.3A patent/CN114756871A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20200089893A1 (en) * | 2018-08-01 | 2020-03-19 | Vdoo Connected Trust Ltd. | Firmware Verification |
CN112134761A (zh) * | 2020-09-23 | 2020-12-25 | 国网四川省电力公司电力科学研究院 | 基于固件分析的电力物联网终端脆弱性检测方法及系统 |
CN112417444A (zh) * | 2020-12-03 | 2021-02-26 | 南京邮电大学 | 一种基于固件模拟的攻击诱捕系统 |
CN112685745A (zh) * | 2020-12-31 | 2021-04-20 | 北京梆梆安全科技有限公司 | 一种固件检测方法、装置、设备及存储介质 |
CN112800423A (zh) * | 2021-01-26 | 2021-05-14 | 北京航空航天大学 | 一种二进制代码授权漏洞检测方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20200125730A1 (en) | System and method for vetting mobile phone software applications | |
JP5665188B2 (ja) | ソフトウエア更新を適用した情報処理装置を検査するシステム | |
US20210334384A1 (en) | Detecting a potential security leak by a microservice | |
CN110764870B (zh) | 一种虚拟机逃逸漏洞挖掘方法、装置、设备及介质 | |
US10943008B2 (en) | System and method of detecting hidden behavior of a browser extension | |
CN109388569B (zh) | 远程检测客户端环境异常的方法、测试服务器及存储介质 | |
CN108205491B (zh) | 一种基于nkv6.0系统的可信技术兼容性测试方法 | |
US20160275000A1 (en) | System and method of automated application screen flow generation for detecting aberration in mobile application | |
EP3029595B1 (en) | Apparatuses, mobile devices, methods and computer programs for evaluating runtime information of an extracted set of instructions based on at least a part of a computer program | |
CN112840341A (zh) | 用于探测与安全相关的数据流的方法 | |
CN114969760A (zh) | 漏洞检测方法及装置、计算机可读介质和电子设备 | |
CN111428233B (zh) | 一种嵌入式设备固件的安全性分析方法 | |
Kim et al. | FIRM-COV: high-coverage greybox fuzzing for IoT firmware via optimized process emulation | |
CN114647572A (zh) | 用于软件应用组件测试的方法和系统 | |
FR2916546A1 (fr) | Procede de simulation d'un systeme embarque a bord d'un aeronef pour tester un logiciel de fonctionnement et dispositif pour la mise en oeuvre de ce procede | |
CN111177720A (zh) | 基于大数据生成威胁情报的方法、装置及可读存储介质 | |
CN109740351A (zh) | 一种嵌入式固件的漏洞检测方法、装置及设备 | |
CN114756871A (zh) | 漏洞检测方法、装置、电子设备及存储介质 | |
CN116775202A (zh) | 模糊测试方法、装置、介质、电子设备及计算机程序产品 | |
Baird et al. | Automated Dynamic Detection of Self-Hiding Behavior | |
CN116861418B (zh) | 面向32位Windows沙盒的渗透测试方法、装置、设备及存储介质 | |
Valdi et al. | Scalable testing of mobile antivirus applications | |
CN116414722B (zh) | 模糊测试处理方法、装置、模糊测试系统及存储介质 | |
US20240211360A1 (en) | Method and system for test script generation and execution | |
EP4137977A1 (en) | Coverage guided fuzzing of remote embedded devices using a debugger |
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 |