Group of Software Security In Progress

GoSSIP @ LoCCS.Shanghai Jiao Tong University

Evading Android Runtime Analysis via Sandbox Detection

Abstract

这篇文章讲的是如何在app中检测当前的运行环境,从而判断是否属于模拟器或者虚拟机,这种技术可以用于对抗动态分析技术。

Introduction

这篇文章的主要目的是指出目前单纯基于模拟或虚拟化技术的移动恶意程序分析技术存在着很大的局限性。

RELATED WORK

讲了一下其他平台上有关如何进行Runtime分析的技术,主要还是依靠模拟器、虚拟机或者debug模式下的一些特性。还有提到最近有一些专门针对Google Bouncer的反分析技术,比如会检测IP地址。

EMULATOR DETECTION

全系统的模拟往往是一个非常复杂而艰难的工作,对于模拟器的检测一般也是基于一些模拟器技术实现上的瑕疵、还没有被模拟的硬件或是一些运行性能上的差别。本节所提出的一些Android平台的运行环境检测技术需要很少的权限,并且不要求ROOT权限。作者将这些检测技术分为了4大类:Differences in behavior、Differences in performance、Differences in components和Differences due to system design。作者选了一些不同的模拟环境和真机来进行对比测试,文中都有详细的表格数据。

首先是Differences in behavior,这一大类里又分成三个小类。首先是最容易想到的,通过一些特有的API,例如BUILD字段内的系统信息和TelephonyManager.getDeviceId()这样的函数来获取当前系统的信息,以此来区分模拟器和真机。其次就是通过分析网络设置,比如Android模拟器默认的IP地址是10.0.0.2。最后是使用针对QEMU的检测技术,之前很多针对QEMU的检测技术都可以用在Android上,需要执行一些Native code,其中有一些需要执行特权指令的检测技术则需要root权限。

Differences in performance,性能的分析主要就是CPU性能和图形性能这两方面。CPU性能测试作者是用算Pi来做的,真机计算性能明显弱于PC,但是作者用的PC配置很好,我觉得这会影响结果的对比。图形性能是测FPS,不管是什么平台的模拟器FPS普遍低于真机。最后都用Wilcoxon test来证明了结论数据的有效性。

Differences in components分为两种,硬件和软件。硬件方面就是检测一些和硬件相关的信息,比如说CPU串号、传感器个数、电池电量等。软件方面则是检测预装app类型(比如是否有一系列的google应用),预装app个数等信息。

Differences due to system design则是和系统有关系的一些信息,比如说根据用户平均安装的app个数、短信数目、短信长度、联系人数目等信息来判断是否是模拟器。

MINIMIZING THE PERMISSIONS NEEDED

用于检测运行环境的方法应该尽可能的需要少的权限。

EVALUATION

具体的测了一些设备和模拟器,基本上现在的分析系统都不太重视这方面的东西,所以很容易就被检测出来了。

CONCLUSION

对于本文提到的检测方法,可以使用一些技术上的手段去规避,比如对特殊的硬件进行模拟,但是在现实中是否有效还需要进一步的研究。

个人总结

这篇文章是典型的将原先PC上的研究内容搬到了Android上。这方面的技术目前还很少有人关心,也是一个不错的研究点,不过没有什么进一步研究的价值。使用一些基于真实设备的分析环境就可以轻松解决这些问题。