備忘録

備忘録

mitmproxyとarpspoofを利用してスマートフォン(Android/iOS)のHTTP(s)通信を見る方法

Ⅰ. はじめに

タイトルの通り「mitmproxyとarpspoofを利用してスマートフォン(Android/iOS)のHTTP(s)通信を見る方法」です。

Ⅲ. やり方

1. IPフォワードを有効にする
echo 1 > /proc/sys/net/ipv4/ip_forward
2. ルーティングを変更する

HTTP(80), HTTPS(443)にきたパケットを全てmitmproxy(8080)にリダイレクトします。

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -j REDIRECT --to-port 8080
3. ARPスプーフィングを行う
ターゲット(スマートフォン 192.168.0.7
デフォルトゲートウェイ 192.168.0.1

この環境の場合以下のコマンドになります。

arpspoof -t 192.168.0.7 192.168.0.1
4. mitmproxyを透過型として起動する
mitmproxy -T --host --ignore 'crashlytics\.com:443'
5. ルート証明書(mitmproxy-ca-cert.pem)をスマートフォンにインストールする

http://mitm.it にアクセスするとルート証明書のインストール画面が表示されます。

6. ログがmitmproxyの画面に表示される

f:id:kagasu:20180120093443p:plain

Ⅳ. Android 7以降について

Android 7(Nougat)以降はセキュリティの為ユーザが任意でインストールした証明書がデフォルトで読み込まれなくなりました。

自作アプリケーションの場合

android:networkSecurityConfig をAndroidManifest.xml で設定するとユーザの証明書が読み込まれるようになります。

その他アプリケーションの場合

APKを逆コンパイルし、AndroidManifest.xmlに変更を加える事でユーザの証明書が読み込まれるようになります。
また、root権限が使える場合は以下のコマンドを実行する事によりユーザー証明書ではなくシステム証明書として認識させる事で回避可能です。

cp /data/misc/user/0/cacerts-added/* /system/etc/security/cacerts/

また、これを自動化したMagisk用モジュールが公開されています。
https://github.com/NVISO-BE/MagiskTrustUserCerts