论文阅读-Fuzzing of Embedded Systems: A Survey

文章探讨了模糊测试在嵌入式系统中的应用,分析了与传统模糊测试的区别,如硬件依赖性、崩溃检测和仪器化等问题。文章通过分类和比较不同的模糊测试方法,包括直接模糊测试、基于仿真的模糊测试和固件分析,阐述了每种方法的优缺点。此外,文章还讨论了嵌入式系统模糊测试的挑战和未来研究趋势,如性能和可扩展性限制。

论文阅读-Fuzzing of Embedded Systems: A Survey

1. Introduction

  • Fuzzing(即模糊测试)是“一种自动测试方法,它使用随机数据(来自文件、网络协议、API调用等)作为软件输入来生成大量测试用例,以发现可利用漏洞的存在”。
  • 尽管模糊测试是一种自动检测软件漏洞的有效技术,但将这种技术直接应用于不太明显且具有很强硬件依赖性的嵌入式设备具有挑战性。
  • 尽管由于这些原因,嵌入式系统模糊器的数量少于传统模糊器,但迄今为止已经开发了几种特定于嵌入式系统的模糊器(即模糊器),我们将在本文中对其进行分析和讨论。

1.1 Motivation

  • 许多嵌入式系统模糊测试工具(例如,Firm-AFL、Avatar2, 和 IoTFuzzer) 已被提议用于识别嵌入式设备中的错误。但是,没有安全分析师模糊嵌入 式系统或分析固件的综合指南。
  • 没有系统评价过嵌入式系统模糊测试 (ESF)「针对嵌入式系统和其固件的模糊测试」

2. SURVEY METHOD

2.1 研究问题

  • 本文的目标是回答以下问题:
    • RQ1: 传统fuzzing和ESF的区别是什么?
    • RQ2: 嵌入式系统的fuzzing技术有哪些类型,其之间各有什么不同?
    • RQ3: 目前的嵌入式fuzzing方法如何解决嵌入式模糊测试的难题的?
    • RQ4: 研究的挑战和未来的研究趋势是什么?

3. 嵌入式系统模糊测试

3.1 嵌入式系统及其固件

嵌入式系统

嵌入式系统是一种基于微处理器的系统,开发用于实现作为大型电气系统一部分的一些专用功能。

它与物理环境交互并与环境中的其他设备通信。

该系统通常由处理器、存储 器和外围设备组成。

用于操作嵌入式系统的软件存储在只读存储器 (ROM)或嵌入式系统的闪存芯片。

这种存储在ROM或闪存芯片中的软件被称为固件,其中包括引导加载程序,一个操作系统(OS),和一个文件系统。
固件控制嵌入式设备的硬件,通常是嵌入式系统的模糊测试目标。
通常,黑客会对整个固件进行模糊测试,包括操作系统和应用程序。
在单片固件设备的情况下,黑客将模糊测试用例输入到接口中,例如启动参数或外围 I/O 通道。

固件

固件通常由内核、文件系统和应用程序组成。
1890dbdbeb969e7b9.jpg
引导加载程序为操作系统(即内核)准备执行环境。
内核是操作系统的核心,控制着整个系统,应用程序通过内核来使用计算机的硬件。

大多数嵌入式模糊器的目标是应用程序,因为应用程序对 Internet开放,攻击者可以访问,并且由于其多样性和不成熟而容易出现漏洞。

尽管如此,一些模糊器使用全系统仿真可以测试嵌入式系统的内核。

作为模糊测试目标的两类应用程序是可从网络访问的应用程序和可通过仿真访问的应用程序

前一类是一些应用程序,而后者是很多,另一种模糊 测试目标的分类取决于嵌入式设备的类型。

3.2 嵌入式系统的分类

