吳一鳴
摘要:Android生態(tài)系統(tǒng)未加限制地應(yīng)用安裝權(quán)限存在巨大安全隱患問(wèn)題.對(duì)此提出修改Android系統(tǒng)源代碼,實(shí)現(xiàn)比對(duì)apk格式文件包含的公鑰信息、確認(rèn)文件來(lái)源安裝權(quán)限的安全提升方案。該方案充分滿足Android生態(tài)系統(tǒng)對(duì)惡意代碼防范的信息安全要求。操作系統(tǒng)定制功能更符合業(yè)務(wù)需求,可作為深度定制版本的移動(dòng)智能操作系統(tǒng)。實(shí)踐結(jié)果達(dá)到預(yù)期,未經(jīng)認(rèn)證的應(yīng)用無(wú)法安裝,提升了Android源碼的安全性。
關(guān)鍵詞Android系統(tǒng);惡意代碼;源碼安全
DOI:10.11907/rjdk.201018 開(kāi)放科學(xué)(資源服務(wù))標(biāo)識(shí)碼(OSID):
中圖分類號(hào):TP309文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1672-7800(2020)006-0253-04
0引言
Android生態(tài)系統(tǒng)應(yīng)用安全隱患主要是惡意代碼,根據(jù)《2019年上半年中國(guó)手機(jī)安全狀況報(bào)告》,360互聯(lián)網(wǎng)安全中心共截獲Android平臺(tái)新增惡意程序樣本約92.0萬(wàn)個(gè),平均每天截獲新增手機(jī)惡意程序樣本約0.5萬(wàn)個(gè),平均每天攔截手機(jī)惡意程序攻擊約107.5萬(wàn)次。雖然危害方式及特點(diǎn)各異,但惡意代碼均需以應(yīng)用作為媒介在目標(biāo)終端上運(yùn)行,由此導(dǎo)致各種形式的網(wǎng)絡(luò)安全破壞及非法操作。當(dāng)前Android生態(tài)系統(tǒng)應(yīng)用的安全性提升主要是通過(guò)權(quán)限機(jī)制及惡意代碼檢測(cè)實(shí)現(xiàn)。文獻(xiàn)[2]分析了基于權(quán)限的Android應(yīng)用程序安全性提升;文獻(xiàn)[3]提出一個(gè)通用的惡意軟件檢測(cè)框架,該框架通過(guò)逆向工程從Android應(yīng)用中提?。ò踩珣?yīng)用、受感染應(yīng)用)特征信息并建立關(guān)鍵信息特征庫(kù)。這兩種方法較適合已知存在安全缺陷的應(yīng)用,一旦未在應(yīng)用安裝階段加以限制,則安全隱患會(huì)帶人Android終端。
因此,未加限制的應(yīng)用安裝權(quán)限存在巨大安全隱患,通過(guò)源碼優(yōu)化的Android系統(tǒng)可有效提升Android終端的網(wǎng)絡(luò)安全性,禁止安裝未經(jīng)認(rèn)證的應(yīng)用。本文通過(guò)研究Android源碼,修改、優(yōu)化相應(yīng)功能模塊,實(shí)現(xiàn)比對(duì)apk格式文件包含的公鑰信息,確認(rèn)文件來(lái)源安裝權(quán)限,提升Android源碼的安全性。
1 需求分析
Android生態(tài)系統(tǒng)應(yīng)用惡意代碼的安裝分為兩種方式:①直接方式。因終端安裝權(quán)限未受限制,各類非法應(yīng)用可以隨意安裝;②間接方式。終端被動(dòng)捆綁靜默安裝惡意代碼應(yīng)用,比如采用與其它應(yīng)用打包安裝的方式植入終端。
當(dāng)用戶下載、安裝并運(yùn)行包含惡意代碼的應(yīng)用時(shí),終端便會(huì)遭到攻擊。針對(duì)上述問(wèn)題,本文提出一個(gè)技術(shù)方案,在Android終端禁止未經(jīng)認(rèn)證的應(yīng)用安裝,只有通過(guò)安全模式認(rèn)證的應(yīng)用方能安裝到終端上。該方案杜絕了終端使用者因有意或無(wú)意安裝含有惡意代碼的應(yīng)用,有效提升了Android終端的安全性。
2 技術(shù)原理
Android生態(tài)系統(tǒng)應(yīng)用認(rèn)證模式采取簽名機(jī)制,該機(jī)制確保應(yīng)用apk格式安裝文件的完整性。為實(shí)現(xiàn)完整性確認(rèn),對(duì)apk格式安裝文件要作一個(gè)摘要處理,然后采用密碼學(xué)理論的非對(duì)稱加密,即用私鑰對(duì)摘要內(nèi)容進(jìn)行加密,用公鑰解密。摘要信息經(jīng)此加解密過(guò)程如能對(duì)應(yīng)一致,則表明apk格式安裝文件完整無(wú)篡改。文件簽字機(jī)制可保證apk格式文件在公開(kāi)發(fā)布之時(shí)摘要信息覆蓋的apk格式文件均無(wú)法被篡改。
Android生態(tài)系統(tǒng)應(yīng)用簽名機(jī)制如圖1所示。
簽名機(jī)制另一個(gè)技術(shù)優(yōu)勢(shì)是可利用公鑰具備的驗(yàn)證屬性作為確認(rèn)安裝文件來(lái)源的依據(jù)。本文方案技術(shù)原理:通過(guò)簽名機(jī)制認(rèn)證是否為指定的安裝文件,同時(shí)確保文件完整性,決定該apk格式文件是否具有安裝權(quán)限。
apk格式安裝文件經(jīng)解壓后,可看到一個(gè)META-INFO文件夾。該文件夾實(shí)現(xiàn)簽名機(jī)制,包含MANIFEST.MF、CERT.RSA和CERT.SF文件,這3個(gè)文件定義及功能如下:
(1)MANIFEST.MF:apk格式安裝文件摘要信息。假設(shè)apk格式安裝文件中某個(gè)文件被篡改,當(dāng)應(yīng)用安裝驗(yàn)證時(shí),篡改后的文件摘要信息與MANIFEST.MF的檢驗(yàn)信息不同,則無(wú)安裝權(quán)限。MANIFEST.MF文件的生成方式為遍歷apk格式安裝文件壓縮包含的所有文件,對(duì)非文件夾以及非簽名文件逐個(gè)采用SHA-1算法和BASE64編碼生成摘要信息,這是Android應(yīng)用安裝文件簽名驗(yàn)證過(guò)程的第一步。安裝文件壓縮包含的每個(gè)文件與MANIFEST.MF摘要文件信息要對(duì)應(yīng),修改某個(gè)壓縮包文件內(nèi)容,必須修改MANFEST.MF文件中對(duì)應(yīng)的摘要值。
(2)CERT.SF:MANIFEST.MF摘要信息的簽名文件。這是應(yīng)用安裝文件認(rèn)證過(guò)程的第二步,是對(duì)第一步得到摘要文件的簽名。對(duì)MANIFEST.MF文件本身及文件中的每一條內(nèi)容再次采用SHA-1算法及BASE64編碼后,轉(zhuǎn)換內(nèi)容寫入CERT.SF文件中。CERT.SF文件記錄的簽名信息保證apk格式安裝文件和MANIFEST.MF摘要文件同時(shí)符合完整性要求。
(3)CERT.RSA:保存公鑰、加密算法以及CERT.SF非對(duì)稱密文等信息。Android終端在進(jìn)行驗(yàn)證時(shí),使用公鑰對(duì)不正確的簽名密文進(jìn)行解密,與CERT.SF文件不一致則不能通過(guò)檢驗(yàn)。假設(shè)apk格式安裝文件修改了程序內(nèi)容,新生成的摘要信息能與內(nèi)容對(duì)應(yīng)起來(lái),簽名文件CERT.SF也能與摘要信息文件對(duì)應(yīng),但是由于篡改者沒(méi)有私鑰,因而也不能生成正確的CERT.RSA文件。
META-INFO文件夾各文件關(guān)系如圖2所示。
3 功能實(shí)現(xiàn)
通過(guò)apk格式文件簽名認(rèn)證提升應(yīng)用安全性,主要應(yīng)用于以下3種場(chǎng)景:
(1)第三方認(rèn)證。這種場(chǎng)景適用于殺毒安全軟件或APP Market之類的軟件下載市場(chǎng),由可信賴的第三方應(yīng)用負(fù)責(zé)指定應(yīng)用安全問(wèn)題。第三方收集樣本并置于云端,對(duì)比應(yīng)用安全樣本,聯(lián)網(wǎng)檢查特定應(yīng)用的安全認(rèn)證結(jié)果。該場(chǎng)景缺點(diǎn)是無(wú)法將大量的應(yīng)用簽名數(shù)據(jù)放在移動(dòng)設(shè)備本地,在無(wú)網(wǎng)絡(luò)情況下無(wú)法實(shí)現(xiàn)功能,需要聯(lián)網(wǎng)檢測(cè)。
(2)應(yīng)用自檢測(cè)認(rèn)證。在應(yīng)用運(yùn)行時(shí),自身完成簽名認(rèn)證。授權(quán)的簽名信息可以存放在apk格式文件內(nèi),也可存放于云端。該場(chǎng)景缺點(diǎn)是應(yīng)用一旦被破解自檢測(cè)功能便會(huì)失效。
(3)Android系統(tǒng)對(duì)安裝應(yīng)用進(jìn)行簽名機(jī)制認(rèn)證,指定應(yīng)用安裝權(quán)限,該場(chǎng)景涉及Android系統(tǒng)源碼修改。
綜合比較上述3種場(chǎng)景可知場(chǎng)景(3)最優(yōu),因此本文方案的實(shí)現(xiàn)技術(shù)為修改Android源代碼,通過(guò)比對(duì)apk格式文件包含的公鑰,確認(rèn)文件的安裝權(quán)限。如果來(lái)源在允許安裝權(quán)限范圍內(nèi)就進(jìn)行安裝,反之不予安裝;再由簽名機(jī)制確認(rèn)apk格式安裝文件完整無(wú)篡改,并觸發(fā)之后的安裝流程。本文技術(shù)方案流程如圖3所示。
功能實(shí)現(xiàn)關(guān)鍵代碼如下:
(1)在Android源碼中,新增提取第三方應(yīng)用簽名信息的函數(shù)。
代碼說(shuō)明:通過(guò)傳參"apk安裝文件路徑”至PackageParser類,實(shí)例化pp對(duì)象;pp對(duì)象調(diào)用collectCertificates方法后返回應(yīng)用簽名信息。
代碼說(shuō)明:以“X.509”靜態(tài)模式將CertificateFactory類實(shí)例化為certFactory對(duì)象;通過(guò)傳送簽名信息至certFactory對(duì)象,實(shí)例化cert對(duì)象;cert對(duì)象調(diào)用getPublicKey方法后返回應(yīng)用公鑰信息。這兩個(gè)函數(shù)可以提取第三方應(yīng)用的公鑰。
(2)驗(yàn)證應(yīng)用簽名信息公鑰的安裝權(quán)限。安裝apk格式文件時(shí)調(diào)用自定義函數(shù)showUninstallAPKSignatures()和parseSignature(),驗(yàn)證應(yīng)用簽名信息公鑰的安裝權(quán)限。其中字符串“R.string.install_failed_invalid_signature”是新增的自定義字符串,例如“禁止安裝,簽名不符”。
代碼說(shuō)明:調(diào)用showUninstallAPKSignatures函數(shù)獲取應(yīng)用簽名信息;調(diào)用parseSignature函數(shù)獲取公鑰信息;比對(duì)公鑰,確認(rèn)應(yīng)用的安裝權(quán)限。
4 開(kāi)發(fā)驗(yàn)證
開(kāi)發(fā)驗(yàn)證環(huán)境如表1所示。
對(duì)修改后的Android系統(tǒng)源碼進(jìn)行編譯,在編譯好的Android系統(tǒng)源碼文件夾下命令行輸入“emulator”,運(yùn)行Android模擬器,模擬器啟動(dòng),系統(tǒng)正常,如圖4所示。
通過(guò)命令行adb指令"adb install weixin.apk”,將路徑“~/android-2.3.7r1/out/host/linux-x86/bin/”下“weixin”(微信)應(yīng)用的安裝文件“weixin.apk”安裝至模擬器。
返回安裝狀態(tài)信息“failed install‘weixin.apk:INSTALL_FAILED_INVALID_SIGNATURES',其中返回信息包含在PackageManager類中定義"INSTALL_FAILED_INVALID_SIGNATURES”的字段,模擬器Android終端禁止未經(jīng)認(rèn)證的應(yīng)用app安裝,驗(yàn)證成功,如圖5所示。
5 結(jié)語(yǔ)
本文基于Android系統(tǒng)修改相應(yīng)源代碼,比對(duì)apk格式安裝文件包含的公鑰,確認(rèn)應(yīng)用安裝權(quán)限,對(duì)應(yīng)用層產(chǎn)生規(guī)則性的根本影響。研究成果充分滿足Android生態(tài)系統(tǒng)對(duì)應(yīng)用惡意代碼防范的信息安全要求。后續(xù)與研究Android系統(tǒng)中安全認(rèn)證應(yīng)用的同步機(jī)制,確保安全認(rèn)證應(yīng)用列表及時(shí)更新,有效提升安全防護(hù)的實(shí)時(shí)性。