沈才樑,唐科萍,俞立峰,樊甫偉
(1.浙江工業職業技術學院 紹興 312000;2.浙江大學計算機科學與技術學院 杭州 310027;3.麗水廣播電視大學 麗水323000;4.杭州師范大學電子商務安全重點實驗室 杭州 310036)
Android是一種以Linux為基礎的開放源代碼操作系統,主要使用于便攜設備。Android操作系統最初由Andy Rubin開發,最初主要支持手機。2005年,由Google收購注資,并組建開放手機聯盟開發改良,逐漸擴展到平板電腦及其他領域。2011年第一季度,Android在全球的市場份額首次超過Symbian系統,躍居全球第一。2012年2月,Android占據全球智能手機操作系統市場52.5%的份額,中國市場占有率為68.4%。
Android作為一個基于Linux內核的、開放的移動設備平臺,近幾年得到了快速發展,市場占有率不斷上升,各種應用不斷涌現,隨之而來的是設備信息安全問題不斷曝光,Android系統的安全性成為研究熱點。Android系統可以分為4層,分別是應用程序層、應用程序框架層、Android本地庫及運行環境層和Linux內核層。其安全機制可以分為Linux安全機制、Android特有的安全機制、其他保護機制[1]。
其中,Linux內核安全機制包括可移植操作系統接口(POSIX)用戶和文件訪問控制。POSIX用戶機制保證每一個應用有一個唯一的ID,擁有唯一ID的程序始終運行于自己的進程內,這樣使得應用程序運行在一個安全的沙箱內,阻止其他應用程序對其的影響。文件訪問控制即Linux文件訪問控制機制,這里不再作具體展開。總體而言,由于Android系統基于Linux內核構建,目前針對Linux內核的安全攻擊較少[2]。
Android特有的安全機制包括應用程序權限控制、組件封裝以及簽名機制。應用程序權限控制指Android通過在每臺設備上實施了基于權限的安全策略來處理安全問題,采用權限來限制安裝應用程序的能力。權限是一段唯一的各不相同的字符串。當某個權限與某個操作和資源對象綁定在一起,必須獲得這個權限才能在對象上執行操作[3]。組件封裝是指Android應用程序把組件包裝在應用程序內,阻止其他應用程序訪問它們。這種功能主要通過組件中定義讀取
Android系統基于Linux內核構建,繼承了其良好的安全性,但也存在一些安全隱患,特別是針對中間層、應用層的攻擊,屢見不鮮。分析其安全機制,主要存在以下幾個問題。
·簽名機制管理松散,應用程序使用的數字證書可以自簽名,無需權威的數字證書機構簽名認證,導致惡意程序泛濫。Google采用這樣的數字簽名策略,是為了增強Android平臺的開放性,盲目地修改其數字簽名機制,將使設備安裝新應用出現問題。
·應用程序權限控制針對單個應用程序能有效地防止權限越級,但是多個應用在組合以后,能輕易提升權限,使得惡意代碼獲得高級權限,導致信息泄露、系統受到破壞,這也是目前很多惡意代碼獲得運行的主要途徑。
·缺乏對權限的動態運行時監測。權限一經被授權給應用程序后,在應用程序的生命期間,它將不會被移除,即使聲明此權限源程序被刪除。
目前,針對Android安全的研究已初步開展。Enck W、Ongtang M、McDaniel P在參考文獻[3]中對Android整體安全機制做了詳細的闡述;在參考文獻[5~8]中提出了一個在移動設備上基于主機的入侵檢測系統檢測惡意軟件系統,即 HIDS(host based intrusion-detection system),該系統通過對設備特征的取樣,利用機器學習和時序推理方法采集數據,從而推斷設備是否感染惡意病毒。目前,國內針對Android安全的研究還處在起步階段,參考文獻[2]介紹了Android安全機制,但是缺乏具體的解決方案。參考文獻[3]介 紹 了 KBTA (knowledge-based temporal Abstract ion)、Anomaly Detection、SELinux(security-enhanced linux)3 種惡意軟件檢測技術,但是這些方法都是針對單個軟件,直接測定其是否為惡意軟件。本文中提出的通過權限提升漏洞攻擊,往往是惡意軟件通過訪問正常軟件的某個組件,從而獲得相應的權限,以達到獲取個人隱私、攻擊系統的目的,直接操作資源的應用往往是正常合法的,甚至是系統應用,而真正的資源調用者卻是非法的,因此上述方案中的監測方案往往無法正確監測出這類惡意軟件。
Android應用在運行時都運行于自身的進程中,該進程擁有獨立的虛擬機實例,不能隨便與其他應用相互訪問資源。通常Android進程間的通信需要借助于Binder類(一種輕量級的進程通信方式,inter-process communication),但通過應用程序權限控制、組件封裝機制的整合使用,病毒代碼也能輕易獲得其他進程資源的訪問權限。圖1給出了Android應用程序級別的權限提升漏洞攻擊原理。

