Group of Software Security In Progress

GoSSIP @ LoCCS.Shanghai Jiao Tong University

Decomposable Trust for Android Applications

论文下载

Introduction

  • 作者关注的问题是Android平台上攻击面太大的问题,app要默认地相信kernel,以及一些用户空间的高权限服务,这些代码数量庞大,容易出问题。有一些恶意app通过漏洞提权之后,可以攻击app的内存,获取隐私信息。作者的目的是减小攻击面
  • 现有的隔离两个app的方法主要是沙盒(airbag)和内存加密,沙盒需要预先区分app是否存在恶意行为并且保证正常app不能和恶意app装在一个环境下,内存加密的方法无法避免提权之后拦截UI输入
  • 作者提出了一个改良过的android底层框架,不改framework,把kernel和系统服务作为不可信的代码看待,减小被攻击的面积。所有app可以运行在同一环境下,不必预先区分,在这个环境下,app可以认为内存可信,把机密数据放在内存中

Anception Design

威胁场景

  • 带有敏感数据的app,除内存外的地方不会存放敏感信息明文,网络流量需要加密。
  • 恶意APP可以进行提权攻击,可以获得root权限,或者通过控制一些服务来窃取信息

结构

  • 对内存的保护,主要防护对象,通过虚拟化技术,虚拟机内的代码无法穿透虚拟机访问host内存.
  • 对UI服务的保护,恶意代码在host内无法提权,所以UI服务放在host是安全的。
  • 对其他服务的降权,用虚拟机把需要将权的服务圈起来,保证被控制之后不会用来访问host中的内存
  • 对本地存储中app代码的保护,本地存储服务是被放在虚拟机中运行的,但要求app的代码不被更改,于是将app代码放在host中并且只读
  • 为了减小host的受攻击面积,host上运行的app,在虚拟机中有代理,代码默认放在虚拟机中的代理里执行

Fig

重定位逻辑

  • file I/O, 所有文件读写都在CVM,最开始运行的时候从host里读的代码
  • UI操作,留在Host
  • network I/O,重定位到CVM
  • IPC,留在host
  • map操作,原本guest的内存就是经过host
  • map过来的,运行过程中其他map请求会经过处理,拦截操作但是给一个正常的返回值
  • fork,不能通过fork逃出虚拟机,所以没有禁止
  • System Management,禁止

Fig

Fig

Implementation

  • 修改host系统内核代码,在host上再开一个虚拟机,里面是正常的kernel,用来屏蔽降权服务,限制root之后的kernel活动范围
  • 同步部分:host和gust通过host kernel中的buffer通信,host里app的虚拟内存经过kmap重定位到CVM中
  • syscall拦截机制:在host拦截所有的syscall,根据规则把相应的syscall放到CVM中执行
  • 不限定android的版本

Fig

Evaluation

  • 试了25个提权攻击的应用,23个可以防御,剩下两个通过添加策略也可以被防御
  • 所有结果放在了作者的博客中,其中提到两个漏掉的原因是恶意程序fork了一个进程在本地,获得了root权限,解决方法是禁止host上的root执行syscall,有的话全部拦截掉并记录