DroidPill

《DroidPill: Pwn Your Daily-Use Apps》
来源:AsiaCCS 2017 (CCF C)
关键词:Mobile System Security; Android Malware; App Confusion Attack; App Virtualization
摘要:
本文构建了安卓中的应用层虚拟化沙箱,相当于实现了一个应用层虚拟化框架,并基于该框架实现了一种新的攻击方式:App Confusion Attack。

1.Introduction

Android malware可被分成以下四类:数据窃取、勒索软件、权限提升、远程控制。
除了最后一种是网络攻击外,其他三种都需要利用良性软件及其数据。

2. Virtualization-based Attacks

2.1 App attacks

已有的攻击及其局限性
(1)申请Android上的危险权限。–但是,应用数据不易获得。
(2)利用app本身存在的弱点攻击,如SQL注入。–应用漏洞很少。
(3)利用UI混淆攻击,如钓鱼。–UI混淆攻击行为限制
(4)重打包,并引诱用户安装。–大多数应用来源于正规市场,导致重打包不可行

App Confusion Attack
DroidPill使用的两种攻击向量是:app shortcut manipulation和top activity preemption
目的是:用户不能识别出DroidPill和正常系统的区别

相比于上述四种攻击,此攻击的优势在于
(1)malware可以通过虚拟环境完全掌控guest app的代码和数据
(2)部署于应用层,不需要对kernel层进行修改。因此攻击范围很广
(3)并不需要普通app的数据和代码。相比于重打包,不是灰色的

2.2 App Virtualization

虚拟化方式可分成两类:inclusive和exclusive
inclusive
将guest app运行在sandbox app的虚拟环境中。可同时运行多个非系统app。模拟核心系统服务,如PackageManager和Activity Manager,从而管理多个guest app(guest app或它们之间的组件之间的IPC通信)。
App Object Transition(AOT)可以用来实现虚拟化。当app安装时,它在manifest文件中注册了一系列的组件,沙箱会创建guest app和已注册组件的map。会破坏UI完整性。
exclusive
只能加载固定的一组app。不需要虚拟化任何核心系统服务。sandbox app和guest app是同时安装的,尽管它也使用了AOT来部署虚拟化逻辑,但是map是在沙箱app创建时建立的,运行时不会改变。

已有虚拟化方法的比较
Boxify和NJAS:其中sandbox service主要是安装虚拟环境,如hook代码;broker执行虚拟化逻辑和安全策略。
Boxify: inclusive虚拟化,sandbox service和guest app使用isolated process标签,从而限制了权限的使用。sandbox service安装了GOT hook(Shim),重定向Binder IPC和guest app的系统调用到broker。broker主要是监控拦截系统调用。
title
NJAS:exclusive虚拟化。guest app和broker进程有相同的权限。ptrace基于ptrace机制拦截监控guest app。
两个缺点:1)只能运行一个guest app。2)AOT不充足,对组件的代理不够完善。
title

3.Design

3.1 Design rationale

与上述两个沙箱的区别:1)他俩都需要监控。2)DroidPill要符合UI完整性要求,从而防止用户看出来真实环境与沙箱环境的区别。
broker和guest app是同一个进程。hook DVM和native层的GOT hook,同时可获得JAVA API的调用。
如果选用inclusive方法,1是会暴露自己的icon,2是要申请所有权限。
因此采用exclusive方法,基于特定的apk文件。相比NJAS,DroidPill可以在良性app中安装恶意代码。

3.2 System overview

title
bait用于引诱用户安装恶意软件,包含了攻击向量。
constructor用于安装broker和加载guest app
broker负责虚拟化,调节OS和guest app之间的通信。hook DVM和native层

隔离进程。为每个组件定制进程名(Manifest)。
相比NJAS,DroidPill的两个特性:1是进程隔离,2是选择性加载app。

3.3 Constructor

(1)Guest app loading
一般是通过createPackageContext加载的其他app的代码,使用了CONTEXT INCLUDE CODE和CONTEXT IGNORE SECURITY标签。

(2)Virtual execution context
在android中,android.app.LoadedApk用于在apk文件加载到内存中时存储apk的元数据,包括包名、代码加载器(ClassLoader)、资源(android.content.res.Resources和android.content.res.AssetManager)、数据文件路径等。
android.app.ContextImpl提供了与其他APP或者系统交互的接口,如连接到Android系统服务,启动activity和service,访问包数据等。

每个组件都有自己的ContextImpl对象,但一个APP只有一个LoadedApk对象。

DroidPill包括两层:native层和virtualization层
title
native layer——ContextImpl和LoadedApk(createPackageContext时调用)
virtualization layer——(加载broker的native库到内存时调用)

3.4 Broker

Public app objects
每个package都有一个独特的UID。在manifest中定义,要去PM或其他系统服务注册来获取运行时操作。
(1)Component
(2)Authority
(3)Account Type,在线账户服务,与服务器进行账户认证
(4)Custom Permission,自定义权限
(5)Intent Action,隐式intent,DroidPill中的guest app和sandbox app时一样的,因此破坏了UI完整性。

Virtualization logic
(1)为每个app创建进程名,同时在安装时向PM进行注册,创建object map
(2)broker使用map在运行时执行AOT。

拦截Binder IPC。对比NJAS,NJAS只能拦截一中object,DroidPill拦截了所有五个object。
因此,NJAS不能实现隐式的intent action。
guest app和sandbox app有不同的UID,但是文件重定向guest app是sandbox app的子目录。

4.Attack vectors

两种技术:
1.app shortcut manipulation
替换原app为新的shortcut,但是从通知栏启动的依然是原app。
2.top activity preemption
替换目标activity
三种得知ontop activity的方法:1)阅读系统日志;2)运行android.app.ActivityManager.getRunningTasks;3)通过获取proc文件进行侧信道攻击。
前两种方法不能在android 4.1和5.0上用。

5.Evaluation

Case study
1.浏览器chrome。获取所有的浏览记录和用户输入
2.云存储勒索软件dropbox。本地缓存文件的打开和写入。
3.应用市场客户端Xiaomi Market欺骗。替换从市场上下载的良性app为恶意app。hook startActivity拦截市场app向installer发送的Intent。修改URI。
4.VPN流量嗅探Betternet。结合tapjacking attack拦截VPN流量。
5.获取广告利益。

6.Discussion

6.1 Limitations

(1)android版本仅限于4.4之前。
(2)不能加载付费软件
(3)申请很多权限
(4)不能拦截在native层与系统服务交互的软件
(5)点击系统通知,进去的依然是原始app
(6)进去是初始状态,且不能更新

6.2 Countermeasures

(1)系统层面
获取包名、公司名、安全映像
(2)应用市场层面
开发者可将app分成两部分:boot loader app(安装在设备上)和library(主要功能,上传到Google license server)。但不能保证除Google Play外的应用市场

本文的优势在于提出了一种新的应用层虚拟化技术,且攻击场景和案例多样化。并且提出了DroidPill相对于Boxify和NJAS的缺陷与优势。