NCSU的蒋旭宪教授团队去年在Android恶意代码发现上做出了有目共睹的成绩。昨天看到论文“Hey, You, Get off of My Market: Detecting Malicious Apps in Official and Alternative Android Markets”已经在其首页上公开,仔细阅读了一遍。做笔记如下。
文章主要介绍了名为DroidRanger的系统,用于从官方市场、第三方市场抓取和发现Android中已知家族和未知家族。
已知家族的策略是:
1. 基于已知家族所需必要权限,对所有灰名单样本过滤。例如,bgserv需要internet和收发短信权限,这样能过滤掉98.42%的灰名单样本。但也有例外,比如ddlight的过滤效果不好,则加上一个特定intent的receiver的规则来过滤;basebridge没有特殊权限,则用native代码来过滤。这样,每个家族的规则都能将灰名单样本过滤到5%以下。
2. 基于行为的特征匹配。包括三个方面的行为特征:manifest里注册的组件及其intent;特定组件(例如接收短信的receciver)的代码解析,提取API调用序列(例如invoke了abortBroadcast);代码结构布局(即Java的树形结构源文件,但没想明白在这里怎么提取特征)。
在已知方面,他们基于10个已知家族(每个家族2个样本)提取了权限过滤规则和行为检测规则,在官方市场和第三方市场的20万个灰名单样本中发现这10个家族共119个新样本。
在未知家族检测上,策略是:
1. 基于启发式特征的过滤。这里的启发式特征并不是统一的单点特征集,而是真正体现样本潜在行为的复杂特征。例如,样本使用DexClassLoader加载从远程下载的jar或dex代码(但大部分是第三方广告,用白名单过滤掉);样本在非默认路径lib/armeabi加载执行本地native code(常用于执行提权代码)。在这种启发式特征过滤下,把灰名单样本数量过滤到了1%以下。
2. 基于动态运行的行为监控。主要在两个层面做,对动态加载的jar和dex,记录其API调用及参数,例如sendTextMessage及其参数;对动态加载的native code,记录其发生的敏感系统调用,例如sys_mount(用于remount文件系统,常用于提权后写入系统分区的自我保护)。最后人工对这些日志进行分析。
在未知上,该团队由此发现Plankton(第一个DexClassLoader的恶意代码,官方市场,远控)和DroidKungfu(使用大量本地提权工具)。
从后续情况看,AnserverB应该也是被这种启发式规则触发而发现的。
论文提到还可以有其它启发式的特征,例如向高额扣费号码发送短信;将短信内容当成控制指令等。去年下半年该团队发现的很多新家族均有短信扣费和拦截的特点,猜测确实使用了这些特征。
关于已知检测的漏报问题,论文用contagio的公开样本进行了测试,称无漏报。
文中还提供了其他数据,例如对20万个样本的处理速度等。
总的来看,论文对细节公开的非常充分,取得的效果也很明显,值得我们学习。