標籤:android開發 駭客 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裝置上仍然有漏洞風險。
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個之多。這些架構程式大都有這種行為——當app第一次運行時,它們通過HTTP下載javascript庫。這也就是說App通常不安全地下載了未驗證的javascript代碼,而這些代碼運行在可執行任意代碼的環境中。
代碼的執行意味著對裝置的無限制訪問
迄今為止,這個漏洞僅僅允許一個攻擊者在一個安卓應用環境中去執行代碼。這很糟糕,但是仍然被安卓許可權系統限制在單獨的應用中去訪問資料。然而,一旦一個攻擊者有了一個在系統中的立足點,這就類似於他們可能獲得額外的特權。以futex漏洞為例,它影響當前使用的每個Linux核心版本,包括安卓系統以及最近第一次被成功root的Galaxy S5。儘管他們不是等價的,但我們還是應該養成“遠程代碼執行”與“root許可權”在嚴重等級上等價的習慣,因為遲早,一個下定決心的駭客將可能從一個地方蹦到另一個地方,擷取裝置的完全控制權。
真實世界中的漏洞利用
我們談了如何利用漏洞和漏洞為什麼如此嚴重。現在我們撇開分析,驗證一下漏洞到底有多容易被利用。
我們從PlayStore隨機下載了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的任何人都將通過我們的代理訪問網路。
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,做些簡單的互動操作,就成功地在超過半數的應用中觸發了遠程代碼執行,它們載入了通過中間人代理注入的惡意代碼。
全是廣告惹得
通過查看TCP/IP包的軌跡,很快發現廣告架構程式就是聯合使用了addJavascriptInterface和非安全HTTP下載的罪魁禍首。在我們調查的架構程式中沒有一個使用HTTPS,也就意味著任何使用這些架構程式的app在非安全地下載javascript時也易受到攻擊。以往的研究顯示有17%的app雖然使用了HTTPS,但用法不當,但這是另一回事了。
我們認真地檢查了一些app,看看使用用了哪些廣告架構。AdMob是用得最多的(通常也是更新最頻繁的),但我們發現用到的大量架構仍然在不安全 地使用addJavascriptInterface。在檢查的app中,有超過80%的非付費app包含了至少一款廣告架構。總體上講,在識別的 2140個app中出現了4190個廣告架構。
問題有多嚴重?
Google在PlayStore上公布了所有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(裝置分析器:DeviceAnalyser)的資料是一個相當小的樣本,讓它去引導更多地關於安卓裝置的結論,在整體上是困難的。
結論
我們發現,通過使用相對簡單的中間人代理技術,無需特定的應用程式或裝置可以遠程運行有危害的應用程式,即使 Android裝置安裝了完全補丁。使用靜態分析我們發現,相當大比例的應用很可能仍然脆弱,我們證實,通過隨機測試超過一半的應用確實缺乏抵抗力。
因此,我們建議當串連到一個不可信的wi-fi無線網路時不要使用任何Android應用程式顯示廣告。Android App存在的漏洞,是駭客下手的首要目標,因此,要及時用漏洞偵查工具Safe.ijiami去檢測下,並根據漏洞做相應的修複或保護,利用Android App安全保護平台ijiami給App做加密保護,維護自己的切身利益!
駭客是如何遠程攻破你的Android手機的