论文部分内容阅读
近年来,Android操作系统以其出众的开放性受到广大用户和移动设备厂商的青睐。Android系统采用基于权限的访问控制模型来保护系统内部的重要资源。应用程序在Manifest文件中声明其所需的权限,用户在安装应用前必须授予应用程序所申请的所有权限,否则将被迫放弃安装该应用。由于用户在无法获知应用程序将如何使用这些权限前往往无法做出正确选择,现有的这种权限授予方法无法有效防止恶意程序获得所需的权限。此外,Android允许并鼓励应用程序间通信,这意味着一个应用程序可以暴露接口供其他应用程序使用。这一特性会导致一个未经授权的恶意应用程序有可能通过一个已经获得授权的应用程序所暴露的接口间接地使用某项权限,这种恶意行为被称作权限代理攻击。现有的访问控制模型及相关工作尚不能够很好地帮助用户防范权限代理攻击。本文设计并实现了Arbiter:一种基于Android的即时权限授予方法。Arbiter将每一次权限授予推迟至应用程序使用该权限时进行。现有的即时权限授予方法往往需要对应用程序进行修改,或者只能覆盖部分权限的使用请求,Arbiter则能够在不要求对现有应用程序进行任何修改的前提下拦截应用程序发出的所有权限使用请求。通过修改Android框架及底层的Linux内核,Arbiter在应用程序试图使用权限时收集权限使用的上下文信息,这主要包括应用程序使用权限时的调用上下文(Calling Context)以及在应用程序进行进程间通信时形成的调用链。依赖这些上下文信息,Arbiter能够区分同一应用程序在不同场景下对同一权限发出的使用请求,并识别出潜在的间接权限使用。通过即时权限授予,Arbiter可以有效帮助用户了解应用程序如何使用该权限并更好地做出即时授权决定。为了减少即时权限授予对系统可用性带来的影响,Arbiter采用安全需求工程的方法推导出了一套恶意程序权限使用特征,并基于该特征识别权限使用请求中会造成安全隐患的请求。只有至少符合一项恶意权限使用特征的权限使用请求才需要用户授权。为了验证恶意程序权限使用特征的有效性和完整性,本文使用150个真实恶意应用程序进行了有效性测试。测试结果表明没有一款恶意应用程序能够在未经用户显式授权的情况下自动获得完成其恶意行为所必须的所有权限。此外,本文从Android官方应用市场下载了分属13个类别的1378个应用程序,并对这些程序进行了可用性测试。测试结果表明平均每7500余次用户操作才需要一次用户显式授权,平均290次权限使用才需要用户做出一次即时授权。这些结果表明Arbiter可以对绝大多数权限使用请求完成自动授权,对用户造成的干扰极小。Arbiter在常用性能测试集下并未表现出明显的性能开销,针对Arbiter的最差性能测试结果表明其在最差情况下产生的性能开销不超过16%,对用户造成的影响极低。