G.O.S.S.I.P 阅读推荐 2022-12-29

admin 2023年1月1日16:23:21安全闲碎评论0 views4350字阅读14分30秒阅读模式

2022年倒数第二篇论文推荐是来自华中科技大学周威老师投稿的关于物联网设备固件仿真与动态分析的最新研究What Your Firmware Tells You Is Not How You Should Emulate It: A Specification-Guided Approach for Firmware Emulation,该工作已在CCS 2022上发表。

G.O.S.S.I.P 阅读推荐 2022-12-29

研究背景与动机

随着物联网设备的广泛应用,物联网设备漏洞检测成为近年的研究热点,越来越多的研究人员尝试将自动化动态程序分析方法应用于物联网设备漏洞挖掘中,而物联网设备自身计算资源有限且难以直接获取调试接口。因此,近年来设备固件仿真(firmware re-hosing)成为物联网设备固件安全分析的关键问题。本文通过调研发现现有的自动化固件仿真方案如P2IM(Usenix’20)、𝜇Emu(Usenix’21)、和Fuzzware(Usenix’22)等,其用于生成外设仿真模型的知识仅来自于固件本身。例如,𝜇Emu通过将外部输入符号化利用符号执行的路径约束求解来学习固件期待的外设反馈读值。然而,固件自身并未包含所有外设交互逻辑,特别是硬件相关的交互逻辑如中断和DMA请求触发时机等。同时,外设反馈数据之间存在内在的硬件逻辑关联,并非相互独立。此外,在程序员在编写固件时也可能存在错误(即buggy firmware)。这些均会影响这些方案生成的外设仿真模型的准确性。虽然之前的固件仿真方案可以使固件持续运行(很少会出现崩溃、宕机等异常情况),但其于真实设备执行一致性较差,特别是当长期运行后其执行路径与真实设备的差异也会越来越多,进而影响其上应用的动态分析的效率(如模糊测试中的误报增多,无用执行路径增多等)和适用范围(难以应用于复杂外设交互仿真如以太网等)。

工作解决思路与方法设计实现

本文发现主流微控制器厂商如NXP、STMicroelectronics和Texas等均会开源其微控制器硬件参考手册(Reference Manual)。这些手册中包含了外设与固件交互所需的软硬件逻辑如中断和DMA触发逻辑以及内部硬件寄存器取值规律等。因此,为了在不依赖真实硬件设备的同时获取更多的外设硬件逻辑提高外设模拟执行的精准度,本文首次提出利用设备手册的自动化外设仿真逻辑抽取与表示方法,并据此设计并实现了高保真度设备固件仿真工具(Specification-guide emulator, SEmu),如下图1所示。

G.O.S.S.I.P 阅读推荐 2022-12-29

图1:SEmu架构框图

为实现这一目标,本文面临的四大技术挑战与解决方法如下:

(1)外设硬件交互逻辑语句抽取
首先,如何从海量的设备手册自然语言编写的描述语句中抽取有效且完备的外设硬件逻辑语句是本工作面临的首要技术难题。本文采用了基于命名实体的迭代抽取方式,首先根据外设与固件交互的方式和对象,我们定义外设寄存器、外设中断和DMA为命名实体,然后在文档中抽取包含这些实体的语句的句子,如果这些语句中又包含了其他外设模块硬件名词如接收缓冲区等,再去迭代抽取包含此名词的逻辑语句。
(2)外设交互逻辑语句提取与规范化条件-动作(C-A)规则表示

然后,为了规范化表示这些逻辑语句构建完备外设仿真模型,本文深入分析了外设逻辑描述语句以及外设和固件交互过程,发现可以外设与固件交互过程可抽象成外设状态机,例如从硬件UART外设接收数据到触发中断,再到固件中断服务处理程序最终读取UART数据,如下图2所示:

G.O.S.S.I.P 阅读推荐 2022-12-29

图2:UART外设状态及其中断状态机 

