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