Bluebox Labs的安全研究人員最近發現一個可以讓惡意應用程式冒用合法程式的漏洞。這漏洞被稱為「FakeID」,跟檢查憑證簽章以證明應用程式合法性有關。這漏洞會被高度關注的原因是所有從版本2.1(「Éclair」)到4.4(「KitKat」)的Android設備都會受到此漏洞影響。
憑證和簽章
Android應用程式在發佈和推出安裝前必須先「簽章」過。簽章應用程式會使用憑證。像HTTP/SSL憑證模式,應用程式憑證是由受信任的憑證機構所發出。該憑證被用來確保應用程式發佈後的完整性,以避免被攻擊者篡改。這些憑證被應用程式用來作為其「包裝簽章」。這些簽章被Android用來識別應用程式。
Android如何去分配這些簽章?對於安裝在設備上的每一個應用程式,會建立一個稱為PackageInfo的類別到應用程式的配置檔案內。PackageInfo包含一個名為「signatures」的屬性,它對應用程式扮演了一個重要的角色。有了相同的簽章,應用程式可以作為另一應用程式的更新程式,或者兩個應用程式可以相互分享它們的資料(如某種形式的共享機制)。在某些特殊情況下,Android可以決定是否要透過比較應用程式有無相同的簽章在其「signatures」屬性以給予應用程式權限,因為簽章寫死在Android的原始碼中。
Bluebox Labs舉出兩個可行的例子。一個是支付相關的應用程式被允許存取行動設備的NFC SE硬體,因為有簽章指定在設備的NFC相關檔案中。另一個是應用程式被允許作為其他應用程式的webview外掛程式(就像是Adobe Flash Plugin),因為應用程式有Adobe系統的簽章。
憑證鏈的漏洞
一旦應用程式被安裝到設備內,Android平台透過利用應用程式的憑證檔案來建立憑證鏈以建立它的PackageInfo簽章。然而,因為這個漏洞,Android不會驗證憑證鏈的真實性。只會依靠簽章者憑證的「Subject」和被簽章憑證的「發行者」間的對應關係。不幸的是,這兩個是明碼字串類型,可以輕易地被惡意人士偽造。
利用該漏洞
因為該漏洞跟應用程式的「真實性」有關,網路犯罪份子可以建立惡意應用程式來存取敏感資料而不引起任何懷疑。舉例來說,NFC的相關支付通常會使用Google電子錢包。如果一個惡意應用程式被授予NFC權限,它可以竊取使用者Google電子錢包的帳號資訊,更換指定的支付帳號並竊取使用者的金錢。
惡意應用程式還可以利用Webkit外掛程式的權力讓它具備關聯的權限和所需的簽章。該應用程式會在每次受害者使用瀏覽器應用程式瀏覽網站或使用其他需要webview元件的應用程式時,作為Webkit外掛程式程序來自動執行。由於惡意軟體是作為瀏覽器(或使用webview的其他應用程式)的元件程序運行,該惡意軟體幾乎可以完全控制應用程式的資料。所有相關的資料,如使用者認證資訊,銀行帳戶和電子郵件詳細內容都可以被存取、外洩或篡改。
大多數Android使用者都受到影響
正如我們前面所說,所有沒有OEM廠商提供修補程式的Android設備都會受到此漏洞影響。從Google目前的資料顯示,受影響平台約佔全部Android設備的82%。這受影響Android使用者的巨大數量也呼應了去年發現master key漏洞時的狀況。
Google已經發表了對此漏洞的修復。然而,Android生態系的碎片化意味著並非所有使用者都能讓其設備得到防護。當有更新可用時,我們建議使用者要立即升級他們的設備。
Google發表聲明指出,他們已經「掃描所有提交到Google Play的應用程式,以及Google所能審查的Google Play以外應用程式,並…沒有看到任何證據顯示有對此漏洞的攻擊。」
為了保護我們的使用者,我們會繼續注意可能會利用此漏洞的威脅和攻擊。利用此漏洞的應用程式會被偵測為ANDROIDOS_FAKEID.A。
@原文出處:The Dangers of the Android FakeID Vulnerability作者:Simon Huang(行動安全工程師)