因此,如果能够将文档中的外设交互逻辑语句映射成完整的外设交互状态机,则可实现和真实设备一样的外设动态仿真模型。为此,本文利用自然语言处理的句法分析(Constituency-based Parse Trees)技术,将自然语言描述语句抽象成条件-动作(condition-action,C-A)规则,然后再将其与状态转移条件和结果相对应,即条件对应状态节点转移的发生条件(图中的UTX/NTX),结果对应状态转换后发生的外设行为(USX/NSX)。例如,下图3所示其原句为"RDRF is set when the number of datawords in the receive buffer is equal to or more than the number indicated by RWFIFO[RXWATER]. ",通过命名实体(红色)标记和句法分析拆解,从而,可以得到这个句子中的条件描述部分(condition)和结果动作部分(action)语句。

G.O.S.S.I.P 阅读推荐 2022-12-29

图3 例句句法分析示意图

进而,根据不同条件与动作类型本文设计了规范化表示规则如下表1所示,条件触发信号包括外部硬件信号、固件读写信号以及由于内部状态变化的动态引起的连锁信号,动作则对应外设与固件交互的三种方式(外设寄存器读写、中断或DMA)。

G.O.S.S.I.P 阅读推荐 2022-12-29

表1  C-A Rule 表示方法

最终,通过组合这些条件-动作规则,本文可构建出完整的外设交互状态机。例如,上图2中描述的真实设备接收UART外部数据过程中的不同状态下外设行为(USX/NSX)和状态转移条件(UTX/NTX)其对应的条件-动作抽取规则(C-A Rule)如下表2所示:

G.O.S.S.I.P 阅读推荐 2022-12-29

表2  C-A规则示例

(3)C-A规则驱动的外设仿真模型构建与设备仿真融合

为了利用静态的C-A规则来驱动固件的动态仿真,我们对每个外设维护动态模型用于保存和更新其外设寄存器数值和中断与DMA状态。进而,SEmu 会转发(hook)固件执行过程中关于外设读写和中断与DMA的请求,当这些请求发生时,SEmu会对应去检查相应的C-A规则,判定其是否满足,如果满足则触发相应的行为,从而实现模型的自动更新。例如,下图4所示,当UART接收到数据后,相应的模型中的数据寄存器存储数据量变化后SEmu会进行规则检查,进而发现CA1规则的条件满足,从而触发相应的动作将SR的RDRF字段置位,并且RDRF置位后的连锁反应,导致CA2规则的条件满足,从而触发相应的外设中断,实现和真实设备一样的仿真逻辑。

G.O.S.S.I.P 阅读推荐 2022-12-29

图4 Peripheral Model动态运行示例

(4)错误/缺失 C-A规则诊断

由于NLP自身能力有限,难以准确抽取复杂语句逻辑亦或手册本身语句对于逻辑信号描述并不清楚,导致SEmu抽取的规则可能会发现错误。而错误的规则会导致模拟失败,为了尽可能减少人工修正的成本,作者利用了之前的𝜇Emu的错误执行状态检测功能来辅助错误或缺失C-A规则诊断,即当固件遇到外设读值会返回基于规则生成的具体值的同时反馈一个标记的符号值,当固件在SEmu引导的执行中遇到了错误执行状态比如死循环,则利用伴随的符号值找到其进入此路径的分支约束,根据约束从而得到错误的外设读值,进而辅助人工分析快速定位错误的反馈规则。

实验评估

作者从三大微控制处理器厂商的5个不同手册涵盖 STM32F103、STM32F429、STM32L152、NXP K64F、Atmel SAM3X 等 20+ 个流行的 MCU 系列,共计23,424个句子中提取出3602条C-A规则。覆盖 26 种常见物联网设备外设类型,例如 UART、I2C、SPI、ADC、GPIO等(详细数据见论文)。

单元测试:论文首先对P2IM(Usenix’20)论文开源的66个单元测试固件包括不同的嵌入式操作系统和外设种类以及MCU型号进行功能验证测试,在修改1%的C-A规则后,SEmu首次达到100%的通过率(相比P2IM 79% 和 𝜇Emu 93%)

