Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android資訊 >> 黑客是如何遠程攻破你的Android手機的

黑客是如何遠程攻破你的Android手機的

編輯:Android資訊

“你走進一個咖啡店坐下來。等咖啡的時候,你拿出你的智能手機開始玩一款你前些天下載的游戲。接著,你繼續工作並且在電梯裡收郵件。在你不知情下,有攻擊者獲取了公司網絡的地址並且不斷地感染你所有同事的智能手機。

等下, 什麼?

我們在Bromium實驗室博客上不會談論Android太多。但是不時地我們喜歡修修補補。近來,我的同事Thomas Coudray 和我探索了下Android遠程代碼執行的易損性,想弄明白易損性在現實應用中是多大的問題。

盡管權限提升技術在Android上很普遍(並形成了“root”設備的慣例),但遠程代碼執行是一種罕見且危險得多的漏洞。它允許攻擊者不經授權就在用戶設備上執行特定代碼。這個Bug特別另人關注,因為,即使在它被修復後過了18個月,在安裝了所有補丁的最新型的Android設備上仍可被利 用。我們想看看,如果這是真的,利用此漏洞需要付出多少努力。我們發現上述場景完全可能發生。

我們用了兩種不同的方法研究此Bug。首先,我們嘗試在類似公共WIFI的環境中利用它,也就是你可能在咖啡店中遇到到環境。我們啟動了一些 Android設備和廉價的網絡設備,開始攻擊。第二步是估計普通用戶有多大的可能遇到這種最壞的情形。為此,我們使用了統計分析技術,看看有多少有漏洞 的App和設備。

在開始細節之前,先了解一下此Bug的背景知識:

背景知識

它始於2012年的Javascript在addJavascriptInterface API中的遠程代碼執行Bug,CVE-2012-6636(詳情見此處和此處)。此Bug允許Javascript代碼獲得訪問系統的更大權限,這並非開發者的本意。至此,如此糟糕。MWR的研究人員在幾個月後的研究結果顯示有大量App使用了廣告供應商的框架程序,而這些框架程序通常受此Bug影響而且還在運行時下載Javascript代碼。

這些因素結合起來意味著,大量的App采用不安全的方式從互聯網下載Javascript代碼,因此惡意攻擊者劫持下載並發動遠程代碼執行的攻擊並不難。

還沒修復?

Android 4.2修復了這個潛在的javascript漏洞。不幸的是,由於向後兼容的原因,修復只意味著在特定的場景中關閉了漏洞。現實中的Android版本碎 片化和Android上的廣告商業模式意味著這些場景並不常見。我們檢查了Google Play上的100,000個APK文件,發現大約有12%即使運行在最新的Android設備上仍然有漏洞風險。

Breakdown of APKs using addJavascriptInterface()

APK分析結果:一半沒有漏洞風險,因為它們的目標SDK版本大於或等於17;剩下的31%沒有使用存在漏洞的API;7%由於APK混淆或分析出錯而沒有分析。

另外,不管此漏洞是否被修復,超過50%的Android設備仍舊使用著低於4.2的版本。對於這些設備,沒有修復程序,它們依舊存在漏洞風險。

技術點

為了修復成功,調用addJavascriptInterface的程序必須編譯為API 17及以上,也就是說你的目標Android版本必須是4.2及以後的。為了兼容更多的設備,App和框架程序經常用盡可能低的API版本編譯。重點就是 即使運行在打了補丁程序的Android 4.2, 4.3或4.4的設備上,App仍存在漏洞攻擊風險。

廣告商業模式在Android中很流行:也就是App免費,開發者通過向用戶展示廣告而獲得收入。在Android中,有超過50個不同的廣告框架 程序,這使得開發者很容易實現廣告功能,事實上他們經常在App中使用不只一個廣告框架程序。有的App發現使用了20個之多(見此處的圖4)。這些框架程序大都有這種行為——當app第一次運行時,它們通過HTTP下載javascript庫。這也就是說App通常不安全地下載了未驗證的javascript代碼,而這些代碼運行在可執行任意代碼的環境中。

代碼的執行意味著對設備的無限制訪問

迄今為止,這個漏洞僅僅允許一個攻擊者在一個安卓應用環境中去執行代碼。這很糟糕,但是仍然被安卓權限系統限制在單獨的應用中去訪問數據。然而,一 旦一個攻擊者有了一個在系統中的立足點,這就類似於他們可能獲得額外的特權。以futex漏洞為例(CVE-2014-3153),它影響當前使用的每個 Linux內核版本,包括安卓系統以及最近第一次被成功root的Galaxy S5。盡管他們不是等價的,但我們還是應該養成“遠程代碼執行”與“root權限”在嚴重等級上等價的習慣,因為遲早,一個下定決心的黑客將可能從一個地方蹦到另一個地方,獲取設備的完全控制權。

真實世界中的漏洞利用

我們談了如何利用漏洞和漏洞為什麼如此嚴重。現在我們撇開分析,驗證一下漏洞到底有多容易被利用。

五月中旬,我們從Play Store隨機下載了102,189個免費的app,並通過統計分析發現其中的12.8%存在潛在的漏洞風險,正如上圖所示。這些APK同時使用了過低的 目標API版本和addJavascriptInterface API。這些APK調用addJavascriptInterface時的漏洞事實上可以通過中間人攻擊的方式利用,當從互聯網不安全地下載的javascript腳本時可以發起中間人攻擊。

我們會測試通過中間人攻擊劫持非安全的javascript下載,並注入一些javascript腳本來探查addJavascriptInterface漏洞。

