第七章 不太知名的 Android 漏洞
作者:Aditya Gupta
譯者:飛龍
協(xié)議:CC BY-NC-SA 4.0
在本章中,我們將了解一些不太知名的 Android 攻擊向量,這在 Android 滲透測試中可能很有用。 我們還將涵蓋一些主題,如 Android 廣告庫中的漏洞和WebView實現(xiàn)中的漏洞。 作為滲透測試者,本章將幫助你以更有效的方式審計 Android 應用程序,并發(fā)現(xiàn)一些不常見的缺陷。
7.1 Android WebView 漏洞
WebView是一種 Android 視圖,用于在應用程序中顯示 Web 內容。 它使用 WebKit 渲染引擎,以便使用file//和data//協(xié)議顯示網頁和其他內容,可以用于從文件系統(tǒng)加載文件和數(shù)據內容。WebView也用于各種 Android 應用程序,例如提供注冊和登錄功能的應用程序。它通過在應用程序的布局中構建其移動網站,來顯示應用程序中的 Web 內容。 我們將在下一章中進一步討論 WebKit 及其渲染引擎。 對于本章,我們將只關心使用 WebKit 的那些應用程序。
在應用中使用 WebView
在應用程序中使用WebView非常簡單和直接。 假設我們希望我們的整個活動都是一個WebView組件,從http://examplewebsite.com加載內容。
下面是在 Android 應用程序中實現(xiàn)WebView的代碼示例:
WebView webview = new WebView(this);
setContentView(webview);
webview.loadUrl("http://vulnerable-website.com");
另一個重要的事情是,大多數(shù)開發(fā)人員最終為了增強應用程序的功能,在WebView實現(xiàn)中使用以下命令啟用 JavaScript(默認設置為False):
setJavascriptEnabled(true);
前面的命令確保 JavaScript 可以在應用程序中執(zhí)行,并利用注冊界面。
識別漏洞
想象一下這種情況,應用程序在不安全的網絡中使用,允許攻擊者執(zhí)行中間人攻擊(更多中間人攻擊的內容請參見 OWASP 網站https//www.owasp.org/index.php/Man-in-the-middle_attack)。 如果攻擊者可以訪問網絡,則他們可以修改請求和對設備的響應。 這表示他們能夠修改響應數(shù)據,并且如果從網站加載 JavaScript 內容,則可以完全控制 JavaScript 內容。
事實上,通過使用它,攻擊者甚至可以使用 JavaScript 來調用手機上的某些方法,例如向另一個號碼發(fā)送短信,撥打電話,甚至使用諸如 Drozer 之類的工具獲取遠程 shell。
讓我們舉個簡單的例子,來說明WebView漏洞的可能性。 在這里,我們將使用 Joshua Drake 的 GitHub 倉庫(https://github.com/jduck/VulnWebView/)中的,由他創(chuàng)建的概念證明。 這個 POC 在應用程序中使用WebView,來簡單加載一個 URL 并且加載一個位于http://droidsec.org/addjsif.html的網頁(如果這個鏈接打不開,你可以訪問http//attify.com/lpfa/addjsif.html)。
以下是 Eclipse 中代碼示例的屏幕截圖,其中使用名稱 Android 創(chuàng)建 JavaScript 界面:

我們還可以從源代碼中創(chuàng)建apk文件,只需右鍵單擊項目,然后選擇Export as an Android Application(導出為 Android 應用程序)。 一旦我們運行應用程序并監(jiān)聽 Burp 代理中的流量,我們將看到應用程序中指定的 URL 的請求,如以下屏幕截圖所示:

現(xiàn)在,當響應來自服務器時,我們可以修改響應數(shù)據并使用它來利用此漏洞,如以下屏幕所示

讓我們假設攻擊者需要利用這個漏洞應用程序,來使用受害者的設備向一個號碼發(fā)送短信。 以下屏幕截圖顯示了修改后的響應的樣子:

一旦我們點擊Forward(轉發(fā))按鈕,郵件將從受害者的設備發(fā)送到攻擊者指定的號碼。
上述內容簡單地調用SMSManager(),以便將包含文本pwned的 SMS 發(fā)送到的預定義號碼。
這是一個利用存在漏洞的WebView應用程序的簡單示例。 事實上,你可以嘗試調用不同的方法或使用 Drozer 從設備獲取遠程 shell。 你還可以訪問https://labs.mwrinfosecurity.com/blog/2013/09/24/webview-addjavascriptinterface-remote-code-execution/閱讀通過 Drozer 利用WebView的更多信息。
7.2 感染合法 APK
由于 Google 的不嚴格政策,將應用上傳到 Play 商店時,許多開發(fā)人員上傳了惡意應用和軟件,目的是從使用者的裝置竊取私人資料。 Google Play 中存在的大多數(shù)惡意軟件只是合法應用程序的受感染版本。惡意軟件作者只需要一個真正的應用程序,反編譯它,插入自己的惡意組件,然后重新編譯它,以便分發(fā)到應用商店和感染用戶。這可能聽起來很復雜,但實際上,這是一個非常簡單的事情。
讓我們嘗試分析惡意軟件作者如何修改合法應用程序,來創(chuàng)建它的受感染版本。執(zhí)行此操作的最簡單的方法之一是編寫一個簡單的惡意應用程序,并將其所有惡意活動放在服務中。此外,我們在AndroidManifest.xml文件中添加廣播接收器,以便指定的事件(例如接收 SMS)能夠觸發(fā)我們的服務。
因此,以下是創(chuàng)建受感染版本的合法應用程序的簡單步驟:
-
使用
apktool解壓縮應用程序,如下所示:apktool d [appname].apk 反編譯惡意應用程序來生成 Java 類的 smali 文件。 在這里,我們需要將所有的惡意活動放在服務中。 此外,如果你有 smali 語言的經驗,你可以直接從 smali 本身創(chuàng)建服務。 假設惡意服務的名稱是
malware.smali。-
接下來,我們需要將
malware.smali文件復制到 smali 文件夾,它位于我們反編譯的合法應用程序的文件夾中 。
我們把malware.smali中的軟件包名稱的所有引用更改為合法應用程序的軟件包名稱,并在AndroidManifest.xml中注冊服務。在這里,我們需要在
AndroidManifest.xml文件中添加另一行,如下所示:<service droid:name = "malware.java"/> -
此外,我們需要注冊一個廣播接收器來觸發(fā)服務。 在這種情況下,我們選擇短信作為觸發(fā)器,如下面的代碼所示:
<receiver android:name="com.legitimate.application.service"> <intent-filter> <action android:name="android.provider.Telephony.SMS_RECEIVED" /> </intent-filter> </receiver> -
使用
apktool重新編譯應用,像這樣:apktool b appname/
一旦應用程序使用apktool重新編譯,新的 apk 將為被感染的合法版本。 向手機發(fā)送郵件可能會自動觸發(fā)此惡意軟件。 如果惡意軟件服務需要的權限比合法應用程序更多,我們還需要手動在AndroidManifest.xml文件中添加缺少的權限。
7.3 廣告庫中的漏洞
Google Play上提供的大部分免費 Android 應用都會使用廣告來賺取收益。 然而,通常廣告庫本身存在漏洞,使得整個應用程序容易受到某種嚴重的威脅。
為了識別特定應用程序中存在的廣告庫,我們可以使用dex2jar/apktool簡單地反編譯該應用程序,并分析創(chuàng)建的文件夾。 你還可以在http://www.appbrain.com/stats/libraries/ad中找到一些最受歡迎的 Android 廣告庫和使用它們的應用程序。 廣告庫可能具有許多漏洞,例如上一節(jié)中討論的WebView漏洞,不安全的文件權限或任何其他漏洞,這可能會導致攻擊者破壞整個應用程序,獲得反向 shell 或甚至創(chuàng)建后門。
7.4 Android 中的跨應用腳本
跨應用程序腳本漏洞是一種 Android 應用程序漏洞,攻擊者可以繞過同源策略并在應用程序位置中訪問存儲在 Android 文件系統(tǒng)上的敏感文件。 這意味著攻擊者能夠訪問位于/data/data/[應用程序包名稱]位置中的所有內容。 漏洞的根本原因是,應用程序允許內容使用受信任區(qū)域的訪問權限,在不受信任區(qū)域中執(zhí)行。
如果漏洞應用程序是 Web 瀏覽器,攻擊會變得更加嚴重,其中攻擊者能夠靜默竊取瀏覽器存儲的所有 Cookie 和其他信息,并將其發(fā)送給攻擊者。
甚至一些著名的應用程序,如 Skype,Dropbox,海豚瀏覽器等,早期版本中都存在跨應用程序腳本漏洞。
讓我們來看看海豚瀏覽器 HD 中的漏洞,例如,由 Roee Hay 和 Yair Amit 發(fā)現(xiàn)的漏洞。 此示例中使用的存在漏洞的海豚瀏覽器 HD 應用程序版本為 6.0.0,以后的版本中修補了漏洞。
海豚瀏覽器 HD 有一個名為BrowserActivity的漏洞活動,它可以被其他應用程序以及其他參數(shù)調用。 攻擊者可以使用它來調用海豚瀏覽器 HD 并打開特定的網頁,以及惡意的 JavaScript。 以下屏幕截圖顯示了 POC 代碼以及通報(http://packetstormsecurity.com/files/view/105258/dolphin-xas.txt):

這里,使用屏幕截圖中的上述代碼,我們將打開http://adityagupta.net網站以及 JavaScript 函數(shù)alert(document.domain),它將在提示框中簡單地彈出域名。 一旦我們在我們的手機上打開這個惡意應用程序,它將調用海豚瀏覽器 HD,打開 URL 和我們指定的 JavaScript 代碼,如下面的截圖所示:

總結
在本章中,我們了解了 Android 中的不同攻擊向量,從滲透測試者的角度來看,這非常有用。 本章應該用做對不同攻擊向量的快速演練; 然而,建議你嘗試這些攻擊向量,嘗試修改它們,并在現(xiàn)實生活中的滲透測試中使用它們。
在下一章中,我們將離開應用程序層,專注于 Android 平臺的基于 ARM 的利用。