Hello there, ('ω')ノ
🎯 なぜ可視化が必要なのか?
多くのAndroidアプリはHTTPSを使って安全な通信を行っています。 しかし診断者の立場からすると、こういった「見えない通信」こそ中身を確認したいわけです。
たとえば…
- ユーザー情報やトークンがどんな形式で送信されているか?
- 平文でパスワードが飛んでいないか?
- 不要な情報(内部デバッグログなど)が含まれていないか?
- 通信先が信用できるドメインなのか?
これを確認するには、「実際の通信をその場で見て解析する」=可視化が必要になります。
🧰 使用する2つのツール
✅ Burp Suite(バープスイート)
- 通信内容のキャプチャ&改ざんが可能なプロキシ型診断ツール
- HTTPS通信の中身も表示可能(条件付き)
✅ Frida(フリーダ)
- Androidアプリの内部動作をリアルタイムで操作・改変できる動的解析ツール
- SSLピンニングなどをバイパスしてBurpで通信可視化するために使用
📡 通信内容の可視化:診断フローの全体像
[ Android端末 ] ←→ [ Burp Suite ] ←→ [ 実際のサーバー ] ↑ Frida で暗号化回避
この構成により、「アプリがSSLでがっちり通信していても」「証明書ピンニングされていても」通信中身を傍受できるようになります。
🛠 ステップ①:Burp Suiteでプロキシ環境を整える
PCにBurp Suiteをインストール https://portswigger.net/burp
スマホとPCを同一Wi-Fiに接続
スマホにプロキシを設定(PCのIP + ポート8080)
Burpで 「Proxy → Intercept → On」 にして待機
🛠 ステップ②:Burpの証明書をスマホにインストール
- スマホのブラウザで
http://burp
にアクセス cacert.der
をダウンロード- 拡張子を
.cer
に変更してから、スマホにインストール
注意:Android 7以降ではユーザー証明書ではシステムレベルのHTTPSがバイパスされないため、アプリ側がこれを信頼するようにしなければなりません。ここで登場するのが Frida です!
🛠 ステップ③:FridaでSSLピンニングをバイパスする
✅ Fridaの基本セットアップ(PC側)
pip install frida-tools
✅ Android端末にFridaサーバーを導入(rootまたは仮想環境)
adb push frida-server /data/local/tmp/ adb shell "chmod 755 /data/local/tmp/frida-server" adb shell "/data/local/tmp/frida-server &"
✅ バイパススクリプトの実行(例:SSL unpinning)
frida -U -n com.example.app -l frida-ssl-unpinning.js
このスクリプトでは、SSL証明書のチェック処理(checkServerTrusted()
など)を無効化し、BurpによるMITMを許可します。
スクリプトはGitHubなどで「frida-android-ssl-pinning-bypass」で検索すると複数出てきます。
🔍 実際に通信を見てみよう!
ここまで準備ができたら、アプリを起動し、ログインやAPIアクセスなどを実行。 Burpの「HTTP history」タブに、通信内容(JSONやパラメータなど)が表示されているかを確認します。
✅ 確認すべき内容
観点 | 内容 |
---|---|
認証情報 | Authorizationヘッダーやトークンが漏れていないか |
パラメータ | ユーザーIDや端末情報などが過剰に送信されていないか |
平文の秘密情報 | パスワードやメールアドレスが暗号化されず送信されていないか |
不要な通信 | デバッグ用や未使用APIが残っていないか |
🛡️ Fridaを使う理由まとめ
Fridaを使うと:
- SSLピンニングを回避できる
okhttp
,TrustManager
,WebView
などのクラスにフックを仕掛けて動作をリアルタイムで確認できる- 通信内容だけでなく、通信の発生タイミングや中で使われる鍵・トークンの確認も可能
✅ まとめ
- Burp Suiteを使えば、アプリの通信内容を詳細に観察&改ざんできる
- SSLピンニングがある場合はFridaで証明書検証を一時的に無効化する必要がある
- 通信可視化は、認証情報の扱いや情報漏洩の有無を確認する上で最重要項目
- 「HTTPSだから大丈夫」と思わず、実際に見て確認することが診断の基本!
Best regards, (^^ゞ