Android 滲透測試學(xué)習(xí)手冊(cè) 第四章 對(duì) Android 設(shè)備進(jìn)行流量分析

第四章 對(duì) Android 設(shè)備進(jìn)行流量分析

作者:Aditya Gupta

譯者:飛龍

協(xié)議:CC BY-NC-SA 4.0

在本章中,我們將研究 Android 設(shè)備的網(wǎng)絡(luò)流量,并分析平臺(tái)和應(yīng)用程序的流量數(shù)據(jù)。 通常應(yīng)用程序會(huì)在其網(wǎng)絡(luò)數(shù)據(jù)中泄漏敏感信息,因此發(fā)現(xiàn)它是滲透測試程序最重要的任務(wù)之一。 此外,你經(jīng)常會(huì)遇到通過不安全的網(wǎng)絡(luò)協(xié)議執(zhí)行身份驗(yàn)證和會(huì)話管理的應(yīng)用程序。 因此,在本章中,我們將學(xué)習(xí)如何攔截和分析 Android 設(shè)備中,各種應(yīng)用程序的流量。

4.1 Android 流量攔截

根據(jù) OWASP 移動(dòng) Top10(https://www.owasp.org/index.php/Projects/OWASP_Mobile_Security_Project_-_Top_Ten_Mobile_Risks),不完善的傳輸層保護(hù)是第三大威脅。實(shí)際上,假設(shè)一個(gè)應(yīng)用程序通過 HTTP 將用戶的登錄憑據(jù)提交到服務(wù)器。 如果用戶位于咖啡店或機(jī)場,并在有人嗅探網(wǎng)絡(luò)時(shí)登錄到他的應(yīng)用程序,會(huì)怎么樣? 攻擊者能夠獲得特定用戶的整個(gè)登錄憑據(jù),它以后可能用于惡意目的。 假設(shè)應(yīng)用程序正在通過 HTTPS 進(jìn)行身份驗(yàn)證,通過 HTTP 的會(huì)話管理,并且在請(qǐng)求中傳遞身份驗(yàn)證 Cookie。 在這種情況下,攻擊者也能夠通過在執(zhí)行中間人攻擊時(shí)攔截網(wǎng)絡(luò)來獲取身份驗(yàn)證 Cookie。 使用這些認(rèn)證 cookie,他可以直接作為受害用戶登錄到應(yīng)用程序。

4.2 流量分析方式

在任何情況下都有兩種不同的流量捕獲和分析方法。 我們將研究 Android 環(huán)境中可能的兩種不同類型,以及如何在真實(shí)場景中執(zhí)行它們。 被動(dòng)和主動(dòng)分析如下:

  • 被動(dòng)分析:這是一種流量分析的方法,其中應(yīng)用程序發(fā)送的網(wǎng)絡(luò)數(shù)據(jù)不會(huì)被攔截。 相反,我們將嘗試捕獲所有網(wǎng)絡(luò)數(shù)據(jù)包,然后在網(wǎng)絡(luò)分析器(如Wireshark)中打開它,然后嘗試找出應(yīng)用程序中的漏洞或安全問題。
  • 主動(dòng)分析:在主動(dòng)分析中,滲透測試者將主動(dòng)攔截所有正在進(jìn)行的網(wǎng)絡(luò)通信,并可以即時(shí)分析,評(píng)估和修改數(shù)據(jù)。 這里,他需要設(shè)置代理,并且由應(yīng)用/設(shè)備生成和接收的所有網(wǎng)絡(luò)流量會(huì)通過該代理。

被動(dòng)分析

被動(dòng)分析的概念是。將所有網(wǎng)絡(luò)信息保存到特定文件中,之后使用數(shù)據(jù)包分析器查看。 這就是我們將在 Android 設(shè)備中進(jìn)行被動(dòng)分析。 我們將使用tcpdump來將所有的信息保存到設(shè)備中一個(gè)位置。 此后,我們將該文件拉取到我們的系統(tǒng),然后使用 Wireshark 或 Cocoa 包分析器查看它。 請(qǐng)參閱以下步驟:

  1. 我們從 Timur Alperovich 的網(wǎng)站http://www.eecs.umich.edu/~timuralp/tcpdump-arm下載為 ARM 編譯的tcpdump二進(jìn)制文件。 如果我們需要,我們還可以下載tcpdump的原始二進(jìn)制文件并交叉編譯(為 Android 交叉編譯你的二進(jìn)制文件,請(qǐng)按照鏈接http://machi021.blogspot.jp/2011/03/compile-busybox-for-android.html。鏈接展示了交叉編譯 BusyBox,但相同的步驟可以應(yīng)用于tcpdump)。

    一旦我們下載了tcpdump,我們可以通過在我們剛剛下載的二進(jìn)制上執(zhí)行一個(gè)文件,來確認(rèn)它是否為 ARM 編譯。對(duì)于 Windows 用戶,你可以使用 Cygwin 來執(zhí)行命令。 輸出類似于以下屏幕截圖中所示:

  2. 這里的下一步是將tcpdump二進(jìn)制文件推送到設(shè)備中的一個(gè)位置。 我們還必須記住,我們需要繼續(xù)執(zhí)行這個(gè)文件。 因此,我們將它推送到一個(gè)位置,我們可以從中更改權(quán)限,以及執(zhí)行二進(jìn)制來捕獲流量。

  3. 現(xiàn)在,繼續(xù)并使用adbpush命令推送二進(jìn)制來將二進(jìn)制推送到設(shè)備。 同樣,在我們需要從設(shè)備中拉取內(nèi)容的情況下,我們可以使用pull而不是push。

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

    adb push tcpdump-arm /data/local/tmp/tcpdum
    
  5. 一旦我們將tcpdump二進(jìn)制推送到設(shè)備,然后需要使用adb在 shell 中訪問設(shè)備,并更改二進(jìn)制的權(quán)限。 如果我們?cè)噲D運(yùn)行tcpdump,它會(huì)給我們一個(gè)權(quán)限錯(cuò)誤,因?yàn)槲覀儧]有執(zhí)行權(quán)限。

    為了更改權(quán)限,我們需要訪問/data/local/tmp,使用chmod命令,并授予其權(quán)限777,這意味著應(yīng)用程序?qū)⒕哂兴袡?quán)限。 以下屏幕截圖顯示了上述命令的結(jié)果輸出:

  6. 這里的最后一步是啟動(dòng)tcpdump并將輸出寫入.pcap文件。 使用-s,-v-w標(biāo)志啟動(dòng)tcpdump。 參考以下描述:

    • -s:這表示從每個(gè)封包抽取給定(在我們的例子中為 0)字節(jié)的數(shù)據(jù),而不是默認(rèn)的 65535 字節(jié)。
    • -v:這表明詳細(xì)輸出。
    • -w:這表明寫入原始數(shù)據(jù)包的文件名。 例如,我們可以使用./tcpdump -v -s 0 -w output.pcap,以便將所有文件寫入output.pcap,并輸出詳細(xì)信息。
  7. 在流量捕獲執(zhí)行期間,打開手機(jī)瀏覽器并訪問位于http://attify.com/data/login.html的漏洞登錄表單,該表單通過 HTTP 發(fā)送所有數(shù)據(jù)并使用 GET 請(qǐng)求:

  8. 這里使用用戶名android和密碼mysecretpassword登錄應(yīng)用程序。

  9. 我們現(xiàn)在可以在任何時(shí)候通過adb shell服務(wù)終止進(jìn)程(使用Ctrl + C)。 下一步是將捕獲的信息從設(shè)備拉取到我們的系統(tǒng)。 為此,我們將簡單地使用adb pull如下:

    adb pull /data/local/tmp/output.pcap output.pcap 
    
  10. 你可能還需要更改output.pcap的權(quán)限才能拉取它。 在這種情況下,只需執(zhí)行以下命令:

    chmod 666 output.pcap
    
  11. 一旦我們下載了捕獲的網(wǎng)絡(luò)數(shù)據(jù)的.pcap文件,我們可以在 Wireshark 中打開它并分析流量。 在這里,我們將嘗試查找捕獲的登錄請(qǐng)求。 我們可以從網(wǎng)站http://www.wireshark.org/download.html下載 Wireshark。 一旦下載并安裝完畢,打開 Wireshark 并在里面打開我們新拉取的文件output.pcap,通過訪問File | Open。

    一旦我們?cè)?Wireshark 中打開.pcap文件,我們會(huì)注意到一個(gè)類似下面截圖所示的屏幕:

    Wireshark 是一個(gè)開源封包分析器,它幫助我們發(fā)現(xiàn)敏感信息,并分析來自所有網(wǎng)絡(luò)連接的流量數(shù)據(jù)。 在這里,我們正在搜索我們對(duì)http://attify.com所做的請(qǐng)求,并輸入了我們的登錄憑據(jù)。

  12. 現(xiàn)在,訪問Edit并單擊Find Packets。 在這里,我們需要查找我們提交登錄憑據(jù)的網(wǎng)站,并檢查String。

  13. 在這里,我們可以看到與http://attify.com/data/login.html的連接。 如果我們?cè)诘撞看案裰胁檎矣嘘P(guān)此數(shù)據(jù)包的更多信息,我們可以看到包含我們輸入的用戶名和密碼的請(qǐng)求網(wǎng)址。

