Group of Software Security In Progress

GoSSIP @ LoCCS.Shanghai Jiao Tong University

A Systematic Security Evaluation of Android's Multi-User Framework

论文下载

Abstract

Android从4.2开始引入了多用户机制,本文主要的贡献在于系统性的讨论了多用户机制的实现和可能出现的问题,并就这些可能出现问题的地方进行了验证。

Introduction

多用户机制从4.2开始加入Android平台,目前仅在平板上可以使用,手机上因为底层兼容性的原因该功能被隐藏了。使用

pm create-user xxx

命令就可以创建用户,之后可以在设置中对多用户进行管理。

Background

  • 这一节从几个方面描述了多用户机制的实现。
  • 首先在在userId方面,除了预先保留的userId外,新增的userId从10开始,当前系统中所有的用户列表保存在/data/system/users/userlist.xml中。对于底层的Linux来说,Linux uid 由userId和appId组合而成,同样会有一些特殊的uid保留。
  • 在权限方面,增加了一些多用户机制下的新权限,如MANAGE_USERS,INTERACT_ACROSS_USRS等,这些权限一般是授予有root uid或者system uid的应用。
  • 在包管理方面,目前多用户机制还做的很不完善,很多东西还是和系统相关,而不是用户相关的。比如packages.xml只有一份,但是针对每个用户会有一个package-restrictions.xml存放在/data/system/users//文件夹下,用于管理该用户对所有app的访问权限。
  • 在文件系统方面,针对每一个用户,会在/data/user//文件夹下存放类似/data/data下的数据,不过这些都是符号连接过来的,不是真的复制了一份.
  • 在内核方面,Linux本身对多用户的支持已经做的很到位了,所以作者也没有修改。
  • Run-time方面,对于非现在用户来说,虽然无法运行程序,但是后台的服务和进程都会继续运行。

Investigation Methodology

作者在对多用户机制进行调查的时候,主要关注的是上层目标(app)对底层资源的访问,还有目标与目标之间的信息交换。作者在这里提出了一些假设:

  • 假设1-次级用户有可能能够调用未保护的系统app
  • 假设2-次级用户有可能能够恶意更改整个系统的设置
  • 假设3-未激活的用户有可能能够得到硬件设备的访问权限
  • 假设4-拥有sharedUserId的应用程序在被不同用户安装的情况下,可能仍旧能够共享权限
  • 假设5-恶意用户可能能够恶意更改其他用户安装的app,或是防止其他用户安装特定的app

Findings

  1. 次级用户虽然无法直接访问设置菜单中某些敏感的配置UI,但是能够通过发送Intent的方式来启动这些UI。
  2. 次级用户可以通过一些特殊的手段来修改系统配置,比如改写/data/misc/wifi/wpa_suppplicant.conf来修改wifi配置
  3. 处于未激活状态下的用户可以通过后台服务或进程的方式访问视频设备、音频设备、运动传感器等物理硬件。但是无法访问位置传感器,因为调用位置传感器的时候会对当前用户进行检查。
  4. 不同用户安装的拥有相同shareUserId的app,仍旧能共享权限.
  5. 如果一个用户对已安装的包进行了更新,那么其他用户的这个应用程序也会被自动更细。如果一个用户安装一个包名为a的恶意应用,那么其他用户都无法再安装包名为a的原版应用。

Conclusion

当前的Android多用户机制仍旧十分的不完善,有待改进。