應用1中的組件1,沒有直接訪問應用3中的組件1的權限,但是由于應用2中的組件1擁有權限P1,同時卻沒有訪問保護(即任何應用程序組件均可以訪問應用2中的組件1),應用3中的組件1的訪問處在權限P1的保護中,因此應用2中的組件1有權限訪問到應用3中的組件1。因此應用1中的組件可以通過應用2中的組件1,最終訪問到應用3中的組件1。很明顯這個訪問路徑跟系統設計時的意圖并不一致,這就是Android權限提升漏洞攻擊。通過增加應用2中組件1的訪問控制保護,即可防止類似權限提升漏洞攻擊的發生,然而讓每個應用開發者都做到這點是不太現實的,因為并不是每個開發者都會注意,他的應用是否會被其他惡意代碼訪問而獲得越級的權限。
目前,Android權限提升漏洞攻擊出現范圍廣,應用在沒有認證的話音通信[9]、文本信息[10]以及下載一些惡意代碼[11]、上下文感知的話音記錄[12]等。
依據第3節的原理分析可以看到,如果阻止惡意軟件應用1訪問應用2或是在整個訪問發生的過程中,通過檢查訪問是否是直接調用,應用1是否擁有應用2訪問資源的權限,那么整個攻擊訪問鏈就可以被監測并阻止,因此可以從以下兩個關鍵點開展研究。
·通過加強應用2權限檢查,對應用2中組件1的
·通過對Android系統中間層的修改,對應用之間的調用進行監測,阻止類似通過間接調用,獲得權限的過程,本文提到的運行時IPC(inter-process communication)監測。
依據權限提升漏洞攻擊產生的原理,防止權限提升漏洞攻擊可以從兩方面進行解決:應用安裝前安全檢測和運行時IPC監測。
安裝前監測主要是通過分析Android應用配置文件AndroidManifest.xml,根據配置文件組件中

activity、service、receiver、provoider 組件中均有標簽permission、exported。permission標簽表明了組件所擁有的權限,exported標簽當值為true時,表明該組件能被其他應用訪問。而exported標簽當值為false時,表示該組件不能被其他應用所訪問。exported缺省值需要根據組件是否有intent-filter決定(content providers組件除外,該組件缺省值始終為true),當沒有intent-filter時,缺省值為 false,反之有intent-filter時,缺省值為true。
基于以上的分析,可以發現在應用安裝前,通過如圖3所示的權限提升攻擊漏洞檢測判定樹分析應用的權限,提升攻擊漏洞的安全性。


