楊 永,錢振江,黃 皓
(南京大學 a.計算機軟件新技術國家重點實驗室;b.計算機科學與技術系,南京 210046)
隨著Android 系統在移動操作系統市場的快速發展,對Android 系統的攻擊也是層出不窮。為了防御各式各樣的攻擊,目前工業界和學術界都展開了較多的研究。有研究者通過對Android 市場的應用程序進程審計,分析應用程序中的惡意行為,阻止應用程序對系統的攻擊,防止用戶隱私泄漏[1-2]。有研究者通過對Android 用戶程序框架進行增強,以修補Android 安全機制的缺陷,來阻止惡意代碼對隱私的訪問[3-4],還有一些研究者從基于Linux 內核的框架做修改增加Android 的安全[5-6]。雖然上述研究成果對Android 基于應用程序的攻擊有很好的防御效果,但是針對Android系統內核的攻擊,現有的防御機制都是基于傳統Linux 內核的保護方法,但大部分保護方法本身在操作系統內部,攻擊者很容易繞過或者篡改[7]。利用硬件虛擬化保護機制能很好隔離和監控系統的各種威脅[8-9],但是這些都是針對特定平臺的,如Intel-VT 等。而對Android 所搭載平臺的ARM硬件虛擬化的研究工作目前較少,主要有Xen on ARM[10]和KVM for ARM[11],它們實現了對DomainU 系統的監控。但是Domain0 和DomainU 共存的方式并不利于現有移動設備簡單方便的使用體驗,并且對性能的影響較大。Cells 采用名稱空間的方法,安全獨立地運行多個操作系統。雖然性能上很好,但是由于操作系統內核并未隔離,因此對內核的攻擊將會威脅到所有的系統[12]。L4Android 將修改后Android 系統作為一個用戶空間的進程運行在微內核之上,不同的Android 系統用于不同的場合,具有很好的隔離效果[13],但是對系統的攻擊仍然無法檢測和阻止。
本文結合ARM 處理器的硬件虛擬化機制,實現一種基于ARM 平臺輕量級的hypervisor 監控器架構。保護操作系統內核關鍵對象,以及快速檢測Rootkit 威脅來阻止針對基于Linux 內核的Android 系統級的攻擊。
ARMv7 硬件虛擬化擴展,增加了一種工作在普通區域的HYP 模式。HYP 模式擁有普通區域的最高權限。而其他的模式分別是:(1)特權模式,包括快速中斷模式、中斷模式、系統管理模式、數據終止模式、未定義指令終止模式、超級用戶模式;(2)用戶模式。
HYP 模式擁有更高的特權,對資源的控制能力超過普通區域。因此,將DroidVisor 的核心監控代碼位于該區域。被監控的操作系統內核運行于普通區域的特權模式,用戶程序運行在普通區域的用戶模式。DroidVisor 對被監控操作系統的改動很小,監控程序也比較簡單,有利于保證監控程序本身的安全性驗證。
DroidVisor 的設計架構如圖1 所示。

圖1 DroidVisor 架構
DroidVisor 監控器設計基于以下2 點:(1)兩階段內存地址轉換,從VA->IPA->PA。其中,第二階段對于被監控的操作系統是透明的,只有監控器能控制第二階段內存轉換的頁表結構。(2)處于HYP 模式的監控器能對資源擁有最高的訪問權限,能訪問被監控系統的頁表目錄基址寄存器、控制寄存器、以及異常向量地址寄存器等。監控器可以通過修改需要保護的頁面的訪問權限屬性,來阻止惡意代碼對內核關鍵對象的修改以及內核控制流的篡改。而不需要更改被監控的操作系統。同時由于監控器擁有更高的權限,因此能看到被監控系統整個內核空間的完整視圖,能有效地檢測Rootkit 的存在。
DroidVisor 保護內核關鍵對象不被惡意程序篡改和破壞,并能第一時間阻止此類惡意代碼的攻擊。Linux 內核中存在的關鍵對象主要有基本內核代碼、內核模塊代碼、異常向量表、系統調用表和內核導出函數等。
DroidVisor 基于ARM 虛擬化擴展機制提供的兩階段地址轉換過程,如圖2 所示。第一階段轉換過程由MMU使用被監控的操作系統的頁表結構進行地址轉換,該頁表結構由被監控的操作系統控制;第二階段地址轉換由DroidVisor 控制,并且該頁表結構對被監控的系統是透明的。因此,通過第二階段的頁表來控制操作系統對內存的操作,而被監控的系統中的惡意代碼無法感知,有很好的隔離效果。

