張會(huì)先
摘要:Android是一款谷歌開(kāi)發(fā)的基于Linux內(nèi)核的智能手機(jī)操作系統(tǒng),廣泛應(yīng)用于智能手機(jī),平板和智能設(shè)備。Android系統(tǒng) 采用了基于面向應(yīng)用強(qiáng)制訪問(wèn)控制和沙箱機(jī)制的先進(jìn)安全模型。Android 應(yīng)用開(kāi)發(fā)人員和手機(jī)用戶(hù)可以在安裝應(yīng)用的時(shí)候設(shè)置應(yīng)用的可以執(zhí)行的操作,有安全漏洞程序代碼被攻擊的范圍限制在應(yīng)用沙箱的權(quán)限邊界之內(nèi)。本文主要討論通過(guò)提升權(quán)限進(jìn)行攻擊的可能性。一款好的應(yīng)用和一款?lèi)阂獾膽?yīng)用在運(yùn)行時(shí)會(huì)進(jìn)行都會(huì)提升授權(quán)。本文研究結(jié)果顯示Android現(xiàn)有安全模型無(wú)法抵御使用傳遞的權(quán)限攻擊,Android沙箱模型也無(wú)法防范惡意軟件和復(fù)雜的運(yùn)行時(shí)攻擊。
關(guān)鍵詞:面向返回編程;攻擊;強(qiáng)制訪問(wèn)控制;安卓;沙盒
中圖分類(lèi)號(hào):TP393 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):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技術(shù)日新月異的發(fā)展,智能手機(jī)不僅是一種通信工具,在人們的日常生活和工作中扮演著日益重要的角色,滿(mǎn)足了人們對(duì)游戲,網(wǎng)上沖浪,多媒體娛樂(lè),購(gòu)物和電子商務(wù)等方面的需求。美國(guó)知名風(fēng)投公司KPCB統(tǒng)計(jì),由圖1可見(jiàn),使用andriod平臺(tái)的用戶(hù)已經(jīng)超過(guò)智能設(shè)備平臺(tái)用戶(hù)的百分之八十。
隨著智能手機(jī)的流行,黑客和駭客們從windows逐漸轉(zhuǎn)移到Androd系統(tǒng),同時(shí) andorid發(fā)布平臺(tái)審查機(jī)制的缺失,導(dǎo)致越來(lái)越多的手機(jī)用戶(hù)成為惡意著攻擊目標(biāo)。Android系統(tǒng)出現(xiàn)了各型各色的不良應(yīng)用[1]。而且,借助代碼注入式攻擊,返回導(dǎo)向編程(ROP)[2]和綁定返回導(dǎo)向編程BROP [3]等先進(jìn)的攻擊技術(shù)可以在運(yùn)行時(shí)攻擊Android應(yīng)用和Android系統(tǒng)。
Android安全架構(gòu)中一個(gè)中心思想就是:應(yīng)用程序在默認(rèn)的情況下不可以執(zhí)行任何對(duì)其他應(yīng)用程序,系統(tǒng)或者用戶(hù)帶來(lái)負(fù)面影響的操作。先進(jìn)的沙箱安全機(jī)制和訪問(wèn)高級(jí)或者隱私功能(定位,照相,相冊(cè),短信等)權(quán)限分配防止惡意軟件和運(yùn)行時(shí)攻擊的有效 方法。Android是一個(gè)多進(jìn)程系統(tǒng),在這個(gè)系統(tǒng)中,應(yīng)用程序(或者系統(tǒng)的部分)會(huì)在自己的進(jìn)程中運(yùn)行,采用沙箱安全機(jī)制的不同應(yīng)用之間資源彼此隔離,同時(shí),每個(gè)應(yīng)用分配對(duì)應(yīng)的允許使用的權(quán)限來(lái)使用涉及安全的功能。因此,惡意應(yīng)用只能通過(guò)執(zhí)行在應(yīng)用沙箱中顯性被允許的行為。比如,惡意軟件 訪問(wèn)權(quán)限被分配了電子可以訪問(wèn)電子郵件數(shù)據(jù)庫(kù),但是卻無(wú)法訪問(wèn)短信(SMS)數(shù)據(jù)庫(kù)。
Android安全沙箱基于面向應(yīng)用強(qiáng)制訪問(wèn)(MAC),從技術(shù)層面來(lái)說(shuō),一個(gè)應(yīng)用程序的進(jìn)程就是一個(gè)安全的沙箱,每個(gè)應(yīng)用可以配置一個(gè)用戶(hù)唯一標(biāo)識(shí)(UserID)和一系列的權(quán)限(這些權(quán)限在安裝時(shí)固定下來(lái))。無(wú)論訪問(wèn)系統(tǒng)資源,還是 和其他應(yīng)用通信都需要顯性的權(quán)限聲明。Android系統(tǒng)在應(yīng)用運(yùn)行時(shí)檢查應(yīng)用的權(quán)限,沒(méi)有對(duì)應(yīng)權(quán)限就無(wú)法訪問(wèn)特殊的資源 。
1 Android的安全機(jī)制
Android的安全機(jī)制包括多個(gè)方面:文件訪問(wèn)控制,應(yīng)用簽名, 接入權(quán)限,代碼安全,網(wǎng)絡(luò)安全,數(shù)據(jù)庫(kù)安全, 沙箱,組件封裝,如圖2所示。
(1) 文件訪問(wèn)控制
android繼承了linux的離散訪問(wèn)控制 (根據(jù)進(jìn)程所屬關(guān)系控制對(duì)資源的訪問(wèn))。在系統(tǒng)運(yùn)行時(shí),最外層安全保護(hù)是由Linux系統(tǒng)提供的,其中system.img所在的分區(qū)是只讀的,不允許用戶(hù)寫(xiě)入,而data.img所在的分區(qū)是可讀寫(xiě)的,用于存放用戶(hù)數(shù)據(jù)。每一個(gè)進(jìn)程分配一個(gè)用戶(hù)標(biāo)識(shí)(UserID),每種資源都有對(duì)應(yīng)的訪問(wèn)規(guī)則。不同主體有不同的讀寫(xiě)執(zhí)行權(quán)限, 單獨(dú)文件訪問(wèn)權(quán)限控制分群組、用戶(hù)、權(quán)限。權(quán)限分可讀、可寫(xiě)、可執(zhí)行。
(2) 應(yīng)用簽名
正式發(fā)布一個(gè)Android應(yīng)用時(shí),必須使用一個(gè)合適的私鑰生成的數(shù)字證書(shū)來(lái)給程序簽名,APK如果使用一個(gè)key簽名,發(fā)布時(shí)另一個(gè)key簽名的文件將無(wú)法安裝或覆蓋老的版本,這樣可以防止你已安裝的應(yīng)用被惡意的第三方覆蓋或替換掉,這樣簽名其實(shí)也是開(kāi)發(fā)者的身份標(biāo)識(shí),交易中抵賴(lài)等事情發(fā)生時(shí),簽名可以防止抵賴(lài)的發(fā)生。
(3) 接入權(quán)限
權(quán)限機(jī)制由android系統(tǒng)的中間件層提供,權(quán)限主要用來(lái)對(duì)應(yīng)用的操作增加限制,防止惡意應(yīng)用進(jìn)行非法操作給用戶(hù)造成敏感數(shù)據(jù)泄漏和設(shè)備被非法控制,防止惡意收費(fèi)等.比如打電話(huà),發(fā)短信,上網(wǎng),檢查wifi狀態(tài),拍照等權(quán)限代表應(yīng)用可以打電話(huà),可以上網(wǎng),可以發(fā)短信。
(4) 代碼安全
java不同于C/C++,java是解釋性語(yǔ)言,存在代碼被反編譯的隱患;借助proguard來(lái)壓縮、優(yōu)化java字節(jié)碼,刪除無(wú)用的類(lèi)、字段、方法、屬性、注釋等,混淆代碼,防止被反編譯。
(5) 網(wǎng)絡(luò)安全
借助各種加密算法在TCP實(shí)現(xiàn)敏感數(shù)據(jù)傳輸安全。
(6) 數(shù)據(jù)庫(kù)安全
Android采用的SQLite目前采用明文存儲(chǔ)數(shù)據(jù),SQLite是一個(gè)實(shí)現(xiàn)一個(gè)自包含的,服務(wù)器,零配置,事務(wù)SQL數(shù)據(jù)庫(kù)引擎的軟件庫(kù)[5]。 SQLite是世界上部署最廣泛的數(shù)據(jù)庫(kù)引擎。其特點(diǎn)是高度便攜、使用方便、結(jié)構(gòu)緊湊、高效、可靠。
(7) 沙箱安全機(jī)制
沙箱實(shí)現(xiàn)不同應(yīng)用之間資安全源的隔離,Android擴(kuò)展了Linux內(nèi)核安全模型的用戶(hù)與權(quán)限機(jī)制,將多用戶(hù)操作系統(tǒng)的用戶(hù)隔離機(jī)制巧妙地移植為應(yīng)用程序隔離。在linux中,一個(gè)用戶(hù)標(biāo)識(shí)(UID)識(shí)別一個(gè)給定用戶(hù);在Android上,一個(gè)UID則識(shí)別一個(gè)應(yīng)用程序。在安裝應(yīng)用程序時(shí)向其分配UID。應(yīng)用程序在設(shè)備上存續(xù)期間內(nèi),其UID保持不變。僅限用于允許或限制應(yīng)用程序(而非用戶(hù))對(duì)設(shè)備資源的訪問(wèn)。如此,Android的安全機(jī)制與Linux內(nèi)核的安全模型完美銜接!不同的應(yīng)用程序分別屬于不同的用戶(hù),因此,應(yīng)用程序運(yùn)行于自己獨(dú)立的進(jìn)程空間,與UID不同的應(yīng)用程序自然形成資源隔離,如此便形成了一個(gè)操作系統(tǒng)級(jí)別的應(yīng)用程序“沙箱” Android應(yīng)用程序的“沙箱”機(jī)制如圖3,互相不具備信任關(guān)系的應(yīng)用程序相互隔離,獨(dú)自運(yùn)行。
(8) 組件封裝
應(yīng)用組件可以封裝為私有或者公開(kāi)。私有組件只有同一個(gè)應(yīng)用內(nèi)可以訪問(wèn),公開(kāi)組件可以被其他應(yīng)用訪問(wèn)。
2 提升優(yōu)先級(jí)攻擊
由于Android權(quán)限機(jī)制的弱點(diǎn),會(huì)帶來(lái)提升優(yōu)先級(jí)攻擊。Android系統(tǒng)無(wú)法處理傳遞的優(yōu)先級(jí),應(yīng)用可以通過(guò)這些繞過(guò)沙箱的約束。同時(shí)由于 權(quán)限系統(tǒng)沒(méi)有檢查優(yōu)先級(jí)傳遞,攻擊者容易避開(kāi)Android的沙箱,Android沙箱安全機(jī)制無(wú)法防范限定范圍的運(yùn)行時(shí)攻擊。
(1) 基于組件的提升權(quán)限攻擊
用較少的權(quán)限的應(yīng)用程序并不限定訪問(wèn)更多特權(quán)的應(yīng)用程序組件。換言之,Android的安全機(jī)制無(wú)法確保應(yīng)用只有自己聲明的權(quán)限。如圖4所示,不同的應(yīng)用通過(guò)組件可以訪問(wèn)其他應(yīng)用的資源。為了防止這種情況,應(yīng)該每個(gè)應(yīng)用加強(qiáng)權(quán)限檢查,應(yīng)該確保權(quán)限只授予本進(jìn)程。
(2) 提升優(yōu)先級(jí)攻擊
Android應(yīng)用采用標(biāo)準(zhǔn) 的java語(yǔ)言開(kāi)發(fā),java語(yǔ)言使用的JNI(Java Native Interface,java本地接口)所包含的本地庫(kù)里有c、c++代碼。這導(dǎo)致用應(yīng)用堆棧溢出的缺陷安置優(yōu)先級(jí)提升攻擊 ,我們可以采用無(wú)返回導(dǎo)向編程攻擊。
如圖5所示,使用命令序列需要如下步驟:
1)注入跳轉(zhuǎn)地址和解釋就命令到應(yīng)用的內(nèi)存空間;
2)初始化注冊(cè)ULB(Update Load Branch,更新加載分支)序列;
3)加載ULB地址;
4)加載解釋命令地址;
5)最后激活libc系統(tǒng)功能。
3 結(jié)束語(yǔ)
本文主要介紹android系統(tǒng)上提升優(yōu)先級(jí)攻擊,描述了android系統(tǒng)面向應(yīng)用強(qiáng)制訪問(wèn)控制上存在的缺陷和漏洞會(huì)造成無(wú)法防范優(yōu)先級(jí)傳遞的攻擊。接下來(lái)會(huì)研究錯(cuò)誤使用的更高優(yōu)先級(jí)應(yīng)用引起的優(yōu)先級(jí)提升攻擊。
參考文獻(xiàn):
[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]林培杰,朱安南,程樹(shù)英.Android數(shù)據(jù)庫(kù)SQLite性能優(yōu)化[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2014(4).