avatar

Chunlin

因为见过伟大,所以不甘平庸

P2IM_Scalable and Hardware-independent Firmware Testing via Automatic Peripheral Interface Modeling

1. Basic Information

Conference: USENIX Security’20
Author: Bo Feng, Alejandro Mera, Long Lu
Affiliation: Northeastern University

2. Introduction

为了克服固件动态测试的可扩展性差(依赖硬件、硬件抽象层)问题,本文提出了一种称为P2IM(Processor-Peripheral Interface Modeling)的新技术,它基于访问模式完成了对MCU固件外围设备的自动建模工作。在外设模型的辅助下,仿真器(QEMU)可以为给定的二进制固件提供运行环境,并将模糊器(TriforceAFL)种子以字节为单位提供给固件,从而完成对MCU类固件的分析工作。

3. Problem

现有的对嵌入式MCU固件进行分析的框架可扩展性差,存在硬件依赖以及硬件抽象层依赖等问题

4. Challenges

  • Ch1: Hardware depedence: 由于仿真的不完整性,仿真器不足的部分仍然依赖硬件
  • Ch2: Wide Range of Peripherals: MCU硬件高度异构,外设种类多样
  • Ch3: Diverse OS/System Designs: MCU设备使用的操作系统之间存在显著差异。有些MCU甚至只使用一个管理硬件和任务调度的系统库
  • Ch4: Incompatible Fuzzing Interfaces:
    • 固件通过外设读取输入,而外设有许多不同的类型,并有自己的访问约定
    • 固件中的不同驱动程序可以对相同的外设进行不同的配置,然后通过不同的接口执行I/O操作

5. Design

5.1 Goal

在模糊器和固件之间架起桥梁。它允许现有的模糊器在不了解单片机软硬件设计的情况下进行固件测试

5.2 Ideas

  • 定义抽象模型: P2IM(Processor-Peripheral Interface Modeling)
    • 为广泛的MCU架构(如ARM Cortex-M)定义一个抽象模型,当访问处理器外设接口时,抽象模型捕获固件遵循的通用模式和约定以及可接受的输入
    • 定义抽象模型是由领域专家手工和离线完成的过程
    • 在本文只考虑片内外设(或简称外设),因为固件不能直接访问片外外设,且只关注于寄存器&中断的模型化(如下图①和②),暂不考虑DMA(下图③)
      FIG1
  • 定义属性: P2IE(Processor-Peripheral Interface Equivalence)
    • 提供等价的处理器外设接口就足以让通用仿真器在没有任何外设仿真的情况下全面执行和测试/模糊固件
      • 模拟器模拟处理器或外设接口,而不是固件使用的外设本身
      • 就其对固件执行的影响而言,模拟的接口与固件所期望的外围设备相当
  • 满足P2IE的标准
    • 如果固件运行在与外设无关的模拟器上,不会因为外设I/O错误而崩溃、停止或跳过操作,则该属性是满足的

5.3 Details

FIG2

5.4 Register Category, Access Patterns and Handling

  • Control Registers(CR): 由固件使用,用于控制或配置外设
    • 访问模式(依据):read-modify-write (RMW)
    • 模式冲突:只包含一个配置参数时,采用直接写,不遵循RMW,与DR的write-on-first-access模式冲突,易将CR错误的分类为DR,但错误分类的寄存器在之后基本不读取,不影响固件执行
    • 处理:一旦固件配置了外设,外设就会参考配置运行,很少改变CR值
  • Status Registers(SR): 指示一个外设的内部状态
    • 访问模式:如果对寄存器的第一次访问是非选择性读取,并且读取值随后在一个条件下进行评估
    • 模式冲突:某些SR的第一次访问是写,与DR第二种访问模式相同,可能会将SR错误地归类为DR。然而,当固件持续轮询之前分类的DR时,会将其分类再次调整为SR并锁定其类型(修正)
    • 处理:在每次读取SR时,借助explorative execution动态推断一个可接受的寄存器值,以便固件可以继续执行,SR写是单向的,值是暂时的,不会影响固件的执行。因此,可以在不处理SR写的情况下实现
  • Data Registers(DR): 原始数据从外设流向固件的主要通道
    • 访问模式:
      • 读取寄存器之前有一个SR读取,并以SR中的标志为条件
      • write-on-first-access
    • 处理:所有外设的DR共同支配着固件的输入,因此,使用建模的DR在运行时提供fuzzing和测试输入。由于不影固件执行,P2IM忽略DR写操作
  • Control-Status Register(C&SR): 一种混合寄存器,它的位被分为两个目的:控制/配置位(与CR相同)和状态位(与SR相同)
    • 访问模式:CR位在外设配置阶段以RMW模式修改,SR位在操作阶段被访问,不重叠。P2IM经常将C&SR首先归类为CR,当观察到SR访问模式时在纠正为C&SR。
    • 处理:使用CR位或者SR位,不同时使用
  • 通过对上述处理过程分析可知,存在一个明显的模式冲突问题,即write-on-first-access模式不只是DR所特有,CR和SR部分情况下也存在这种访问模式

