值此全体女性安全研究人员的节日,我们首先要祝所有女神们节日快乐,那今天当然也会送上第一作者是女性安全研究人员的顶会论文。今天介绍的这篇论文SyzTrust: State-aware Fuzzing on Trusted OS Designed for IoT Devices来自浙江大学网络系统安全与隐私实验室(NESA Lab),发表在IEEE S&P 2024上,作者对物联网可信执行环境进行系统分析,并实现了模糊测试工具SyzTrust
,在Alibaba、Samsung、Tsinglink提供的可信执行环境中发现了70个漏洞,其中有23个获得了CVE编号。
可信执行环境(Trusted Execution Environment, TEE)是物联网设备保障重要数据与运算安全性的关键手段,它提供了一种安全隔离的执行环境,使得应用程序可以在不受恶意软件或操作系统攻击影响的情况下运行。
ARM TrustZone已经成为移动环境中实现TEE的实际硬件方案,并被应用于服务器、低端IoT设备与工控系统等场景。下图展示了基于ARM TrustZone-M的TEE架构。在设计上,TEE主要由客户端应用、可信应用以及可信操作系统组成,并将系统划分为安全世界(Secure World)与非安全世界(Normal World)两部分。其中,可信操作系统是TEE的重要组成部分,它支持TEE完成一些安全相关的操作,比如数据加密与身份识别。
然而,可信操作系统中可能存在实现上的缺陷,引发包括隐私信息泄露(CVE-2019-25052)与任意代码执行在内的种种安全问题。攻击者一旦获得可信操作系统控制权,便可以实施密钥窃取、内核后门注入等高危攻击。
尽管TEE已被应用于越来越多的物联网设备,其安全性仍然未被充分研究。考虑到微控制器与物联网硬件设备的多样性,利用专家经验进行手工分析(比如逆向工程)可扩展性不佳。近期一些工作通过模糊测试来自动化测试TEE,但这些工作主要针对富资源的安卓端,并不适用于资源受限的物联网设备。对此,作者归纳了针对物联网可信操作系统进行模糊测试的两个主要挑战:
挑战一:不支持代码插桩且环境资源受限:大多数可信操作系统代码闭源加密,且通常被开发商加密,使得分析人员难以对运行在安全世界的代码进行插桩并监测执行情况。因此,传统基于反馈驱动的模糊测试不能直接用于测试TEE。为了获取反馈信息,目前工作要么依赖板载二进制文件插桩,要么依赖领域特定知识进行固件仿真。对于物联网设备可信操作系统而言,由于设备存储空间等运行资源极为受限、依赖硬件特性支持,这些方法都不适用。
挑战二:内部数据结构和状态空间实现复杂:可信操作系统通常实现多种密码学算法(比如AES、MAC)以为可信应用提供支持。为了提高算法实现的安全性,可信操作系统依赖复杂的数据结构维护若干状态机,只有当可信操作系统处于特定的状态,才能执行相应的函数。例如,下图展示了GlobalPlatform提出的加密认证相关算法的状态机。为了探索更多状态,fuzzer需要提供合理的系统调用序列,并且为其设置特定状态相关的参数。然而,由于缺少源码与插桩支持,难以通过程序分析方法分析复杂数据结构与状态信息。
SyzTrust
框架设计
针对以上挑战,作者设计了一种hardware-in-the-loop的模糊测试框架SyzTrust
,如下图所示。SyzTrust
包含模糊测试引擎与执行引擎两个主要组件。考虑到可信操作系统环境本身无法直接访问,作者设计了一个可信应用-客户端应用对作为可信操作系统的代理执行系统调用序列来实现对可信操作系统的测试,并利用硬件调试器与ARM嵌入式追踪宏单元(Embedded Trace Macrocell,ETM)收集反馈信息。
选择性指令执行追踪
作者提出模糊测试引擎与执行引擎相解耦的架构,其中消耗大量计算资源的模糊测试引擎运行在PC主机,负责生成测试样例并通过硬件调试器发送到MCU;轻量级的执行引擎运行在待测可信操作系统中,负责接收、解析并执行测试用例。
SyzTrust
依赖ETM追踪程序执行路径。为了消除ETM对非安全世界进行追踪而引入的噪声追踪数据包,作者设计了一种基于数据事件(Data Event)的选择性指令追踪方法。通过对关键内存地址设置数据观察点(Data Watchpoint),当可信操作系统执行系统调用时,SyzTrust
启动ETM追踪;当系统调用结束后,SyzTrust
停止ETM追踪并对收集到的路径进行解析,以计算代码覆盖信息。
状态信息推测及监控
作者同时考虑代码覆盖与状态覆盖作为复合反馈信息,指导模糊测试的种子保存和种子选择过程。作者使用状态变量代表内部状态,并提出了启发式的主动推断方法,能够在闭源可信操作系统中识别这些状态变量。
状态变量推测方法如下图所示,在模糊测试执行前,SyzTrust
通过精心构造的测试样例,记录保存状态信息的变量结构体(例如TEE_OperationHandle),通过对比其成员变量与函数其他参数的数值关系,推测潜在的状态语义信息。在模糊测试执行过程中,SyzTrust
使用保存关键状态语义的成员变量计算状态反馈,帮助模糊测试探索深层次的状态。
实验与结果
作者针对Samsung、Alibaba以及Tsinglink Cloud提供的三种可信执行环境进行测试。实验结果表明,SyzTrust
与基线实验Syzkaller相比,在代码覆盖、状态覆盖以及漏洞检测能力上取得显著提升。
作者设计实验对状态变量推理方法进行评估,结果如下图所示。总体而言,推断正确率高达83.3%。
作者也对SyzTrust
各运行阶段时间开销进行评估,如下图所示。与测试样例执行的核心阶段(Execution)相比,系统重置(Reset)、测试样例传输(Transfer)以及反馈信息计算(CovCalc)带来的额外开销仅占总体的1%。
SyzTrust
最终在三种可信执行环境中发现了70个新的漏洞,其中23个获得CVE编号。
更多有关论文的具体细节,欢迎关注原文。
论文链接:https://www.computer.org/csdl/proceedings-article/sp/2024/313000a070/1RjEaG9OpTa
代码链接:https://github.com/SyzTrust/syztrust
投稿作者介绍:
王琴应,浙江大学计算机科学与技术学院博士研究生,导师为纪守领教授,主要研究兴趣为软件与系统安全、物联网安全。
个人主页:https://wqqqy.cn/
常博宇,浙江大学计算机科学与技术学院博士研究生,导师为纪守领教授,主要研究兴趣为软件安全与二进制程序分析。
个人主页:https://c01dkit.com
NESA Lab主页:https://nesa.zju.edu.cn/