目录
- 摘要
- 引言
- 贡献
- 背景
- TrustZone和受信任的固件
- PMU和ETM
- 相关工作
- x86上的透明恶意软件分析
- ARM上的动态分析工具
- 基于仿真的系统
- 硬件虚拟化
- 裸机系统
- Trustzone相关的系统
- 系统架构
- 具体实现和评估可以看论文,这里不赘述了
- 讨论
- 总结
作者:Zhenyu Ning and Fengwei Zhang
发布: USENIX
时间: 2017
摘要
现有的恶意软件分析平台留下了可检测的指纹,如QEMU中不常见的字符串属性、Android Java虚拟机中的签名以及Linux内核配置文件中的工件。由于这些指纹为恶意软件提供了根据分析系统是否存在来划分其行为的机会,因此现有的分析系统不足以分析复杂的恶意软件。在本文中,我们提出了NINJA,一个基于ARM平台的透明恶意软件分析框架,具有低伪影。NINJA利用硬件辅助的隔离执行环境TrustZone,在性能监视器单元和嵌入式跟踪宏单元的帮助下,透明地跟踪和调试目标应用程序。NINJA不修改系统软件,在ARM平台上与操作系统无关。我们实现了NINJA的原型(即跟踪和调试子系统),实验结果表明,NINJA对恶意软件分析是高效和透明的。
引言
近年来,移动平台上的恶意软件呈爆炸式增长。为了解决恶意应用程序的威胁,已经提出了各种用于恶意软件检测和分析的工具[18,22,37,44,45,52,55,56]。然而,复杂的恶意软件,也被称为规避恶意软件,能够通过收集执行环境或分析工具的工件来逃避分析,并且如果检测到分析系统,则拒绝执行任何恶意行为。
由于大多数现有的移动恶意软件分析系统[18,45,52]都是基于仿真或虚拟化技术,因此已经开发了一系列反仿真和反虚拟化技术[29,36,48]来挑战它们。这些技术表明,模拟或虚拟化可以很容易地通过足迹(如字符串属性)、不存在特别的硬件组件以及性能下降。硬件辅助虚拟化技术[17,50]可以提高基于虚拟化的系统的透明度;然而,这种方法仍然在基本的指令执行语义上留下了工件,这些工件很容易被恶意软件检测到[39]。
为了应对这一挑战,研究人员通过修改系统软件[22,37,44,55]或利用操作系统API[15,56]来监测恶意软件的运行时行为,研究裸机设备上的恶意软件。尽管基于裸机的方法消除了对模拟器或系统管理程序的检测,但分析工具本身引入的工件仍然可以被恶意软件检测到。此外,特权恶意软件甚至可以操纵分析工具,因为它们在同一环境中运行。如何建立一个透明的移动恶意软件分析系统仍然是一个具有挑战性的问题。
这种透明度问题在传统的x86体系结构中已经得到了很好的研究,从基于仿真的分析系统[2,40]到硬件辅助的虚拟化分析系统[19,20,32],再到裸机分析系统[30,31,41,54],都有类似的里程碑。然而,这个问题仍然挑战着最先进的恶意软件分析系统。
我们认为分析系统由环境(例如,操作系统、仿真器、系统管理程序或沙箱)和分析器(例如,指令分析器、API跟踪器或应用程序调试器)组成。环境为分析器提供了访问目标恶意软件状态的权限,分析器负责对状态进行进一步分析。考虑一个分析系统,它利用模拟器来记录系统调用序列,并将序列发送到远程服务器进行进一步分析。在这个系统中,环境是模拟器,它提供对系统调用序列的访问,系统调用记录器和远程服务器都属于分析器。规避恶意软件可以通过反仿真技术检测该分析系统并规避分析。
为了建立一个透明的分析系统,我们提出了三个要求。首先,必须隔离环境。否则,恶意软件可能会操纵环境本身。其次,环境存在于现成的(OTS)裸机平台上,而不修改软件或硬件(例如,仿真和虚拟化不是)。尽管研究反模拟和反虚拟化技术[29,36,39,48]有助于我们通过修复环境的缺陷来构建一个更透明的系统,但由于软件的复杂性,我们认为完美的模拟或虚拟化是不切实际的。相反,如果OTS裸机平台中已经存在Environment,则恶意软件无法通过Environment的存在来检测分析系统。最后,分析器不应在环境外部留下任何可检测的足迹(例如,文件、内存、寄存器或代码)。可以检测到满足此要求的分析器。
根据这三个要求,我们提出了NINJA 【日本封建社会的忍者具有隐身和透明的能力】,这是一个基于ARM平台的透明恶意软件分析框架,基于TrustZone技术、性能监测单元(PMU)和嵌入式跟踪宏单元(ETM)等硬件功能。我们在ARM Juno开发板上实现了NINJA的原型,它包含了一个具有不同跟踪粒度的跟踪子系统和一个具有类似GDB的调试协议的调试子系统。此外,还利用基于硬件的陷阱和内存保护来保持系统寄存器的使用对目标应用程序透明。实验结果表明,我们的框架可以透明地监控和分析恶意软件样本的行为。此外,NINJA引入了合理的开销。我们用几个流行的基准测试了跟踪子系统的性能,结果表明,指令跟踪和系统调用跟踪的开销小于1%,Android API跟踪引入了4到154倍的速度减慢。
贡献
我们提出了一个基于ARM平台的硬件辅助分析框架,名为NINJA。它不依赖于仿真、虚拟化或系统软件,并且与操作系统无关。NINJA驻留在硬件隔离执行环境中,因此对所分析的恶意软件是透明的。
NINJA通过包括硬件陷阱、内存映射拦截和定时器调整在内的新技术消除了其足迹。评估结果证明了缓解措施的有效性,NINJA实现了高水平的透明度。此外,我们评估了instruction-skid问题,并表明它对我们的系统影响很小。
我们使用各种程序分析功能来实现调试和跟踪子系统。NINJA能够研究内核或管理程序级别的恶意软件。跟踪子系统表现出低性能开销,并且指令和系统调用跟踪不受定时攻击的影响。
背景
TrustZone和受信任的固件
ARM TrustZone技术[12]引入了一种硬区域安全概念,将执行环境分为两个独立的域,即安全域和非安全域。出于安全考虑,安全域可以访问非安全域的资源(例如,内存和寄存器),但反之亦然。在ARMv8架构中,从正常域切换到安全域的唯一方法是触发安全异常[8],异常返回指令eret用于在异常处理后从安全域切换回正常域。
图1显示了ARMv8和ARMv7体系结构之间的差异。在新的体系结构中,ARM删除了ARMv7中的执行模式,并将特权级别(PL)重命名为异常级别(EL)。术语EL表示可以处理异常的级别,并且除EL0之外的所有EL都可以处理异常。在某一级别中发生的任何异常都只能在同一级别或更高级别中处理。
64位ARMv8体系结构中的系统寄存器的名称包含一个后缀,该后缀指示可以访问寄存器的最低EL。例如,PMEVCNTR EL0寄存器的名称表示访问该寄存器的最低EL是EL0。类似地,后缀为EL3的寄存器只能在EL3中访问。
ARM可信固件[7](ATF)是ARM提供的安全域的官方实现,它支持一系列硬件平台和模拟器。在进入安全域时,ATF保存正常域的上下文,并将安全异常分派给相应的异常处理程序。在处理程序完成处理过程后,ATF恢复正常域的上下文并使用eret指令切换回来。ATF还通过使用签名和公钥等多种方法验证固件映像,提供了一个可信的引导路径。
PMU和ETM
性能监视器单元(PMU)[8]是x86和ARM体系结构[42]中广泛实现的一项功能,它利用一组性能计数器寄存器来计算CPU事件。每个体系结构都按事件编号指定一个常见事件列表,不同的CPU也可以维护额外的事件编号。性能计数器寄存器溢出时,可能会触发性能监视器中断(PMI)。请注意,PMU是一种非侵入式调试功能,不会影响CPU的性能。
嵌入式跟踪宏单元(ETM)[11]是ARM架构中的另一个非侵入性调试组件。它通过监视指令和数据总线来跟踪指令和数据,性能影响很低。事实上,ARM预计ETM对处理器的功能性能没有影响。ETM生成用于执行的路标指令的元素,该元素可以进一步用于重构所有执行的指令。生成的元素被编码到跟踪流中,并被发送到芯片上预先分配的缓冲器。
根据Futuremark[23]的数据,在最受欢迎的50款智能手机和平板电脑中,有21款配备了ARM Cortex-A5x或Cortex-A7x系列处理器,其中包括PMU和ETM组件。
相关工作
x86上的透明恶意软件分析
Ether[20]利用硬件虚拟化构建恶意软件分析系统,并实现高透明度。Spider[19]也基于硬件虚拟化,它既注重适用性,又注重透明性,同时使用内存页面工具来获得更高的效率。由于硬件虚拟化存在透明度问题,这些系统自然是不透明的。LOPHI[41]利用额外的硬件传感器来监控磁盘操作并定期轮询内存快照,它以不完整的系统状态视图为代价实现了更高的透明度。
MalT[54]通过涉及系统管理模式(SMM)来增加透明度,SMM是x86架构中的一种特殊CPU模式。它利用PMU来监控程序执行,并切换到SMM进行分析。与MalT相比,NINJA在以下几个方面有所改进:1)MalT上的PMU寄存器可以被特权恶意软件访问,这打破了透明度检查这些寄存器的值。通过利用TrustZone技术,NINJA将所需的PMU寄存器配置为安全寄存器,这样即使是普通域中的特权恶意软件也无法访问它们。2) MalT建立在SMM之上。然而,SMM并不是为了安全目的而设计的,例如透明调试(最初用于电源管理);频繁的CPU模式切换引入了高性能开销(SMM交换机需要12μs[54])。NINJA基于ARM上的专用安全扩展TrustZone。域切换只需要0.34μs(见附录B)。3) 除了调试系统外,NINJA还利用现有硬件开发了一个透明跟踪系统。指令和系统调用跟踪引入了可忽略的开销,它不受定时攻击的影响,而MalT则受到外部定时攻击。
BareCloud[31]和MalGene[30]专注于通过在不同环境中执行恶意软件并比较其行为来检测规避性恶意软件。这种方法有局限性。首先,它无法在裸机环境中透明地获取恶意软件运行时行为(例如,系统调用和对内存/寄存器的修改)。其次,它假设规避恶意软件在至少一个分析平台中显示出恶意行为。然而,复杂的恶意软件可能能够检测所有的分析平台,并拒绝在分析过程中表现出任何恶意行为。最后,在这些工具从大规模恶意软件样本中识别出规避的恶意软件后,他们仍然需要一个透明的恶意软件分析工具,该工具能够透明地分析这些规避的样本。NINJA为研究规避恶意软件提供了一个透明的框架,并对这些系统起到了补充作用。
ARM上的动态分析工具
基于仿真的系统
DroidScope[52]基于QEMU重建了Android操作系统和Dalvik虚拟机的语义信息。CopperDroid[45]是一种基于VMI的分析工具,可以自动重建Android恶意软件的行为,包括进程间通信(IPC)和远程过程调用交互。DroidScibe[18]使用CopperDroid[45]收集安卓恶意软件的行为档案,并自动将其分类为不同的家族。由于模拟器留下了足迹,这些系统自然是不透明的。
硬件虚拟化
Xen on ARM[50]将基于硬件虚拟化的系统管理程序Xen迁移到ARM架构中,并使基于硬件虚拟的分析在移动设备上可行。KVM/ARM[17]使用标准Linux组件来提高系统管理程序的性能。尽管基于硬件虚拟化的解决方案被认为是与仿真或传统的基于虚拟化的解决方案相比,它更透明,在执行特定指令时,它仍然会在CPU语义上留下一些可检测的足迹[39]。
裸机系统
TaintDroid[22]是一个全系统的信息流跟踪工具。它通过修改原始Android框架提供变量级、消息级、方法级和文件级的污染传播。TaintART[44]在最新的Android Java虚拟机Android Runtime (ART)上扩展了TaintDroid的思想。VetDroid[55]基于权限使用重构恶意软件的恶意行为,适用于污染分析。DroidTrace[56]使用esptrace来监控Java和本机代码级别的动态加载代码。BareDroid[34]提供了一种快速恢复机制,使Android应用程序的裸机分析在规模上可行。尽管这些工具试图在真实世界的设备上分析目标以提高透明度,但对Android框架的修改会留下一些内存足迹或代码签名,而基于trace的方法可以通过简单地检查/proc/self/statusfile来检测。此外,这些系统容易受到特权恶意软件的攻击。
Trustzone相关的系统
TZ-RKP[13]运行在安全域中,通过事件驱动监控保护富操作系统内核。Sprobes[51]提供了一种检测机制,从安全域内省富操作系统,并保证内核代码的完整性。SeCReT[28]是一个框架,它在正常域和安全域之间建立了一个安全的通信通道,并提供了一个可信的执行环境。Brasser等人[14]使用TrustZone通过远程内存操作来分析和调节受限主机空间中的客户机设备,以避免传感器和外围设备的误用。C-FLAT[1]通过在TrustZone中运行时控制流验证来对抗控制流劫持。TrustShadow[25]通过在ARM TrustZone安全环境中构建轻量级运行时系统,保护未修改应用程序的执行不受操作系统的影响。运行时系统将系统服务的请求转发给正常环境中的商品操作系统,并验证返回结果。与以前的系统不同,NINJA利用TrustZone可以透明地调试和分析ARM应用程序和恶意软件。
系统架构
图2显示了NINJA的体系结构。忍者由一个目标执行平台和一个远程调试客户端组成。在目标执行平台上,TrustZone在正常域和安全域之间提供基于硬件的隔离,而富操作系统(如Linux或Android)在正常域中运行,而NINJA运行在安全域中运行。我们在EL3中设置了一个定制的异常处理程序来处理我们感兴趣的异步异常(即中断)。NINJA包含一个跟踪子系统(TS)和一个调试子系统(DS)。TS旨在透明地跟踪目标应用程序的执行,在跟踪期间不需要任何人工交互。这个特性对于自动大规模分析是必不可少的。相比之下,DS依赖于人类分析师。在远程调试平台中,分析人员通过安全串口发送调试命令,DS对这些命令进行响应。在应用程序执行期间,我们使用安全中断切换到安全域,然后通过执行异常返回指令eret恢复到正常域。
具体实现和评估可以看论文,这里不赘述了
讨论
NINJA利用现有部署的硬件,并与商用移动设备兼容。然而,商用移动设备上的安全域由原始设备制造商(OEM)管理。因此,在商用移动设备上实现NINJA需要原始设备制造商的合作。
我们用来填补语义空白的方法依赖于对内核数据结构和内存映射的理解,因此容易受到特权恶意软件的攻击。Patagonix[33]利用白名单应用程序二进制页面的数据库来学习目标应用程序内存页面中的语义信息。然而,这种方法受到分析器知识的限制。目前,如何在不对系统进行任何假设的情况下透明地弥合语义鸿沟仍然是一个悬而未决的研究问题[27]。
当攻击者试图使用PMU或ETM寄存器时,第6.1节中提到的保护机制有助于提高透明度,而使用影子寄存器[35]可以进一步保护关键系统寄存器。然而,如果高级攻击者故意使用PMU或ETM跟踪CPU事件或指令,并检查跟踪结果是否与预期结果匹配,则返回人工或影子寄存器值的机制可能无法提供准确的结果,从而影响NINJA的透明度。为了解决这个问题,我们需要完全虚拟化PMU和ETM,这是我们未来的工作。
尽管NINJA保护系统指令接口对寄存器的访问,但我们用于保护内存映射接口访问的机制可能容易受到高级攻击,如直接操纵内存映射、禁用MMU以获得物理内存访问以及使用DMA访问内存。请注意,这些攻击在实践中可能很难实现(例如,禁用MMU可能会使系统崩溃)。为了完全保护ETM和PMU寄存器的内存映射区域,我们认为需要TrustZone的硬件支持。由于TZASC只保护DRAM,我们可能需要额外的硬件功能来将TZASC的思想扩展到整个物理内存区域。
虽然不能完全消除PMI的instruction skid,但我们也可以使两个PMI之间的ETM学习skid中的指令。此外,由于instruction skid是由PMI的延迟引起的,类似x86上的本地高级可编程中断控制器[54]这样的硬件组件可以通过减少响应时间来帮助缓解问题。
总结
在本文中,我们提出了一个基于ARM平台的透明恶意软件分析框架NINJA。它体现了一系列分析功能,如通过硬件辅助隔离执行环境TrustZone进行跟踪和调试,以及硬件功能PMU和ETM。由于NINJA不涉及模拟器或框架修改,因此它比ARM上现有的分析工具更透明。为了最大限度地减少NINJA引入的伪影,我们采用了基于硬件陷阱和运行时函数拦截的寄存器保护机制来保护所有涉及的寄存器。此外,由于OTS移动设备广泛配备了TrustZone和硬件组件,NINJA可以很容易地移植到现有的移动平台上。我们的实验结果表明,指令跟踪和系统调用跟踪的性能开销小于1%,而安卓API跟踪引入了4到154倍的速度减慢。