执行保真度测试:为了进一步量化SEmu相比于之前工作在模拟准确性上的提高,本文进一步基于单元测试用例进行了执行路径一致性对比测试,即对比相同的单元测试固件在SEmu、P2IM和𝜇Emu与其在真机执行上的执行基本块的一致性。但由于物联网设备固件的执行路径的不确定性比如中断的随机性,本文将执行路径根据入口点(entry point)的不同分成三个部分的子路径即初始化子路径、主循环子路径和中断子路径,然后利用编辑距离算法(edit-distance)对不同子路径进行计算,再加和(𝐷𝐸𝑚𝑢𝑙𝑎𝑡𝑜𝑟 = 𝐷𝑖𝑛𝑖𝑡 +𝐷𝑚𝑎𝑖𝑛 +𝐷𝑖𝑟𝑞)。最后再进行归一化处理得到最终保真度分值如下表3所示,可以看出SEmu是唯一一个可以达到满分的模拟器。特别是在中断路径可以看出由于硬件逻辑缺失,P2IM和 𝜇Emu执行路径和真实设备存在较大差距。

G.O.S.S.I.P 阅读推荐 2022-12-29

表3 P2IM、𝜇Emu和SEmu单元测试执行保真度分值

模糊测试:本文也验证了SEmu在模糊测试方面的能力并和P2IM和 𝜇Emu进行了比较,分别对P2IM提供的10个真实设备固件和增加使用以太网外设的UDP和TCP测试用例进行5次持续24小时模糊测试结果。

G.O.S.S.I.P 阅读推荐 2022-12-29

表4 P2IM、𝜇Emu和SEmu模糊测试结果对比

如上表4所示,首先仅SEmu首次支持以太网外设(Ethernet)的模拟。其次,在代码覆盖率上有了少许提升,需要注意的是虽然SEmu相比于其他工具覆盖率提升不多,但之前的模拟器由于外设模型的不准确性会引入False  Positives即真实设备不会遍历的代码部分如错误处理函数。此外,SEmu成功复现了之前工作中发现的全部漏洞并首次实现零误报。

合规性检测:SEmu除了支持模糊测试,借助手册的知识其还可以进行合规性检查,即动态验证固件中的外设驱动代码是否与设备手册描述的使用规范一致。SEmu目前支持两种合规性检测,一是数据传输状态验证检查即检查(R1)固件在进行外设数据接收和发送之前是否确认当前外设工作状态是否允许进行数据传输操作;二是中断配置一致性检查(R2)即固件使能的外设中断是否与中断处理控制器中使能的外设中断号一致。SEmu在单元测试用例(详见论文附录)和真实设备固件(表4最后一列)中发现多个违规的外设操作行为会导致外设操作失败或者外设访问竞争。


论文下载:https://arxiv.org/pdf/2208.07833.pdf

SEmu的代码和测试数据即将全部开源:https://github.com/MCUSec/SEmu


投稿作者简介:

周 威,华中科技大学网络空间安全学院,副研究员。研究方向主要包括物联网安全、移动安全、程序分析等,特别是在检测与挖掘真实物联网产品安全问题方面取得突出成果获得多个公开CNVD/CVE漏洞编号,曾多次获得京东、三星、阿里巴巴等众多国际知名厂商公开认可与致谢,并在网络与系统安全顶级会议和期刊发表论文十余篇如Usenix、CCS等。同时也担任Computing Surveys、IEEE IoT-J等多个国际期刊和会议审稿专家,多次参与和主持国家自然科学基金、国家重点项目。


原文始发于微信公众号(安全研究GoSSIP):G.O.S.S.I.P 阅读推荐 2022-12-29

特别标注: 本站(CN-SEC.COM)所有文章仅供技术研究,若将其信息做其他用途,由用户承担全部法律及连带责任,本站不承担任何法律及连带责任,请遵守中华人民共和国安全法.
  • 我的微信
  • 微信扫一扫
  • weinxin
  • 我的微信公众号
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年1月1日16:23:21
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                  G.O.S.S.I.P 阅读推荐 2022-12-29 http://cn-sec.com/archives/1487843.html

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: