Android端末内のトラフィックをリアルタイムでジロジロする@Wireshark & OWASP ZAP <○><○>


やりたかったこと

  • Androidアプリでどんな通信が流れているか監視したいという思いがありました。
  • ただアプリでtcpdumpとってファイルをadb pullすれば簡単なのですが、面倒くさい。リアルタイムで流れを見たいと感じました。その方法を記載します。

TCP編 via tcpdump

準備するもの

こんな感じでトラフィックの受け渡しをしたい

やることの概要

  1. Android側でtcpdumpの標準出力を聞くポートを割り当てる
    • tcpdumpとnetcat(リッスンモード) on Android
  2. Mac側でMac上のポートとAndroidの上記ポートを紐付ける
    • Macでadb forward
  3. ひも付けたポートに送られる情報を引き出して、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

結果

  • 操作毎のtcpログがとれるようになりました

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の設定

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に設定したポート

結果

  • http(s)通信がリアルタイムに見れるようになりました