因此,我們使用tcpdump成功捕獲了網(wǎng)絡(luò)數(shù)據(jù),并將其存儲(chǔ)在.pcap文件中,然后使用 Wireshark 進(jìn)行分析。 然而,被動(dòng)流量捕獲也可以通過adb shell直接完成。

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

這里,-i代表接口。 在這種情況下,它從所有可用接口捕獲數(shù)據(jù)。 -p指定tcpdump不將設(shè)備置于混雜模式(這是在執(zhí)行嗅探攻擊時(shí)經(jīng)常使用的模式,并且不適合我們目前使用的模式)。 在使用-tcpdump標(biāo)志啟動(dòng)模擬器時(shí),我們還可以指定使用tcpdump。 我們還需要使用-avd標(biāo)志,指定要捕獲流量的 AVD 名稱。

emulator -avd Android_Pentesting --tcpdump trafficcapture.pcap

主動(dòng)分析

主動(dòng)分析的基本規(guī)則是,使每個(gè)請(qǐng)求和響應(yīng)通過我們定義的中間設(shè)備。 在這種情況下,我們將設(shè)置一個(gè)代理,并使所有請(qǐng)求和響應(yīng)通過該特定代理。 此外,我們可以選擇操縱和修改請(qǐng)求和響應(yīng)中的數(shù)據(jù)包,從而評(píng)估應(yīng)用程序的安全性:

  1. 為了為 HTTP 創(chuàng)建代理,請(qǐng)使用指定代理 IP 和端口以及-http-proxy標(biāo)志啟動(dòng)模擬器。 由于我們?cè)谕粋€(gè)系統(tǒng)上運(yùn)行模擬器,我們使用IP 127.0.0.1和任何可用的端口。 在這種情況下,我們使用端口 8080。

    emulator -avd Android_Pentesting –http-proxy 127.0.0.1:8080
    
  2. 在設(shè)備上,我們還可以訪問Settings | Wi-Fi,然后長按我們連接的網(wǎng)絡(luò) Wi-Fi。 此外如果我們使用一個(gè)實(shí)際的設(shè)備,我們用于攔截的系統(tǒng)應(yīng)該在同一個(gè)網(wǎng)絡(luò)上。

  3. 一旦我們長按 Wi-Fi 連接,我們將會(huì)得到一個(gè)類似于下面的截圖所示的屏幕。 此外,如果你使用真實(shí)設(shè)備執(zhí)行此練習(xí),設(shè)備需要與代理位于同一個(gè)網(wǎng)絡(luò)。

  4. 一旦進(jìn)入連接修改屏幕,請(qǐng)注意,代理配置會(huì)詢問網(wǎng)絡(luò)上的設(shè)備的 IP 地址和代理系統(tǒng)的端口。

    但是,這些設(shè)置僅存于從 4.0 開始的最新版本的 Android 中。 如果我們要在小于 4.0 的設(shè)備上實(shí)現(xiàn)代理,我們將必須安裝第三方應(yīng)用程序,例如 Play Store 上可用的 ProxyDroid。

