CN112417461B - 设备固件的模糊测试方法及系统 - Google Patents
设备固件的模糊测试方法及系统 Download PDFInfo
- Publication number
- CN112417461B CN112417461B CN202011418123.9A CN202011418123A CN112417461B CN 112417461 B CN112417461 B CN 112417461B CN 202011418123 A CN202011418123 A CN 202011418123A CN 112417461 B CN112417461 B CN 112417461B
- Authority
- CN
- China
- Prior art keywords
- test
- fuzz
- seed file
- seed
- fuzzy
- 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
Links
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
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3684—Test management for test design, e.g. generating new test cases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
Abstract
本申请实施例公开了一种设备固件的模糊测试方法及系统,用以解决现有技术中对物联网设备漏洞的挖掘效率低的问题。包括:配置待测试的目标固件程序的仿真环境;基于仿真环境并行运行多个用于测试目标固件程序的虚拟机;确定与目标固件程序对应的多个模糊测试Fuzz实例,建立各虚拟机与各Fuzz实例之间的网络连接关系;从预设的种子文件序列中获取各Fuzz实例分别对应的种子文件,并利用各种子文件生成各Fuzz实例分别对应的测试用例;以及将各测试用例通过网络连接关系分别发送至对应的各虚拟机;利用各虚拟机并行执行各自对应的测试用例,得到目标固件程序对应的测试结果。该技术方案能够提高对物联网设备漏洞的挖掘效率。
Description
技术领域
本申请涉及安全分析技术领域,尤其涉及一种设备固件的模糊测试方法及系统。
背景技术
随着物联网时代的来临,物联网设备(如网络摄像头、可穿戴设备、智能汽车、智能家居等)得以迅速发展和广泛应用。同时,针对物联网设备的安全攻击事件也在不断攀升。物联网设备存在的大量未知漏洞,不仅为设备自身,也为网络空间带来了很多潜在的威胁。因此,亟需一种行之有效的物联网设备漏洞挖掘手段。
由于不同厂商的物联网设备在软硬件方面差异巨大、各类芯片厂商推出各自专用芯片、各种物联网设备的源码不公开等现状,使得目前难以形成高效、自动化、批量化的物联网设备漏洞发现方法。并且,物联网设备绝大部分漏洞都存在于设备固件中,由于硬件多样性、设备封闭性等原因,一般的漏洞挖掘技术不能很好的适应物联网设备。这导致目前的物联网设备漏洞大多通过安全人员手工分析发现。因此,即使已经加强了对物联网设备漏洞的挖掘,但对物联网设备漏洞的挖掘效率并未得到提高。
发明内容
本申请实施例的目的是提供一种设备固件的模糊测试方法及系统,用以解决现有技术中对物联网设备漏洞的挖掘效率低的问题。
为解决上述技术问题,本申请实施例是这样实现的:
一方面,本申请实施例提供一种设备固件的模糊测试方法,包括:
配置待测试的目标固件程序的仿真环境;基于所述仿真环境,并行运行多个用于测试所述目标固件程序的虚拟机;
确定与所述目标固件程序对应的多个模糊测试Fuzz实例,建立各所述虚拟机与各所述Fuzz实例之间的网络连接关系;
从预设的种子文件序列中获取各所述Fuzz实例分别对应的、用于生成测试用例的种子文件,并利用各所述种子文件生成各所述Fuzz实例分别对应的测试用例;以及将各所述测试用例通过所述网络连接关系分别发送至对应的各所述虚拟机;
利用各所述虚拟机并行执行各自对应的所述测试用例,得到所述目标固件程序对应的测试结果。
另一方面,本申请实施例提供一种设备固件的模糊测试系统,包括:
仿真环境配置组件,用于配置待测试的目标固件程序的仿真环境;
仿真执行云平台,用于基于所述仿真环境,并行运行多个用于测试所述目标固件程序的虚拟机;确定与所述目标固件程序对应的多个模糊测试Fuzz实例,建立各所述虚拟机与各所述Fuzz实例之间的网络连接关系;
固件安全分析中心,用于从预设的种子文件序列中获取各所述Fuzz实例分别对应的、用于生成测试用例的种子文件,并利用各所述种子文件生成各所述Fuzz实例分别对应的测试用例;以及将各所述测试用例通过所述网络连接关系分别发送至对应的各所述虚拟机;利用各所述虚拟机并行执行各自对应的所述测试用例,得到所述目标固件程序对应的测试结果。
再一方面,本申请实施例提供一种设备固件的模糊测试设备,包括处理器和与所述处理器电连接的存储器,所述存储器存储有计算机程序,所述处理器用于从所述存储器调用并执行所述计算机程序以实现上述设备固件的模糊测试方法。
再一方面,本申请实施例提供一种存储介质,用于存储计算机程序,所述计算机程序能够被处理器执行以实现上述设备固件的模糊测试方法。
采用本申请实施例的技术方案,通过配置待测试的目标固件程序的仿真环境,基于仿真环境并行运行多个用于测试目标固件程序的虚拟机,确定与目标固件程序对应的多个模糊测试Fuzz实例,并建立各虚拟机与各Fuzz实例之间的网络连接关系,能够实现并行化进行模糊测试的效果,提高了模糊测试的吞吐率,且基于仿真环境进行模糊测试能够提升方案的适用性。并且,通过从预设的种子文件序列中获取各Fuzz实例分别对应的、用于生成测试用例的种子文件,利用各种子文件生成各Fuzz实例分别对应的测试用例,以及将各测试用例通过网络连接关系分别发送至对应的各虚拟机,利用各虚拟机并行执行各自对应的测试用例,得到目标固件程序对应的测试结果。由于多个Fuzz实例能够通过并行化的方式利用多个种子文件生成各自的测试用例,因此在单位时间内增加了虚拟机执行测试用例的数量,提高了对目标固件程序的测试效率,从而提高了对物联网设备漏洞的挖掘效率。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是根据本申请一实施例的一种设备固件的模糊测试方法的示意性流程图;
图2是根据本申请另一实施例的一种设备固件的模糊测试方法的示意性流程图;
图3是根据本申请一实施例的一种设备固件的模糊测试系统的示意性框图;
图4是根据本申请一实施例的一种设备固件的模糊测试设备的硬件结构示意图。
具体实施方式
本申请实施例提供一种设备固件的模糊测试方法及系统,用以解决现有技术中对物联网设备漏洞的挖掘效率低的问题。
为了使本技术领域的人员更好地理解本申请中的技术方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
图1是根据本申请一实施例的一种设备固件的模糊测试方法的示意性流程图,如图1所示,该方法包括:
S102,配置待测试的目标固件程序的仿真环境,基于仿真环境并行运行多个用于测试目标固件程序的虚拟机。
S104,确定与目标固件程序对应的多个模糊测试Fuzz实例,建立各虚拟机与各Fuzz实例之间的网络连接关系。
S106,从预设的种子文件序列中获取各Fuzz实例分别对应的、用于生成测试用例的种子文件,并利用各种子文件生成各Fuzz实例分别对应的测试用例;以及将各测试用例通过网络连接关系分别发送至对应的各虚拟机。
S108,利用各虚拟机并行执行各自对应的测试用例,得到目标固件程序对应的测试结果。
采用本申请实施例的技术方案,通过配置待测试的目标固件程序的仿真环境,基于仿真环境并行运行多个用于测试目标固件程序的虚拟机,确定与目标固件程序对应的多个模糊测试Fuzz实例,并建立各虚拟机与各Fuzz实例之间的网络连接关系,能够实现并行化进行模糊测试的效果,提高了模糊测试的吞吐率,且基于仿真环境进行模糊测试能够提升方案的适用性。并且,通过从预设的种子文件序列中获取各Fuzz实例分别对应的、用于生成测试用例的种子文件,利用各种子文件生成各Fuzz实例分别对应的测试用例,以及将各测试用例通过网络连接关系分别发送至对应的各虚拟机,利用各虚拟机并行执行各自对应的测试用例,得到目标固件程序对应的测试结果。由于多个Fuzz实例能够通过并行化的方式利用多个种子文件生成各自的测试用例,因此在单位时间内增加了虚拟机执行测试用例的数量,提高了对目标固件程序的测试效率,从而提高了对物联网设备漏洞的挖掘效率。
在一个实施例中,仿真环境可包括以下参数:各固件程序运行时依赖的系统内核和虚拟硬件、以及各固件程序对应的固件文件系统。
在配置待测试的目标固件程序的仿真环境时,可首先确定目标固件程序运行时依赖的系统内核和虚拟硬件、以及目标固件程序对应的固件文件系统,然后根据系统内核、虚拟硬件和固件文件系统,配置目标固件程序的仿真环境。
其中,系统内核可根据目标固件程序所属设备的实际软硬件环境确定。虚拟硬件可由目标固件程序仿真运行过程中实际访问的硬件来确定。固件文件系统可由厂商提供或者从目标固件程序所属的设备中提取分离出来。
其中,可通过Binwalk(一款开源固件提取工具)从固件映像(二进制格式文件)中提取嵌入式文件系统,以确定仿真环境的系统内核、虚拟硬件、固件文件系统这三个参数。具体方式可包括:利用Binwalk组件从二进制格式的设备固件中将设备的文件系统提取出来,并区分出操作系统文件和用户程序文件。通过检查固件ELF(一种文件格式)文件头确定固件的指令架构和字节序。通过检查固件程序依赖的库确定需要编译配置的系统内核。通过检查固件程序运行时所调用的硬件接口配置虚拟硬件。
本实施例中,通过确定目标固件程序运行时依赖的系统内核和虚拟硬件、以及目标固件程序对应的固件文件系统,然后根据系统内核、虚拟硬件和固件文件系统,配置目标固件程序的仿真环境,提高了仿真环境配置的准确性。
在一个实施例中,将目标固件程序的仿真环境配置好后,基于仿真环境并行运行多个用于测试目标固件程序的虚拟机时,可利用固件仿真云平台在计算资源丰富的服务器上通过QEMU(纯软件实现的通用模拟器和可执行硬件虚拟化的开源托管虚拟机)将目标固件程序的系统内核、虚拟硬件和固件文件系统挂载起来,并执行内部各个进程。
其中,由于在服务器计算资源充足的条件下,固件仿真云平台上运行的虚拟机数量是没有限制的,因此通过在计算资源丰富的固件仿真云平台部署大量需要测试的固件程序,可构建出计算密集型固件仿真云平台以承载大量并行化的测试任务。
在一个实施例中,固件仿真云平台可与固件安全分析中心之间建立联系,以使固件安全分析中心包含的固件漏洞检测与验证工具和Fuzz测试工具,能够对运行在虚拟机上的目标固件程序进行漏洞挖掘。
其中,固件漏洞检测与验证工具对运行中的目标固件程序进行信息收集,通过集成第三方漏洞扫描检测工具、漏洞数据库来执行漏洞扫描、漏洞验证等操作。由于不同的漏洞扫描检测工具设计的扫描方式与扫描内容不同,不同类型的漏洞数据库执行验证所需要的时间差异较大,而固件漏洞检测与验证工具无需依赖共享资源。因此,并行化运行多个同一版本的目标固件程序,每一个目标固件程序对应使用一种固件漏洞检测与验证工具,可提高漏洞检测与验证的效率。
其中,Fuzz测试工具中可预先设定目标固件程序对应的多个Fuzz实例,并设计种子文件序队的进出规则和生成测试用例数量,多个Fuzz实例通过共享种子文件序队来生成各自的测试用例,并对各个Fuzz实例测试执行过程新生成的种子文件进行维护和更新。
在上述实施例中,通过将物联网设备固件运行在服务器上,并运用Fuzz测试工具、固件漏洞检测与验证工具等强大的漏洞挖掘手段,以达到并行固件漏洞检测的效果,提高了对目标固件程序的测试效率、以及对物联网设备漏洞的挖掘效率。
下面详细介绍建立各虚拟机与各Fuzz实例之间的网络连接关系之后,对目标固件程序进行模糊测试的过程。
在一个实施例中,从预设的种子文件序列中获取各Fuzz实例分别对应的、用于生成测试用例的种子文件,并利用各种子文件生成各Fuzz实例分别对应的测试用例时,针对任一Fuzz实例,可从预设的种子文件序列中获取Fuzz实例对应的第一种子文件,并判断第一种子文件是否正被其他Fuzz实例使用。
若确定第一种子文件未正被其他Fuzz实例使用,则获取第一种子文件,并利用第一种子文件生成Fuzz实例对应的测试用例。
若确定第一种子文件正被其他Fuzz实例使用,则获取预设的种子文件序列中的第二种子文件,并在第二种子文件未正被其他Fuzz实例使用时,利用第二种子文件生成Fuzz实例对应的测试用例。
其中,若第二种子文件正被其他Fuzz实例使用,则获取预设的种子文件序列中的第三种子文件,并判断第三种子文件是否正被其他Fuzz实例使用,参照上述的判断结果及对应的执行步骤,直到确定一个种子文件未正被其他Fuzz实例使用时,获取该种子文件,并利用该种子文件生成Fuzz实例对应的测试用例。
本实施例中,由于测试用例是通过对种子文件进行随机变异而生成的,因此通过从预设的种子文件序列中获取Fuzz实例对应的第一种子文件,并判断第一种子文件是否正被其他Fuzz实例使用,在确定第一种子文件未正被其他Fuzz实例使用时,利用第一种子文件生成Fuzz实例对应的测试用例,可使得每个种子文件在同一时间只能被一个Fuzz实例获取,有效避免了多个Fuzz实例对应相同的测试用例的情况,从而避免了对测试资源的浪费,提高了对目标固件程序的测试效率,从而提高了对物联网设备漏洞的挖掘效率。
在一个实施例中,各种子文件对应各自的能量值,能量值基于各种子文件被各Fuzz实例使用的总次数所确定。各种子文件被各Fuzz实例使用即为各种子文件被各Fuzz实例获取以用来生成测试用例。
在从预设的种子文件序列中获取Fuzz实例对应的第一种子文件时,可获取种子文件序列中能量值最高的种子文件,作为Fuzz实例对应的第一种子文件。
在从预设的种子文件序列中获取Fuzz实例对应的第一种子文件时,还可根据各Fuzz实例对种子文件的获取顺序,按顺序从预设的种子文件序列中获取第一种子文件。
本实施例中,由于利用种子文件生成测试用例需消耗能量值,通过获取种子文件序列中能量值最高的种子文件,作为Fuzz实例对应的第一种子文件,能够确保获取的种子文件能够生成测试用例。此外,根据各Fuzz实例对种子文件的获取顺序,按顺序从预设的种子文件序列中获取第一种子文件,实现了各Fuzz实例串行获取种子文件的效果,使得获取种子文件的行为更加规范化。
在一个实施例中,利用第一种子文件生成Fuzz实例对应的测试用例时,可首先确定第一种子文件被各Fuzz实例使用的总次数,根据第一种子文件被各Fuzz实例使用的总次数,确定第一种子文件当前待生成测试用例的目标数量,并利用第一种子文件生成Fuzz实例对应的目标数量个测试用例。
其中,目标数量和总次数之间正相关。本实施例中,可预设第一种子文件生成的测试用例的数量为2i个,i为第一种子文件被各Fuzz实例使用的总次数。若确定第一种子文件被各Fuzz实例使用的总次数为1,则可确定第一种子文件当前待生成测试用例的目标数量为2个,若确定第一种子文件被各Fuzz实例使用的总次数为2,则可确定第一种子文件当前待生成测试用例的目标数量为4个,依此类推。
其中,在利用第一种子文件生成Fuzz实例对应的目标数量个测试用例之前,还可确定各Fuzz实例中携带的测试用例的目标格式信息,并利用第一种子文件生成Fuzz实例对应的目标数量个、目标格式的测试用例。
本实施例中,通过确定第一种子文件被各Fuzz实例使用的总次数,根据第一种子文件被各Fuzz实例使用的总次数,确定第一种子文件当前待生成测试用例的目标数量,并利用第一种子文件生成Fuzz实例对应的目标数量个测试用例,能够确保测试用例生成的准确性。
在一个实施例中,利用各虚拟机并行执行各自对应的测试用例,得到目标固件程序对应的测试结果之后,若测试结果为测试异常,则可将测试用例作为新的种子文件加入种子文件序列,并为新的种子文件配置初始能量值。若测试结果为测试正常,则将当前执行的测试用例对应的种子文件返回种子文件序列。
其中,在测试结果为测试异常时,还可存储测试用例和测试用例的执行过程数据,以便于安全维护人员能够快速发现物联网设备漏洞。
本实施例中,通过将测试结果为测试异常的测试用例作为新的种子文件加入种子文件序列,能够确保对该测试用例的最大化利用,从而能够提高对目标固件程序的测试精度,实现了有针对性地对物联网设备漏洞进行挖掘的效果。
在一个实施例中,在将当前执行的测试用例对应的种子文件返回种子文件序列之后,可根据种子文件当前的总能量值、以及生成测试用例所使用的能量值,确定种子文件对应的剩余能量值,并更新种子文件对应的能量值为剩余能量值。
其中,种子文件当前的总能量值为该种子文件在本次被获取之前、在种子文件序列中记录的能量值。
例如,种子文件当前的总能量值为E0,生成测试用例所使用的能量值为A,则种子文件对应的剩余能量值E可为E0-A的值。
本实施例中,通过更新种子文件对应的能量值为剩余能量值,有效确保了种子文件序列中各种子文件对应的能量值的准确性,提高了种子文件序列的可靠性。
在一个实施例中,更新种子文件对应的能量值为剩余能量值之后,可判断种子文件对应的剩余能量值是否小于预设能量阈值;若种子文件对应的剩余能量值小于预设能量阈值,则丢弃种子文件;若种子文件对应的剩余能量值大于或等于预设能量阈值,则保留种子文件。
其中,若种子文件序列中的种子文件均被丢弃,则Fuzz实例无法再次获取种子文件,此时该Fuzz实例结束。
本实施例中,通过在更新种子文件对应的能量值为剩余能量值之后,判断种子文件对应的剩余能量值是否小于预设能量阈值,在种子文件对应的剩余能量值小于预设能量阈值时丢弃种子文件,有效确保了种子文件序列中各种子文件均能够被获取用来生成测试用例,提高了种子文件序列的可靠性。
图2是根据本申请另一实施例的一种设备固件的模糊测试方法的示意性流程图,如图2所示,该方法包括:
S201,确定目标固件程序运行时依赖的系统内核和虚拟硬件、以及目标固件程序对应的固件文件系统。
S202,根据系统内核、虚拟硬件和固件文件系统,配置目标固件程序的仿真环境。
S203,基于仿真环境,并行运行多个用于测试目标固件程序的虚拟机。
S204,确定与目标固件程序对应的多个模糊测试Fuzz实例,建立各虚拟机与各Fuzz实例之间的网络连接关系。
S205,针对任一Fuzz实例,获取种子文件序列中能量值最高的种子文件,作为Fuzz实例对应的第一种子文件。
其中,各种子文件对应各自的能量值,能量值基于各种子文件被各Fuzz实例使用的总次数所确定。
S206,判断第一种子文件是否正被其他Fuzz实例使用;若否,则执行S207;若是,则执行S205。
S207,获取第一种子文件,并确定第一种子文件被各Fuzz实例使用的总次数。
S208,根据第一种子文件被各Fuzz实例使用的总次数,确定第一种子文件当前待生成测试用例的目标数量。
其中,目标数量和总次数之间正相关。
S209,利用第一种子文件生成Fuzz实例对应的目标数量个测试用例,并通过网络连接关系将目标数量个测试用例发送至对应的虚拟机。
S210,利用各虚拟机并行执行各自对应的测试用例,得到目标固件程序对应的测试结果;若测试结果为测试异常,则执行S211;若测试结果为测试正常,则执行S212。
S211,将测试用例作为新的种子文件加入种子文件队列,并为新的种子文件配置初始能量值。
S212,将当前执行的测试用例对应的种子文件返回种子文件队列。
S213,根据种子文件当前的总能量值、以及生成测试用例所使用的能量值,确定种子文件对应的剩余能量值,并更新种子文件对应的能量值为剩余能量值。
S214,判断种子文件对应的剩余能量值是否小于预设能量阈值;若是,则执行S215;若否,则执行S216。
S215,丢弃种子文件。
S216,保留种子文件。
上述S201-S216的具体过程在上述实施例中已进行详细说明,此处不再赘述。
采用本申请实施例的技术方案,通过配置待测试的目标固件程序的仿真环境,基于仿真环境并行运行多个用于测试目标固件程序的虚拟机,确定与目标固件程序对应的多个模糊测试Fuzz实例,并建立各虚拟机与各Fuzz实例之间的网络连接关系,能够实现并行化进行模糊测试的效果,提高了模糊测试的吞吐率,且基于仿真环境进行模糊测试能够提升方案的适用性。并且,通过从预设的种子文件序列中获取各Fuzz实例分别对应的、用于生成测试用例的种子文件,利用各种子文件生成各Fuzz实例分别对应的测试用例,以及将各测试用例通过网络连接关系分别发送至对应的各虚拟机,利用各虚拟机并行执行各自对应的测试用例,得到目标固件程序对应的测试结果。由于多个Fuzz实例能够通过并行化的方式利用多个种子文件生成各自的测试用例,因此在单位时间内增加了虚拟机执行测试用例的数量,提高了对目标固件程序的测试效率,从而提高了对物联网设备漏洞的挖掘效率。
综上,已经对本主题的特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作可以按照不同的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序,以实现期望的结果。在某些实施方式中,多任务处理和并行处理可以是有利的。
以上为本申请实施例提供的设备固件的模糊测试方法,基于同样的思路,本申请实施例还提供一种设备固件的模糊测试系统。
图3是根据本申请一实施例的一种设备固件的模糊测试系统的示意性框图,如图3所示,该系统包括:
仿真环境配置组件310,用于配置待测试的目标固件程序的仿真环境;
仿真执行云平台320,用于基于仿真环境,并行运行多个用于测试目标固件程序的虚拟机;确定与目标固件程序对应的多个模糊测试Fuzz实例,建立各虚拟机与各Fuzz实例之间的网络连接关系;
固件安全分析中心330,用于从预设的种子文件序列中获取各Fuzz实例分别对应的、用于生成测试用例的种子文件,并利用各种子文件生成各Fuzz实例分别对应的测试用例;以及将各测试用例通过网络连接关系分别发送至对应的各虚拟机;利用各虚拟机并行执行各自对应的测试用例,得到目标固件程序对应的测试结果。
在一个实施例中,固件安全分析中心330还用于:
针对任一Fuzz实例,从预设的种子文件序列中获取Fuzz实例对应的第一种子文件;
判断第一种子文件是否正被其他Fuzz实例使用;
若否,则获取第一种子文件,并利用第一种子文件生成Fuzz实例对应的测试用例。
在一个实施例中,各种子文件对应各自的能量值;能量值基于各种子文件被各Fuzz实例使用的总次数所确定;
固件安全分析中心330还用于:
获取种子文件序列中能量值最高的种子文件,作为Fuzz实例对应的第一种子文件。
在一个实施例中,固件安全分析中心330还用于:
确定第一种子文件被各Fuzz实例使用的总次数;
根据总次数,确定第一种子文件当前待生成测试用例的目标数量;目标数量和总次数之间正相关;
利用第一种子文件生成Fuzz实例对应的目标数量个测试用例。
在一个实施例中,固件安全分析中心330还用于:
若测试结果为测试异常,则将测试用例作为新的种子文件加入种子文件序列;为新的种子文件配置初始能量值;
若测试结果为测试正常,则将当前执行的测试用例对应的种子文件返回种子文件序列。
在一个实施例中,固件安全分析中心330还用于:
根据种子文件当前的总能量值、以及生成测试用例所使用的能量值,确定种子文件对应的剩余能量值;
更新种子文件对应的能量值为剩余能量值。
在一个实施例中,固件安全分析中心330还用于:
判断种子文件对应的剩余能量值是否小于预设能量阈值;
若是,则丢弃种子文件。
在一个实施例中,仿真环境包括以下参数:各固件程序运行时依赖的系统内核和虚拟硬件、以及各固件程序对应的固件文件系统;
仿真环境配置组件310还用于:
确定目标固件程序运行时依赖的系统内核和虚拟硬件、以及目标固件程序对应的固件文件系统;
根据系统内核、虚拟硬件和固件文件系统,配置目标固件程序的仿真环境。
采用本申请实施例的系统,通过配置待测试的目标固件程序的仿真环境,基于仿真环境并行运行多个用于测试目标固件程序的虚拟机,确定与目标固件程序对应的多个模糊测试Fuzz实例,并建立各虚拟机与各Fuzz实例之间的网络连接关系,能够实现并行化进行模糊测试的效果,提高了模糊测试的吞吐率,且基于仿真环境进行模糊测试能够提升方案的适用性。并且,通过从预设的种子文件序列中获取各Fuzz实例分别对应的、用于生成测试用例的种子文件,利用各种子文件生成各Fuzz实例分别对应的测试用例,以及将各测试用例通过网络连接关系分别发送至对应的各虚拟机,利用各虚拟机并行执行各自对应的测试用例,得到目标固件程序对应的测试结果。由于多个Fuzz实例能够通过并行化的方式利用多个种子文件生成各自的测试用例,因此在单位时间内增加了虚拟机执行测试用例的数量,提高了对目标固件程序的测试效率,从而提高了对物联网设备漏洞的挖掘效率。
本领域的技术人员应可理解,图3中的设备固件的模糊测试系统能够用来实现前文所述的设备固件的模糊测试方法,其中的细节描述应与前文方法部分描述类似,为避免繁琐,此处不另赘述。
基于同样的思路,本申请实施例还提供一种设备固件的模糊测试设备,如图4所示。设备固件的模糊测试设备可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上的处理器401和存储器402,存储器402中可以存储有一个或一个以上存储应用程序或数据。其中,存储器402可以是短暂存储或持久存储。存储在存储器402的应用程序可以包括一个或一个以上模块(图示未示出),每个模块可以包括对设备固件的模糊测试设备中的一系列计算机可执行指令。更进一步地,处理器401可以设置为与存储器402通信,在设备固件的模糊测试设备上执行存储器402中的一系列计算机可执行指令。设备固件的模糊测试设备还可以包括一个或一个以上电源403,一个或一个以上有线或无线网络接口404,一个或一个以上输入输出接口405,一个或一个以上键盘406。
具体在本实施例中,设备固件的模糊测试设备包括有存储器,以及一个或一个以上的程序,其中一个或者一个以上程序存储于存储器中,且一个或者一个以上程序可以包括一个或一个以上模块,且每个模块可以包括对设备固件的模糊测试设备中的一系列计算机可执行指令,且经配置以由一个或者一个以上处理器执行该一个或者一个以上程序包含用于进行以下计算机可执行指令:
配置待测试的目标固件程序的仿真环境;基于仿真环境,并行运行多个用于测试目标固件程序的虚拟机;
确定与目标固件程序对应的多个模糊测试Fuzz实例,建立各虚拟机与各Fuzz实例之间的网络连接关系;
从预设的种子文件序列中获取各Fuzz实例分别对应的、用于生成测试用例的种子文件,并利用各种子文件生成各Fuzz实例分别对应的测试用例;以及将各测试用例通过网络连接关系分别发送至对应的各虚拟机;
利用各虚拟机并行执行各自对应的测试用例,得到目标固件程序对应的测试结果。
采用本申请实施例的设备,通过配置待测试的目标固件程序的仿真环境,基于仿真环境并行运行多个用于测试目标固件程序的虚拟机,确定与目标固件程序对应的多个模糊测试Fuzz实例,并建立各虚拟机与各Fuzz实例之间的网络连接关系,能够实现并行化进行模糊测试的效果,提高了模糊测试的吞吐率,且基于仿真环境进行模糊测试能够提升方案的适用性。并且,通过从预设的种子文件序列中获取各Fuzz实例分别对应的、用于生成测试用例的种子文件,利用各种子文件生成各Fuzz实例分别对应的测试用例,以及将各测试用例通过网络连接关系分别发送至对应的各虚拟机,利用各虚拟机并行执行各自对应的测试用例,得到目标固件程序对应的测试结果。由于多个Fuzz实例能够通过并行化的方式利用多个种子文件生成各自的测试用例,因此在单位时间内增加了虚拟机执行测试用例的数量,提高了对目标固件程序的测试效率,从而提高了对物联网设备漏洞的挖掘效率。
本申请实施例还提出了一种存储介质,该存储介质存储一个或多个计算机程序,该一个或多个计算机程序包括指令,该指令当被包括多个应用程序的设备固件的模糊测试设备执行时,能够使该设备固件的模糊测试设备执行上述设备固件的模糊测试方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。
Claims (9)
1.一种设备固件的模糊测试方法,其特征在于,包括:
配置待测试的目标固件程序的仿真环境;基于所述仿真环境,并行运行多个用于测试所述目标固件程序的虚拟机;
确定与所述目标固件程序对应的多个模糊测试Fuzz实例,建立各所述虚拟机与各所述模糊测试Fuzz实例之间的网络连接关系;
从预设的种子文件序列中获取各所述模糊测试Fuzz实例分别对应的、用于生成测试用例的种子文件,并利用各所述种子文件生成各所述模糊测试Fuzz实例分别对应的测试用例;以及将各所述测试用例通过所述网络连接关系分别发送至对应的各所述虚拟机;
利用各所述虚拟机并行执行各自对应的所述测试用例,得到所述目标固件程序对应的测试结果;
其中,所述从预设的种子文件序列中获取各所述模糊测试Fuzz实例分别对应的、用于生成测试用例的种子文件,并利用各所述种子文件生成各所述模糊测试Fuzz实例分别对应的测试用例,包括:
针对任一所述模糊测试Fuzz实例,从预设的种子文件序列中获取所述模糊测试Fuzz实例对应的第一种子文件;
判断所述第一种子文件是否正被其他所述模糊测试Fuzz实例使用;
若否,则获取所述第一种子文件,并利用所述第一种子文件生成所述模糊测试Fuzz实例对应的测试用例;
各所述种子文件对应各自的能量值;所述能量值基于各所述种子文件被各所述模糊测试Fuzz实例使用的总次数所确定;
所述从预设的种子文件序列中获取所述模糊测试Fuzz实例对应的第一种子文件,包括:
获取所述种子文件序列中能量值最高的所述种子文件,作为所述模糊测试Fuzz实例对应的所述第一种子文件。
2.根据权利要求1所述的方法,其特征在于,所述利用所述第一种子文件生成所述模糊测试Fuzz实例对应的测试用例,包括:
确定所述第一种子文件被各所述模糊测试Fuzz实例使用的总次数;
根据所述总次数,确定所述第一种子文件当前待生成测试用例的目标数量;所述目标数量和所述总次数之间正相关;
利用所述第一种子文件生成所述模糊测试Fuzz实例对应的目标数量个所述测试用例。
3.根据权利要求2所述的方法,其特征在于,所述利用各所述虚拟机并行执行各自对应的所述测试用例,得到所述目标固件程序对应的测试结果之后,所述方法还包括:
若所述测试结果为测试异常,则将所述测试用例作为新的种子文件加入所述种子文件序列;为所述新的种子文件配置初始能量值;
若所述测试结果为测试正常,则将当前执行的所述测试用例对应的种子文件返回所述种子文件序列。
4.根据权利要求3所述的方法,其特征在于,所述将当前执行的所述测试用例对应的种子文件返回所述种子文件序列之后,所述方法还包括:
根据所述种子文件当前的总能量值、以及生成所述测试用例所使用的能量值,确定所述种子文件对应的剩余能量值;
更新所述种子文件对应的能量值为所述剩余能量值。
5.根据权利要求4所述的方法,其特征在于,更新所述种子文件对应的能量值为所述剩余能量值之后,所述方法还包括:
判断所述种子文件对应的所述剩余能量值是否小于预设能量阈值;
若是,则丢弃所述种子文件。
6.根据权利要求1所述的方法,其特征在于,所述仿真环境包括以下参数:各固件程序运行时依赖的系统内核和虚拟硬件、以及各所述固件程序对应的固件文件系统;
所述配置待测试的目标固件程序的仿真环境,包括:
确定所述目标固件程序运行时依赖的系统内核和虚拟硬件、以及所述目标固件程序对应的固件文件系统;
根据所述系统内核、所述虚拟硬件和所述固件文件系统,配置所述目标固件程序的所述仿真环境。
7.一种设备固件的模糊测试系统,其特征在于,包括:
仿真环境配置组件,用于配置待测试的目标固件程序的仿真环境;
仿真执行云平台,用于基于所述仿真环境,并行运行多个用于测试所述目标固件程序的虚拟机;确定与所述目标固件程序对应的多个模糊测试Fuzz实例,建立各所述虚拟机与各所述模糊测试Fuzz实例之间的网络连接关系;
固件安全分析中心,用于从预设的种子文件序列中获取各所述模糊测试Fuzz实例分别对应的、用于生成测试用例的种子文件,并利用各所述种子文件生成各所述模糊测试Fuzz实例分别对应的测试用例;以及将各所述测试用例通过所述网络连接关系分别发送至对应的各所述虚拟机;利用各所述虚拟机并行执行各自对应的所述测试用例,得到所述目标固件程序对应的测试结果;
其中,固件安全分析中心还用于:
针对任一模糊测试Fuzz实例,从预设的种子文件序列中获取模糊测试Fuzz实例对应的第一种子文件;
判断第一种子文件是否正被其他模糊测试Fuzz实例使用;
若否,则获取第一种子文件,并利用第一种子文件生成模糊测试Fuzz实例对应的测试用例;
各种子文件对应各自的能量值;能量值基于各种子文件被各模糊测试Fuzz实例使用的总次数所确定;
固件安全分析中心还用于:
获取种子文件序列中能量值最高的种子文件,作为模糊测试Fuzz实例对应的第一种子文件。
8.一种设备固件的模糊测试设备,其特征在于,包括处理器和与所述处理器电连接的存储器,所述存储器存储有计算机程序,所述处理器用于从所述存储器调用并执行所述计算机程序以实现权利要求1-6任一项所述的设备固件的模糊测试方法。
9.一种存储介质,其特征在于,所述存储介质用于存储计算机程序,所述计算机程序被处理器执行以实现权利要求1-6任一项所述的设备固件的模糊测试方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011418123.9A CN112417461B (zh) | 2020-12-07 | 2020-12-07 | 设备固件的模糊测试方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011418123.9A CN112417461B (zh) | 2020-12-07 | 2020-12-07 | 设备固件的模糊测试方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112417461A CN112417461A (zh) | 2021-02-26 |
CN112417461B true CN112417461B (zh) | 2023-10-03 |
Family
ID=74775916
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011418123.9A Active CN112417461B (zh) | 2020-12-07 | 2020-12-07 | 设备固件的模糊测试方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112417461B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR102397754B1 (ko) * | 2020-11-04 | 2022-05-16 | 한국전자통신연구원 | 자동화된 리셋 기반의 IoT 기기 자동 퍼징 방법 및 이를 이용한 장치 |
CN113032246B (zh) * | 2021-03-04 | 2023-10-03 | 成都佰维存储科技有限公司 | Ssd固件运行方法、装置、可读存储介质及电子设备 |
CN113157574A (zh) * | 2021-04-19 | 2021-07-23 | 上海湃星信息科技有限公司 | 一种软件实物测试覆盖率收集方法及装置、电子设备 |
CN113438273B (zh) * | 2021-05-21 | 2022-08-16 | 中国科学院信息工程研究所 | 一种物联网设备中应用程序的用户级仿真方法及装置 |
CN113591141B (zh) * | 2021-05-28 | 2023-09-26 | 山东英信计算机技术有限公司 | 基于模糊测试的固件镜像文件刷写校验方法、系统及终端 |
CN115270139B (zh) * | 2022-09-20 | 2023-01-17 | 哈尔滨工业大学(深圳)(哈尔滨工业大学深圳科技创新研究院) | 一种IoT设备网络服务自动化漏洞分析方法及系统 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104598776A (zh) * | 2013-10-31 | 2015-05-06 | 深圳市腾讯计算机系统有限公司 | 一种对软件进行测试的方法及装置 |
CN107025175A (zh) * | 2017-05-12 | 2017-08-08 | 北京理工大学 | 一种模糊测试种子用例变长字段修剪方法 |
CN110147310A (zh) * | 2019-04-02 | 2019-08-20 | 中国科学院信息工程研究所 | 一种基于变异策略的并行模糊测试调度方法及装置 |
CN111830928A (zh) * | 2020-06-08 | 2020-10-27 | 杭州电子科技大学 | 一种工业控制设备固件的模糊测试方法 |
CN111913877A (zh) * | 2020-07-03 | 2020-11-10 | 中国科学院信息工程研究所 | 一种面向文本配置文件的模糊测试方法及装置 |
-
2020
- 2020-12-07 CN CN202011418123.9A patent/CN112417461B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104598776A (zh) * | 2013-10-31 | 2015-05-06 | 深圳市腾讯计算机系统有限公司 | 一种对软件进行测试的方法及装置 |
CN107025175A (zh) * | 2017-05-12 | 2017-08-08 | 北京理工大学 | 一种模糊测试种子用例变长字段修剪方法 |
CN110147310A (zh) * | 2019-04-02 | 2019-08-20 | 中国科学院信息工程研究所 | 一种基于变异策略的并行模糊测试调度方法及装置 |
CN111830928A (zh) * | 2020-06-08 | 2020-10-27 | 杭州电子科技大学 | 一种工业控制设备固件的模糊测试方法 |
CN111913877A (zh) * | 2020-07-03 | 2020-11-10 | 中国科学院信息工程研究所 | 一种面向文本配置文件的模糊测试方法及装置 |
Non-Patent Citations (1)
Title |
---|
基于内存模糊测试的嵌入式固件漏洞检测;朱怀东等;计算机工程与设计;第39卷(第9期);2992-2996 * |
Also Published As
Publication number | Publication date |
---|---|
CN112417461A (zh) | 2021-02-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112417461B (zh) | 设备固件的模糊测试方法及系统 | |
US10481964B2 (en) | Monitoring activity of software development kits using stack trace analysis | |
US10635812B2 (en) | Method and apparatus for identifying malicious software | |
KR20170068814A (ko) | 악성 모바일 앱 감지 장치 및 방법 | |
CN103177210A (zh) | 一种在Android中植入动态污点分析模块的方法 | |
US11934287B2 (en) | Method, electronic device and computer program product for processing data | |
CN111931185A (zh) | 一种Java反序列化漏洞检测方法及组件 | |
CN111339531B (zh) | 恶意代码的检测方法、装置、存储介质及电子设备 | |
CN113419971B (zh) | 安卓系统服务漏洞检测方法及相关装置 | |
US9116714B2 (en) | Methods and systems for file processing | |
US20230141948A1 (en) | Analysis and Testing of Embedded Code | |
CN114840427A (zh) | 一种代码测试、测试用例生成的方法及装置 | |
CN112379967B (zh) | 模拟器检测方法、装置、设备及介质 | |
CN110377499B (zh) | 一种对应用程序进行测试的方法及装置 | |
CN113849811A (zh) | 一种共享虚拟资源分析方法及装置 | |
CN112148590A (zh) | 一种代码覆盖率的确定方法、装置及设备 | |
CN116955209B (zh) | WebAssembly虚拟机的测试方法和装置 | |
Tokmak et al. | Deep Learning Based Malware Detection Tool Development for Android Operating System | |
CN116305131B (zh) | 脚本静态去混淆方法及系统 | |
CN116414722B (zh) | 模糊测试处理方法、装置、模糊测试系统及存储介质 | |
KR102174393B1 (ko) | 악성 코드 탐지 장치 | |
CN116700840B (zh) | 文件执行方法、装置、电子设备及可读存储介质 | |
US11928220B2 (en) | Method for evaluating risk of data leakage in application, recording medium and device for performing the method | |
CN109901990B (zh) | 一种业务系统的测试方法、装置及设备 | |
CN116450611A (zh) | 一种时序数据库安全的测试方法、装置及设备 |
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 |