2.jpg
根据性能,嵌入式设备分为四类:实时、独立、联网和移动嵌入式设备。并根据微控制器的性能,将它们分为小型、中型和复杂的嵌入式设备。但是,由于我们对嵌入式软件测试感兴趣,所以我们遵循操作系统类型。在软件测试方面,嵌入式设备可以根据其操作系统分为三类。因为模糊测试(即安全测试)取决于操作系统。操作系统既为应用程序提供了执行环境,也为它的复杂性提供了漏洞来源。

  • 类型一(T1):具有通用操作系统的嵌入式设备。由于通用操作系统具有大量的功能、兼 容性和开发人员的持续支持,它们也被用于嵌入式设备。然而,由于性能限制,操作系统的最 小形状经常用于嵌入式设备。
  • 类型二(T2):具有定制操作系统的嵌入式设备。第二类嵌入式设备具有定制的操作系统,例如实时操作系统 (RTOS)。RTOS 用于处理数据的实时应用程序,因为它没有缓冲延迟。这些操作系统适用于低功耗设备。例如,VxWorks或 QNX是具有代表性的RTOS,广泛应用于嵌入式设备。另一个例子是 uClinux(即微控制器 Linux),它没有内存管理单元 (MMU).
  • 类型三(T3):带有单片软件的嵌入式设备。这种嵌入式设备类具有通过编译充当系统和 应用程序的单片软件。例如,许多小型设备,如智能卡、GPS 接收器或恒温器,都采用这种形 式。这些设备通常没有隐藏物理硬件并提供编程接口的硬件抽象层。

3.3 传统Fuzzing与ESF的比较

32cc7b1b21ae0287c.jpg

3.3.1 硬件依赖性强

嵌入式设备有各种微控制器(即MCU)和操作系统。常⻅的MCU类型有 ARM、MIPS(32/64bit)、Alpha、x86-64、IA-64、MSP430、PowerPC(32/64bit)、 SPARC-V8、V9等10余种,OS超过5种包括 Linux、VxWorks、QNX、uClinux 和 TinyOS,而桌面系统通常具有 x86-64 CPU 和 Linux 操作系统。桌面模糊器通常在目标系统上工作, 但嵌入式系统模糊器在另一个系统上工作,因为目标系统功率低且资源有限。因此,大多数嵌入式系统模糊器使用仿真或重新托管固件。PC模糊器的目标程序是真实世界的数据集,例如 Binutils, LAVA-M,或CGC datasets,而嵌入式系统模糊器的目标是固件中的可执行程序。

MCU架构有两种主要类型:精简指令集计算 (RISC)和 复杂指令集计算 (CISC). RISC 的示例 是 ARM、MIPS 和 PowerPC 架构,而 CISC 的示例是 x86-64 架构. RISC 体系结构旨在使用 在一个时钟周期内执行的简单指令。相反,CISC 架构专注于通过在目标硬件上构建丰富的指令 集来使用更少的汇编指令。例如,CISC 的“ADD”指令在 RISC 中分为三个独立的指 令:“LOAD”、“ADD”和“STORE”。由于指令被拆分,RISC 架构具有流水线和更好的硬 件使用的