圖2 兩階段地址轉換過程
Linux 提供LKM 的機制來擴展內核功能,而該功能正是惡意代碼利用的手段。研究表明,60.4%的內核攻擊來自不信任的第三方內核模塊。DroidVisor 對內核模塊的加載和卸載進行監控,對于第三方不信任模塊的運行,使用一套新的第二階段地址轉換頁表結構,該頁表結構在頁表項上有嚴格的訪問控制權限,對不信任模塊的內存隔離,并能及時報告和處理模塊中惡意代碼對關鍵內核對象的破壞。
DroidVisor 通過監控器代理模塊獲取關鍵對象的虛擬地址。Linux 內核提供了system.map 文件,保存了內核導出符號對應的虛擬地址,如圖3 所示。

圖3 DroidVisor 關鍵對象的頁面屬性
保護設置的過程如下:
(1)監控器請求獲取關鍵對象的虛擬地址;
(2)代理模塊解析system.map 獲取關鍵對象的虛擬地址;
(3)代理模塊將虛擬地址傳給監控器;
(4)監控器使用被監控系統的頁表結構獲取虛擬地址對應的IPA;
(5)監控器利用第二階段轉換頁表獲取IPA 對應頁表項;
(6)設置PTE 的訪問屬性。
ARM 虛擬化擴展第二階段地址轉換使用大物理地址擴展(LPAE),使用64 位長度的頁描述符。其中,bit[7:6]為訪問控制位AP[2:1],第二階段的訪問屬性如表1 所示。

表1 AP 模型訪問控制屬性
在要保護的關鍵對象的第二階段地址轉換對應的頁表描述符上,設置相應的訪問控制屬性,當惡意代碼修改被保護的關鍵對象,在第二階段地址轉換便會產生異常,DroidVisor 捕獲該異常,確認是由不信任模塊中的惡意代碼修改了保護的對象后,DroidVisor 請求代理模塊完成一些復雜的功能,如信息打印等。并將該異常注入到被監控系統的異常處理程序,由操作系統結束有惡意行為的進程或者報告給用戶。異常注入過程為:(1)讀取異常向量表的地址;(2)將異常信息填寫到異常狀態寄存器中;(3)將異常處理程序地址填入ELR_hyp 寄存器,異常處理地址等于異常向量表地址+特定異常偏移;(4)執行eret 指令。DroidVisor 也使用了同樣的方式來執行代理模塊的功能,代理模塊實現了一個類似的功能向量表。
在3.1 節中闡述了利用DroidVisor 來保護內核完整性,該方法雖然能阻止惡意代碼修改,如系統調用表、異常向量或者內核代碼等關鍵對象。但此方法對某些直接對象操作(DKOM)的rootkit 不適合,如模塊隱藏、進程隱藏等,因為系統中有很多的內核對象如模塊鏈表、進程鏈表,并且這些鏈表結構隨著模塊的動態加載和卸載、進程創建和退出時刻發生變化,若對每個結構都進行3.1 節中所示的保護,會觸發很多異常,并且嚴重影響了系統的性能。因此,為了權衡系統安全性和性能,不必對這些鏈表進行保護,但必須能在系統被入侵后較快的時間內檢查出威脅。本節對隱藏的模塊和進程檢測證明利用DroidVisor 能迅速地檢測到rootkit。
為了能迅速地檢測到系統受到的威脅。因此,必須在很短的時間段執行一次檢查。DroidVisor 選擇進程切換時作為檢查點。理由是進程切換必須更改頁目錄基址寄存器,該寄存器為CP15 協處理器的C2 寄存器,并且能在惡意程序還沒有再次運行前就可以檢測到該類的隱藏行為。ARM硬件虛擬化支持設置CP15 訪問控制,當客戶機特權級和用戶級對CP15 特定的寄存器訪問時,將觸發陷阱,并由DroidVisor 截獲該異常。
在處理該異常時,DroidVisor 獲取被監控系統的模塊視圖,對比模塊在加載和卸除時登記的信息可以檢測出系統是否存在隱藏模塊信息的rootkit。檢測過程如下:


由于Linux 內核地址使用虛擬地址到物理地址的轉換只是加上一個偏移,因此對第一階段的地址轉換不需要使用頁表進行轉換。同時虛擬機監控器將IPA 直接映射到物理地址上,只是在訪問權限上做一些設置,因此由IPA 到PA 的轉換過程也不需要進行第二階段頁表轉換。上述從虛擬地址到物理地址的轉換代價是O(1),而鏈表遍歷過程的代價是O(n),因此,這個過程對系統的性能主要受到模塊數目的影響。
同樣在進行進程切換的同時,檢測將要運行的進程是否在tasks 鏈表中,如果該進程不在進程鏈表中則可以判定該進程為被隱藏的進程,說明系統中存在此類的rootkit。檢測函數如下:

