Bypass SSL Pinningでアプリ版Twitterの通信を監視
急に、Bypass SSL Pinningでアプリ版Twitter(現X)の通信を監視したくなるときってありますよね
今回はAndroid版Twitterアプリの通信の解析を行います
一般に、SSL PinningされているアプリのHTTP通信は調べることはできませんが、Bypass することで調べることができます
主に参考にした記事はこちらです
https://4pfsec.com/ssl-pinning-bypass
筆者の環境は、MacBook Air M3チップ、Sonoma 14.4.1です
必要なもの
①Androidのエミュレータ
今回はAndroid Studioを使います。こちらからダウンロードしましょう
筆者はApple SiliconのためAndroid Studioしか使えませんが、皆さんは好きなエミュレータを使えば良いと思います
②Burp Suite
こちらからCommunity Editionをダウンロード
③Frida
pythonベースなので、pipでダウンロードできます
$ pip install frida
$ pip install frida-tools
それから、https://github.com/frida/frida/releasesから
・frida-server-xx.x.x-android-arm64.xz
・frida-gadget-xx.x.x-android-arm64.so.xz
の2つをダウンロード
両方解凍し、
前者は、frida-serverという名前に変えて適当な場所に
後者は、gadget-android-arm64.soという名前に変えて、~/.cache/frida/ に移動(無ければ作成)
root化
Google Playが入っているAndroid Studioのエミュレータはroot化されていませんので、root化します
エミュレータの起動
まずエミュレータを起動します
こちらの記事が参考になります
筆者は
・device Pixel 8 Pro
・image R arm64-v8a Android11.0 (Google Play)
を選びました
Android11以上でGoogle Playと書かれているものを選べば大丈夫だと思います。皆さんの環境に合わせて適宜変更してください
adbコマンドの準備
adbコマンドが使えるようにします。元から使える環境であればそのままで。Apple Siliconの方はこちらの記事が参考になります
$ adb devices
と実行し、実行中のエミュレータが表示されたらOKです
このとき、offlineの謎のデバイスが表示されることがあります(筆者は表示されました)
調べるとどうやら、Bypass SSL Pinning と全く関係ないのですが、音楽関係のソフトで表示されるようです?(真偽は不明、参考記事はこちら)
気になる人は切っておきましょう(というか、adbコマンドを実行する際にいちいち -s でデバイスと指定しないといけないので切るべき)
rootAVDの実行
$ git clone https://github.com/newbit1/rootAVD.git
$ cd rootAVD
$ ./rootAVD.sh
を順に実行
Command Examplesがたくさん出てくるので、その中の
./rootAVD.sh system-images/なんちゃらなんちゃら/ramdisk.img
の行をコピーしてそのまま実行
実行が完了すると勝手にエミュレータの電源が落ちます(Yes/Noが出てきたらどちらでも良いのでクリック。数秒待てば勝手に消える)
実行が完了しない場合、エミュレータのAndroidのバージョンが高すぎる可能性があります
Android Studio の Device Manager に戻ってきたら、
3点リーダー > Cold Boot で起動します
再生ボタンから起動しようとしても、起動しませんでした
Magisk
起動すると「Magisk」というアプリがインストールされているので、起動します
起動するとすぐになんか出てくるので「OK」をクリックしてください
エミュレータが勝手に再起動します
super user になる
ターミナルに戻り、次のコマンドを実行
$ adb shell su
エミュレータ側になんか表示されるので、10秒以内に「GRANT」をクリック
これでめでたくroot化できました
Burp Proxyの設定
Proxy listenersの追加
Burp Suiteを起動し、Proxy > Proxy settingsと進む
「Proxy listeners」のaddをクリック、「Bind to port」は8080を、「Specific address」は192.168.x.xを選び、okをクリック
それから少し下にある「Import / export CA certificate」をクリックし、derファイルを適当な場所に保存します
エミュレータでのプロキシ設定
エミュレータの設定アプリ > Network&internet > Wi-Fi > 設定マーク > 右上の鉛筆
と進み、AndroidWifiの設定を開き、右上の編集マークをクリック
プロキシを手動
Proxy を Manualに
Proxy hostname を 192.168.x.x
Proxy port を 8080
にして保存
次に、ターミナルに戻り、次のコマンドを実行
$ adb push <先ほど保存したderファイルのパス> /sdcard/cacert.cer
エミュレータの設定アプリに戻り、「CA」と検索、少し下にある「CA Certificate」を選び、「Install anyway」をクリック。ファイルアプリのUIになるので、ハンバーガーメニューから端末名を選び、出てきた「cacert.cer」をクリックすると証明書がインストールされます
この時点で、Chromeアプリで適当なサイトを見ると、Burp Suite の「HTTP history」で通信が監視できているのがわかります
見えない場合、エミュレータのWi-Fiがいつの間にか切れているかもしれません。筆者もこれの現象に遭遇し、こちらのサイトを参考に設定し、再起動を何度か繰り返したら復帰しました
通常のHTTP通信は監視できるようになりましたが、Twitter は SSL Pinning されているので、さらに作業を進めていきます
Frida Serverの起動
$ adb push <frida-serverファイルのパス> /data/local/tmp/
を実行し、frida-serverファイルをエミュレータ内に移動
$ adb shell
でエミュレータ内のshellに入ります
su
cd /data/local/tmp/
chmod +x frida-server
./frida-server &
を順番に実行し、謎の数字(PID)が表示されたら成功です
SSL PinningをBypass
ようやく本題です
Google Play から Twitter(現X)をインストール
そして次のコマンドを実行
$ frida --codeshare masbog/frida-android-unpinning-ssl -U -f com.twitter.android -U
エミュレータ内で Twitter が立ち上がり、Burp Suite の HTTP history で通信内容が確認できます
お疲れ様です
最後までご覧いただきありがとうございました
この記事が気に入ったらサポートをしてみませんか?