于炳虎,蹇詩婕,樊子民
(公安部第一研究所,北京 100048)
近年來,移動應(yīng)用安全事件頻發(fā),據(jù)相關(guān)機構(gòu)統(tǒng)計,2021年全球近四分之一的企業(yè)組織均發(fā)生過移動或物聯(lián)網(wǎng)數(shù)據(jù)泄露事件。據(jù)國際安全機構(gòu)Check Point Research(CPR)在2021年4月發(fā)布的《全球威脅指數(shù)》報告顯示,十三款A(yù)ndroid應(yīng)用暴露了包括社交信息、電子郵件、賬戶密碼和圖片照片在內(nèi)的多項個人隱私數(shù)據(jù),受影響用戶數(shù)量多達1億。海量移動應(yīng)用在為用戶提供便利的同時,極大地加劇了數(shù)據(jù)安全風(fēng)險。如何有效防范移動互聯(lián)網(wǎng)存在的安全威脅,已經(jīng)成為當(dāng)前應(yīng)用廠商、研究機構(gòu)和政府相關(guān)部門關(guān)注的重點內(nèi)容。我國網(wǎng)絡(luò)安全等級保護制度2.0系列標準已發(fā)布并實施,針對移動應(yīng)用存在的被篡改、被假冒的問題,標準要求采用校驗技術(shù)保證代碼的完整性,并提出了采用可信計算技術(shù)構(gòu)建主動免疫安全體系的具體要求[1]。相關(guān)組織機構(gòu)應(yīng)根據(jù)國家政策、標準規(guī)范完善移動應(yīng)用安全體系,貫徹落實安全措施,保障移動應(yīng)用市場安全。
為提高移動應(yīng)用的安全防護能力,本文提出了一種基于可信計算的移動應(yīng)用靜態(tài)度量方法。該方法以可信計算主動免疫體系為基礎(chǔ),從應(yīng)用度量角度出發(fā),通過對移動應(yīng)用組成結(jié)構(gòu)、加載運行機制等方面進行研究分析,利用可信度量機制、判定機制和可信基準庫,聯(lián)合完成對宿主基礎(chǔ)軟件系統(tǒng)應(yīng)用的安全防護,保證應(yīng)用運行時的代碼完整性。
目前,針對移動應(yīng)用的安全防護措施主要以應(yīng)用加固技術(shù)手段為主,通過對程序文件加殼加密,防范應(yīng)用被破解、反編譯、調(diào)試、篡改、冒充、二次打包等。除此之外,還有應(yīng)用安全檢測、漏洞掃描、分發(fā)渠道監(jiān)測,以及一些專業(yè)場景下的安全解決方案,如安全SDK、應(yīng)用簽名認證等。但是,以上方式僅在一定程度上滿足了應(yīng)用啟動運行前的安全要求,無法保證應(yīng)用在長期使用過程中的安全性??尚庞嬎阒械亩攘繖C制是解決上述問題的一個主要方法,能夠?qū)崿F(xiàn)對應(yīng)用程序進行靜態(tài)完整性度量,保證應(yīng)用程序的可信啟動。國內(nèi)外基于可信度量機制實現(xiàn)的相關(guān)解決方案,大多應(yīng)用在網(wǎng)絡(luò)系統(tǒng)和服務(wù)端應(yīng)用,缺少針對移動應(yīng)用的度量方案。針對上述問題,本文提出了一種可落地實現(xiàn)的基于移動應(yīng)用的靜態(tài)度量方法。
近年來,可信安全防護技術(shù)不斷迭代升級,從早期的可信計算1.0時代發(fā)展到現(xiàn)在的可信計算3.0時代。防御方式由被動防御轉(zhuǎn)變?yōu)橹鲃用庖?,防護對象由主機、個人計算機,延伸至整個網(wǎng)絡(luò)環(huán)境,應(yīng)用場景擴大至云計算、物聯(lián)網(wǎng)、區(qū)塊鏈,可信計算已覆蓋信息技術(shù)領(lǐng)域的多個方面,并且在跨行業(yè)領(lǐng)域也具有廣闊的應(yīng)用前景??尚庞嬎慵夹g(shù)支撐了計算機網(wǎng)絡(luò)安全防護能力的提升,并且逐步發(fā)展成為網(wǎng)絡(luò)安全領(lǐng)域的主流防護技術(shù)之一[2]。
與此同時,隨著互聯(lián)網(wǎng)技術(shù)的不斷發(fā)展,移動安全已成為網(wǎng)絡(luò)安全領(lǐng)域關(guān)注的重點問題。后疫情時代,智能手機和互聯(lián)網(wǎng)已成為人們工作生活中不可缺少的一部分,遠程辦公的普及使得人們更習(xí)慣使用手機中的各種移動應(yīng)用處理工作,導(dǎo)致敏感信息更容易被不法分子獲取,存在較大安全隱患,安全防護能力亟待加強??尚庞嬎阕鳛樾畔踩I(lǐng)域研究的熱點之一,在移動安全領(lǐng)域中應(yīng)用廣泛、場景豐富,例如移動票據(jù)、移動支付、可信終端等[3]。
移動應(yīng)用的靜態(tài)度量,關(guān)鍵技術(shù)是靜態(tài)度量方法以及針對特定移動操作系統(tǒng)的設(shè)計實現(xiàn)。本文討論的移動應(yīng)用專指以移動終端為載體、運行在移動操作系統(tǒng)之上的應(yīng)用程序。移動操作系統(tǒng)目前主要分為Android系統(tǒng)和iOS系統(tǒng)兩大陣營。近兩年,國產(chǎn)華為鴻蒙系統(tǒng)發(fā)展迅猛,國產(chǎn)操作系統(tǒng)市場占有率逐漸擴大。iOS系統(tǒng)是一個封閉的移動操作系統(tǒng),無法在系統(tǒng)層面進行定制與集成,相比之下,Android與Open Harmony均為開源系統(tǒng),在系統(tǒng)層面可靈活設(shè)計與定制[4]。
本文研究設(shè)計的基于可信計算的移動應(yīng)用靜態(tài)度量方法適用于各類型移動操作系統(tǒng)??紤]到方法的通用性、廣泛性和驗證的可行性,本文以Android系統(tǒng)為基礎(chǔ),進行方法設(shè)計與后續(xù)驗證?;贏ndroid系統(tǒng)的移動應(yīng)用是以Android應(yīng)用程序包(Android Application Package,APK)為文件格式的應(yīng)用程序,其本質(zhì)是壓縮包文件,文件中包含開發(fā)者簽名信息,用于在安裝過程中對開發(fā)主體進行認證,應(yīng)用簽名驗簽機制可作為應(yīng)用合法性認證的原理基礎(chǔ)。應(yīng)用程序的兩項關(guān)鍵流程是安裝與啟動,由操作系統(tǒng)的包管理服務(wù)(Package Manager Service,PMS)和活動管理服務(wù)(Activity Manager Service,AMS)來處理,同時安裝與啟動也屬于可信計算應(yīng)用度量的兩個重要的計算節(jié)點[5]。應(yīng)用安裝流程中系統(tǒng)調(diào)用PMS,應(yīng)用啟動流程中系統(tǒng)調(diào)用AMS。其中,PMS服務(wù)是Android系統(tǒng)的核心服務(wù)之一,主要負責(zé)各種APK的安裝、卸載、優(yōu)化和查詢。AMS服務(wù)主要負責(zé)系統(tǒng)中組件的啟動、切換、調(diào)度及應(yīng)用進程的管理和調(diào)度等工作。
可信計算包括可信根、信任鏈、可信度量和可信報告四部分,要求系統(tǒng)嚴格按照設(shè)計和策略運行??尚哦攘糠譃殪o態(tài)度量和動態(tài)度量,靜態(tài)度量是可信度量的一種重要度量手段。對于移動操作系統(tǒng),靜態(tài)度量包括系統(tǒng)側(cè)靜態(tài)度量和應(yīng)用側(cè)靜態(tài)度量[6]。其中,系統(tǒng)側(cè)靜態(tài)度量是指針對系統(tǒng)鏡像、內(nèi)核驅(qū)動、系統(tǒng)關(guān)鍵服務(wù)進行的完整性檢查和非法性判斷。移動終端處于出廠狀態(tài)第一次引導(dǎo)時或系統(tǒng)鏡像更新后第一次引導(dǎo)時,自動采集生成靜態(tài)可信度量基準值。應(yīng)用側(cè)靜態(tài)度量是在可信白名單的基礎(chǔ)上對應(yīng)用可執(zhí)行文件進行度量檢查,可執(zhí)行程序在可信白名單檢查通過的情況下方可運行,否則運行失敗[7]。度量方法為通過使用可信計算密碼平臺提供的哈希函數(shù)接口,計算度量對象的完整性校驗值,并與基準值進行比較。
可信計算靜態(tài)度量的主要思路:首先確定度量對象,通過合法性校驗后,使用度量算法生成度量對象的基準值,維護可信基準庫。在度量對象啟動運行前,獲取所述度量對象的度量值,對比所述度量對象的度量值和基準值。最后根據(jù)判斷機制,判定所述度量對象的可信性,決定是否啟用度量對象。以上思路是本文所述方法的主要依據(jù)。
移動應(yīng)用靜態(tài)度量的總體架構(gòu)包括兩條業(yè)務(wù)主線和兩個組件服務(wù),所有處理邏輯都在系統(tǒng)的框架層運行。兩條主線即應(yīng)用的安裝與啟動,貫穿系統(tǒng)的PMS服務(wù)和AMS服務(wù)。兩個組件服務(wù)即應(yīng)用認證服務(wù)和靜態(tài)度量服務(wù),其中認證服務(wù)主要用于驗證應(yīng)用的合法性,此服務(wù)可參考應(yīng)用簽名驗簽機制來設(shè)計實現(xiàn),可定制化較高,通過認證服務(wù)后可根據(jù)應(yīng)用信息計算生成基準值。靜態(tài)度量服務(wù)主要用于計算應(yīng)用度量值,根據(jù)判定機制,結(jié)合可信基準庫,決定應(yīng)用是否能夠啟動運行。
總體架構(gòu)流程如圖1所示,本文將從應(yīng)用的安裝、啟動、更新和卸載四個使用場景詳細介紹處理流程。
圖1 總體架構(gòu)流程圖
應(yīng)用APK程序包下載至移動終端后,系統(tǒng)加載應(yīng)用文件,執(zhí)行PMS服務(wù)安裝程序。首先PMS調(diào)用應(yīng)用認證服務(wù)對APK文件進行合法性認證,認證通過后在可信基準庫中創(chuàng)建應(yīng)用初始化信息,然后繼續(xù)執(zhí)行系統(tǒng)的安裝流程。安裝完成后,立即使用可信度量算法模塊生成應(yīng)用程序可執(zhí)行文件的基準值,覆蓋存儲上步生成的應(yīng)用初始化信息。
應(yīng)用啟動運行時,系統(tǒng)執(zhí)行AMS服務(wù)流程,首先使用可信度量算法模塊計算應(yīng)用可執(zhí)行文件的度量值,在可信基準庫中查找此應(yīng)用的基準值,并根據(jù)判定機制,將度量值與基準值進行對比校驗。通過校驗后即可啟動應(yīng)用,如果判定失敗,則禁止啟動應(yīng)用,并給出相應(yīng)安全風(fēng)險提示。最后將度量計算結(jié)果等信息保存至可信記錄文件,供后續(xù)審計使用。
更新應(yīng)用程序包,步驟與應(yīng)用安裝流程相同。系統(tǒng)加載文件,執(zhí)行PMS服務(wù)安裝程序,對APK文件進行合法性認證,通過認證后進行覆蓋安裝,并重新生成基準值,覆蓋可信基準庫中此應(yīng)用的初始基準值。
卸載應(yīng)用程序,系統(tǒng)調(diào)用PMS服務(wù),執(zhí)行卸載流程,并刪除可信基準庫中此應(yīng)用的基準值,同時刪除可信記錄列表中此應(yīng)用的數(shù)據(jù)。
根據(jù)安裝使用分類,移動應(yīng)用一般分為內(nèi)置應(yīng)用、預(yù)裝應(yīng)用和三方應(yīng)用。其中,內(nèi)置應(yīng)用是終端系統(tǒng)自帶的應(yīng)用,以手機移動操作系統(tǒng)為例,內(nèi)置應(yīng)用包括電話、短信、聯(lián)系人、藍牙等系統(tǒng)基礎(chǔ)功能應(yīng)用;預(yù)裝應(yīng)用是第三方軟件商通過刷機渠道強制裝入的軟件,或者是一些定制需求中預(yù)裝的應(yīng)用;三方應(yīng)用是用戶通過應(yīng)用市場安裝或其他途徑安裝至終端的應(yīng)用。參與度量的應(yīng)用范圍如圖2所示[8]。
圖2 參與度量的應(yīng)用范圍
內(nèi)置應(yīng)用是用戶使用頻率較高的一類應(yīng)用,提供了系統(tǒng)的基礎(chǔ)性功能。啟動速度和使用體驗是用戶優(yōu)先考慮的兩大因素。在可信度量過程中,文件加載、度量值計算和校驗占用了一定時間,因此會影響應(yīng)用的啟動速度。并且內(nèi)置應(yīng)用要求權(quán)限高,需要系統(tǒng)簽名才能安裝更新,程序中不包含三方組件和邏輯,風(fēng)險較低,因此內(nèi)置應(yīng)用不在度量的應(yīng)用范圍內(nèi)。預(yù)裝應(yīng)用和三方應(yīng)用涉及第三方軟件廠商的干預(yù),因此必須參與度量校驗,屬于需參與度量的應(yīng)用。
經(jīng)對Android系統(tǒng)分析驗證,三方應(yīng)用安裝完成后可在系統(tǒng)/data/app/[package]目錄下找到相關(guān)安裝文件,通常包括三類文件,如圖3所示,包括base.apk文件、lib目錄文件和oat目錄文件。其中base.apk文件是安裝程序包的鏡像文件;lib目錄下是應(yīng)用的動態(tài)庫文件;oat目錄下是應(yīng)用的可執(zhí)行字節(jié)碼文件,在混合編譯模式下會生成dex、odex、vdex等文件[9]。
圖3 應(yīng)用中參與度量的文件范圍
oat目錄下主要存放經(jīng)過優(yōu)化的可執(zhí)行字節(jié)碼文件,Android 7.0版本后采用混合編譯的模式,應(yīng)用程序直接安裝,不再預(yù)先編譯,但系統(tǒng)會在空置或充電等狀態(tài)下對部分熱點代碼進行編譯,編譯后的熱點代碼不再進行重復(fù)編譯。應(yīng)用再次運行時,如本地有相關(guān)機器碼,將直接運行。熱點代碼信息維護在應(yīng)用所屬的一個屬性文件中,隨著應(yīng)用使用情況的變化而變化,因此oat下的可執(zhí)行文件會隨著熱點代碼信息而改變。靜態(tài)度量的原理是對不發(fā)生改變的靜態(tài)文件進行度量與計算,因此oat目錄下的文件不參與度量[9]。
base.apk文件可理解為應(yīng)用程序在系統(tǒng)中的鏡像文件,如果應(yīng)用未在后臺運行,每次啟動應(yīng)用時系統(tǒng)會加載此文件,解析出相關(guān)資源文件,若此時可執(zhí)行字節(jié)碼文件不存在,將根據(jù)系統(tǒng)編譯機制生成相關(guān)文件,base.apk文件在系統(tǒng)中的狀態(tài)和屬性會保持不變,并提供了應(yīng)用程序運行所需的完整資源,因此base.apk文件需要參與度量[10]。
lib目錄下包含了應(yīng)用所需的動態(tài)庫文件,此類文件通常包含應(yīng)用的主要功能邏輯,動態(tài)庫文件的狀態(tài)和屬性都是靜態(tài)不變的,一旦發(fā)生變化即表明應(yīng)用程序被惡意篡改,因此lib目錄下的所有動態(tài)庫文件都需要參與度量[11]。
可信靜態(tài)度量的機制是度量值與基準值進行對比校驗。應(yīng)用安裝完成后生成基準值,每次啟動應(yīng)用時計算其度量值,通過對二者進行對比校驗,判斷應(yīng)用是否合法。基準值通過合法性認證后生成,其中,合法性認證可根據(jù)行業(yè)需求定制不同的方案,例如可利用簽名驗簽機制保證應(yīng)用的完整性和來源的合法性。
本節(jié)將通過程序?qū)嵗炞C上述方法的可行性。在實驗環(huán)境的準備上,以通用主流、具有代表性為主要依據(jù)。實驗樣機采用手機型智能終端,規(guī)格參數(shù)屬行業(yè)中上水平,樣機系統(tǒng)應(yīng)獲得超級管理員權(quán)限,實驗中選用了2款A(yù)ndroid系統(tǒng)測試樣機,樣機的基本設(shè)備信息如表1和表2所示,后續(xù)測試數(shù)據(jù)截圖以樣機1為代表進行展示,樣機2的測試數(shù)據(jù)做補充描述。
表1 樣機1基本信息表
表2 樣機2基本信息表
實驗應(yīng)用樣例選用百度地圖開發(fā)者平臺提供的Android版本樣例應(yīng)用,此應(yīng)用為提供給廣大開發(fā)者參考使用的樣例,具有廣泛使用性,應(yīng)用基本信息如表3所示。
表3 應(yīng)用基本信息表
首先將應(yīng)用安裝至實驗樣機,安裝過程調(diào)用應(yīng)用認證服務(wù),通過合法性驗證,生成應(yīng)用的基準值。在實驗環(huán)境下查看可信基準庫文件,此處為方便查看結(jié)果,基準庫以加密文件的方式進行演示,如圖4所示。對數(shù)據(jù)進行加密處理,以“KEY=VALUE”格式存儲每條應(yīng)用的數(shù)據(jù),其中,“=”為分割標識,“KEY”為應(yīng)用標識(可使用包名等信息作為唯一標識),“VALUE”為應(yīng)用的基準值。
圖4 可信基準庫文件
在未對應(yīng)用進行任何篡改處理的情況下正常啟動應(yīng)用,查看可信記錄文件,日志數(shù)據(jù)如圖5所示,若應(yīng)用度量結(jié)果返回值為true,則允許應(yīng)用啟動運行,符合預(yù)期。
圖5 日志數(shù)據(jù)
由表3可見,此樣例程序的安裝文件總計7個,按照度量文件范圍分析的結(jié)論,排除oat目錄下的2個可執(zhí)行文件,此應(yīng)用參與度量的文件包含以下5項,如表4所示。
表4 度量文件列表
樣例應(yīng)用共包含5個參與靜態(tài)度量的文件,可對任意文件進行篡改,方式包括修改文件、刪除文件和增加文件等,均可達到篡改應(yīng)用的目的。篡改方法中使用了Android調(diào)試橋工具(Android Debug Bridge,adb),此工具和命令可對Android系統(tǒng)下的文件進行操作。
(1)修改文件:首先使用adb pull命令將base.apk文件拉出,使用編輯工具打開文件,在文件任意位置插入非法字符,使用adb push命令將修改后的base.apk文件推入至原目錄下,覆蓋原始文件,完成上述操作后啟動應(yīng)用查看結(jié)果。
(2)刪除文件:以超級管理員權(quán)限進入lib目錄,執(zhí)行刪除命令,將動態(tài)庫liblocSDK8b.so刪除,完成上述操作后啟動應(yīng)用查看結(jié)果。
(3)增加文件:準備一個非法動態(tài)庫文件libtesterror.so,使用命令adb push,將此非法文件推入至lib目錄下,完成上述操作后啟動應(yīng)用查看結(jié)果[12]。
以上三種篡改方式執(zhí)行后,樣機1的度量結(jié)果如圖6所示。三種篡改方式的度量結(jié)果返回值均為false,表示禁止應(yīng)用啟動,樣機1的實驗結(jié)果符合預(yù)期。
圖6 篡改應(yīng)用后度量結(jié)果
經(jīng)驗證,樣機2在相同的實驗步驟下,實驗結(jié)果同樣符合預(yù)期,僅在度量處理耗時上略有差異。綜上結(jié)果證明,所提方法能夠有效阻止攻擊者對移動應(yīng)用進行篡改,保證了應(yīng)用在使用過程中的合法性和完整性。
基于可信計算的移動應(yīng)用靜態(tài)度量方法的性能瓶頸是度量算法。在上節(jié)實驗中,樣例應(yīng)用大小為93.4 MB,樣機處理器參數(shù)屬主流水平。由測試結(jié)果數(shù)據(jù)可見,度量計算時間在3 s以上,在后續(xù)的測試中發(fā)現(xiàn),隨著應(yīng)用文件大小的增加,度量時間也會等比例增長。對于使用者而言,在應(yīng)用高頻的使用和切換過程中,啟動一個應(yīng)用的等待時間需要3 s,非常影響用戶體驗。同時,近年來,隨著終端存儲配置的大幅提升,各類應(yīng)用文件大小也成指數(shù)級增長,尤其游戲類應(yīng)用,通常大小都在500 MB以上,參照上述結(jié)論推算,度量時間可能需要15 s以上,這將極大地影響用戶體驗,通常用戶難以接受。除此之外,Android系統(tǒng)中單個虛擬機內(nèi)存大小默認為256 MB[13],受此限制,度量計算過程中,如果應(yīng)用程序文件過大,超過虛擬機內(nèi)存上限,就會造成系統(tǒng)服務(wù)異常崩潰。針對以上兩個問題,優(yōu)化度量算法是解決問題的關(guān)鍵,本文提出了一種較為獨特的文件度量算法。
下面對未經(jīng)優(yōu)化的原始度量算法和優(yōu)化后的度量算法進行對比說明。未經(jīng)優(yōu)化的原始度量算法如圖7所示,一次性將應(yīng)用文件全部讀取至虛擬機中處理,虛擬機中啟用一個線程執(zhí)行計算操作,輸出結(jié)果。在此處理過程中,如果應(yīng)用文件大小超過虛擬機內(nèi)存上限,勢必會導(dǎo)致內(nèi)存溢出,并且由于是單線程執(zhí)行,效率低,計算耗時[14]。
圖7 原始度量算法
優(yōu)化后的度量算法如圖8所示,借鑒分治算法思想,將文件分塊分組處理。虛擬機中每次讀入1個分組,利用線程池,在計算單元并發(fā)計算多個分塊,并按照后續(xù)順序執(zhí)行其他分組,合入最終結(jié)果。
圖8 優(yōu)化后的度量算法
優(yōu)化后的度量算法能夠有效解決內(nèi)存溢出和計算耗時的問題,合理設(shè)置計算資源,合理劃分文件分塊分組大小[15],進一步提升了計算效率。
采用上述優(yōu)化算法后的度量結(jié)果,樣機1的數(shù)據(jù)如圖9所示,對于相同的樣例應(yīng)用,優(yōu)化后的度量算法所需度量計算時間為0.107 s,相較于未經(jīng)優(yōu)化的原始度量算法所需的3 s度量計算時間,性能提升了96.433%,相同實驗步驟下,樣機2性能提升了95.965%,綜上分析可見,優(yōu)化后的度量算法效果顯著。
圖9 優(yōu)化后算法度量時間
本文基于可信計算靜態(tài)度量實現(xiàn)思路,研究設(shè)計了一種針對移動應(yīng)用的靜態(tài)度量方法,通過設(shè)計應(yīng)用度量流程與架構(gòu),分析應(yīng)用和文件的度量范圍,優(yōu)化度量算法,結(jié)合實驗測試,驗證所提方法的可行性與正確性。所提方法流程清晰,實現(xiàn)簡單,理論基礎(chǔ)同樣適用于其他類型的移動操作系統(tǒng),應(yīng)用范圍較廣,可落地性極強,從一定意義上來看,填補了當(dāng)前移動安全領(lǐng)域應(yīng)用靜態(tài)度量實現(xiàn)方案的空白,解決了移動應(yīng)用在長期使用過程中存在的安全機制缺失的問題。
隨著國內(nèi)移動終端定制化安全需求的激增,以及等保、可信計算相關(guān)行業(yè)標準的落地與實施,尤其是對政企等一些重要行業(yè)和領(lǐng)域,本文所提方法具有一定的指導(dǎo)意義,能夠為移動應(yīng)用安全領(lǐng)域的相關(guān)工作提供建設(shè)性參考。