张会先
摘要:Android是一款谷歌开发的基于Linux内核的智能手机操作系统,广泛应用于智能手机,平板和智能设备。Android系统 采用了基于面向应用强制访问控制和沙箱机制的先进安全模型。Android 应用开发人员和手机用户可以在安装应用的时候设置应用的可以执行的操作,有安全漏洞程序代码被攻击的范围限制在应用沙箱的权限边界之内。本文主要讨论通过提升权限进行攻击的可能性。一款好的应用和一款恶意的应用在运行时会进行都会提升授权。本文研究结果显示Android现有安全模型无法抵御使用传递的权限攻击,Android沙箱模型也无法防范恶意软件和复杂的运行时攻击。
关键词:面向返回编程;攻击;强制访问控制;安卓;沙盒
中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2016)18-0051-03
Attract in Andrioid Based on Improving Privileges
ZHANG Hui-xian
(Xian Kedagaoxin University, Xian 710109, China)
Abstract: Android is a mobile operating system (OS) developed by Google, based on a Linux kernel and designed primarily for touchscreen mobile devices such as smartphones and tablets. Among its leading features is its advanced security model which is based on application-oriented mandatory access control and sandboxing. This allows developers and users to restrict the execution of an application to the privileges it has (mandatorily) assigned at installation time. The exploitation of vulnerabilities in program code is con?ned within the privilege boundaries of an applications sandbox. This paper manifests that a privilege escalation attack is possible. A good application exploited at runtime or a malicious application can escalate granted permissions. The results show that Androids security model cannot deal with a transitive permission usage attack and Androids sandbox model fails as a last resort against malware and sophisticated runtime attacks.
Key words: ROP; Attract; MAC; Android; sandboxing
随着IT技术日新月异的发展,智能手机不仅是一种通信工具,在人们的日常生活和工作中扮演着日益重要的角色,满足了人们对游戏,网上冲浪,多媒体娱乐,购物和电子商务等方面的需求。美国知名风投公司KPCB统计,由图1可见,使用andriod平台的用户已经超过智能设备平台用户的百分之八十。
随着智能手机的流行,黑客和骇客们从windows逐渐转移到Androd系统,同时 andorid发布平台审查机制的缺失,导致越来越多的手机用户成为恶意着攻击目标。Android系统出现了各型各色的不良应用[1]。而且,借助代码注入式攻击,返回导向编程(ROP)[2]和绑定返回导向编程BROP [3]等先进的攻击技术可以在运行时攻击Android应用和Android系统。
Android安全架构中一个中心思想就是:应用程序在默认的情况下不可以执行任何对其他应用程序,系统或者用户带来负面影响的操作。先进的沙箱安全机制和访问高级或者隐私功能(定位,照相,相册,短信等)权限分配防止恶意软件和运行时攻击的有效 方法。Android是一个多进程系统,在这个系统中,应用程序(或者系统的部分)会在自己的进程中运行,采用沙箱安全机制的不同应用之间资源彼此隔离,同时,每个应用分配对应的允许使用的权限来使用涉及安全的功能。因此,恶意应用只能通过执行在应用沙箱中显性被允许的行为。比如,恶意软件 访问权限被分配了电子可以访问电子邮件数据库,但是却无法访问短信(SMS)数据库。
Android安全沙箱基于面向应用强制访问(MAC),从技术层面来说,一个应用程序的进程就是一个安全的沙箱,每个应用可以配置一个用户唯一标识(UserID)和一系列的权限(这些权限在安装时固定下来)。无论访问系统资源,还是 和其他应用通信都需要显性的权限声明。Android系统在应用运行时检查应用的权限,没有对应权限就无法访问特殊的资源 。
1 Android的安全机制
Android的安全机制包括多个方面:文件访问控制,应用签名, 接入权限,代码安全,网络安全,数据库安全, 沙箱,组件封装,如图2所示。
(1) 文件访问控制
android继承了linux的离散访问控制 (根据进程所属关系控制对资源的访问)。在系统运行时,最外层安全保护是由Linux系统提供的,其中system.img所在的分区是只读的,不允许用户写入,而data.img所在的分区是可读写的,用于存放用户数据。每一个进程分配一个用户标识(UserID),每种资源都有对应的访问规则。不同主体有不同的读写执行权限, 单独文件访问权限控制分群组、用户、权限。权限分可读、可写、可执行。
(2) 应用签名
正式发布一个Android应用时,必须使用一个合适的私钥生成的数字证书来给程序签名,APK如果使用一个key签名,发布时另一个key签名的文件将无法安装或覆盖老的版本,这样可以防止你已安装的应用被恶意的第三方覆盖或替换掉,这样签名其实也是开发者的身份标识,交易中抵赖等事情发生时,签名可以防止抵赖的发生。
(3) 接入权限
权限机制由android系统的中间件层提供,权限主要用来对应用的操作增加限制,防止恶意应用进行非法操作给用户造成敏感数据泄漏和设备被非法控制,防止恶意收费等.比如打电话,发短信,上网,检查wifi状态,拍照等权限代表应用可以打电话,可以上网,可以发短信。
(4) 代码安全
java不同于C/C++,java是解释性语言,存在代码被反编译的隐患;借助proguard来压缩、优化java字节码,删除无用的类、字段、方法、属性、注释等,混淆代码,防止被反编译。
(5) 网络安全
借助各种加密算法在TCP实现敏感数据传输安全。
(6) 数据库安全
Android采用的SQLite目前采用明文存储数据,SQLite是一个实现一个自包含的,服务器,零配置,事务SQL数据库引擎的软件库[5]。 SQLite是世界上部署最广泛的数据库引擎。其特点是高度便携、使用方便、结构紧凑、高效、可靠。
(7) 沙箱安全机制
沙箱实现不同应用之间资安全源的隔离,Android扩展了Linux内核安全模型的用户与权限机制,将多用户操作系统的用户隔离机制巧妙地移植为应用程序隔离。在linux中,一个用户标识(UID)识别一个给定用户;在Android上,一个UID则识别一个应用程序。在安装应用程序时向其分配UID。应用程序在设备上存续期间内,其UID保持不变。仅限用于允许或限制应用程序(而非用户)对设备资源的访问。如此,Android的安全机制与Linux内核的安全模型完美衔接!不同的应用程序分别属于不同的用户,因此,应用程序运行于自己独立的进程空间,与UID不同的应用程序自然形成资源隔离,如此便形成了一个操作系统级别的应用程序“沙箱” Android应用程序的“沙箱”机制如图3,互相不具备信任关系的应用程序相互隔离,独自运行。
(8) 组件封装
应用组件可以封装为私有或者公开。私有组件只有同一个应用内可以访问,公开组件可以被其他应用访问。
2 提升优先级攻击
由于Android权限机制的弱点,会带来提升优先级攻击。Android系统无法处理传递的优先级,应用可以通过这些绕过沙箱的约束。同时由于 权限系统没有检查优先级传递,攻击者容易避开Android的沙箱,Android沙箱安全机制无法防范限定范围的运行时攻击。
(1) 基于组件的提升权限攻击
用较少的权限的应用程序并不限定访问更多特权的应用程序组件。换言之,Android的安全机制无法确保应用只有自己声明的权限。如图4所示,不同的应用通过组件可以访问其他应用的资源。为了防止这种情况,应该每个应用加强权限检查,应该确保权限只授予本进程。
(2) 提升优先级攻击
Android应用采用标准 的java语言开发,java语言使用的JNI(Java Native Interface,java本地接口)所包含的本地库里有c、c++代码。这导致用应用堆栈溢出的缺陷安置优先级提升攻击 ,我们可以采用无返回导向编程攻击。
如图5所示,使用命令序列需要如下步骤:
1)注入跳转地址和解释就命令到应用的内存空间;
2)初始化注册ULB(Update Load Branch,更新加载分支)序列;
3)加载ULB地址;
4)加载解释命令地址;
5)最后激活libc系统功能。
3 结束语
本文主要介绍android系统上提升优先级攻击,描述了android系统面向应用强制访问控制上存在的缺陷和漏洞会造成无法防范优先级传递的攻击。接下来会研究错误使用的更高优先级应用引起的优先级提升攻击。
参考文献:
[1] Shacham H. The geometry of innocent flesh on the bone: Return-into-libc without function calls (on the x86). In ACM CCS 07, ,2007:552-561.
[2] Vennon T. Android malware. A study of known and potential malware threats. Technical report, SMobile Global Threat Center, Feb 2010.
[3] Checkoway S, Davi L, Dmitrienko A, et al. Return-oriented programming without returns. In ACM CCS2010,2010.
[4]林培杰,朱安南,程树英.Android数据库SQLite性能优化[J].计算机系统应用,2014(4).