天天看點

Android 滲透測試學習手冊 第七章 不太知名的 Android 漏洞第七章 不太知名的 Android 漏洞

第七章 不太知名的 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 界面:

Android 滲透測試學習手冊 第七章 不太知名的 Android 漏洞第七章 不太知名的 Android 漏洞

我們還可以從源代碼中建立

apk

檔案,隻需右鍵單擊項目,然後選擇

Export as an Android Application

(導出為 Android 應用程式)。 一旦我們運作應用程式并監聽 Burp 代理中的流量,我們将看到應用程式中指定的 URL 的請求,如以下螢幕截圖所示:

現在,當響應來自伺服器時,我們可以修改響應資料并使用它來利用此漏洞,如以下螢幕所示

Android 滲透測試學習手冊 第七章 不太知名的 Android 漏洞第七章 不太知名的 Android 漏洞

讓我們假設攻擊者需要利用這個漏洞應用程式,來使用受害者的裝置向一個号碼發送短信。 以下螢幕截圖顯示了修改後的響應的樣子:

Android 滲透測試學習手冊 第七章 不太知名的 Android 漏洞第七章 不太知名的 Android 漏洞

一旦我們點選

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)能夠觸發我們的服務。

是以,以下是建立受感染版本的合法應用程式的簡單步驟:

  1. 使用

    apktool

    解壓縮應用程式,如下所示:
    apktool d [appname].apk           
  2. 反編譯惡意應用程式來生成 Java 類的 smali 檔案。 在這裡,我們需要将所有的惡意活動放在服務中。 此外,如果你有 smali 語言的經驗,你可以直接從 smali 本身建立服務。 假設惡意服務的名稱是

    malware.smali

  3. 接下來,我們需要将

    malware.smali

    檔案複制到 smali 檔案夾,它位于我們反編譯的合法應用程式的檔案夾中 。

    我們把

    malware.smali

    中的軟體包名稱的所有引用更改為合法應用程式的軟體包名稱,并在

    AndroidManifest.xml

    中注冊服務。

    在這裡,我們需要在

    AndroidManifest.xml

    檔案中添加另一行,如下所示:
    <service droid:name = "malware.java"/>           
  4. 此外,我們需要注冊一個廣播接收器來觸發服務。 在這種情況下,我們選擇短信作為觸發器,如下面的代碼所示:
    <receiver android:name="com.legitimate.application.service">  
        <intent-filter>
            <action android:name="android.provider.Telephony.SMS_RECEIVED" />
        </intent-filter>
    </receiver>           
  5. 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

Android 滲透測試學習手冊 第七章 不太知名的 Android 漏洞第七章 不太知名的 Android 漏洞

這裡,使用螢幕截圖中的上述代碼,我們将打開

http://adityagupta.net

網站以及 JavaScript 函數

alert(document.domain)

,它将在提示框中簡單地彈出域名。 一旦我們在我們的手機上打開這個惡意應用程式,它将調用海豚浏覽器 HD,打開 URL 和我們指定的 JavaScript 代碼,如下面的截圖所示:

總結

在本章中,我們了解了 Android 中的不同攻擊向量,從滲透測試者的角度來看,這非常有用。 本章應該用做對不同攻擊向量的快速演練; 然而,建議你嘗試這些攻擊向量,嘗試修改它們,并在現實生活中的滲透測試中使用它們。

在下一章中,我們将離開應用程式層,專注于 Android 平台的基于 ARM 的利用。

繼續閱讀