1. Basic Information
Conference: USENIX Security’23
Author: Hui Jun Tay, Kyle Zeng, Jayakrishna Menon Vadayath, Arvind S Raj
Affiliation: Arizona State University
2. Introduction
本文设计了Greenhouse,它提出用户空间单服务重托管技术用于对嵌入式固件进行仿真和分析。
3. Problem
现有技术表明,固件重新托管要求高执行保真度。然而,对于固件的安全分析来说,高执行保真度通常是不必要的,特别是当目标漏洞不需要高保真度时。
4. Design
4.1 IoT Firmware categorization
- Type-I: 运行通用目的操作系统,例如基于Linux的操作系统
- Type-II: 运行专用于特定的嵌入式环境的定制操作系统
- Type-III: “Monolithic Firmware”,运行于特定设备的二进制代码块,使用特定的接口与硬件进行交互
4.2 Rehosting Fidelity

作者将仿真固件组件的保真度定义为它与真实设备上的相同组件相似的程度。一般来说,组件与原始设备上的对应组件越相似,仿真的保真度就越高。保真度主要主要从以下两个层面进行度量:
- Extraction Fidelity:静态组件(如文件)的保真度称为提取保真度。
- Execution Fidelity:动态组件(如服务的运行时行为)的保真度称为执行保真度。

4.3 Single-Service Rehosting
单个服务表示映像中自包含的一组进程,这些进程不与主进程不是父进程的任何其他进程通信。Greenhouse使用Qemu的用户模式重托管该类服务减少开销。 Greenhouse主要用于重托管Type-I类的固件。
4.4 Greenhouse Overview

- File System Extraction(Extractor): 使用binwalk提取,并添加–preserve-symlinks以及-M选项
- Target Emulation(Runner): 在docker中使用Qemu用户模式运行网络服务,并支持两类tracing模式:
- partial tracing mode: 收集父进程以及所有子进程的系统调用trace
- full tracing mode: 收集父进程以及所有子进程的系统调用和指令trace、
- Fidelity Testing(Checker): 测试HTTP, UPnP, 或者DNS服务的连接性, 以及它们的响应行为
- Service Fixing(Fixer): 使用在runner中的生成的tracing和日志判断是否存在潜在的roadblocks(见4.5节),如果存在,Fixer使用相应的措施去绕过roadblocks。当达到指定的仿真度或者迭代指定的轮数时,将使用exporter打包重托管的文件系统。
4.5 Roadblocks & Interventions
| Roadblocks | Interventions |
|---|---|
| Missing Paths(R1) | |
| Runtime Arguments(R2) | Runtime ArgParser (I5) |
| Peripheral Access(R3) | |
| NVRAM Configurations(R4) | Nvram-faker (I4) |
| Hard-coded Network Devices(R5) | Dummy Network Devices(I6)、IPv6 Workaround(I8) |
| Multi-Binary Behavior(R6) | Background Script Plugins(I7) |
| Environment Checks(R7) | Patching sysinfo()(I9) |
| Environment Mangling(R8) | Logging Behavior(I10) |
| File Setup(I1) - [R1, R3, R7] | |
| File Sanitization(I2) - [R3, R7] | |
| Boot-up Synchronization(I3) - [R1, R2, R7] |
对于一些无法直接解决的方案,GreenHouse通过对固件二进制打补丁来实现。主要分为三类:
- Premature Exit Patch:在固件中,如果某些一般情况的检查失败,固件则会则分支到退出函数。为了处理这类情况,GreebHouse使用上下文敏感的控制流图,识别这类函数,然后通过反转分支绕过该类函数。
- Wait Loop Patch:固件长时间等待外部环境输入时,同样使用上下文敏感的控制流图,试图找到不属于原始执行跟踪的分支节点。
- Crashing Instruction Patch:当遇到会立即导致crash的块时,它获取执行跟踪中最后记录的指令的地址,将其映射到固件二进制文件中相应的基本块,并对将要执行的下一条指令进行修补,用nops替换它。
5. Evaluation
5.1 Firmware Rehosting Results




5.2 Vulnerability Risk Assessment

5.3 Large-Scale Fuzzing



6. Conclusion or Limitations
- Encrypted firmware
- QEMU limitations
- Angr limitations(for CFG)
- Missing library functions
- False positives from patching
7. Related Work
| 方法或工具或研究人员 | 描述 |
|---|---|
| ARI | 它扩展了Firmadyne,并应用干预来处理基于linux的固件上的不同故障情况 |
| EQUAFL | 将重新托管的固件映像的文件系统状态移植到用户空间,完全在用户空间中模糊化 |
9. Comments
本文设计了Greenhouse,它提出用户空间单服务重托管技术用于对嵌入式固件进行仿真和分析。本文的工作主要集中于基于Linux的人嵌入式的服务进行分析,仿真能力和分析能力得到较大的提升。
注:解读如有错误或不当之处,麻烦在评论区批评指正。