安全圈 | 专注于最新网络信息安全讯息新闻

首页

android滲透測試學習手册(四)對android設備進行流量分析

作者 rampino 时间 2020-02-27
all

在本章中,我們將研究Android設備的網路流量,並分析平臺和應用程序的流量數據。通常應用程序會在其網路資料中洩漏敏感資訊,囙此發現它是滲透測試程式最重要的任務之一。

此外,你經常會遇到通過不安全的網路通訊協定執行身份驗證和會話管理的應用程序。囙此,在本章中,我們將學習如何攔截和分析Android設備中,各種應用程序的流量。

4.1 Android 流量攔截

根據OWASP移動Top10(https://www.owasp.org/index.php/Project/OWASP_Mobile_Security_Project_-_Top_Ten_Mobile_Risks),不完善的傳輸層保護是第三大威脅。實際上,假設一個應用程序通過HTTP將用戶的登入憑據提交到服務器。如果用戶位於咖啡店或機場,並在有人偵測網絡時登入到他的應用程序,會怎麼樣?攻擊者能够獲得特定用戶的整個登入憑據,它以後可能用於惡意目的。假設應用程序正在通過HTTPS進行身份驗證,通過HTTP的會話管理,並且在請求中傳遞身份驗證Cookie。在這種情況下,攻擊者也能够通過在執行中間人攻擊時攔截網絡來獲取身份驗證Cookie。使用這些認證cookie,他可以直接作為受害用戶登錄到應用程序。

4.2 流量分析管道

在任何情况下都有兩種不同的流量捕獲和分析方法。我們將研究Android環境中可能的兩種不同類型,以及如何在真實場景中執行它們。被動和主動分析如下:

被動分析:這是一種流量分析的方法,其中應用程序發送的網路資料不會被攔截。相反,我們將嘗試捕獲所有網絡數据包,然後在網絡分析器(如Wireshark)中打開它,然後嘗試找出應用程序中的漏洞或安全問題。

主動分析:在主動分析中,滲透測試者將主動攔截所有正在進行的網路通信,並可以即時分析,評估和修改數據。這裡,他需要設定代理,並且由應用/設備生成和接收的所有網路流量會通過該代理。

被動分析

被動分析的概念是將所有網絡資訊保存到特定檔案中,之後使用數据包分析器查看。這就是我們將在Android設備中進行被動分析。我們將使用tcpdump來將所有的資訊保存到設備中一個位置。此後,我們將該檔案拉取到我們的系統,然後使用Wireshark或Cocoa包分析器查看它。請參閱以下步驟:

我們從Timur Alperovich的網站http://www.eecs.umich.edu/~timuralp/tcpdump-arm下載為ARM編譯的tcpdump二進位檔案。如果我們需要,我們還可以下載tcpdump的原始二進位檔案並交叉編譯(為Android交叉編譯你的二進位檔案,請按照連結http://machi021.blogspot.jp/2011/03/compile-busybox-for-android.html。連結展示了交叉編譯BusyBox,但相同的步驟可以應用於tcpdump)。

一旦我們下載了tcpdump,我們可以通過在我們剛剛下載的二進位上執行一個檔案,來確認它是否為ARM編譯。對於Windows用戶,你可以使用Cygwin來執行命令。輸出類似於以下螢幕截圖中所示:

這裡的下一步是將tcpdump二進位檔案推送到設備中的一個位置。我們還必須記住,我們需要繼續執行這個檔。囙此,我們將它推送到一個位置,我們可以從中更改許可權,以及執行二進位來捕獲流量。

現在,繼續並使用adb的push命令推送二進位來將二進位推送到設備。同樣,在我們需要從設備中拉取內容的情况下,我們可以使用pull而不是push。

這裡,我們將使用adb push將其推送到Android中的/data/local/tmp:

adb push tcpdump-arm /data/local/tmp/tcpdum

一旦我們將tcpdump二進位推送到設備,然後需要使用adb在shell中訪問設備,並更改二進位的許可權。如果我們試圖運行tcpdump,它會給我們一個許可權錯誤,因為我們沒有執行許可權。

為了更改許可權,我們需要訪問/data/local/tmp,使用chmod命令,並授予其許可權777,這意味著應用程序將具有所有許可權。以下螢幕截圖顯示了上述命令的結果輸出:

這裡的最後一步是啟動tcpdump並將輸出寫入.pcap檔案。使用-s,-v和-w標誌啟動tcpdump。參攷以下描述:

-s:這表示從每個封包抽取給定(在我們的例子中為0)位元組的數據,而不是默認的65535位元組。

-v:這表明詳細輸出。

-w:這表明寫入原始數据包的檔名。例如,我們可以使用./tcpdump-v-s 0 -w output.pcap,以便將所有檔案寫入output.pcap,並輸出詳細資訊。

在流量捕獲執行期間,打開手機瀏覽器並訪問位於http://attify.com/data/login.html的漏洞登入表單,該表單通過HTTP發送所有數據並使用GET請求:

這裡使用用戶名android和密碼mysecretpassword登入應用程序。

我們現在可以在任何時候通過adb shell服務終止行程(使用Ctrl + C)。下一步是將捕獲的資訊從設備拉取到我們的系統。為此,我們將簡單地使用adb pull如下:

adb pull /data/local/tmp/output.pcap output.pcap

你可能還需要更改output.pcap的許可權才能拉取它。在這種情況下,只需執行以下命令:

chmod 666 output.pcap

一旦我們下載了捕獲的網路資料的.pcap檔案,我們可以在Wireshark中打開它並分析流量。在這裡,我們將嘗試查找捕獲的登入請求。我們可以從網站http://www.wireshark.org/download.html下載Wireshark。一旦下載並安裝完畢,打開Wireshark並在裡面打開我們新拉取的檔案output.pcap,通過訪問File | Open。一旦我們在Wireshark中打開.pcap檔案,我們會注意到一個類似下麵截圖所示的荧幕:

Wireshark是一個開源封包分析器,它幫助我們發現敏感資訊,並分析來自所有網絡連接的流量數據。在這裡,我們正在蒐索我們對http://attify.com所做的請求,並輸入了我們的登入憑據。

現在,訪問Edit並按一下Find Packets。在這裡,我們需要查找我們提交登入憑據的網站,並檢查String。

在這裡,我們可以看到與http://attify.com/data/login.html的連接。如果我們在底部窗格中查找有關此數据包的更多資訊,我們可以看到包含我們輸入的用戶名和密碼的請求網址。

囙此,我們使用tcpdump成功捕獲了網路資料,並將其存儲在.pcap檔案中,然後使用Wireshark進行分析。然而,被動流量捕獲也可以通過adb shell直接完成。

adb shell /data/local/tmp/tcpdump -i any -p -s 0 -w /mnt/sdcar/output.pcap

這裡,-i代表介面。在這種情況下,它從所有可用介面捕獲數據。-p指定tcpdump不將設備置於混雜模式(這是在執行偵測攻擊時經常使用的模式,並且不適合我們現時使用的模式)。在使用-tcpdump標誌啟動模擬器時,我們還可以指定使用tcpdump。我們還需要使用-avd標誌,指定要捕獲流量的AVD名稱。

emulator -avd Android_Pentesting --tcpdump trafficcapture.pcap

主動分析

主動分析的基本規則是,使每個請求和響應通過我們定義的中間設備。在這種情況下,我們將設定一個代理,並使所有請求和響應通過該特定代理。此外,我們可以選擇操縱和修改請求和響應中的數据包,從而評估應用程序的安全性:

為了為HTTP創建代理,請使用指定代理IP和埠以及-http-proxy標誌啟動模擬器。

由於我們在同一個系統上運行模擬器,我們使用IP 127.0.0.1和任何可用的埠。在這種情況下,我們使用埠8080。emulator -avd Android_Pentesting–http-proxy 127.0.0.1:8080

在設備上,我們還可以訪問Settings | Wi-Fi,然後長按我們連接的網絡Wi-Fi。此外如果我們使用一個實際的設備,我們用於攔截的系統應該在同一個網絡上。

一旦我們長按Wi-Fi連接,我們將會得到一個類似於下麵的截圖所示的荧幕。此外,如果你使用真實設備執行此練習,設備需要與代理位於同一個網絡。

一旦進入連接修改荧幕,請注意,代理配寘會詢問網絡上的設備的IP地址和代理系統的埠。

但是,這些設定僅存於從4.0開始的最新版本的Android中。如果我們要在小於4.0的設備上實現代理,我們將必須安裝協力廠商應用程序,例如Play Store上可用的ProxyDroid。

一旦我們在設備/模擬器中設定了代理,請繼續並啟動Burp代理,來攔截流量。下麵Options選項卡中Burp代理的樣子,以便有效攔截瀏覽器和應用程序的流量。

我們還需要檢查不可見的代理,以確保我們的代理也捕獲nonproxy請求。(讀者可以在Burp的網站http://blog.portswigger.net/2008/11/mobp-invisible-proxying.html上詳細瞭解不可見代理和非代理請求。)

為了檢查代理是否工作,打開瀏覽器並啟動網站。然後我們能够看到它是否在代理中被攔截。

正如我們在上面的螢幕截圖中看到的,我們打開了URL http://attify.com,請求現在顯示在Burp Proxy荧幕中。囙此,我們成功地攔截了來自設備和應用程序的所有基於HTTP的請求。

4.3 HTTPS代理攔截

當通過HTTP協議進行通信時,上述方法可以正常用於應用和流量器的流量攔截。在HTTPS中,由於證書不匹配,我們將收到錯誤,囙此我們無法攔截流量。

然而,為了解决這個挑戰,我們需要創建自己的證書或Burp/PortSwigger並將其安裝在設備上。為了創建我們自己的證書,我們需要在Firefox(或任何其他瀏覽器或全域代理)中設定代理:

為了在Firefox中設定代理,請訪問Tools中顯示的Options(Mac上為Firefox | Preferences),然後訪問Advanced選項卡。在Advanced選項卡下,我們按一下Network選項。

在Network標籤中,我們需要點擊Settings來使用Firefox配寘代理。

完成後,在我們的系統瀏覽器上訪問HTTPS網站,我們能跟攔截我們設備上的流量。

這裡我們將收到一個The Network is Untrusted消息。點擊I understand the Risks,並點擊Add Exception。

然後,按一下Get Certificate,最後按一下View,然後按一下Export來保存證書。

一旦證書保存在我們的系統上,我們現在可以使用adb將其推送到我們的設備。

adb push portswiggerca.crt /mnt/sdcard/portswiggerca.crt

現在,在我們的設備中,訪問Settings,在Personal類別下,我們可以找到Security。一旦我們進入Security,請注意,你可以選擇從SD卡安裝證書。點擊它使我們可以保存具有給定名稱的證書,這適用於所有應用程序和瀏覽器,甚至是HTTPS網站。

通過返回到我們的瀏覽器,並打開HTTPS網站(例如https://gmail.com)來確認。正如我們在下麵的截圖中可以看到的,我們在這種情況下也成功地攔截了通信:

其它用於攔截SSL流量的管道

還有用於SSL流量攔截的其他方法,以及在設備上安裝證書的不同方法。其他方法之一是從Android設備的/system/etc/security位置拉取cacerts.bks檔案。一旦我們拉取了它,我們就可以使用金鑰工具以及Bouncy Castle(位於Java安裝目錄中)來生成證書。如果你在Java安裝目錄中找不到Bouncy Castle,也可以從http://www.bouncycastle.org/latest_releases.html下載並將其放置在已知路徑。此後,我們需要掛載/system分區作為讀/寫分區,以便將更新的cacerts.bks證書推送回設備。然而,為了使這種更改長期有效,如果我們使用模擬器,我們將需要使用mks.yaffs2來創建一個新的system.img然後使用它。

此外,還有其他工具可用於攔截Android設備的流量,例如C harles Proxy和MITMProxy(http://mitmproxy.org)。我強烈建議你在Burp代理的知識的基礎上嘗試他們,因為它們在可用性方面是相同的,但是更强大。在使用Charles Proxy時,我們可以直接從www.charlesproxy.com/charles.crt下載證書。

在一些滲透測試中,應用程序可能正在和服務器通信並獲得響應。例如,假設用戶試圖訪問應用的受限區域,該應用由用戶從服務器請求。然而,由於用戶沒有被授權查看該區域,服務器使用403 Forbidden進行響應。現在,我們作為滲透測試人員,可以攔截流量,並將響應從403 Forbidden改為200 OK。囙此,用戶現在甚至能够訪問應用的未授權區域。修改類似響應的示例可以在第8章“ARM利用”中找到,其中我們將討論可通過流量攔截利用的一些其他漏洞。

在應用程序中,保護流量的安全方法是讓所有內容通過HTTPS傳遞,同時在應用程序中包含一個證書。這樣做使得當應用程序嘗試與服務器通信時,它將驗證服務器證書是否與應用程序中存在的證書相對應。但是,如果有人正在進行滲透測試並攔截流量,則由滲透測試程式添加的設備使用的新證書(如portswigger證書)與應用程序中存在的證書不匹配。在這些情况下,我們必須對應用程序進行逆向工程,並分析應用程序如何驗證證書。我們甚至可能需要修改和重新編譯應用程序。

4.4 使用封包捕獲來選取敏感檔案

現在我們來看看如何使用Wireshark從流量數據中選取敏感檔案。為了做到這一點,我們可以捕獲數据包,並加載到Wireshark進行分析。

從網絡捕獲中選取檔案的基本概念是,它們含有指定檔案類型的頭部(multipart/form-data)。以下是從網路流量捕獲中選取任何類型檔案的步驟:

在Wireshark中,只需訪問編輯並從包詳細資訊中蒐索字串multipart。

一旦我們收到了向服務器發送POST請求的數据包(或者極少數情况下是GET),按右鍵該數据包,然後點擊Follow TCP Stream。

此後,根據檔案起始值(如PDF的情况下為%PDF),從以下選項中選擇Raw,然後使用副檔名.pdf保存檔案。囙此,我們擁有了最終的PDF,通過Android設備上傳到網站,而且我們恰巧在我們的滲透中開啟了網絡捕獲。

我們還可以使用其他工具,如Windows上的NetworkMiner(可從http://www.netresec.com/?page=NetworkMiner下載),它提供了一個精心構建的GUI來與之互動,並顯式指定保存的網路流量捕獲檔案。

總結

在本章中,我們瞭解了在Android設備上執行流量分析的各種方法。此外,我們會繼續攔截來自應用程序和瀏覽器的HTTP和HTTPS流量數據。我們還看到如何從網絡捕獲資訊中選取敏感檔案。

在下一章中,我們將介紹Android取證,並使用手動管道以及在不同工具的幫助下,從Android設備中選取一些敏感資訊。

本文由飛龍使者編譯

原文:Learning Pentesting for Android Devices

作者:Aditya Gupta