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