5.5 Interrupt Firing

P2IM将中断建模为一个基于时间的输入序列,每个输入对应于一个启用的中断

5.6 Infeasible Peripheral Inputs & False Positives

  • P2IM并不会删除可能不可行的输入或代码路径。而是将输入剪枝的任务留给运行在P2IM之上的测试工具(模糊器):
    • 输入生成和输入质量控制是模糊器和其他动态测试工具的核心任务。P2IM的设计是为了支持这些工具,而不是为了干扰这些任务。
    • 实际环境中的固件可能接收到来自攻击者的各种输入

5.7 Automatic Model Instantiation

  • 借助探索执行(explorative execution)将P2IE所需的特定于固件的信息添加到一个固件MCU架构定义的抽象模型中:
    • 实例化过程可能需要多轮
    • 实例化的模型可以在相同的固件重用(借助分组)
    • 固件执行遇到一个新的SR访问点时,P2IM暂停并拍摄快照,然后开始探索执行:
      • 通过生成多个并行工作线程,并发地搜索SR的最佳值,之后恢复原始固件的执行,并将SR值返回给固件
        • 搜索空间只包含32+1个候选值,每个候选值在SR中设置一个位
        • 当将返回到下一级被调用者时(SR读取发生的地方)终止工作线程

6. Evaluation

6.1 Whether it satisfies P2IE when executing firmware fordifferent MCU with different OSes?

P2IM允许大多数固件在不支持MCU外围设备的模拟器上执行,没有任何崩溃、stall或操作跳过。
FIG3
FIG4

6.2 How its runtime performance is in practice? Whether it can perform fuzz-testing on real firmware in a fully emulated fashion (i.e., no hardware dependence) and find previously unknown bugs?

与单元测试相比,在真正的固件上取得了类似甚至更好的结果。
FIG5
FIG6

7. Conclusion or Limitations

  • Direct Memory Access (DMA) 问题未能解决
  • Architectures beyond ARM:架构模型仅局限在了ARM,可以通过分析架构特征将P2IM扩展到其他架构
  • Firmware Analysis beyond Fuzzing:可以将P2IM框架用于taint analysis、 certain debugging tasks、concolic firmware execution

8.1 Dynamic Firmware Analysis

方法或工具或研究人员 描述
Avatar 一种新型的混合仿真框架,并利用它进行concolic execution
Surrogates 通过定制硬件,显著提高Avatar的转发性能
Marius Muench et al. 一个使用Avatar手动注入漏洞的简单程序,揭示了没有完全有效的MCU检查器,即使漏洞被触发,模糊器本身可能无法观察到许多漏洞
Avatar2 扩展了Avatar,允许在不使用真实设备的情况下重放转发的外设I/O
Charm 采用了类似于Avatar的转发方式,但其目标是智能手机驱动,而不是MCU固件
Prospect 在系统调用级别转发外围设备访问,但是在MCU裸机设备上不存在
Pri caching方法 使用缓存的外设访问近似的固件状态进行分析

上述的这些工作,都对硬件有不同程度的依赖,测试速度慢,可扩展性差,并且使用时,需要一定的专业知识。

8.2 Static Firmware Analysis

方法或工具或研究人员 描述
FIE 通过扩展KLEE的外设模型,将符号执行应用到TI MSP430固件。它为每个外设寄存器读取返回一个不受约束的符号值。它假设任何启用的中断都可能在每个指令之后发生,这将导致状态爆炸问题
Inception 通过使用Avatar选择性地将外设访问转发到硬件来解决状态爆炸问题
FirmUSB 提出了一种基于领域特定知识的USB控制器固件的符号执行机制
Firmalice 通过冲突执行查找固件中的认证绕过漏洞

9. Comments

  • 对于Discussion中的这几个点可以尝试解决
  • 可以进一步优化寄存器模式识别

注:解读如有错误或不当之处,麻烦在评论区批评指正。