該函數主要的代價是進程鏈表的遍歷,同上被監控系統的虛擬地址到物理地址的轉換過程代價為O(1),對鏈表的遍歷代價為O(n),n是系統中進程的數量。可見,該檢測函數對系統的性能影響也主要受到系統中進程數目的影響。
DroidVisor 在普通區域中有著至高的權利,能完全地訪問各種資源,控制被監控系統的各階段地址轉換。因此,監控器自身的安全也相當重要。監控器要盡量簡單,因為越復雜隱藏的缺陷就越可能越多。并且輕量級的監控器,方便對其進行形式化驗證。DroidVisor 除了使用簡單、輕量級的設計策略之外,還使用了內存隔離和基于TrustZone 的硬件保護機制。
監控器為了簡單的目的,沒有實現對設備的模擬,而是直接使用被監控程序的驅動程序對設備進行驅動。DroidVisor 將客戶機第一階段地址轉換的IPA 直接映射到相應的物理內存中,只是在頁表項增加了訪問控制權限等。為了保護監控器的安全,從內存上進行隔離,bootloader 給被監控系統內核傳遞參數時,隱藏了監控器的物理地址空間。如圖4 所示為整個系統內存隔離視圖。

圖4 DroidVisor 內存布局
除了在給內核傳遞參數時進行內存隱藏,DroidVisor還控制第二階段地址轉換,防止惡意代碼暴力枚舉內存空間,并將其映射到操作系統內核空間對監控器進行攻擊。
此外,DroidVisor 要獲得被監控系統的關鍵信息以及監控行為的信息輸出。必須與代理模塊緊密交互,可見,代理模塊對整個監控過程至關重要,決定了監控器是否能正確設置某些策略。因此,對代理模塊的保護也是很必要的。首先要確定加載時該代理模塊就是信任的模塊,其次在系統運行過程中要保證該模塊不能其他惡意代碼修改。
代理模塊驗證,在模塊加載時監控程序捕獲模塊加載的過程,并請求TrustZone 安全保護技術提供的服務對模塊進行檢測,本文在TrustZone 的可信服務中主要使用白名單摘要驗證方法,當且僅當該模塊的摘要存在白名單中,該模塊為信任模塊。經過驗證的模塊才能與監控器進一步通信,監控器并登記代理模塊信息和功能函數表,以便后續過程進程功能請求調用。
此外,還必須保護代理模塊在運行中不被惡意程序破壞和篡改。使用3.1 節中使用內核對象保護方法,但是區分當前系統是否有不可信模塊而有所區別。當代理模塊加載前,系統中無不可信的模塊,則直接加載,不做任何保護,因為此時系統在加載時被驗證是可信的。當代理模塊加載前,系統中存在不可信的內核模塊,而此時系統使用的是增強了安全屬性的第二階段地址轉換頁表結構,這就要求在代理模塊加載完成后,修改代理模塊的地址空間頁表屬性,防止其他惡意代碼修篡改代理模塊。
目前,ARM 虛擬化擴展支持的處理有Cortex-A15。三星電子正式發布了Exynos525,Galaxy S4 手機就是基于Cortext A15 的??梢灶A見在不遠的將來,就會有大量基于ARMv7 并支持硬件虛擬化的手機在市場中出現。
本文的實驗是基于ARM FastModel。FastModel 解決嵌入式系統的軟件開發周期可因等待昂貴的開發硬件而產生的延遲。并且加快在完全驗證的系統上開發全功能軟件的速度。它能在功能性上精確地模擬ARM 硬件,但無法精確模擬處理器速度。實驗中用FastModel 對Cortex A15 進行模擬。
本文實驗1 針對Android 系統的rootkit[14]進行測試,在4 個rootkit 中,其中,3 個修改sys_call_table;1 個修改swi 軟件中斷跳轉偏移。上述4 個rootkit 都能被DroidVisor立刻阻止其惡意行為,保護系統調用表和異常向量表不被篡改,實驗結果如圖5 所示。

圖5 DroidVisor 對關鍵內核對象的保護
本文參照Adore-ng 的原理實現了一個基于Android 平臺的內核級rootkit,并加載到Android 的內核空間,該rootkit能完成模塊隱藏和進程隱藏的功能,實驗證明。DroidVisor能及時地檢測到此類威脅。實驗2 為對模塊隱藏的檢測,實驗3 為對進程隱藏的檢測。
實驗2 對DroidVisor 的模塊隱藏檢測功能進行測試,如圖6 所示。圖6(a)中模塊hello 對helloa 模塊進行隱藏。圖6(b)中模塊隱藏時被檢測到。結果顯示,DroidVisor 能快速地覺察到系統中隱藏的模塊。

圖6 隱藏模塊檢測
實驗3 對DroidVisor 的進程隱藏檢測功能進行測試,如圖7 所示。圖7(a)、圖7(b)在無rootkit 檢測的環境中對ping 進程進行隱藏,該進程在后臺繼續運行,使用ps 命令無法查看到被隱藏進程的信息。圖7(c)、圖7(d)中DroidVisor立刻檢測到即將要運行的進程為隱藏的進程。結果證明DroidVisor 有快速地覺察到系統中隱藏進程的功能。