5.2.1 運行時IPC監測系統結構
運行時IPC監測通過修改Android系統內核,為Android系統添加權限監測中間層,根據判定策略判定應用間訪問的合法性。其基本結構如圖4所示。
如圖4所示,系統中的IPC過程都被監視,當應用A調用應用B去完成一個工作時,系統就會捕捉到這個調用,首先會調用Android系統本身的權限檢測,判定應用A是否可以調用應用B,如果判定通過,接著監測系統中決策引擎就會去檢查策略庫,如果策略庫內已有應用A到應用B相應操作的決策路徑,那么本次調用就會被允許,如果策略庫內沒有,則決策引擎根據策略,判定本次調用,如果判定通過,則把該次判定路徑添加到策略庫內作為緩存,否則判定應用A不能訪問應用B。
5.2.2 訪問策略制定
訪問策略的制定對于系統運行,十分重要。訪問策略的制定主要有以下幾個因素:是否擁有權限、應用安全級別(這個可以有開發者自行定義,建議把第三方沒有權威認證的應用設定為untrusted,把系統應用以及權威認證的應用設定為 trusted)、應用訪問方式 (direct或indirect)。下面給出一個訪問策略實例防止典型的權限提升攻擊:應用X1訪問應用 X2,利用 X2,打開瀏覽器 X3,下載惡意代碼。
應用:X1、X2、X3
應用調用L1(X1→X2→X3)
那么整個訪問策略返回值為:
X1.trustLevel(untrusted)^X2.trustLevel(trusted)^X3.trustLevel(trusted)^X1.hasPermission(INTERNET)^X2.hasPermission(INTERNET)^X3.hasPermission(INTERNET)^L1.type(indirect)。
訪問策略決策引擎,依據以上訪問策略,對整個訪問調用將作出拒絕訪問的建議。當然因為屏蔽所有的間接訪問,明顯不現實同時也是不可取的。因此我們通過制定安全策略,直接拒絕明顯的已知的間接訪問權限提升攻擊。但對一些未知的不確定的間接訪問,系統只能提供給用戶適當的操作建議。
從Android市場下載846個應用,通過應用安裝前安全檢測,檢測出168個應用存在安全攻擊漏洞,對這168個通過進一步分析,其中98個應用有自定義intent action,而自定義的intent action實驗中由于無法測定其是否與安全密切相關。另有10個應用在其組件中存在著exported為true,但是沒有intent-filter,即所有的外部應用均可以訪問此組件,該應用存在著權限提升攻擊的漏洞;有41個應用存在包含intent-filter的組件,這些組件缺失exported,說明這些組件也能被第三方應用調用;有19個應用,服務組件沒有訪問權限控制。接著把通過上一次檢測的678個應用中的30個,進行運行時IPC檢測,在該組檢測中,發現其中3個應用軟件存在運行時權限提升攻擊漏洞,這些應用按安裝前安全檢測中的判定樹無法檢測出漏洞,但在實際運行過程中卻通過間接訪問,獲得了應用本身并沒有的權限。通過對實驗數據的進一步測試,發現本系統在對一些未知的通過間接訪問提升權限的攻擊,存在著一些不準確的建議。
本文給出了Android系統的安全機制,并給出了權限提升漏洞攻擊原理,并提出了安裝前漏洞檢測與運行時IPC監測兩種方法,來防止權限提升漏洞攻擊,并對實際應用進行了檢驗,取得了良好的效果。本文的后續研究將主要在如何通過提高應用安裝前漏洞檢測成功率以及提升未知權限提升攻擊的防范能力。
1 Shabtai A,Fledek Y,Kanonov U,et al.Google android:a comprehensive security assessment.IEEE Security&Privacy,2010
2 符易陽,周丹平.Android安全機制分析.第26次全國計算機安全學術交流會論文集,2011
3 期廖明華,鄭力明.Android安全機制分析與解決方案初探.科學技術與工程,2009,26(11):6 351~6 354
4 Enck W,Ongtang M,McDaniel P.Understanding android security.IEEE Security&Pivacy,2009,7(1):53~54
5 Shabtai A,Wiess Y, Kanonov U, et al.Andromaly:a behavioral malware detection framework for Android devices.Intelligent Information Systems,2011
6 ShabtaiA, Kanonov U, EloviciY.Detection, alertand responseto malicious behavior in mobile devices:knowledgebased approach.RAID,2009
7 Shabtai A,Kanonov U,Elovici Y.Intrusion detection on mobile devices using the knowledge based temporal-Abstract method.Systems and Software,2010,83(8):1 527~1 536
8 Shabtai A,Fledel Y,Elovici Y,et al.Using the KBTA method for inferring computer and network security alerts from timestamped,rawsystem metrics.Computer Virology,2009,8(3):267~298
9 Davi L,Dmitrienko A,Sadeghi A-R,et al.Privilege escalation attacks on Android.Proceedings of the 13th Information Security Conference(ISC),2010
10 Enck W,Ongtang M,McDaniel P.Mitigating android software misuse before it happens.Technical Report NAS-TR-0094-2008,Pennsylvania State University,2008
11 Lineberry A,Richardson D L,Wyatt T.These aren't the permissions you're looking for.BlackHat USA,2010
12 Schlegel R,Zhang K,Zhou X,et al.Soundcomber:a stealthyand context-aware sound trojan for smartphones.18th Annual Network and Distributed System Security Symposium(NDSS),Feb 2011