[2025-07-11 09:39:12,098] [INFO]: ------[Step 1]------ [2025-07-11 09:39:12,098] [INFO]: (Step1-1) start to check device status and prepare fuzz tool [2025-07-11 09:39:12,098] [INFO]: popen cmd: hdc list targets, timeout: 5 [2025-07-11 09:39:12,145] [INFO]: popen cmd: hdc -t 010872247D000127 file send "C:\sec\securityclient\plugins\SecHMFuzz\tools\busybox" "/data/local/tmp", timeout: 60 [2025-07-11 09:39:12,397] [INFO]: popen cmd: hdc -t 010872247D000127 shell "chmod +x "/data/local/tmp/busybox"", timeout: 60 [2025-07-11 09:39:12,539] [INFO]: popen cmd: hdc -t 010872247D000127 shell "cat /data/hookfile/hook_tool_version", timeout: 60 [2025-07-11 09:39:12,644] [INFO]: end to check device status and prepare fuzz tool [2025-07-11 09:39:12,644] [INFO]: fuzz target starting ... [2025-07-11 09:39:12,644] [INFO]: start fuzz [2025-07-11 09:39:12,644] [INFO]: update device last firstboot time: NotFound [2025-07-11 09:39:12,644] [INFO]: (Step1-2) start to clear logs. [2025-07-11 09:39:12,644] [INFO]: popen cmd: hdc -t 010872247D000127 shell "hilog -r", timeout: 60 [2025-07-11 09:39:13,065] [INFO]: popen cmd: hdc -t 010872247D000127 shell "rm -rf /data/log/hilog/hilog.*", timeout: 60 [2025-07-11 09:39:13,226] [INFO]: popen cmd: hdc -t 010872247D000127 shell "rm -rf /data/log/hilog/hilog_kmsg.*", timeout: 60 [2025-07-11 09:39:13,367] [INFO]: popen cmd: hdc -t 010872247D000127 shell "rm -rf /data/log/faultlog/faultlogger/*", timeout: 60 [2025-07-11 09:39:13,495] [INFO]: popen cmd: hdc -t 010872247D000127 shell "rm -rf /data/log/sanitizer/asan/*", timeout: 60 [2025-07-11 09:39:13,653] [INFO]: (Step1-2) end to clear logs. [2025-07-11 09:39:13,653] [INFO]: (Step1-3) start check target status. [2025-07-11 09:39:13,653] [INFO]: (Step1-3) end check target status. [2025-07-11 09:39:13,660] [INFO]: ------[Step 2]------ [2025-07-11 09:39:13,660] [INFO]: (Step2-1) start to fuzz. [2025-07-11 09:39:13,660] [INFO]: popen cmd: "C:\sec\securityclient\plugins\SecHMFuzz\Python375\sechmfuzz.exe" "C:\sec\securityclient\plugins\SecHMFuzz\tools\ohos\want_fuzzer.py" -f "C:\sec\securityclient\plugins\SecHMFuzz\results\9321_540728_WANT\temp\WANT\com.huawei.hmos.accessorymanager_test_case.txt" --sn 010872247D000127 -l "C:\sec\securityclient\plugins\SecHMFuzz\results\9321_540728_WANT\temp\WANT\com.huawei.hmos.accessorymanager.log" --hook True -i 500 --ret "C:\sec\securityclient\plugins\SecHMFuzz\results\9321_540728_WANT\status\com.huawei.hmos.accessorymanager.ret" --exported 1, timeout: 10800 [2025-07-11 09:46:31,371] [INFO]: run_op_fuzz ret = : [HMFuzz] start setup and check [HMFuzz] start setup and check end [HMFuzz] want fuzzer end [2025-07-11 09:46:31,371] [INFO]: (Step2-1) end to fuzz. [2025-07-11 09:46:31,378] [INFO]: running time: 438.73s [2025-07-11 09:46:31,378] [INFO]: ------[Step 3]------ [2025-07-11 09:46:31,378] [INFO]: (Step3-1) start to monitor logs and grap fault log. [2025-07-11 09:46:31,378] [INFO]: fuzz end, start _analyzer_fault. [2025-07-11 09:46:31,378] [INFO]: popen cmd: hdc list targets, timeout: 5 [2025-07-11 09:46:33,424] [INFO]: popen cmd: hdc list targets, timeout: 5 [2025-07-11 09:46:35,489] [INFO]: popen cmd: hdc list targets, timeout: 5 [2025-07-11 09:46:37,552] [INFO]: popen cmd: hdc list targets, timeout: 5 [2025-07-11 09:46:37,598] [INFO]: monitor_device run time: 6.22 [2025-07-11 09:46:37,598] [INFO]: monitor_device result: (4, ) [2025-07-11 09:46:37,598] [INFO]: popen cmd: hdc -t 010872247D000127 shell "ls /data/log/faultlog/faultlogger", timeout: 60 [2025-07-11 09:46:37,740] [INFO]: monitor_logs: FuzzType.WANT, com.huawei.hmos.accessorymanager, C:\sec\securityclient\plugins\SecHMFuzz\results\9321_540728_WANT, result: False, [2025-07-11 09:46:37,740] [INFO]: (Step3-1) end to monitor logs and grap fault log. [2025-07-11 09:46:37,740] [INFO]: {"op": "WANT", "result": 1, "severity": "Low", "resultInfo": "", "iteration": null, "iteration_detail": [], "logPath": "", "fuzzTime": "445.10", "device_reboot": false, "key_pid_restart": false, "test_case_info": null} [2025-07-11 09:46:37,740] [INFO]: fuzz done. [2025-07-11 09:46:37,740] [INFO]: [{"op": "WANT", "result": 1, "severity": "Low", "resultInfo": "", "iteration": null, "iteration_detail": [], "logPath": "", "fuzzTime": "445.10", "device_reboot": false, "key_pid_restart": false, "test_case_info": null}] [2025-07-11 09:46:37,740] [INFO]: (Step3-2) start to parse log faults [2025-07-11 09:46:37,740] [INFO]: start parse log faults, dir=C:\sec\securityclient\plugins\SecHMFuzz\results\9321_540728_WANT [2025-07-11 09:46:37,740] [INFO]: [+] Found 0 error. [2025-07-11 09:46:37,740] [INFO]: (Step3-2) end to parse log faults [2025-07-11 09:46:37,758] [INFO]: target fuzzing done with time: 445.66
最新发布
07-12
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值