圖7 隱藏進程的檢測
由于FastModel 不能精確地進行處理器性能進行仿真。為了測試DroidVisor 對被監控系統的性能影響,實驗采用與未使用DroidVisor 的系統進程切換時switch_mm 的時間代價進行比較。分別為沒有使用DroidVisor 的性能、使用DroidVisor 但未開啟Rootkit 檢測功能的性能,以及使用DroidVisor 并開啟Rootkit 檢測功能的性能。如圖8 所示,是一次運行過程中,每次進程切換時switch_mm 的時間消耗對比,圖9 是10 次運行進程切換switch_mm 平均的時間消耗的對比。

圖8 每次進程切換switch_mm 的時間消耗

圖9 10 次運行switch_mm 的平均時間消耗
從實驗數據分析得知,在不使用DroidVisor 的rootkit檢測功能時,DroidVisor 對被監控的系統的性能影響很低,平均增加時間為0.000 005 s 以下。使用DroidVisor 的rootkit的檢測功能,對性能的影響開始變大,由于每次執行監測都要遍歷進程和模塊鏈表,因此影響性能的主要因素與進程和模塊的數目有關。對10 次測試結果可以看到,性能影響最壞的時間增量為0.000 09 s。
本文通過分析當前對操作系統內核保護方法,提出一種基于ARM 硬件虛擬化技術的移動操作系統的監控保護方案DroidVisor,主要保護操作系統內核關鍵對象以及檢測rootkit 威脅。實驗結果證明,DroidVisor 能立刻阻止對監控對象的篡改,并且能快速地檢測到系統中的rootkit 威脅。后續工作將繼續研究對系統內核所有關鍵對象的監控,以阻止破壞操作系統完整性的威脅。同時,將減少監控過程對系統性能的影響。
[1] Enck W,Gilbert P.TaintDroid:An Information-flow Tracking System for Realtime Privacy Monitoring on Smartphones[C]//Proceedings of the 9th USENIX Conference on Operating Systems Design and Implementation.[S.1.]:IEEE Press,2010:393-407.
[2] Grace M,Zhou Yajin,Wang Zhi,et al.Systematic Detection of Capability Leaks in Stock Android Smartphones[C]//Proceedings of NDSS’12.[S.1.]:IEEE Press,2012:107-201.
[3] Enck W,Ongtang M,McDaniel P.On Lightweight Mobile Phone Application Certification[C]//Proceedings of ACM Conference on Computer and Communications Security.[S.1.]:ACM Press,2009:235-245.
[4] Nauman M,Khan S,Zhang X.Apex:Extending Android Permission Model and Enforcement with User-defined Runtime Constraints[C]//Proceedings of ACM Conference on Computer and Communication Security.[S.1.]:ACM Press,2010:328-332.
[5] Bugiel S.Towrads Taming Privilege-escalation Attacks on Android[C]//Proceedings of ISC’10.[S.1.]:IEEE Press,2010:346-360.
[6] Shabtai A,Fledel Y,Elovici Y.Security Android-powered Mobile Device Using SELinux[J].IEEE Security &Privacy,2008,8(3):36-44.
[7] NVD.CEV-2007-6562[EB/OL].(2013-04-17).http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2007-6562.
[8] Seshadri A,Luk M,Qu Ning,et al.SecVisor:A Tiny Hypervisor to Provide Lifetime Kernel Code Integrity for Commodity OSes[C]//Proceedings of ACM SOSP’07.[S.1.]:ACM Press,2007:335-350.
[9] 李 珣,黃 皓.一個基于硬件虛擬化的內核完整性監控方法[J].計算機科學,2011,38(12):68-72.
[10]Hwang Joo-Young.Xen on ARM:System Virtualization Using Xen Hypervisor for ARM-based Secure Mobile Phones[C]//Proceedings of the 5th IEEE Consumer Communications and Networking Conference.[S.1.]:IEEE Press,2008:257-261.
[11]Dall C,Nieh J.KVM for ARM[C]//Proceedings of Linux Symposium.[S.1.]:IEEE Press,2010:45-56.
[12]Andrus J,Dall C,Hof A V,et al.Cells:A Virtual Mobile Smartphone Architecture[C]//Proceedings of ACM SOSP’11.[S.1.]:ACM Press,2011:173-187.
[13]Lange M,Liebergeld S.L4 Android:A Generic Operating System Framework for Secure Smartp-hones[C]//Proceedings of SPSM’11.[S.1.]:ACM Press,2011:39-50.
[14]You Dong-Hoon.Android Platform Based Linux Kernel Rootkit[EB/OL].(2013-04-17).http://www.phrack.com/issues.html?issue=68&id=6.