馬德棚
摘要:在中國(guó),第三方Android應(yīng)用商店眾多。目前Android市場(chǎng)缺乏有效的監(jiān)管以及Android應(yīng)用開(kāi)放的分發(fā)策略,引發(fā)了諸多安全問(wèn)題。文章以Android系統(tǒng)數(shù)字簽名機(jī)制為研究方向,基于靜態(tài)分析的方法,以Android應(yīng)用程序逆向工程為基礎(chǔ),以Android應(yīng)用程序的數(shù)字簽名、運(yùn)行權(quán)限、Dalvik可執(zhí)行文件作為靜態(tài)分析對(duì)比檢測(cè)的依據(jù),設(shè)計(jì)檢測(cè)方法,對(duì)第三方應(yīng)用商店中的APK文件和對(duì)應(yīng)的官方版本的APK文件進(jìn)行差異性檢測(cè)并對(duì)造成各種差異的原因進(jìn)行了詳細(xì)的分析。
關(guān)鍵詞:Android;靜態(tài)分析;差異性檢測(cè);差異性分析
Google允許開(kāi)發(fā)者通過(guò)不同途徑發(fā)布應(yīng)用,開(kāi)發(fā)者可以通過(guò)應(yīng)用商店、個(gè)人網(wǎng)站、企業(yè)網(wǎng)站、郵件等發(fā)布自己開(kāi)發(fā)的APK文件。這意味著Android開(kāi)發(fā)者可以用任何方法自由地分發(fā)其開(kāi)發(fā)的應(yīng)用程序。
Android應(yīng)用開(kāi)發(fā)者可以通過(guò)幾乎所有流行的應(yīng)用商店來(lái)發(fā)布其的APK文件以拓展市場(chǎng),從而帶來(lái)更大的經(jīng)濟(jì)效益。然而,更新APK文件需要更多的相應(yīng)投入,非常消耗精力和時(shí)間。即使APK文件有微小的變化,更新上傳也要在一個(gè)在特定時(shí)間內(nèi)上傳到所有的應(yīng)用商店,實(shí)際中將有一些應(yīng)用商店沒(méi)收到開(kāi)發(fā)者更新的APK文件。即使所有第三方應(yīng)用程序商店不被忽略,但是應(yīng)用商店是否會(huì)偷偷修改上傳的應(yīng)用程序或者其他人是否會(huì)上傳具有相同名稱的應(yīng)用程序,這仍然是值得質(zhì)疑的。
文章在Yi Ying Ng等人的基礎(chǔ)上提出了一種靜態(tài)檢測(cè)方法,優(yōu)化了APK文件之間差異檢測(cè)的流程,提高了檢測(cè)效率,通過(guò)一次檢測(cè)即可統(tǒng)計(jì)出各種差異的數(shù)目以及差異文件的詳情,并分析了各種差異產(chǎn)生的原因。為了進(jìn)行研究,文章使用JAVA語(yǔ)言開(kāi)發(fā)了一個(gè)自動(dòng)化分析工具,當(dāng)應(yīng)用商店中的一個(gè)APK文件下載完成后,使用工具將其和其對(duì)應(yīng)的官方版本進(jìn)行檢測(cè)。最后對(duì)產(chǎn)生差異的原因進(jìn)行了分析。
1 相關(guān)研究
惡意應(yīng)用檢測(cè)。Kirin提出了一個(gè)安全框架,在安裝時(shí)檢測(cè)潛在的不安全的應(yīng)用程序并且對(duì)識(shí)別出的包含不安全策略配置的應(yīng)用進(jìn)行阻止。Virus Meter通過(guò)功耗的監(jiān)控討論了惡意軟件的檢測(cè)。Jiang等人實(shí)現(xiàn)了一個(gè)名為DroidRanger的系統(tǒng)來(lái)了解現(xiàn)有的Android市場(chǎng)的整體健康狀況。為了檢測(cè)官方和非官方市場(chǎng)的惡意軟件,其提出了基于權(quán)限的含有豐富的語(yǔ)義信息的行為足跡。為了發(fā)現(xiàn)惡意應(yīng)用,其依靠一些啟發(fā)法來(lái)區(qū)分潛在的風(fēng)險(xiǎn)。 應(yīng)用商店的可信性分析。Zhen Xie等人分析了蘋(píng)果應(yīng)用商店中的“共謀組”成員的特征,然后依此建立了“共謀組”成員之間的關(guān)系圖,通過(guò)圖聚類檢測(cè)出“共謀組”,然后去除“共謀組”的不真實(shí)的評(píng)分和評(píng)論后估算應(yīng)用商店的可信性。Hengshu 2hu等人開(kāi)發(fā)了一個(gè)檢測(cè)系統(tǒng),通過(guò)檢測(cè)蘋(píng)果應(yīng)用商店里應(yīng)用的排名、評(píng)分和評(píng)論的異常,通過(guò)統(tǒng)計(jì),假設(shè)進(jìn)行了應(yīng)用商店的可信性分析。
2 APK文件差異性檢測(cè)方法設(shè)計(jì)與實(shí)現(xiàn)
靜態(tài)分析(Static Analysis)是指在不運(yùn)行代碼的情況下,采用詞法分析、語(yǔ)法分析等各種技術(shù)手段對(duì)程序文件進(jìn)行掃描從而生成程序的反匯編代碼,然后閱讀反匯編代碼來(lái)掌握程序功能。靜態(tài)分析主要包括差異分析、特征匹配、權(quán)限檢測(cè)、函數(shù)檢測(cè)、類別檢測(cè)等5項(xiàng)內(nèi)容。
本文采取靜態(tài)分析的第2種方法進(jìn)行差異性檢測(cè)。差異性檢測(cè)從易到難有3個(gè)階段:第I個(gè)是對(duì)APK文件的包名稱、版本代碼和SHA256校驗(yàn)值(SHA256是最強(qiáng)的哈希函數(shù),可用于檢查文件的一致性)的檢測(cè)。第2個(gè)是對(duì)包含permission的Android Manifest.xml文件的檢測(cè)。第3個(gè)是對(duì)存放數(shù)字簽名的META-INF文件夾的檢測(cè)。這幾種方法與文獻(xiàn)一致。在此基礎(chǔ)上,采用代碼靜態(tài)分析的方法,對(duì)代碼差異進(jìn)行詳細(xì)分析。
檢測(cè)框架,如圖1所示。
3 實(shí)驗(yàn)結(jié)果分析
3.1 數(shù)據(jù)收集
選取的15個(gè)市場(chǎng)是360手機(jī)助手、安智市場(chǎng)、百度手機(jī)助手、當(dāng)樂(lè)網(wǎng)、機(jī)鋒、安卓市場(chǎng)、應(yīng)用寶、搜狗市場(chǎng)、移動(dòng)應(yīng)用商場(chǎng)、91應(yīng)用市場(chǎng)、應(yīng)用匯、樂(lè)商店、木螞蟻、豌豆莢、小米應(yīng)用商店。從15個(gè)市場(chǎng)中收集了717個(gè)APK文件,收集時(shí)間是2015年12月9日。收集的APK文件在15個(gè)商店里的分布如表1所示。從表1可以看出并不是所有的應(yīng)用商店都能下載下來(lái)選定的50個(gè)熱門(mén)應(yīng)用。因此,可以得出結(jié)論,幾乎沒(méi)有應(yīng)用商店擁有市場(chǎng)上的全套Android應(yīng)用。開(kāi)發(fā)人員可能并不想加入競(jìng)爭(zhēng)對(duì)手的應(yīng)用程序商店發(fā)布其應(yīng)用程序。
3.2 APK文件差異性檢測(cè)結(jié)果分析
檢測(cè)結(jié)果分為九種,包括完全相同、SHA256校驗(yàn)值不匹配、更低版本、更高版本、由于是錯(cuò)誤的返回導(dǎo)致包名稱不匹配、SHA256校驗(yàn)值不匹配但是卻沒(méi)有修改、權(quán)限文件差異、源碼差異、資源相關(guān)文件差異。非資源相關(guān)內(nèi)容的修改包括Android Manifest.xml,classes.dex和lib/文件夾下的內(nèi)容的修改,相比于其他的差異這是屬于比較嚴(yán)重的,因?yàn)樗赡軙?huì)影響應(yīng)用程序的正常功能。資源相關(guān)內(nèi)容的修改包括存儲(chǔ)在res/.assets/文件夾下的文件以及resources.arsc文件內(nèi)容的修改。11.58%的APK文件不是最新版本,用戶可能并不知道APK文件的確切版本。事實(shí)上,下載一個(gè)過(guò)時(shí)的APK文件非常危險(xiǎn),因?yàn)槠渲锌赡苡形幢蛔R(shí)別的漏洞,而這些漏洞在高版本中已經(jīng)得到修復(fù)。應(yīng)用商店中30.96%的APK文件的版本比它們對(duì)應(yīng)的官方APK文件的版本高。這意味著應(yīng)用的更新行為不太一致,并且不可靠,即所有類型的應(yīng)用商店,包括官方網(wǎng)站的版本管理處于一個(gè)比較混亂的狀態(tài)。通過(guò)分析差異性檢測(cè)的結(jié)果,得到如下結(jié)論:
(l)包名稱不匹配:包名稱不匹配的平均百分比為0.28%。一種情況是因?yàn)榫W(wǎng)站標(biāo)示的問(wèn)題,當(dāng)搜索一個(gè)應(yīng)用時(shí),可能會(huì)出現(xiàn)多個(gè)名字一樣的應(yīng)用??此茮](méi)什么差別,但如果選擇了其中的一個(gè),不一定是預(yù)期的那個(gè)。例如,搜索春雨醫(yī)生時(shí),官方包名為me.chunyu.ChunyuDoctor,安智市場(chǎng)應(yīng)用的包名為me.chunyu.ChunyuDoctor HD,是PAD適用的版本,但網(wǎng)站卻沒(méi)有注明。另外一種是可能是因?yàn)?,Android應(yīng)用開(kāi)發(fā)者喜歡在不同的商店對(duì)同一個(gè)APK文件創(chuàng)造不同的包名稱。例如,UC瀏覽器官方包名稱為com.UCMobile在91市場(chǎng)中包名稱為com.UCMobile,ac。
(2) SHA256校驗(yàn)值不匹配:在這個(gè)評(píng)估標(biāo)準(zhǔn)下,大多數(shù)(55.09%)未能通過(guò)。這表明,這些APK文件雖然和官方版本擁有相同的包名稱和版本代碼,但其和官方APK文件是不一樣的。為了找到這些APK文件和官方APK文件之間的差異,需要進(jìn)行APK差異性檢測(cè)。
(3)從APK差異性檢測(cè)分析的結(jié)果來(lái)看,395個(gè)APK文件的SHA256校驗(yàn)值是不匹配的,其中只有325個(gè)APK文件在內(nèi)容上有所不同。70個(gè)文件是零修改的,它們擁有的文件數(shù)量以及每個(gè)文件的SHA-I摘要值和官方版本是完全相同的。這證明,SHA256校驗(yàn)值不匹配并不一定能確定APK文件之間有差異。
(4)為了分析SHA256校驗(yàn)值不匹配卻又是零修改的原因,查看APK文件解壓后的所有目錄,發(fā)現(xiàn)出現(xiàn)這種情況時(shí)META-INF文件夾下多了一個(gè)類似channel xxx或者vendor_xxx的空文件。原來(lái)每當(dāng)發(fā)布新版本時(shí),APK文件會(huì)被分發(fā)到各個(gè)應(yīng)用市場(chǎng)。為了統(tǒng)計(jì)這些市場(chǎng)的效果(活躍數(shù)、下單數(shù)等),需要有一種方法來(lái)唯一標(biāo)識(shí)它們。通過(guò)渠道號(hào)(channel)來(lái)區(qū)分不同的市場(chǎng)。比如,豌豆莢市場(chǎng)中美團(tuán)應(yīng)用的渠道號(hào)是wandoujia,360手機(jī)助手中美團(tuán)應(yīng)用的渠道號(hào)為qihu360。客戶端訪問(wèn)API時(shí)會(huì)在請(qǐng)求參數(shù)中帶上渠道號(hào),以便后臺(tái)接下來(lái)計(jì)算不同渠道的效果。在META-INF目錄內(nèi)添加空文件,可以不用重新簽名應(yīng)用。這樣,每打開(kāi)一個(gè)渠道包只需復(fù)制一個(gè)APK文件,在META-INF中添加一個(gè)使用渠道號(hào)命名的空文件即可。
4 結(jié)語(yǔ)
文章以15個(gè)時(shí)下流行的Android第三方應(yīng)用商店中的50個(gè)具有較高下載率的應(yīng)用為樣本,通過(guò)常見(jiàn)的逆向工程手段,采用靜態(tài)分析方法,采取多個(gè)特征值檢測(cè)方法,綜合幾個(gè)特征值對(duì)比分析結(jié)果,檢測(cè)了這些應(yīng)用與其對(duì)應(yīng)的官方版本之間的差異,提高了正確性,降低了誤報(bào)率和錯(cuò)報(bào)率,并分析了這些差異產(chǎn)生的原因,為進(jìn)一步研究打下了基礎(chǔ)。