河北工程大學(xué) 曲雙學(xué)
?
基于第三方應(yīng)用平臺的應(yīng)用安全保護機制設(shè)計
河北工程大學(xué) 曲雙學(xué)
【摘要】入侵者會通過破解安全保護機制為第三發(fā)應(yīng)用帶來很大的安全風(fēng)險,使得第三方應(yīng)用存在著很大的漏洞,設(shè)計一種應(yīng)用安全保護機制非常必要。本文從基于第三方應(yīng)用平臺的應(yīng)用安全保護機制的功能出發(fā),對其功能和設(shè)計進行闡述,旨在彌補當(dāng)前安全保護機制的不足。
【關(guān)鍵詞】第三方應(yīng)用平臺;安全保護;功能;設(shè)計
一般而言,基于當(dāng)前存在著諸多應(yīng)用破解的威脅,將功能實現(xiàn)目標(biāo)按照功能實現(xiàn)方式差異進行分離,制定如下功能模塊類型:
1.1 安裝包加固及下載限制
安裝包加工工作在開發(fā)者將應(yīng)用上傳至第三方平臺后進行,該功能性模塊用于實現(xiàn)最為核心的密鑰處理和應(yīng)用加固替換工作。在應(yīng)用獲取方面,用戶僅能夠獲取加固后的安裝包,無法獲取源應(yīng)用包。
1.2 注冊驗證管理
采用注冊保護手段進行付費功能的基本保護,注冊的認證與管理模塊封包在加固后的so庫中,其負責(zé)軟件安裝功能請求驗證以及注冊證書驗證。
1.3 交互數(shù)據(jù)管理
交互數(shù)據(jù)管理主要防范用戶通過數(shù)據(jù)截取改變內(nèi)購等形式功能的反饋信息,通過雙向驗證功能規(guī)避交互數(shù)據(jù)的篡改。
1.4 基于用戶系統(tǒng)層面的檢驗
考慮到應(yīng)用的破解需要進行相應(yīng)的權(quán)限獲取及特殊運行環(huán)境,因此在應(yīng)用運行管理中加入對運行權(quán)限以及系統(tǒng)信息的調(diào)查,主要檢驗root權(quán)限以及模擬器運行兩種狀態(tài),擾亂破解者的破解環(huán)境構(gòu)建并對破解后應(yīng)用的運行環(huán)境進行限制。
2.1 應(yīng)用加固與下載限制管理模塊
應(yīng)用加固與下載限制是本設(shè)計的核心部分,當(dāng)應(yīng)用開發(fā)者上傳應(yīng)用后,加固與下載限制模塊將APK文件包中的密鑰信息進行提取,同時生成appid和簽名證書,保存在應(yīng)用平臺服務(wù)器數(shù)據(jù)庫中,此密鑰證書的保存主要用于備份和后期檢測所用。隨后對應(yīng)用文件進行解包-加固-重封包處理,將開發(fā)者上傳的應(yīng)用包解壓后,提取classex.dex文件,計算HMAC值,用于對應(yīng)用appid以及密鑰信息的加固,加固后寫入so中并重新保存,保存后完成新的的apk包并使用制定簽名證書打包應(yīng)用,至此完成應(yīng)用的平臺端加固工作。
開發(fā)者提供的原始應(yīng)用的密鑰提取與備份。所有APK文件的的密鑰信息都是儲存在assest目錄下的,在平臺系統(tǒng)對應(yīng)用進行安全加固時,解包并提取安裝包中的assets目錄下的密鑰文件,讀取密鑰信息后采用隨機生成的方式產(chǎn)生appid和簽名證書,以上所有信息在讀取和生成后錄入到服務(wù)器端的對應(yīng)數(shù)據(jù)庫,完成原始密鑰信息的備份工作。
完成原始密鑰信息備份后對so進行加固替換。進行文件加固時,首先刪除原有的密鑰信息文件,并平臺安全管理系統(tǒng)生成隨機Hmac密鑰,計算并生成摘要,將兩者和密鑰信息進行保護處理,最終將結(jié)果數(shù)據(jù)以及appid寫入到target.so中。至此,完成apk的第一步加固,加固內(nèi)容為安裝包內(nèi)部安全性文件的加固型替換。
so的替換主要借助linux bash腳本和二進制工具實現(xiàn)。具體的加固功能和實現(xiàn)方法需要借助target.so特有的JNI調(diào)用組件和內(nèi)置的反逆向工程技術(shù)。JNI調(diào)用C(++)動態(tài)鏈接庫,實現(xiàn)代碼間的交互,被上層調(diào)用的JNI接口函數(shù)主要有三個:getappid()用于提取so中的appid,getEncryptedKey()用于解密so中的密鑰信息以獲取原始密鑰,checkRegStatus()用于檢測軟件注冊驗證,檢測目標(biāo)為register文件,該函數(shù)解密register數(shù)據(jù)并于本機和應(yīng)用信息進行對比,由此檢驗是否注冊。
so替換完成后對target.so進行二次加固。這里采用加殼方式對so進行二次處理,再次提升應(yīng)用包內(nèi)部文件的安全性。至此,apk加固工作全部完成。
2.2 注冊碼驗證與管理模塊
當(dāng)應(yīng)用軟件運行時,需要通過調(diào)用開發(fā)者內(nèi)置的getEncryptedKey()方法來獲得密鑰,對程序運行所需的關(guān)鍵信息解密。而此函數(shù)在執(zhí)行過程中會對應(yīng)用的認證狀態(tài)進行檢查,如果在應(yīng)用目錄下未發(fā)現(xiàn)注冊文件(名為register.dat)或注冊文件認證失敗,則提示用戶進行注冊。在應(yīng)用端完成注冊認證的功能由提供給開發(fā)者調(diào)用的register()方法實現(xiàn)。
由手機端應(yīng)用向認證服務(wù)器發(fā)起注冊申請:注冊申請信息中包括應(yīng)用的appid(在軟件加固階段寫入target.so中)、應(yīng)用簽名信息和應(yīng)用所在終端設(shè)備的信息,如imsi、手機配置信息、應(yīng)用簽名信息等。注冊申請信息的格式為“appid+由密鑰加密后的應(yīng)用簽名信息+由密鑰加密后的手機或平板設(shè)備信息”其中應(yīng)用簽名信息和終端設(shè)備信息均使用從target.so獲得的key加密。當(dāng)認證服務(wù)器接收到認證申請后,針對人情信息進行驗證:一首先根據(jù)該aPPid查詢其對應(yīng)的密鑰(key)信息,該密鑰信息在軟件加固階段被保存到服務(wù)器上。然后利用kcy信息對認證申請消息的加密部分進行解密,提取出解密后的應(yīng)用簽名信息和終端設(shè)備信息。最后驗證該應(yīng)用簽名信息是否有效。最后,當(dāng)申請驗證通過后,認證服務(wù)器和手機端應(yīng)用進行支付過程的相關(guān)操作,在支付操作完成以后,認證服務(wù)器記錄該手機終端的相關(guān)注冊信息,并生成一個注冊文件(register.dat),該文件內(nèi)容為使用密鑰信息加密的相關(guān)注冊信息。并將該注冊文件發(fā)送到手機端。這樣,target.so可以通過對此注冊文件的驗證來檢查軟件是否已完成注冊。由于此注冊文件中綁定了手機端的硬件信息并己加密處理,可以避免攻擊者通過拷貝合法用戶的注冊文件來破解應(yīng)用。
2.3 交互數(shù)據(jù)驗證與管理模塊
交互數(shù)據(jù)的修改經(jīng)常發(fā)生在有內(nèi)購功能的應(yīng)用中,此類應(yīng)用為了保證應(yīng)用的收入,同時要保證較為基本的自身安全性,因此會提供內(nèi)購渠道。從國內(nèi)應(yīng)用來看,內(nèi)購渠道無非短信付費、第三方付費兩類。
以內(nèi)購渠道為例,一般內(nèi)購?fù)瓿珊笤诳蛻舳说捏w現(xiàn)分為兩種,一種是通過軟件內(nèi)代幣充值和使用后的增減變化,另一種是通過充值后權(quán)限開放為主。后者本身的實現(xiàn)方法與試用版軟件技術(shù)類似,在通過應(yīng)用加固處理后能夠一定程度上規(guī)避這一問題。前者則還區(qū)分為兩種情況:其一,應(yīng)用本身需要保持與服務(wù)器的實時連接,客戶端與用戶功能相關(guān)的數(shù)據(jù)都是存儲在應(yīng)用服務(wù)器中的。其二,應(yīng)用本身無需與應(yīng)用服務(wù)器實時連接,該情況下應(yīng)用的付費一般由第三方渠道進行,這類付費渠道本身的安全性相對較高。
只有加強交互數(shù)據(jù)的檢驗與管理才能更好的規(guī)避聯(lián)網(wǎng)內(nèi)購的破解,而交互數(shù)據(jù)的校驗和管理主要在于上傳數(shù)據(jù)的管理方面,上傳管理模塊功能相對簡單,當(dāng)應(yīng)用開發(fā)者將應(yīng)用開發(fā)完畢,通過使用開發(fā)者賬號登錄軟件保護系統(tǒng)上傳其開發(fā)的應(yīng)用,在上傳應(yīng)用時,需填寫應(yīng)用本身信息,如應(yīng)用是否收費應(yīng)用簡介等。并不是所有上傳的應(yīng)用都直接可以被加固和供用戶下載,這需要經(jīng)過軟件保護系統(tǒng)管理人員的審核通過后才可以進行。
2.4 應(yīng)用運行環(huán)境檢驗?zāi)K
應(yīng)用運行環(huán)境檢驗?zāi)K的設(shè)計思路為檢驗應(yīng)用運行的系統(tǒng)環(huán)境是否為正常環(huán)境,并能夠調(diào)用系統(tǒng)系統(tǒng)參數(shù)和日志,進行相應(yīng)的分析保護。應(yīng)用環(huán)境的保護針對兩個方面:
其一是模擬器環(huán)境,在這一環(huán)境下運行應(yīng)用的行為很有可能為破解行為,因此環(huán)境檢測在此方面的作用就在于規(guī)避破解者的非法行為。
其二是root權(quán)限檢測。即在模塊中實現(xiàn)對應(yīng)用訪問權(quán)限的檢驗控制,但應(yīng)用的訪問權(quán)限除了自身認證控制,就只有系統(tǒng)自身提供的root權(quán)限可以辨別。
通過該方法,可以首先檢測系統(tǒng)的root權(quán)限是否已被破解,在此基礎(chǔ)上進行相應(yīng)的運行控制,當(dāng)獲取root權(quán)限時應(yīng)用立即停止運行,以此實現(xiàn)對應(yīng)用環(huán)境的監(jiān)控。
該設(shè)計以應(yīng)用組件和平臺服務(wù)協(xié)作的形式進行,應(yīng)用加固時將原始應(yīng)用信息封裝到so中,加固后的應(yīng)用通過調(diào)用動態(tài)鏈接庫運行相應(yīng)功能,從而起到反逆向工程的效果。另外將功能調(diào)用封裝于so中也可以提升反編譯代碼閱讀、修改的難度,同時密鑰和驗證信息的加固封裝也會讓破解者最后的修改封包難以實現(xiàn),由此,防篡改技術(shù)也得到了較好的實現(xiàn)。
參考文獻
[1]曾健平,邵艷潔.Android系統(tǒng)架構(gòu)及應(yīng)用程序丌發(fā)研究[J].微計算機信息,2011(09)﹕23-25.
[2]廖明華;鄭力明;Android安全機制分析與解決方案初探[J].科學(xué)技術(shù)與工程,2011(26)﹕ 28-32.