測試app的漏洞

我們設置了一個充當透明web代理中間人的wifi無線接入點(AP)。它被設置為對任何接入此AP的設備在通過HTTP請求任何腳本時都注入惡意 代碼。AP設置了密碼,以防有人誤用,但本方法可以用到公開訪問的AP。即使當AP不受控制時,DNS毒化或ARP緩存欺騙等技術也可以用來實現中間人代 理。或者可以安裝一個模仿成合法AP的假AP。也就是說,有各種方法實現中間人代理,使用wifi的任何人都將通過我們的代理訪問網絡。

Man in the middle setup

javascript的動態性意味著我們不需要檢測特定的應用程序或廣告框架程序以作為目標。當運行時,惡意代碼掃描整個javascript命名 空間中的對象,查找不正確地使用了addJavascriptInterface API的對象,然後對每個進行漏洞測試。如果沒有找到漏洞,它就靜悄悄地退出,不影響app的運行。如果成功了,它將運行一個shell命令啟動計算器 app(這是漏洞揭露中的一個傳統,表明你完成了代碼運行——如何你可以啟動計算器,你就證明了可以執行任何代碼)。

注入的 javascript片斷

function findVulnerableObject() { 
   for (var prop in window) { 
       try { 
           // If getClass() doesn’t throw, the object is vulnerable 
           window[prop].getClass(); 
           return window[prop]; 
       } 
       catch(err) { } 
   } 
   return null; 
}

我設置好AP後,從13,119個標明有潛在漏洞的app中隨機選了一些,把它們安裝到接入了AP的一台Nexus 5(運行4.4.3)和一台三星XE700t(運行AOSP 4.2的x86平板)。我們只不過是啟動每個App,做些簡單的交互操作,就成功地在超過半數的應用中觸發了遠程代碼執行,它們加載了通過中間人代理注入 的惡意代碼。

為了好玩,我們把注入到一個app中javascript代碼反復修改,直到顯示Bromium的標志替換了原有廣告。

被擾亂而顯示了Bromium標志的app的UI截屏。

全是廣告惹得禍

通過查看TCP/IP包的軌跡,很快發現廣告框架程序就是聯合使用了addJavascriptInterface和非安全HTTP下載的罪魁禍 首。在我們調查的框架程序中沒有一個使用HTTPS,也就意味著任何使用這些框架程序的app在非安全地下載javascript時也易受到攻擊。以往的 研究顯示有17%的app雖然使用了HTTPS,但用法不當,但這是另一回事了。

我們認真地檢查了一些app,看看使用用了哪些廣告框架。AdMob是用得最多的(通常也是更新最頻繁的),但我們發現用到的大量框架仍然在不安全 地使用addJavascriptInterface。在檢查的app中,有超過80%的非付費app包含了至少一款廣告框架。總體上講,在識別的 2140個app中出現了4190個廣告框架。

問題有多嚴重?

Google在Play Store上公布了所有app的大致下載量。僅就我們手工確認了存在漏洞的小部分用例,就有超過1.5億的下載量。這並不是說就保證會有150,000,000部有漏洞的設備,因為一台設備可能安裝多個不同的有漏洞的應用。但考慮到我們在分析中發現的比例——10%的app有潛在的風險,其中有50%的有風險的app被實地測試可以被攻擊——這就存在非常多有漏洞的設備。

而且,別忘了有57%的Android設備運行在低於4.2的版本上。所以即使明天所有有漏洞的app和框架打上了基於4.2的補丁,仍然有超過一半的Android設備不能修復這個漏洞。

一旦你實現了遠程代碼的執行,結束之前在咖啡店所描述的災難情形,不是什麼大的進步。初始化一個匹配的root權限(不幸的是,相當一部分在安卓平 台上),一個被損害的設備會變成某種中間人,它隨後會進入任何網絡。因此,攻擊開始傳播,舉例來說,在自帶移動設備的世界裡,共同的wifi網絡是那樣地 受歡迎。

合並設備分析器(Device Analyser)的數據

設備分析器(Device Analyser)是另外一個用於統計安卓設備的(數據)來源。其中的一項功能就是它追蹤用戶啟動不同的應用的頻繁程度。他們用足夠地耐心去相互參照潛在缺陷應用的列表上的數據,給出了下面的結果:

每天每用戶打開潛在缺陷應用的平均數量

過去一年左右的時間,設備分析器(Device Analyser)的數據顯示設備的使用者們每天平均打開0.4-0.5個潛在漏洞的應用。或者換言之,平均一周內就有幾次收到(漏洞)攻擊。我們不能假 設應用的版本比我們分析過存在漏洞的版本新,因此,當我們的示例數據已不再是最新版本,與圖形對應也就表現為急劇下降。如果我們對最近的APK版本重新進 行我們的分析,我們很有可能看到它仍在0.4分。DA( 設備分析器: Device Analyser)的數據是一個相當小的樣本,讓它去引導更多地關於安卓設備的結論,在整體上是困難的。

結論

我們發現,通過使用相對簡單的中間人代理技術,無需特定的應用程序或設備可以遠程運行有危害的應用程序,即使 Android設備安裝了完全補丁。使用靜態分析我們發現,相當大比例的應用很可能仍然脆弱,我們證實,通過隨機測試超過一半的應用確實缺乏抵抗力。

因此,我們建議當連接到一個不可信的wi-fi無線網絡時不要使用任何Android應用程序顯示廣告。

我們感謝Evozi提供他們的APK庫,和劍橋大學的設備分析數據。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved