Greenhouse:Single-Service Rehosting of Linux-Based Firmware Binaries in User-Space Emulation
Greenhouse:在用户空间模拟中基于Linux固件二进制文件的单服务模拟
背景
研究背景
物联网(loT):数量是人类数量的2倍,且其安全性令人忧虑
现有的固件重新托管方法(rehosting)包括:
- 系统级仿真:1.大量的手动配置工作 2.较高的性能开销
- 用户态仿真:1.模拟的保真度显著降低
- 无仿真(纯静态分析或基于模型的方法)
现有的系统级仿真技术意味着固件重新托管要求高执行保真度,但本文作者认为,对于固件的安全分析,过于追求高执行保真度或许不够有性价比
保真度
- 提取保真度:固件中静态组件提取完整度
- 执行保真度:包括避免意外行为、通信中断和过早退出或崩溃
用户空间单服务重新托管
- 用户空间——意味着仅应用级模拟,而非系统级
- 单服务——关注单一服务,并仅为它模拟运行环境
Greenhouse
Greenhouse是一个用户空间中固件的自动单服务重新托管系统
- Extractor&Exporter:执行固件映像提取和重新托管结果打包
- Runner:应用态(QEMU-user)仿真固件,收集日志信息给Fixer
- Checker:执行特定于服务的检查,结果交付Fixer
- Fixer:根据Runner提供的跟踪日志,执行运行时障碍绕过,修改后启动下一次迭代
重新托管指标(Checker)
重新托管指标:Checker确定其在给定服务上实现的成功程度的指标(分为多个阶段)
- 拆包:检查是否存在shell(基于Linux系统)
- 执行:程序可执行
- 连接:要求启动最低限度的服务
- 交互:要求启动的服务具有可交互性(基于启发式的检查)
障碍和干预措施
遇到的障碍(下划线为单服务重新托管需解决的特有问题)
- ****路径缺失:未生成或解压初始文件
- 运行时参数:特殊命令行配置
- 外设访问:与不存在外设通信
- NVRAM配置:NVRAM常包含启动和运行默认配置数据
- 硬编码网络设备 地址或名称不存在:例如不支持IPV6
- 多进程行为:必须显式地运行当前进程与之通信的其他进程
- 环境检查:检查文件、网络、环境等种种
- 环境破坏:固件二进制文件的行为完全不考虑其他进程
干预措施(下划线为有所创新的解决方案)
- 文件设置:通过strace追踪文件访问调用,然后创建或移动相应文件
- 文件清理:用空文件替换无用的特殊文件
- 启动同步:使用FirmAE运行固件并获得其启动数据
- nvram-faker:开源项目,解决NVRAM问题
- 运行时参数解析:一个简单的启发式解析器,提供常见的默认值
- 虚拟网络设备:设置网桥和网卡
- 后台脚本插件:使用可插入的启发式方法识别后台进程并运行它们
- IPv6解决方法:将IPV6地址绑定到IPV4地址0.0.0.0
- 修补sysinfo():这是一个特定的环境检查
- 记录行为:修改open和close系统调用,以防止固件对模拟造成破坏
执行修补(Fixer)
Fixer组件基于上下文相关控制流图处理三种类型的补丁:提前退出补丁、等待循环补丁和崩溃指令补丁。
- 提前退出补丁:找到退出函数,递归修剪CFG以寻找最近支配者节点,它是(1)不支配退出函数(2)不是原始跟踪的一部分的子项的父项
- 等待循环补丁:当程序陷入循环时,找到一个不会返回循环的分支节点
- 崩溃指令补丁:将引发崩溃的指令替换为nop
评估
评估关注点:
- 固件重模拟性能比较
实验:将 Greenhouse 的性能与 FirmAE 和 EQUAFL 在各品牌上的表现进行了比较。
结果:Greenhouse结果明显优于EQUAFL,与FirmAE相当但二者完全模拟部分重叠较少。
- 执行保真度
实验:使用 RouterSploit 测试对比Greenhouse和FirmAE固件模拟的 Web 服务器上的已知Nday漏洞。
结果:Greenhouse 利用了 3526 个模拟的固件服务中的 717 个已知漏洞,而 FirmAE 在 4058 个样本中利用了 844 个漏洞,对已知漏洞的利用率相当。
- 模糊测试性能
实验:分别运行Greenhouse和EQUAFL进行模拟,使用AFL++作为模糊器,对8个指定目标进行模糊测试,每次24小时,并随时间测量执行速度和总语料库计数。人工筛选出部分Greenhouse的崩溃报告,tmin和md5sum工具过滤崩溃输入,以识别出漏洞。
结果:Greenhouse平均速度是EQUAFL的2倍,选择的14份崩溃报告中发现79个漏洞且26个为0day漏洞,确认了 Greenhouse 在发现实际漏洞方面的能力。
限制
- 仿真保真度不足:尽管 Greenhouse 专注于实现高保真的服务固件模拟,但它可能无法完全仿真原始硬件环境的所有方面,可能会导致一些特定的错误。
- 资源需求高:在大规模 Kubernetes 集群中运行 Greenhouse 需要高资源,这可能并不适用于所有用户或组织。
- 数据集局限性:评价仅限于从特定品牌收集的固件图像,可能无法代表所有类型的固件或设备。
- 干预措施局限性:自动干预策略可能无法处理所有类型的障碍,特别是那些高度特定于某些固件实现或硬件配置的障碍。
- 可扩展性低:这种方法在更大数据集或不同类型嵌入式设备上的可扩展性需要进一步验证。
- 漏洞发现局限性:尽管 Greenhouse 在漏洞发现方面显示出良好的结果,但它依赖于现有工具和方法,这些工具和方法可能具有固有的局限性。
相关工作
-
用户空间仿真
- FirmAFL结合了用户空间执行与全系统仿真
- EQUAFL完全在用户空间进行模糊测试,通过移植重宿固件镜像的文件系统状态
-
分析方法
- A large-scale analysis of the security of embedded firmwares(结合关联引擎和简单的关键词搜索对固件镜像进行了静态分析)
- Firmalice automatic detection of authentication bypass vulnerabilities in binary firmware.(通过符号执行来检测不安全的数据流)
- Sharing more and checking less: Leveraging common input keywords to detect bugs in embedded systems(静态分析多个二进制文件之间的交互来检测不安全的数据流)
总结与讨论
创新
- 创新地提出了用户空间单服务重新托管技术
- 创新地对重新托管的全过程和失败原因进行研究
不足
-
过于依赖特定环境
例如仅Linux架构,仅模拟HTTP,UPnP,DNS服务,启发式参数解析器
-
没有成果用于进一步提高执行保真度
大部分主要模拟方法取自已有经验,只是在应用上做出了改进
-
反思不充分
没有反思导致Greenhouse和FirmAE完全重新托管重叠较少的原因