Ninja: Towards Transparent Tracing and Debugging on ARM论文笔记
[TOC]
background
本论文发表在USENIX’17的Bug finding Session,两位作者是Wayne State University的教授和研究助理,本科分别就读于北方工业大学和同济大学。
- 其所在的研究组的内容(Professor Fengwei Zhang Research Interest)为系统安全,主要关注与硬件相关的安全、可信执行、移动恶意代码检测、追踪和调试,系统完整性检测和可行加密手段
(可参考作为暑研对象)
abstract
由于QEMU、Android虚拟机等分析恶意程序的平台存在一些特征字符串、签名以及构造Linux内核的一些特征,恶意程序可能可以通过检测自己是否处于分析系统中,从而调整自己的行为。而在本篇论文当中,作者推出NINJA这样一款工具,能够在ARM平台上搭建low artifacts的恶意分析平台。NINJA使用硬件辅助的隔离执行环境,并且通过Performance Monitor Unit (PMU) 和 Embedded Trace Macrocell (ETM) 来透明地追踪和调试目标应用,而且并不会修改ARM上的系统软件和操作系统。
实现方法
TrustZone and Trusted Firmware
ARM可信固件(ATF)是ARM官方提供的可信计算域,支持一系列的硬件平台和仿真器。当进入到安全域时,ATF保存普通域下的语境,并且将安全情况交给相应的处理函数处理。在处理完之后,ATF恢复普通域的语境,使用eret指令返回pc。ATF还提供可信的启动路径,通过使用签名、公钥等方法来验证固件镜像。
PMU and ETM
PMU是x86和ARM架构上经常采用的特性,能够通过一系列的性能寄存器来计算CPU的情况。不同的架构都通过事件号规定了一系列的公共事件,不同的CPU之间也维护一个额外的事件号。 当某个性能寄存器溢出时,一个性能监控的中断就会被触发,PMU并不会影响到CPU的性能。 而ETM则是ARM架构中另一个不影响性能的特性。它通过监控指令和数据通路来追踪指令和数据流。实际上,ARM期望ETM能够完全不影响到处理器的性能。 ETM通过产生一系列的元素来表示被执行的指令,而这些能够被用来重建所有的被执行指令,这些元素将被送至追踪流中并且保存在芯片上之前分配出来的缓冲区当中。
系统组成
NINJA主要由目标执行平台和远程调试平台组成。
通过将Ninja安排在可信域中,并且在EL3中设置相应的安全中断调用。Ninja由追踪子系统TS和调试子系统DS组成。TS用来透明地追踪目标应用的执行情况而不需要人工设置。人只需要在远程通过安全的串口向DS发送调试指令,就可以得到相应的反馈。在应用的执行过程当中,可以使用安全中断和eret指令来在安全域和普通域当中转换
安全域的切换
使用EL3(ARM exception level:Secure monitor)级别的安全中断。ARM的普遍中断控制器GIC将所有的中断分为安全组和非安全组。每个中断都被归类为其中一种。因此Ninja只要注册好相应的性能监控中断,那么在PMU的寄存器溢出的时候就可以切换到安全模式下了
TS
TS由PMU和ETM组成 当某一个系统事件(可自主设定)发生时,一个安全的中断信号就被发送至GIC中,GIC将其转发给EL3. Ninja在收到这个中断信号以及相应的追踪输出后就将ETM(Embedded Trace Macrocell)的使用状态进行切换。同时,PMU还在追踪安卓API时发挥其作用
DS
作者设计了类似于GDB的调试界面用来供人进行调试 为了能及时中断目标的执行,将PMI设为安全中断并且调整PMU (Performance Monitors Unit)中的值来在某个预设的点触发中断。Ninja会在PMU计数器溢出后被触发,然后暂停程序的执行。然后人就可以在此时通过安全串口发送调试指令并检查目标的当前状态。为了保证PMI会被再次触发,DS还会在退出至普通域之前将PMU寄存器设为某个预期值下·
不足
- 实际应用当中由于安全域是归OEM管理,因此实际的应用需要相关公司的合作
- 用来填补语义差异的方法依赖于对内核数据结构和内存分布的了解,但是这对于一些有较高权限的恶意程序就显得比较脆弱(构建透明的推测机制
- 对于故意使用PMU或者ETM来追踪CPU事件的攻击者,他们可能会检查追踪的结果是否和预期的相同,这样一来相关的寄存器的值和返回的机理就可能无法提供准确结果,从而影响到Ninja的准确性(PMU和ETM的完全虚拟化)
- 用来保护内存分布的接口可能会受到一些直接针对操纵内存分布的攻击方式的破坏(如对MMU的攻击等),因此可能还需要更进一步的硬件层面上的防护手段
系统评估
Transparency
由于使硬件级别的的调试手段,因此可以防止大多数的软件级别的侦测。但是仍不能保证完全杜绝所有的调试痕迹,因此可能还需要硬件厂商的共同配合
TS的性能
首先是通过计算其计算一百万π值的时间成本
可以看到使用NINJA对浮点数计算程序的执行效率基本没有任何的影响,而使用安卓的API追踪手段则有很高的时间消耗。
然后是使用CF-bench来对上述三种情况进行更全面的性能考量:
以上可以发现,NINJA的原生功能对程序的执行性能几乎没有任何影响,反而是使用安卓API追踪手段的会产生极大的运行时性能损耗。
两种域之间的切换效率
以下是对域切换时需要的时间考量:
从实验结果中也可以看出,NINJA域切换所需要的时间也是很短的
##评价
本论文中介绍的方法是在ARM的官方硬件设计基础上的创新,通过注册安全中断来触发工具的执行。具有一定的实用性和创新性,而且对TS和mode switch的一些实验也显示出工具的较好性能,能够为大规模的调试提供一定基础。是Bug finding和嵌入式安全领域中较好的论文1