楊中皇, 梁善強(qiáng), 詹維驍
(1. 高雄師范大學(xué) 軟件工程與管理學(xué)系,臺(tái)灣 高雄 82444;2. 西安郵電大學(xué) 無線網(wǎng)絡(luò)安全技術(shù)國(guó)家工程實(shí)驗(yàn)室, 陜西 西安 710121; 3. 中國(guó)信息通信研究院, 北京 100191)
Android操作系統(tǒng)具有開源性和可定制性,且兼容性強(qiáng),是最受制造商們歡迎的操作系統(tǒng)之一[1-2]。由于具備攜帶方便、普及范圍廣和存儲(chǔ)容量大的優(yōu)點(diǎn),自攜設(shè)備(bring your own device, BYOD)在企業(yè)的日常辦公中頗受歡迎[3],移動(dòng)辦公已成市場(chǎng)潮流[4]。但是,針對(duì)Android設(shè)備的惡意攻擊也隨之大量增加[5]。企業(yè)為保護(hù)其內(nèi)部數(shù)據(jù)不被竊取和丟失,必須對(duì)移動(dòng)終端設(shè)備進(jìn)行管理[6]。
Google公司從其發(fā)布的Android 2.2開始,向開發(fā)者提供移動(dòng)設(shè)備管理(mobile device management, MDM)接口,以實(shí)現(xiàn)移動(dòng)設(shè)備管理功能[7]。不過,企業(yè)在移動(dòng)設(shè)備管理中面臨著諸多問題:移動(dòng)設(shè)備體積小容易丟失,造成企業(yè)內(nèi)部隱私數(shù)據(jù)容易丟失;員工使用的BYOD自由度必須進(jìn)行控制,防止內(nèi)部員工盜取數(shù)據(jù)[8];移動(dòng)設(shè)備存在惡意軟件,如果訪問企業(yè)內(nèi)部網(wǎng)絡(luò),容易造成惡意攻擊等。
本文將針對(duì)Android 8.0中SELinux系統(tǒng)分區(qū)的變化,分析SEAndroid安全機(jī)制,提出實(shí)現(xiàn)移動(dòng)設(shè)備管理功能的設(shè)計(jì)架構(gòu),并設(shè)計(jì)出一個(gè)支持企業(yè)BYOD的基于SEAndroid的移動(dòng)設(shè)備遠(yuǎn)程管理系統(tǒng)。該系統(tǒng)可實(shí)現(xiàn)對(duì)移動(dòng)設(shè)備功能的遠(yuǎn)程禁止和開啟、應(yīng)用程序SM3 Hash值校驗(yàn)、遠(yuǎn)程權(quán)限管理、推送消息和定制ROM等功能。
安全增強(qiáng)型Linux(security enhanced linux,SELinux)是美國(guó)國(guó)家安全局(National Security Agency, NSA) 支持開發(fā)的開源項(xiàng)目。SELinux安全模型為強(qiáng)制訪問控制(mandatoryaccess control, MAC)[9],它支持默認(rèn)拒絕原則,只有經(jīng)過授權(quán)方可獲得訪問權(quán)限。
從Android 4.4到Android 7.0,Android SELinux通過合并所有的sepolicy(platform和non-platform),在根目錄中生成單一文件,并且大多數(shù)SELinux文件保存在rootfs中。原始設(shè)計(jì)制造商(original design manufacturer, ODM)以及系統(tǒng)芯片(system on chip, SOC)想要修改策略都要修改boot.img或system.img。Android 8.0提出了策略模塊化和策略兼容性的方法,策略開發(fā)人員可以為特定的模塊編寫?yīng)毩⒌牟呗约?,這些策略集會(huì)作為策略模塊被構(gòu)建和分配[10]。模塊化的方法使設(shè)備供應(yīng)商修改部分SELinux策略時(shí),只需修改其對(duì)應(yīng)的分區(qū)。
在Android 8.0中SELinux policy分為平臺(tái)(platform,如system.img)和非平臺(tái)(non-platform,如vendor.img)組件,并允許平臺(tái)/非平臺(tái)策略獨(dú)立更新,同時(shí)保持兼容性。Android 8.0提供的這種平臺(tái)與非平臺(tái)SELinux策略分開的方法,方便供應(yīng)商獨(dú)立構(gòu)建和更新策略。Sepolicy進(jìn)一步分為private和public等,public sepolicy包含system/sepolicy/public下定義的所有內(nèi)容,在public policy下定義的類型和屬性是給定穩(wěn)定應(yīng)用程序編程接口(application programming interface, API),策略開發(fā)者可以編寫特定策略進(jìn)行開發(fā);private sepolicy包括在system/sepolicy/private下定義的所有內(nèi)容,這一部分形成平臺(tái)功能所需的類型、權(quán)限和屬性。SELinux policy存在的位置和功能如表1所示。
表1 policy文件存在位置及內(nèi)容
Sepolicy 文件由多個(gè)源文件組成,具體文件組成如圖1所示。
圖1 sepolicy文件組成來源
在Android 8.0之前,vendor.img,odm.img和oem.img不必須存在,如果不存在,則使用符號(hào)鏈接將屬于這些鏡像的文件放在boot.img或system.img中。Android 8.0發(fā)起了Project Treble項(xiàng)目,這是Android操作系統(tǒng)框架在架構(gòu)方面的一項(xiàng)重大改變,旨在讓制造商以更低的成本更輕松、更快速地將設(shè)備更新到新版Android系統(tǒng),Project Treble提供了一個(gè)穩(wěn)定的新供應(yīng)商接口,供設(shè)備制造商訪問Android代碼中特定于硬件的部分,這樣一來,設(shè)備制造商只需更新Android操作系統(tǒng)框架,即可跳過芯片制造商直接提供新的Android版本。對(duì)于Project Treble,Linux內(nèi)核的長(zhǎng)期支持已經(jīng)從2年延長(zhǎng)到6年,這意味著在設(shè)備的長(zhǎng)期生命周期內(nèi)不會(huì)再錯(cuò)過對(duì)內(nèi)核的主要修復(fù)。Android 8.0 vendor(供應(yīng)商)分區(qū)是強(qiáng)制性存在的,Treble提供的標(biāo)準(zhǔn)化接口來模塊化分區(qū),如圖2所示。
這個(gè)標(biāo)準(zhǔn)接口使得只更新Android Platform(例如,system.img)等而不影響SOC和ODM分區(qū)。例如,可以將設(shè)備system.img從Android 8.0升級(jí)到更高版本,而其他鏡像(例如vendor.img, odm.img等)則保留在Android 8.0。通常在由Google發(fā)布新版本的Android開源項(xiàng)目(android open source project, AOSP)之后,還需要芯片制造廠商對(duì)硬件抽象層(hardware abstraction layer, HAL)進(jìn)行升級(jí),設(shè)備制造商對(duì)HAL和Framework進(jìn)行升級(jí)后,用戶才能在設(shè)備上收到在線下載(over-the-air, OTA)升級(jí)包的推送。這種模塊化可以實(shí)現(xiàn)及時(shí)的Android Platform升級(jí)(如每月安全更新),而無需更新SOC/ODM。另外,Google表示他們正在提升對(duì)硬件安全的支持,比如對(duì)其安全框架進(jìn)行升級(jí),推出Android驗(yàn)證開機(jī)模式2.0(android verified boot 2.0, AVB 2.0)。AVB 2.0會(huì)建立從Bootloader到系統(tǒng)鏡像的信任鏈,主要用于防止系統(tǒng)文件本身被篡改,還包含防止系統(tǒng)回滾的功能,以免有人試圖回滾系統(tǒng)并利用以前的漏洞。Android 8.0系統(tǒng)分區(qū)如圖3所示。
圖2 Android更新模型對(duì)比
圖3 Android 8.0系統(tǒng)分區(qū)
Android傳統(tǒng)的安全模型主要基于應(yīng)用沙箱,每個(gè)應(yīng)用都運(yùn)行在各自的應(yīng)用沙箱內(nèi)[11]。從Android 4.3起,Security Enhancements for Android project項(xiàng)目組將SELinux 修改后集成到了Android中,稱其為SEAndroid[12]。
SEAndroid機(jī)制可有效地防止應(yīng)用程序漏洞與提權(quán)攻擊,其架構(gòu)與運(yùn)作流程如圖4[13]。
圖4 SEAndroid運(yùn)作流程
運(yùn)作過程中Security Policy實(shí)時(shí)允許或拒絕主體對(duì)內(nèi)核客體的訪問,sepolicy文件以二進(jìn)制格式保存于系統(tǒng)之中。策略規(guī)則采用形式allow domains types:classes permissions。其中:Domain為一個(gè)或一組進(jìn)程的標(biāo)簽,Type為一個(gè)對(duì)象(例如,套接字、文件等)或一組對(duì)象的標(biāo)簽,Class為要訪問的對(duì)象(例如,套接字、文件等)的類型,Permission為要執(zhí)行的操作(例如,寫入、讀取等),rule_name有allow、dontaudit、auditallow和neverallow等關(guān)鍵字。
Android 8.0 SELinux上下文標(biāo)簽比較之前的版本發(fā)生了較大變化,file_contexts、property contexts、service contexts、seapp contexts、mac permissions等標(biāo)簽文件都分為了平臺(tái)和非平臺(tái)兩部分,例如,file_contexts分為plat_file_contexts和nonplat_file_contexts,plat_file_contexts標(biāo)記平臺(tái)正常運(yùn)行的供應(yīng)商分區(qū)部分,在init啟動(dòng)時(shí)加載nonplat_file_contexts,nonplat_file_contexts,Boardconfig.mk文件中的BOARD_SEPOLICY_D-IRS指向設(shè)備特定的file_context。
可以使用seinfo工具對(duì)SEAndroid的sepolicy文件進(jìn)行分析,Android 6.0至Android 8.0的sepolicy策略文件分析結(jié)果如表2所示。
表2 Android各版本sepolicy策略文件分析結(jié)果
移動(dòng)設(shè)備管理屬于企業(yè)的管理內(nèi)容,可以實(shí)現(xiàn)移動(dòng)設(shè)備的開發(fā),保護(hù),監(jiān)控,集成和管理功能[14]。MDM的目的是提高移動(dòng)設(shè)備的內(nèi)部安全性[15-16],有效保護(hù)設(shè)備中與企業(yè)隱私有關(guān)的資料,同時(shí)保護(hù)企業(yè)網(wǎng)絡(luò)安全。
AndroidPN(Android Push Notification)是一套針對(duì)Android的開源服務(wù)推送的軟件,主要使用Java Server Pages編寫而成,可以在Tomcat服務(wù)器上運(yùn)行,使用可擴(kuò)展消息與存在協(xié)議(extensible messaging and presence protocol, XMPP)傳輸協(xié)定由服務(wù)端推送消息至客戶端?;赬MPP的推送機(jī)制無需擔(dān)心服務(wù)器在國(guó)外帶來的推送信息延遲且不穩(wěn)定,也不存在使用國(guó)內(nèi)第三方推送平臺(tái)帶來的安全風(fēng)險(xiǎn)。同時(shí)該機(jī)制繼承了可擴(kuò)展標(biāo)記語言(extensible markup language,XML)的優(yōu)點(diǎn),具有很強(qiáng)的擴(kuò)展性,可實(shí)現(xiàn)復(fù)雜通信。服務(wù)端以此軟體為基礎(chǔ),結(jié)合國(guó)家加密算法SM4對(duì)指令和消息進(jìn)行加密處理,并使用SM2生成公私鑰來保證消息的完整性與不可否認(rèn)性。該軟件添加MDM所需的各項(xiàng)功能,將其修改為遠(yuǎn)程管理服務(wù)器,實(shí)現(xiàn)移動(dòng)設(shè)備遠(yuǎn)程管理的功能。
Android安全的遠(yuǎn)程管理系統(tǒng)由客戶端和服務(wù)器兩部分組成,系統(tǒng)架構(gòu)如圖5所示。服務(wù)器包括sepolicy更新、權(quán)限管理、應(yīng)用程序管理、消息推送的功能,客戶端主要由Google提供的Android 8.0源代碼修改并加入客戶端應(yīng)用程序,可以對(duì)系統(tǒng)內(nèi)應(yīng)用行為及權(quán)限風(fēng)險(xiǎn)系數(shù)進(jìn)行監(jiān)控。其運(yùn)作的方式為服務(wù)器發(fā)送命令觸發(fā)客戶端應(yīng)用程序。
(1) sepolicy更新
管理人員通過替換設(shè)備原有的policy文檔以實(shí)現(xiàn)對(duì)設(shè)備相關(guān)功能的控管,依據(jù)不同情況設(shè)定不同的policy文檔,在不重新開啟設(shè)備的狀態(tài)下,提高核心層保護(hù)。
(2) 權(quán)限管理
通過關(guān)閉設(shè)備上應(yīng)用程式權(quán)限,達(dá)到保護(hù)使用者隱私資料的目標(biāo)。
(3) 應(yīng)用程序管理
對(duì)設(shè)備內(nèi)Android應(yīng)用程序包(android application package,APK)進(jìn)行SM3 Hash值計(jì)算并傳達(dá)服務(wù)端,管理者將Hash值與存在服務(wù)器正確的值比對(duì),確認(rèn)APK版本是否錯(cuò)誤或遭到篡改,如果Hash值錯(cuò)誤,可對(duì)APK進(jìn)行遠(yuǎn)程卸載。
(4) 推送消息及定制ROM
管理者可隨時(shí)發(fā)布企業(yè)通知和企業(yè)定制的ROM更新包到指定設(shè)備。
圖5 系統(tǒng)架構(gòu)
本系統(tǒng)服務(wù)器可運(yùn)行在Windows、Ubuntu等支持Java環(huán)境的操作系統(tǒng),搭配推送服務(wù)開源軟件AndroidPN修改而成,詳細(xì)服務(wù)器開發(fā)與測(cè)試環(huán)境如表3所示。客戶端開發(fā)系統(tǒng)為Android 8.0源碼,由Java程語言以及Google Android APIs開發(fā)而成詳細(xì)客戶端開發(fā)和測(cè)試環(huán)境如表4。
表3 服務(wù)器開發(fā)與測(cè)試環(huán)境
表4 客戶端開發(fā)與測(cè)試環(huán)境
功能實(shí)現(xiàn)上,“sepolicy更新”通過替換sepolicy文檔與使用指令達(dá)到修改sepolicy功能,并可以獲得設(shè)備內(nèi)核錯(cuò)誤訊息?!皺?quán)限管理”由Android指令pm(Package Manager)管理應(yīng)用程序權(quán)限?!皯?yīng)用程序管理”通過MessageDigest對(duì)安裝到設(shè)備的APK使用國(guó)產(chǎn)加密算法SM3進(jìn)行Hash值計(jì)算,并將結(jié)果返回到服務(wù)器,與服務(wù)器保存的Hash進(jìn)行比對(duì),結(jié)果相同即為正常APK,結(jié)果出現(xiàn)差異說明APK帶有疑似惡意攻擊,將進(jìn)行遠(yuǎn)程卸載?!巴扑汀笔褂肵MPP傳輸協(xié)定推送消息至客戶端,由AOSP編譯后定制的ROM推送到設(shè)備,設(shè)備進(jìn)行Android系統(tǒng)更新??蛻舳霜?dú)立具有系統(tǒng)應(yīng)用程序監(jiān)控與權(quán)限風(fēng)險(xiǎn)系數(shù)評(píng)估。
3.3.1 客戶端功能
基于企業(yè)MDM管理,將Android 8.0原代碼修改后加入MDM客戶端應(yīng)用程序,將此修改的原代碼編譯成ROM再刷入設(shè)備中??蛻舳藨?yīng)用程序提供與服務(wù)器進(jìn)行通訊連接,主界面如圖6所示,另外,設(shè)備開機(jī)后客戶端即開機(jī)啟動(dòng)??蛻舳诉€具有權(quán)限檢測(cè)和應(yīng)用活動(dòng)監(jiān)控的功能。
圖6 客戶端主界面
點(diǎn)擊應(yīng)用監(jiān)控和權(quán)限檢測(cè)后,功能如圖7、圖8,應(yīng)用監(jiān)控可對(duì)“撥打電話”、“發(fā)送資料”等活動(dòng)進(jìn)行監(jiān)控。權(quán)限檢測(cè)評(píng)估分?jǐn)?shù)若大于7分,風(fēng)險(xiǎn)為高等,小于5分為低等,大于5分小于7分為中等。移動(dòng)終端設(shè)備使用者可對(duì)設(shè)備安全及隱私狀態(tài)進(jìn)行動(dòng)態(tài)了解。
圖7 應(yīng)用活動(dòng)監(jiān)控
圖8 權(quán)限隱私檢測(cè)
3.3.2 服務(wù)端功能
移動(dòng)設(shè)備管理系統(tǒng)服務(wù)器端,在設(shè)備管理界面顯示受服務(wù)器管理的設(shè)備,界面顯示目前設(shè)備名稱、在線狀態(tài)、客戶端IP、以及注冊(cè)日期等。設(shè)備管理界面如圖9所示。
圖9 服務(wù)器設(shè)備管理界面
(1) Sepolicy更新
Sepolicy更新界面,通過替換設(shè)備原有的sepolicy文檔實(shí)現(xiàn)對(duì)設(shè)備相關(guān)功能的管理,點(diǎn)擊選擇設(shè)備后,選擇需禁止或開啟的功能后,點(diǎn)擊更新按鍵即可實(shí)現(xiàn)功能管控。另外,還具有遠(yuǎn)程清除設(shè)備數(shù)據(jù)和遠(yuǎn)程鎖屏,防止設(shè)備丟失后隱私資料外泄。具體功能如圖10所示。
(2) 權(quán)限管理
權(quán)限管理介面顯示可管理應(yīng)用程序過開、關(guān)按鍵,開啟或關(guān)閉所管理設(shè)備上所有第三方應(yīng)用程序指定權(quán)限,點(diǎn)擊詳情,可顯示權(quán)限詳細(xì)信息,如圖11所示。
(3) 應(yīng)用程序管理
應(yīng)用程序管理使用國(guó)產(chǎn)加密算法SM3對(duì)Hash值進(jìn)行計(jì)算,并將結(jié)果返回到服務(wù)器,與服務(wù)器保存的Hash值進(jìn)行比對(duì),當(dāng)Hash值不同時(shí)顯示紅色,可對(duì)應(yīng)用程序進(jìn)行卸載,并重新安裝,如圖12所示。
圖10 sepolicy更新與遠(yuǎn)程清除數(shù)據(jù)界面
圖11 權(quán)限管理界面
圖12 第三方應(yīng)用管理
(4) 推送消息及定制ROM
消息推送功能為AndroidPN原有功能,如圖13所示。在此基礎(chǔ)上進(jìn)行稍微修改,點(diǎn)擊發(fā)送按鍵客戶端即收到消息,此功能無需借助任何第三方消息推送平臺(tái),即可完成消息推送,消息使用國(guó)產(chǎn)加密算法SM4加密。由AOSP編譯后定制的ROM包可推送到客戶端,客戶端可進(jìn)行Android版本的更新。
圖13 推送界面
關(guān)于MDM,文獻(xiàn)[17]的研究目標(biāo)為客戶端能在多種作業(yè)系統(tǒng)(Android、IOS、Windows)中運(yùn)行,文獻(xiàn)[11]的研究目標(biāo)為驗(yàn)證應(yīng)用程序的正確性和客戶端位置信息獲取,本研究關(guān)注的移動(dòng)設(shè)備核心層安全加強(qiáng)機(jī)制,與單一的MDM相比,功能更加完善。因主要研究目標(biāo)不同,在實(shí)現(xiàn)時(shí)有不同功能和系統(tǒng)特色,上述研究中主要功能比較如表5所示。
表5 相關(guān)功能比較
本研究以SELinux為基礎(chǔ),以企業(yè)BYOD策略下移動(dòng)設(shè)備管理為目標(biāo)開發(fā)一套Android核心層與應(yīng)用層移動(dòng)設(shè)備遠(yuǎn)程管理系統(tǒng)。本系統(tǒng)協(xié)助管理人員對(duì)設(shè)備安全問題作出回應(yīng),提升企業(yè)內(nèi)部設(shè)備安全性。主要針對(duì)Android核心層的SEAndroid的security policy及時(shí)更新并進(jìn)行分析,通過此功能可從核心層限制進(jìn)程權(quán)限。應(yīng)用層主要以管理第三方應(yīng)用程序?yàn)橹?,通過APK校驗(yàn)和權(quán)限管控,使應(yīng)用程序使用在盡可能的安全范圍內(nèi),在APK校驗(yàn)失敗后,可提示用戶立即解除應(yīng)用并重新安裝,確保設(shè)備內(nèi)企業(yè)資料不外泄。客戶端和服務(wù)端通信使用國(guó)產(chǎn)密碼算法SM4進(jìn)行加密,并使用SM2生成公私鑰來保證消息的完整性與不可否認(rèn)性,保證數(shù)據(jù)在通信過程的安全性。