论文分享:《面向智能手机App开发者的TEE》

移动安全 2年前 (2022) admin
584 0 0

论文分享:《面向智能手机App开发者的TEE》

本次分享的是由南京大学的Lizhi Sun等人发表在IEEE Transaction on Mobile Computing的文章:《LEAP: TrustZone Based Developer-Friendly TEE for Intelligent Mobile Apps》。本文提出,现在的手机App开发者仍然不能很好地利用TrustZone和基于TrustZoneTEE的安全特性。由此,本文提出一种轻量化的、面向开发者的TEE(即LEAP)。在安全方面,LEAP确保代码同时运行在隔离的空间内,并且可以安全地使用GPU等外设。在功能性方面,LEAP提供了DevOps工具,帮助开发者更好地使用LEAP

  • 一、现有工具的不足

当前TrustZone和现有的非安全世界的TEE不能很好地被手机App使用。一个原因是安全世界内存不够大,对于某些神经网络模型只能保护有限层数;另一个原因是无法使用非安全世界的一些特性,比如GPU加速。总的来说,对于手机APP,需要提供一个“较为全面的”执行环境,它需要满足轻量化、并行执行和灵活内存分配。除此之外,这些TEE对开发者来说也不太友好。比如开发者需要手动修改现有App的代码来兼容这些TEE

  • 二、LEAP的目标

LEAP希望满足以下6点目标:(1)隔离执行环境(2)安全地使用GPUWiFi等外设(3)安全地启动一个app沙盒(4)并行执行(5)灵活内存分配(6)良好的兼容性。

由此,LEAP的设计归为以下4条:

(1)App运行提供一个轻量化的沙盒,并且在引入微小overhead的前提下支持并行执行。为实现这个设计,LEAP使用了ArmStage-2地址转换来隔离(注意,目前手机基本不配置hypervisor,所以一般也不会占用这个特性)。

(2)LEAP通过隔离MMIO实现沙盒对GPU等外设的独占性。目前来说LEAP成功控制了一部分的外设MMIO,比如GPU

(3)沙盒的计算资源(比如内存和CPU占用)需要被灵活地调整

(4)LEAP引入DevOps工具来自动地把一个深度学习(DLApp兼容在沙盒上。其大体思路是利用静态代码分析,提取深度学习模型和inference代码,并且重新包装在沙盒内运行。

  • 三、攻击模型与假设

LEAP认为非安全世界的Host OS是恶意的,它会尝试破坏沙盒运行的完整性,而沙盒中的driver是可信的。此外,沙盒中的代码是“好奇的”,它可能会尝试获取其他App所需的数据。LEAP不考虑DoS攻击,Cache的侧信道攻击,冷启动等物理攻击。

  • 四、LEAP的设计

4.1 DevOps

这个工具对DL App的二进制文件分析并将其兼容在沙盒中。在使用时,开发者需要提供代码的入口点和API,以让DevOps提取关键代码并包装到沙盒内。具体来说,需要两个模块,一是AppSli,用于分析DL graph和数据流,并提取与安全相关的部分(比如入口点指向的代码和相关的模型文件);二是LibGen,对于一个App,它会生成连接非安全部分和安全部分的动态链接库,再把非安全部分和相关库文件放到非安全OS上跑,把安全部分与LEAP的轻量化内核一起编译并放到沙盒上跑。注意编译好的文件需要加密,并且在安全启动时要经过完整性验证。

4.2隔离的执行环境

LEAP使用虚拟化技术来隔离CPU/内存,但不需要虚拟化资源(这里有篇类似的文章,NoHype)。同时提供并行执行和沙盒间通信的功能。对于CPU的隔离,LEAP使用Linux CPU 热插拔技术来动态地移除CPU内核,以让Host OS无法使用该内核,而移除的内核将只分配给一个沙盒。对于沙盒通信,LEAP使用共享内存和发送IPI(inter-processor-interrupt)的方式来通信。此外,LEAP还提供安全启动沙盒的方法,此处略。

LEAP对于L2 cache也提供了保护。LEAP发现L2 cache通常在Armv8上是物理索引(physically indexed)的,所以仍然可用S-2 translation来保护目标地址。

4.3 外设独占

LEAP对外设的访问遵循以下三点:(1)开发者在沙盒内能获取所有外设(2)获取外设应该是轻量化、低性能损耗的(3Host OS和每个沙盒对外设短时间独占。

对于第一点,LEAP使用一个轻量化的Linux OS提供外设的driver支持,方便开发者使用。同时由于LEAP会对该OS进行安全启动操作,此时也可以验证这些driver的完整性。而对于后面两条,LEAP使用控制MMIO的方式来实现独占性。

实际上LEAP也提到,有一些driver不太支持这种方式,比如如果这个driver也被其他driver使用,或者HostOS需要经常使用这个driver,那这种方式就不太行得通。一个例子是USB driver。对于GPU drvier而言,它的渲染功能会让Host OS经常使用它,所以LEAP需要一些额外的处理来实现独占。LEAP的想法是,在GPU移交给其他沙盒时,不让Host OS尝试访问它。LEAP首先让GPU停掉,这样Host OS就先不访问了,然后LEAP再把GPU MMIO绑定到其他沙盒上,再使用沙盒的GPU driver安全地处理GPU App

4.4 灵活的资源分配

LEAP使用内存池的方法来管理内存。LEAP创建一个内存池并使用CMA管理。初始时,LEAP给一个沙盒分配128MB的内存,并hook内核函数来知晓什么时候沙盒的内存资源不够。当内存不够时,LEAP将分配物理连续的内存给沙盒。

LEAP也对CPU资源进行分配。根据前文所述,CPU资源可以使用热插拔的方式来管理。此处不再详述。


原文始发于微信公众号(COMPASS Lab):论文分享:《面向智能手机App开发者的TEE》

版权声明:admin 发表于 2022年10月17日 下午8:18。
转载请注明:论文分享:《面向智能手机App开发者的TEE》 | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...