やりたかったこと
- Androidアプリでどんな通信が流れているか監視したいという思いがありました。
- ただアプリでtcpdumpとってファイルをadb pullすれば簡単なのですが、面倒くさい。リアルタイムで流れを見たいと感じました。その方法を記載します。
- roppongi_aarで話した内容をもうちょっと詳細に解説した感じです。
- 資料: http://www.slideshare.net/KengoSuzuki1/android-pen-test-recon
TCP編 via tcpdump
準備するもの
- Android端末 or エミュレータ
- Android端末を使う場合はRoot化が必要です
- エミュレータを使う場合は別途netcatのインストールが必要です
- MacOSX with WireShark
こんな感じでトラフィックの受け渡しをしたい
やることの概要
- Android側でtcpdumpの標準出力を聞くポートを割り当てる
- tcpdumpとnetcat(リッスンモード) on Android
- Mac側でMac上のポートとAndroidの上記ポートを紐付ける
- Macでadb forward
- ひも付けたポートに送られる情報を引き出して、Wiresharkに送る
- Macでnetcat & wireshark
コマンド
% adb shell "./data/local/tcpdump -w - | /data/local/./netcat -l -p 12345”
% adb forward tcp:12345 tcp:54321 && nc 127.0.0.1 54321 | wireshark -k -S -i lo0
結果
limitation
- tcp/udpレベルでしかわからない
- パット見、どういうhttp(s)通信が流れているかわからない
Solution
- ローカルproxyをたてる
- 今回はOWASP ZAPを使いますが、お好みでCharlesでもいいと思います
- 自分はそのまま攻撃に繋げたいのでOWASP ZAPを使ってます
HTTP(S)編 via OWASP ZAP
準備するもの
- OWASP ZAP on Mac
OWASP ZAPの設定
Local Proxyの設定
- ChromeとOWASP ZAPでWeb通信を改竄の「OWASP ZAPの設定その1: Proxyの設定」
- Address : vboxnet1のIP
- Port: お好み
Dynamic SSL Certificateの設定
- 端末がOWASP ZAPを不正でないプロキシと認識するために、証明書を入手する
- OWASP ZAP > Tools > Options > Dynamic SSL Ceritficate > save
Dynamic SSL Certificateのインポート to Android
- sdcard配下にpushすること
% adb push ~/Desktop/owasp_zap_root_ca.cer /sdcard/
Android側のプロキシ設定
- setting > Wi-Fi > 「WiredSSID」の長押し > Modify network
-
Advanced Options > Proxy > Manual
- ProxyHostName: OWASP ZAPに設定したIP
- Port: OWASP ZAPに設定したポート