Links

Abstract

Goals

分析TZOS的依赖

Untitled

启动时依赖(bootloader、secure monitor)

运行时依赖(TEE driver、secure monitor、TA)

硬件依赖

如何选择需要模拟的组件

软件组件

模拟相关的部分,例如TZOS对bootloader只依赖于加载和设置参数

硬件组件

因为secure boot和code signing,无法在真实的设备上运行软件代理。因此需要通过模拟的方式实现那些需要的硬件。

选择模拟 or 重用的指标

Untitled

软件仿真

Bootloader

Secure Monitor

TEE Driver和TEE Userspace

硬件仿真

TZOS的硬件访问通过MMIO实现,即硬件寄存器的值通过访问内存地址获得。

具有特定的访问模式

Untitled

定位MMIO地址范围

其余硬件的模拟

只需要额外对三个设备进行仿真:

PartEmu的实现

AFL模块

基于TriforceAFL实现,后者能够让目标程序在QEMU中运行并执行AFL测试,就像运行被测试的正常进程那样。

因为PartEmu需要单独控制启动QEMU,因此作者额外实现了一个代理与AFL进行交互。

使用AFL时的挑战

TA Authentication

TA在加载时需要进行两种检查

作者通过绕过这两种检查,可以获得的能力:

Evaluation

分为3部分

仿真的程度

目标

实现:52个数据字段、17个SMC调用、235个MMIO寄存器、额外三个外设

TZOS更新:对于不同版本的TZOS之间,只需少数的修改就能够支持

Fuzz Testing TAs

数据:收集了12个厂商16个TZOS镜像文件,都属于上面四种TZOS。一共获得273个TA去重后一共194个TA

测试方法:

测试结果:

Untitled

能否重现崩溃?

48个崩溃中,有24个拥有相应的设备,并且这24个都能够在真实设备上重现。

Case: Fuzz Testing TZOS

测试方法:在内核驱动中利用AFL生成的输入,对QSEE4.0的SMC API进行模糊测试

结论:

展望

Dealing with Stateful TAs

Hardware Roots of Trust

Performance