超級(jí)安卓漏洞 “寄生獸”影響數(shù)千萬手機(jī)應(yīng)用
一個(gè)被研究人員命名為寄生獸的安全漏洞影響市面上數(shù)以千萬的APP,包括互聯(lián)網(wǎng)巨頭BAT等廠商的眾多流行移動(dòng)產(chǎn)品。利用該漏洞,攻擊者可以直接在用戶手機(jī)中植入木馬,盜取用戶的短信照片等個(gè)人隱私,盜取銀行、支付
發(fā)現(xiàn)該漏洞的360手機(jī)安全研究團(tuán)隊(duì)VulpeckerTeam向安全牛表示,寄生獸屬于APK緩存代碼劫持漏洞,他們已經(jīng)向補(bǔ)天漏洞響應(yīng)平臺(tái)提交了這個(gè)漏洞。目前補(bǔ)天已經(jīng)將相關(guān)詳情通知給各大廠商的安全響應(yīng)中心(src),請(qǐng)各廠商及時(shí)自查和修復(fù)。
漏洞原理
由于安卓應(yīng)用的升級(jí)都需要重新安裝程序,為了避免頻繁升級(jí)給用戶體驗(yàn)和開發(fā)都帶來了不便,所以現(xiàn)在市面上的app大都使用插件機(jī)制來做到無縫升級(jí)和擴(kuò)展功能,APP只需要引入相應(yīng)的插件文件即可完成升級(jí)。但這種做法卻隱藏了不為人知的安全隱患。
VulpeckerTeam的安全專家黎博解釋,APP插件機(jī)制的實(shí)現(xiàn)方式是把相關(guān)功能編寫成單獨(dú)apk或jar文件,然后在程序運(yùn)行時(shí)用DexClassLoader函數(shù)動(dòng)態(tài)加載,進(jìn)行反射調(diào)用。由于安卓應(yīng)用的代碼緩存機(jī)制會(huì)優(yōu)先加載運(yùn)行APK的緩存代碼odex,因此如果針對(duì)插件的odex文件進(jìn)行攻擊,開發(fā)者對(duì)于插件文件所做的各種保護(hù)都將失效。
安全人員檢測了市面上一些用到插件機(jī)制的主流app,發(fā)現(xiàn)部分app對(duì)DexClassLoader的第一個(gè)參數(shù)的插件文件做了校驗(yàn),在加載前對(duì)要加載的apk或jar做了簽名或者M(jìn)D5等校驗(yàn)。這在一定程度上保護(hù)了插件的完整性,防止了代碼注入攻擊。但是,幾乎沒有廠商對(duì)第二個(gè)參數(shù)的緩存文件進(jìn)行保護(hù),這就導(dǎo)致了新的攻擊點(diǎn)的出現(xiàn)。
經(jīng)過在安卓源碼中的驗(yàn)證,攻擊者需要修改odex文件中的兩個(gè)參數(shù)crc及modWhen以實(shí)現(xiàn)惡意代碼的注入。
上圖dex_old是修改前的odex文件,dex_new是修改后的dex文件。兩個(gè)文件的md5不一樣,但是crc及modWhen卻是一樣的,這樣就可以繞過DexClassLoader的校驗(yàn)。
APK緩存代碼感染雖然危害很大,但是一般情況下,開發(fā)者都會(huì)將odex的緩存目錄選在App的私有目錄下,google官方文檔也提示開發(fā)者,不要將odex的緩存路徑選擇在外部存儲(chǔ)器(SD卡)上。所以,攻擊者如果沒有足夠的權(quán)限是無法替換app私有目錄下的文件的。
在之前安全牛報(bào)道過的三星輸入法漏洞利
用中,攻擊者用到了安卓zip解壓縮的一個(gè)漏洞。可以遍歷目,并在解壓zip文件時(shí)以原app的權(quán)限覆蓋任意文件。如果該app用到了插件機(jī)制,則對(duì)應(yīng)的插件的odex文件也會(huì)被備份。攻擊者可以先用adb backup備份用戶數(shù)據(jù),對(duì)備份下來的odex文件進(jìn)行修改,然后用adb restore恢復(fù)回去,就可以替換掉正常的odex文件,造成代碼劫持。
漏洞危害
安全人員測試了市面上幾款主流的app,凡是用到了這種插件機(jī)制的app,都沒有對(duì)DexClassLoader的第二個(gè)參數(shù)做校驗(yàn),一旦攻擊者將惡意代碼注入APK的緩存代碼(odex)中,開發(fā)者對(duì)apk/jar做的各種保護(hù)都將失效。而且這種攻擊,APK自身很難發(fā)現(xiàn),即使重啟或關(guān)機(jī),只要app一運(yùn)行,惡意代碼就會(huì)隨之運(yùn)行。
為了證明漏洞危害的嚴(yán)重性,安全人員選擇了三類代表性的APP驗(yàn)證漏洞:
輸入法類APP:搜狗輸入法,百度輸入法等
可感染代碼輸出logcat
瀏覽器類APP:UC瀏覽器等
替換支付寶SDK,盜取密碼
通用類SDK:高德地圖SDK,微信SDK等
感染代碼輸出logcat
由于驗(yàn)證漏洞需要花大量精力,因此還需要各大廠商自查并修復(fù)。
解決方案
APK緩存劫持漏洞的核心有兩點(diǎn),一個(gè)是軟件開發(fā)者沒有考慮odex的安全問題,另一個(gè)是沒有對(duì)zip解壓縮時(shí)的惡意文件名做檢測,所以防護(hù)上也應(yīng)該從這方面做考慮。
•odex完整性校驗(yàn)
由于對(duì)odex一般是由系統(tǒng)(DexClassLoader)自動(dòng)生成的,且odex與apk/jar是相對(duì)獨(dú)立的,開發(fā)者事先無法知道odex文件的MD5等信息,所以很難通過MD5校驗(yàn)等手段保護(hù)odex的完整性;同時(shí),系統(tǒng)的DexClassLoader函數(shù)只是校驗(yàn)了odex中的crc、modWhen字段,可以很輕易的被繞過。所以,目前對(duì)odex的防護(hù)只能由app自身來做,可以在每次運(yùn)行DexClassLoader之前,清楚已經(jīng)
存在的odex;另外,在odex第一次生成之后,存儲(chǔ)odex文件的MD5值,以后每次調(diào)用DexClassLoader的時(shí)候都對(duì)odex文件進(jìn)行
MD5校驗(yàn)。
•對(duì)劫持odex的攻擊入口的修復(fù)
對(duì)zip解壓縮的漏洞,只需要在調(diào)用
zipEntry.getName()的時(shí)候,過濾返回值中的"../"跳轉(zhuǎn)符。對(duì)于引用的第三方的zip庫也需要注意,可以用上面的測試用例測試一下第
三方庫是否有zip解壓縮的漏洞;調(diào)用DexClassLoader動(dòng)態(tài)加載dex的時(shí)候,第二個(gè)參數(shù)不要指定在sdcard上;在manifest里指
定allowBackup=”false”。
免責(zé)聲明:本文僅代表作者個(gè)人觀點(diǎn),與本站無關(guān)。其原創(chuàng)性以及文中陳述文字和內(nèi)容未經(jīng)本站證實(shí),對(duì)本文以及其中全部或者部分內(nèi)容、文字的真實(shí)性、完整性、及時(shí)性本站不作任何保證或承諾,請(qǐng)讀者僅作參考,并請(qǐng)自行核實(shí)相關(guān)內(nèi)容。
我要收藏
個(gè)贊
-
網(wǎng)絡(luò)何以可能
2017-02-24網(wǎng)絡(luò) -
計(jì)算機(jī)病毒常用分析方法
2016-05-13 -
國內(nèi)首份汽車信息安全報(bào)告:智能汽車危險(xiǎn)!
-
網(wǎng)絡(luò)何以可能
2017-02-24網(wǎng)絡(luò) -
計(jì)算機(jī)病毒常用分析方法
2016-05-13 -
現(xiàn)代火車漏洞多多 入侵并非難事
-
Windows 10首發(fā) 四大安全提升
-
超級(jí)安卓漏洞 “寄生獸”影響數(shù)千萬手機(jī)應(yīng)用
-
航空公司首出現(xiàn)操作系統(tǒng)被黑
2015-06-23航空公司
-
“企業(yè)應(yīng)急響應(yīng)和反滲透”之真實(shí)案例分析
-
攜程恢復(fù)正常 安全,我們準(zhǔn)備好了嗎?
2015-05-29攜程 -
一張圖讀懂《2014年消費(fèi)者個(gè)人信息網(wǎng)絡(luò)安全報(bào)告》