高危預警 | 影響上億用戶的「Janus」漏洞,手把手教你如何防

近期,一個名為「Janus」的安卓高危漏洞被發現,該漏洞允許惡意攻擊者繞過安卓的簽名機制,並將惡意代碼植入到安卓應用程序,從而對APP任意篡改。

一旦你安裝了植入惡意代碼的APP應用程序,不僅會造成你的個人隱私泄露,甚至會導致資金被盜、手機被遠程操控的危害。

目前,安卓5.0到8.0等版本系統均受影響,預計影響過億用戶。

螞蟻金服安全部門的巴斯光年實驗室及時發布了安全預警,並對該漏洞的攻擊原理、產生危害進行了深度解析,並給出了修復建議。

Janus漏洞概述

Janus漏洞,是Google在2017年12月發布的安卓安全公告中披露的,漏洞編號:CVE-2017-13156。

該漏洞存在於安卓系統用於讀取應用程序的簽名機制中。簽名和校驗是安卓系統應用安裝的重要安全機制,只有更新包簽名與APP原始簽名一致的情況下,才會被系統允許安裝。

而利用該漏洞的攻擊者,卻可以在不修改簽名的情況下在任意APP應用程序中植入惡意代碼,替代正版公開下載、更新。

而該漏洞產生的根源就在於:一個文件可以同時是APK文件和DEX文件。由於這種同時為APK文件和DEX文件的二元性,聯想到羅馬的二元之神Janus,將該漏洞命名為:Janus漏洞。

攻擊原理解讀:

安卓應用程序代碼邏輯主要是以DEX文件格式存放。DEX格式標準文檔鏈接:鏈接

此DEX格式文件以文件名classes.dex,classes2.dex等與其他應用程序所需文件一起壓縮存放於APK格式的文件里。APK格式文檔鏈接:鏈接

APK格式文件就是大眾熟知的安卓應用程序安裝包,有它就可以安裝一款應用軟體到手機。問題也就出在安卓操作系統安裝應用程序的流程上。

螞蟻金服安全部門的巴斯光年實驗室成員吳濰浠(@wish_wu)表示,Android操作系統在安裝一個應用軟體時,會將DEX文件轉化成OAT文件,負責轉化任務的程序叫dex2oat 。安卓操作系統會將APK文件直接給dex2oat程序。

而dex2oat有這樣一套邏輯:

如果給它的是APK文件,它會把classes.dex文件從APK文件里取出再轉化成OAT文件。如果給它的是DEX文件,它直接把DEX文件轉化成OAT文件。

如果一個既是APK格式文件又是DEX格式文件的文件,給dex2oat程序會怎樣呢?

以下是程序判斷邏輯:

dex2oat通過IsZipMagic函數和IsDexMagic函數來決定這是什麼格式的文件。

再來看看IsZipMagic函數和IsDexMagic函數的實現:

所以dex2oat程序是依據前文件的前4個位元組決定這是什麼格式文件。然而根據APK格式,前兩個位元組可以不是『P』和『K』,也就是說這裡對APK格式的判斷並不嚴謹。事實上一個既滿足APK格式要求又滿足DEX格式要求的文件是可以構造出來的。

借用漏洞個發現者發布的圖片所示:

原文鏈接:鏈接

這裡我們暫且把這個DEX格式文件與APK格式文件合體之後產生的文件叫做DEXAPK文件。

當DEXAPK文件在被安卓操作系統安裝時,包管理器的代碼會把它當作APK格式文件,而dex2oat會把它當作DEX格式文件。安卓應用程序的簽名驗證是包管理器做的,程序運行載入的OAT文件是由dex2oat根據輸入的DEX格式文件生成的。

攻擊者可以利用Janus漏洞,將一個惡意DEX與源APK進行拼接,構造一個DEXAPK文件,從而既可以通過安裝程序時系統對APK文件的簽名認證,又包含攻擊者想要運行的程序邏輯。Android系統運行時會將當前的APK文件看作是之前應用的合法升級版並允許安裝,最終通過

「升級」植入用戶設備執行惡意DEX代碼。

Janus漏洞的危害:

現實生活中,攻擊者想要利用Janus漏洞實現這種攻擊的話,一般需要引導用戶從手機官方應用市場以外的地方下載並安裝安卓應用程序。且安裝過程中通常不會有安全風險提示,因為簽名驗證是通過的,安卓系統不會懷疑當前APK格式文件的可信度。當然我們也不排除手機官方應用市場也存在會被來源污染、中間人攻擊等手段篡改的可能性。

最直接的影響就是,一旦你安裝了被攻擊者植入惡意DEX代碼的這種APP應用程序,你的信息、密碼、照片、文件、聊天記錄等個人隱私都有可能被實時竊取,甚至會造成賬戶資金被盜取、手機系統被遠程操控的危害。

據了解,安卓對應用程序來源與可信度的審核建立在簽名校驗基礎之上。Janus漏洞可以說是突破了這個安全審核,一旦被不法分子利用,將會影響過億安卓手機用戶。因此,該漏洞也被安全專家們定位為「核彈級別的簽名欺騙漏洞」。

不過,分析顯示,Janus漏洞只針對於安卓5.0-8.0系統下,基於signature scheme V1簽名機制的App,Siginature scheme V2簽名機制的App在安卓7.0及以上版本系統中不受影響。Google最新版的安卓系統已經修復了該漏洞。

螞蟻神盾局&巴斯光年實驗室安全防範提醒:

1、對於安卓用戶來說,

儘可能從手機廠商提供的官方應用市場下載安裝應用程序。

若從網頁下載,請確認是應用開發者官方的網站,並要有https安全標識。

同時,避免安裝未知應用。如果可能,升級安卓操作系統等級至7.0或以上。

2、對於應用開發者

請採用Siginature scheme V2簽名機制對應用進行簽名。安卓官方文檔鏈接:source.android.com/secu 。採用Siginature scheme

V2簽名機制的應用程序在安卓 7.0及以上操作系統中不受Janus漏洞影響。

3、對於手機廠商

請及時更新安卓操作系統安全補丁至2017年12月。且最好升級操作系統版本至7.0及以上,如果更新到最新的8.1更好。

簡單談一下Google對Janus漏洞的修復。

補丁鏈接:鏈接

添加了對ZIP格式文件,也就是APK格式文件的頭部校驗,保證頭部的4位元組確定是LocalFileHeader的Signature,此Signature就是以『P』和『K』開頭,這時候dex2oat就只會把給它的文件當作APK格式文件了。雖然沒有保證其他位置不會被插入數據,留下一點想像空間,但足以解決Janus漏洞了。


想了解支付寶的各種技術、內幕八卦、最新動態?關注「支付寶」知乎機構號:支付寶 - 知乎


推薦閱讀:

TAG:高危漏洞 | 网络安全 | Android |