第七章 不太知名的 Android 漏洞
作者:Aditya Gupta
譯者:
飛龍 協定: CC BY-NC-SA 4.0
在本章中,我們将了解一些不太知名的 Android 攻擊向量,這在 Android 滲透測試中可能很有用。 我們還将涵蓋一些主題,如 Android 廣告庫中的漏洞和
WebView
實作中的漏洞。 作為滲透測試者,本章将幫助你以更有效的方式審計 Android 應用程式,并發現一些不常見的缺陷。
7.1 Android WebView 漏洞
WebView
是一種 Android 視圖,用于在應用程式中顯示 Web 内容。 它使用 WebKit 渲染引擎,以便使用
file//
和
data//
協定顯示網頁和其他内容,可以用于從檔案系統加載檔案和資料内容。
WebView
也用于各種 Android 應用程式,例如提供注冊和登入功能的應用程式。它通過在應用程式的布局中建構其移動網站,來顯示應用程式中的 Web 内容。 我們将在下一章中進一步讨論 WebKit 及其渲染引擎。 對于本章,我們将隻關心使用 WebKit 的那些應用程式。
在應用中使用 WebView
在應用程式中使用
WebView
非常簡單和直接。 假設我們希望我們的整個活動都是一個
WebView
元件,從
http://examplewebsite.com
加載内容。
下面是在 Android 應用程式中實作
WebView
的代碼示例:
WebView webview = new WebView(this);
setContentView(webview);
webview.loadUrl("http://vulnerable-website.com");
另一個重要的事情是,大多數開發人員最終為了增強應用程式的功能,在
WebView
實作中使用以下指令啟用 JavaScript(預設設定為
False
):
setJavascriptEnabled(true);
前面的指令確定 JavaScript 可以在應用程式中執行,并利用注冊界面。
識别漏洞
想象一下這種情況,應用程式在不安全的網絡中使用,允許攻擊者執行中間人攻擊(更多中間人攻擊的内容請參見 OWASP 網站
https//www.owasp.org/index.php/Man-in-the-middle_attack
)。 如果攻擊者可以通路網絡,則他們可以修改請求和對裝置的響應。 這表示他們能夠修改響應資料,并且如果從網站加載 JavaScript 内容,則可以完全控制 JavaScript 内容。
事實上,通過使用它,攻擊者甚至可以使用 JavaScript 來調用手機上的某些方法,例如向另一個号碼發送短信,撥打電話,甚至使用諸如 Drozer 之類的工具擷取遠端 shell。
讓我們舉個簡單的例子,來說明
WebView
漏洞的可能性。 在這裡,我們将使用 Joshua Drake 的 GitHub 倉庫(
https://github.com/jduck/VulnWebView/
)中的,由他建立的概念證明。 這個 POC 在應用程式中使用
WebView
,來簡單加載一個 URL 并且加載一個位于
http://droidsec.org/addjsif.html
的網頁(如果這個連結打不開,你可以通路
http//attify.com/lpfa/addjsif.html
)。
以下是 Eclipse 中代碼示例的螢幕截圖,其中使用名稱 Android 建立 JavaScript 界面:
我們還可以從源代碼中建立
apk
檔案,隻需右鍵單擊項目,然後選擇
Export as an Android Application
(導出為 Android 應用程式)。 一旦我們運作應用程式并監聽 Burp 代理中的流量,我們将看到應用程式中指定的 URL 的請求,如以下螢幕截圖所示:
現在,當響應來自伺服器時,我們可以修改響應資料并使用它來利用此漏洞,如以下螢幕所示
讓我們假設攻擊者需要利用這個漏洞應用程式,來使用受害者的裝置向一個号碼發送短信。 以下螢幕截圖顯示了修改後的響應的樣子:
一旦我們點選
Forward
(轉發)按鈕,郵件将從受害者的裝置發送到攻擊者指定的号碼。
上述内容簡單地調用
SMSManager()
,以便将包含文本
pwned
的 SMS 發送到的預定義号碼。
這是一個利用存在漏洞的
WebView
應用程式的簡單示例。 事實上,你可以嘗試調用不同的方法或使用 Drozer 從裝置擷取遠端 shell。 你還可以通路
https://labs.mwrinfosecurity.com/blog/2013/09/24/webview-addjavascriptinterface-remote-code-execution/
閱讀通過 Drozer 利用
WebView
的更多資訊。
7.2 感染合法 APK
由于 Google 的不嚴格政策,将應用上傳到 Play 商店時,許多開發人員上傳了惡意應用和軟體,目的是從使用者的裝置竊取私人資料。 Google Play 中存在的大多數惡意軟體隻是合法應用程式的受感染版本。惡意軟體作者隻需要一個真正的應用程式,反編譯它,插入自己的惡意元件,然後重新編譯它,以便分發到應用商店和感染使用者。這可能聽起來很複雜,但實際上,這是一個非常簡單的事情。
讓我們嘗試分析惡意軟體作者如何修改合法應用程式,來建立它的受感染版本。執行此操作的最簡單的方法之一是編寫一個簡單的惡意應用程式,并将其所有惡意活動放在服務中。此外,我們在
AndroidManifest.xml
檔案中添加廣播接收器,以便指定的事件(例如接收 SMS)能夠觸發我們的服務。
是以,以下是建立受感染版本的合法應用程式的簡單步驟:
- 使用
解壓縮應用程式,如下所示:apktool
apktool d [appname].apk
- 反編譯惡意應用程式來生成 Java 類的 smali 檔案。 在這裡,我們需要将所有的惡意活動放在服務中。 此外,如果你有 smali 語言的經驗,你可以直接從 smali 本身建立服務。 假設惡意服務的名稱是
。malware.smali
- 接下來,我們需要将
malware.smali
檔案複制到 smali 檔案夾,它位于我們反編譯的合法應用程式的檔案夾中 。
我們把
中的軟體包名稱的所有引用更改為合法應用程式的軟體包名稱,并在malware.smali
AndroidManifest.xml
中注冊服務。
在這裡,我們需要在
檔案中添加另一行,如下所示:AndroidManifest.xml
<service droid:name = "malware.java"/>
- 此外,我們需要注冊一個廣播接收器來觸發服務。 在這種情況下,我們選擇短信作為觸發器,如下面的代碼所示:
<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 将為被感染的合法版本。 向手機發送郵件可能會自動觸發此惡意軟體。 如果惡意軟體服務需要的權限比合法應用程式更多,我們還需要手動在
AndroidManifest.xml
檔案中添加缺少的權限。
7.3 廣告庫中的漏洞
Google Play上提供的大部分免費 Android 應用都會使用廣告來賺取收益。 然而,通常廣告庫本身存在漏洞,使得整個應用程式容易受到某種嚴重的威脅。
為了識别特定應用程式中存在的廣告庫,我們可以使用
dex2jar/apktool
簡單地反編譯該應用程式,并分析建立的檔案夾。 你還可以在
http://www.appbrain.com/stats/libraries/ad
中找到一些最受歡迎的 Android 廣告庫和使用它們的應用程式。 廣告庫可能具有許多漏洞,例如上一節中讨論的
WebView
漏洞,不安全的檔案權限或任何其他漏洞,這可能會導緻攻擊者破壞整個應用程式,獲得反向 shell 或甚至建立後門。
7.4 Android 中的跨應用腳本
跨應用程式腳本漏洞是一種 Android 應用程式漏洞,攻擊者可以繞過同源政策并在應用程式位置中通路存儲在 Android 檔案系統上的敏感檔案。 這意味着攻擊者能夠通路位于
/data/data/[應用程式包名稱]
位置中的所有内容。 漏洞的根本原因是,應用程式允許内容使用受信任區域的通路權限,在不受信任區域中執行。
如果漏洞應用程式是 Web 浏覽器,攻擊會變得更加嚴重,其中攻擊者能夠靜默竊取浏覽器存儲的所有 Cookie 和其他資訊,并将其發送給攻擊者。
甚至一些著名的應用程式,如 Skype,Dropbox,海豚浏覽器等,早期版本中都存在跨應用程式腳本漏洞。
讓我們來看看海豚浏覽器 HD 中的漏洞,例如,由 Roee Hay 和 Yair Amit 發現的漏洞。 此示例中使用的存在漏洞的海豚浏覽器 HD 應用程式版本為 6.0.0,以後的版本中修補了漏洞。
海豚浏覽器 HD 有一個名為
BrowserActivity
的漏洞活動,它可以被其他應用程式以及其他參數調用。 攻擊者可以使用它來調用海豚浏覽器 HD 并打開特定的網頁,以及惡意的 JavaScript。 以下螢幕截圖顯示了 POC 代碼以及通報(
http://packetstormsecurity.com/files/view/105258/dolphin-xas.txt
這裡,使用螢幕截圖中的上述代碼,我們将打開
http://adityagupta.net
網站以及 JavaScript 函數
alert(document.domain)
,它将在提示框中簡單地彈出域名。 一旦我們在我們的手機上打開這個惡意應用程式,它将調用海豚浏覽器 HD,打開 URL 和我們指定的 JavaScript 代碼,如下面的截圖所示:
總結
在本章中,我們了解了 Android 中的不同攻擊向量,從滲透測試者的角度來看,這非常有用。 本章應該用做對不同攻擊向量的快速演練; 然而,建議你嘗試這些攻擊向量,嘗試修改它們,并在現實生活中的滲透測試中使用它們。
在下一章中,我們将離開應用程式層,專注于 Android 平台的基于 ARM 的利用。