今天要分享的论文是《TEEzz: Fuzzing Trusted Applications on COTS Android Devices》,第一作者是来自EPFL的Marcel Busch,该论文发表在Oakland’23。这篇文章主要介绍了一种新的fuzzing框架TEEzz,它使得用户能够在商用Android设备上对可信应用进行fuzzing。
1 Introduction
可信应用程序(TA)是一种运行在可信执行环境(TEE)中的程序,它们通常负责处理一些涉及隐私或者机密的数据,例如用户的指纹信息。如果TA存在漏洞,那么攻击者就1可以借此获取用户的隐私,甚至控制用户的系统。
但是,对于自动化测试TA的研究一直进展缓慢。一方面在于对于测试者而言,TEE是一个黑盒,测试者很难了解TA在TEE中运行时的具体状态;另一方面在于,在现实情况下,一般应用在调用TA时,需要遵循特定的协议。这些原因使得自动化测试难以推进。
针对TA进行fuzzing,目前有两种方案,一种是rehosting
,另一种是 on-device
。 rehosting
通过模拟器的方式来获取TEE的内部状态, on-device
则是直接在设备上进行fuzz。这两种方案目前都存在一些问题。rehosting
要求开发者对TEE的软件和支持TEE所需的硬件进行逆向工程,并将它在主机端上重新实现,这些基于逆向的实现可能与真实情况存在一定的偏差。on-device
的方案虽然能解决 rehosting
的一些问题,但是它无法访问TEE的内部状态,所以相当于黑盒fuzz,效率较低。
为了解决这些问题,作者提出了TEEzz。这是一款 on-device
的fuzz框架,作者在AFL++的基础上,针对TA fuzzing的场景,为其增加了type-aware以及state-aware的能力,使其能够高效地对TEE中运行的TA进行fuzzing。
2 Challenge and Solution
为了解决传统TA fuzzing低效率的问题,作者需要解决两个难点:Type-Awareness和State-Awareness。
2.1 Type-Awareness
基于数据的类型进行变异,可以大幅度减少非法输入的产生。例如,如果能事先知道一个输入的数据类型为枚举类,那么我们就可以只在特定范围内进行变异,从而减少输入的搜索空间。但是,过去能够自动识别输入类型的fuzzer通常需要源码才能进行,这使得它们并不适用于TA fuzzing的场景。因为在TA fuzzing能获取到的只有二进制。
为了解决这个问题,TEEzz通过结合动态二进制指令(DBI)、多层级接口信息记录和语义推导技术,自动推导出低级接口和高级API之间的对应关系,从而能够恢复出TA所需的数据类型。
2.2 State-Awareness
许多应用程序和库具有内部有限状态机,换句话说,不同的函数之间存在依赖关系。例如,一个应用在将数据写入文件之前,它必须先打开文件,获取文件对应的描述。但是,在过去的研究中提出的具备state-aware能力的fuzzer,要么需要源代码,要么需要日志信息,这两种方法都很难在具备TEE的设备上实现。
为了解决黑盒fuzz无法识别TA状态的问题,作者首先利用DBI,对CA和TA之间的交互进行记录。然后,TEEzz会通过分析这些交互以及交互中对应的数据,从而获取数据依赖。数据依赖可以被用来构建TA的API模型,也就是该TA的不同API之间的调用顺序,以及这些API对应的需要输入的数据。通过这种方式,TEEzz能够以合适方式去fuzz TA,从而尽可能多地触发TA在不同状态下的行为。
3 System Overview
TEEzz的整体框架如下图所示:
1.第一步,TEEzz会识别CAlib,CAlib提供了一系列接口,以便CA开发者与安装在TEE内的TA进行交互的。TEEzz通过获取它们的接口,从而创建CA来与TA进行交互。2.接下来,TEEz会为这些CAlib接口自动生成DBII记录器和type-aware mutator。3.在这之后,TEEz利用这些记录器,在多个层面对CA与TA之间的交互进行捕获。在语义丰富的高级层面和语义较为模糊的低级层面上,记录器会拥有相同的交互记录。这些记录使得TEEzz能够获知底层级上输入对应的语义信息。4.此外,基于整个交互序列的记录,TEEzz还会试图推断出交互之间的数据依赖性,从而能够基于状态与TA进行交互,提高生成的种子的质量。5.最后,TEEzz会使用这些收集到的种子和先前生成的CA对COTS设备上的TA进行模糊测试。
4 Evaluation
通过在真实设备上进行测试,TEEzz在QSEE和TC上总共发现了40多个独特的crash,以及一个CVE。除此之外,TEEzz还在OPTEE上运行的TA中发现了13个以前从未发现的错误。
原文始发于微信公众号(COMPASS Lab):论文分享 | TEEzz: Fuzzing Trusted Applications