5, 一旦我們?cè)谠O(shè)備/模擬器中設(shè)置了代理,請(qǐng)繼續(xù)并啟動(dòng) Burp 代理,來攔截流量。 下面Options選項(xiàng)卡中 Burp 代理的樣子,以便有效攔截瀏覽器和應(yīng)用程序的流量。

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

![](http://upload-images.jianshu.io/upload_images/118142-7f870abd10e663a5.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
  1. 為了檢查代理是否工作,打開瀏覽器并啟動(dòng)網(wǎng)站。 然后我們能夠看到它是否在代理中被攔截。

正如我們?cè)谏厦娴钠聊唤貓D中看到的,我們打開了 URLhttp://attify.com,請(qǐng)求現(xiàn)在顯示在 Burp Proxy 屏幕中。 因此,我們成功地?cái)r截了來自設(shè)備和應(yīng)用程序的所有基于 HTTP 的請(qǐng)求。

4.3 HTTPS 代理攔截

當(dāng)通過 HTTP 協(xié)議進(jìn)行通信時(shí),上述方法可以正常用于應(yīng)用和流量器的流量攔截。 在 HTTPS 中,由于證書不匹配,我們將收到錯(cuò)誤,因此我們無法攔截流量。

然而,為了解決這個(gè)挑戰(zhàn),我們需要?jiǎng)?chuàng)建自己的證書或 Burp/PortSwigger 并將其安裝在設(shè)備上。 為了創(chuàng)建我們自己的證書,我們需要在 Firefox(或任何其他瀏覽器或全局代理)中設(shè)置代理:

  1. 為了在 Firefox 中設(shè)置代理,請(qǐng)?jiān)L問Tools中顯示的Options(Mac上為Firefox | Preferences),然后訪問Advanced選項(xiàng)卡。 在Advanced選項(xiàng)卡下,我們單擊Network選項(xiàng)。

  2. Network標(biāo)簽中,我們需要點(diǎn)擊Settings來使用 Firefox 配置代理。

  3. 完成后,在我們的系統(tǒng)瀏覽器上訪問 HTTPS 網(wǎng)站,我們能跟攔截我們?cè)O(shè)備上的流量。 這里我們將收到一個(gè)The Network is Untrusted消息。 點(diǎn)擊I understand the Risks,并點(diǎn)擊Add Exception。

  4. 然后,單擊Get Certificate,最后單擊View,然后單擊Export來保存證書。

  5. 一旦證書保存在我們的系統(tǒng)上,我們現(xiàn)在可以使用adb將其推送到我們的設(shè)備。

    adb push portswiggerca.crt /mnt/sdcard/portswiggerca.crt
    
  6. 現(xiàn)在,在我們的設(shè)備中,訪問Settings,在Personal類別下,我們可以找到Security。 一旦我們進(jìn)入Security,請(qǐng)注意,你可以選擇從 SD 卡安裝證書。 點(diǎn)擊它使我們可以保存具有給定名稱的證書,這適用于所有應(yīng)用程序和瀏覽器,甚至是 HTTPS 站點(diǎn)。

  7. 通過返回到我們的瀏覽器,并打開 HTTPS 網(wǎng)站(例如https://gmail.com)來確認(rèn)。 正如我們?cè)谙旅娴慕貓D中可以看到的,我們?cè)谶@種情況下也成功地?cái)r截了通信:

其它用于攔截 SSL 流量的方式

還有用于 SSL 流量攔截的其他方法,以及在設(shè)備上安裝證書的不同方法。

其他方法之一是從 Android 設(shè)備的/system/etc/security位置拉取cacerts.bks文件。 一旦我們拉取了它,我們就可以使用密鑰工具以及 Bouncy Castle(位于 Java 安裝目錄中)來生成證書。 如果你在 Java 安裝目錄中找不到 Bouncy Castle,也可以從http://www.bouncycastle.org/latest_releases.html下載并將其放置在已知路徑。 此后,我們需要掛載/system分區(qū)作為讀/寫分區(qū),以便將更新的cacerts.bks證書推送回設(shè)備。 然而,為了使這種更改長期有效,如果我們使用模擬器,我們將需要使用mks.yaffs2來創(chuàng)建一個(gè)新的system.img然后使用它。

此外,還有其他工具可用于攔截 Android 設(shè)備的流量,例如C harles Proxy 和 MITMProxy(http://mitmproxy.org)。 我強(qiáng)烈建議你在 Burp 代理的知識(shí)的基礎(chǔ)上嘗試他們,因?yàn)樗鼈冊(cè)诳捎眯苑矫媸窍嗤模歉鼜?qiáng)大。 在使用 Charles Proxy 時(shí),我們可以直接從www.charlesproxy.com/charles.crt下載證書。

在一些滲透測試中,應(yīng)用程序可能正在和服務(wù)器通信并獲得響應(yīng)。 例如,假設(shè)用戶試圖訪問應(yīng)用的受限區(qū)域,該應(yīng)用由用戶從服務(wù)器請(qǐng)求。 然而,由于用戶沒有被授權(quán)查看該區(qū)域,服務(wù)器使用403 Forbidden進(jìn)行響應(yīng)。 現(xiàn)在,我們作為滲透測試人員,可以攔截流量,并將響應(yīng)從403 Forbidden改為200 OK。 因此,用戶現(xiàn)在甚至能夠訪問應(yīng)用的未授權(quán)區(qū)域。修改類似響應(yīng)的示例可以在第8章“ARM 利用”中找到,其中我們將討論可通過流量攔截利用的一些其他漏洞。

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

4.4 使用封包捕獲來提取敏感文件

現(xiàn)在我們來看看如何使用 Wireshark 從流量數(shù)據(jù)中提取敏感文件。 為了做到這一點(diǎn),我們可以捕獲數(shù)據(jù)包,并加載到 Wireshark 進(jìn)行分析。

從網(wǎng)絡(luò)捕獲中提取文件的基本概念是,它們含有指定文件類型的頭部(multipart/form-data)。 以下是從網(wǎng)絡(luò)流量捕獲中提取任何類型文件的步驟:

  1. 在 Wireshark 中,只需訪問編輯并從包詳細(xì)信息中搜索字符串multipart。

  2. 一旦我們收到了向服務(wù)器發(fā)送 POST 請(qǐng)求的數(shù)據(jù)包(或者極少數(shù)情況下是 GET),右鍵單擊該數(shù)據(jù)包,然后點(diǎn)擊Follow TCP Stream。

  3. 此后,根據(jù)文件起始值(如 PDF 的情況下為%PDF),從以下選項(xiàng)中選擇Raw,然后使用擴(kuò)展名.pdf保存文件。 因此,我們擁有了最終的 PDF,通過 Android 設(shè)備上傳到網(wǎng)站,而且我們恰巧在我們的滲透中開啟了網(wǎng)絡(luò)捕獲。

  4. 我們還可以使用其他工具,如 Windows 上的 NetworkMiner(可從http://www.netresec.com/?page=NetworkMiner下載),它提供了一個(gè)精心構(gòu)建的 GUI 來與之交互,并顯式指定保存的網(wǎng)絡(luò)流量捕獲文件。

總結(jié)

在本章中,我們了解了在 Android 設(shè)備上執(zhí)行流量分析的各種方法。 此外,我們會(huì)繼續(xù)攔截來自應(yīng)用程序和瀏覽器的 HTTP 和 HTTPS 流量數(shù)據(jù)。 我們還看到如何從網(wǎng)絡(luò)捕獲信息中提取敏感文件。

在下一章中,我們將介紹 Android 取證,并使用手動(dòng)方式以及在不同工具的幫助下,從 Android 設(shè)備中提取一些敏感信息。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,506評(píng)論 19 139
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,781評(píng)論 25 709
  • 第三章 Android 應(yīng)用的逆向和審計(jì) 作者:Aditya Gupta 譯者:飛龍 協(xié)議:CC BY-NC-SA...
    布客飛龍閱讀 1,114評(píng)論 0 9
  • 提高成長率的方法論 1、概念產(chǎn)生價(jià)值觀。 2、用自己的錢在二級(jí)市場投資 3、應(yīng)用多維競爭力 價(jià)值觀決定選擇,而方法...
    馮麗_5015閱讀 188評(píng)論 0 0
  • 文/ 叁叁 今天臘月二十三,在我的老家也就到年關(guān)了。 “二十三,掃塵土”每年的二十三,是我們掃塵土的日子。 這一天...
    叁一叁閱讀 249評(píng)論 3 1

友情鏈接更多精彩內(nèi)容