mitmproxy×透過型×ARPスプーフィング
- mitmproxy - an interactive HTTPS proxy の最新のソースが透過型プロキシをサポートしているようなので、iOSネイティブアプリの通信を調査しようと思います
- 最初に http://www.backtrack-linux.org/ のISOをダウンロードします
- BT5R3-KDE-32.iso を選択しました
- 起動させます
- 今回は Virtual PC 2007 を利用しました
- 既に mitmproxy 0.8 がインストールされていますが、透過型ではないので、iOSの設定でHTTPプロキシを指定する必要があります
- しかしこの場合、アプリによっては、期待通りに動作をしないことがあるかもしれません
- 例えばドラコレ&ポーカー
- 透過型プロキシを使うと、アプリからプロキシを通っていることを知ることができないため、このような問題を解決できる可能性があります
- 検証環境は、以下のような感じです
- デフォルトゲートウェイ
- 192.168.0.1
- Virtual PC 上の BackTrack
- 192.168.0.2
- iPad
- 192.168.0.3
- デフォルトゲートウェイ
- mitmproxy をセットアップします
- 最新のソースを clone
root@bt:~# git clone https://github.com/cortesi/mitmproxy.git root@bt:~# git clone https://github.com/cortesi/netlib.git
-
- 依存パッケージをアップデート
root@bt:~# easy_install pyasn1 root@bt:~# easy_install pyopenssl
root@bt:~# cd mitmproxy root@bt:~/mitmproxy# ln -s ../netlib/netlib netlib root@bt:~/mitmproxy# vi libmproxy/authentication.py root@bt:~/mitmproxy# git diff diff --git a/libmproxy/authentication.py b/libmproxy/authentication.py index 500ead6..278719c 100644 --- a/libmproxy/authentication.py +++ b/libmproxy/authentication.py @@ -101,7 +101,7 @@ class HtpasswdPasswordManager(PasswordManager): PasswordManager.__init__(self) entries = (line.strip().split(':') for line in filehandle) valid_entries = (entry for entry in entries if len(entry)==2) - self.usernames = {username:token for username,token in valid_entries} + #self.usernames = {username:token for username,token in valid_entries} def test(self, username, password_token): if username not in self.usernames:
- mitmproxy を透過型プロキシモードで起動します
root@bt:~/mitmproxy# ./mitmproxy -T
- 透過型プロキシの一般的な設定をおこないます
- shellをもう一個立ち上げて、IPフォワードを有効に
root@bt:~# echo 1 > /proc/sys/net/ipv4/ip_forward
-
- ポート 80 と 443 に来たパケットを mitmproxy の 8080 にリダイレクト
root@bt:~# iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080 root@bt:~# iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -j REDIRECT --to-port 8080
- このままだと、iPadから出たパケットは普通にデフォルトゲートウェイから出て行ってしまうので、ARPスプーフィングで BackTrack へ流れるようにしましょう
root@bt:~# arpspoof -t 192.168.0.3 192.168.0.1 0:3:ff:xx:xx:xx 0:0:0:0:0:0 0806 42: arp reply 192.168.0.1 is-at 0:3:ff:xx:xx:xx 0:3:ff:xx:xx:xx 0:0:0:0:0:0 0806 42: arp reply 192.168.0.1 is-at 0:3:ff:xx:xx:xx 0:3:ff:xx:xx:xx 0:0:0:0:0:0 0806 42: arp reply 192.168.0.1 is-at 0:3:ff:xx:xx:xx
- arpspoof を動かした状態で、iPadで通信をおこなうと mitmproxy に表示されると思います
- HTTPSの内容も確認したい場合は http://mitmproxy.org/doc/certinstall/ios.html を参考にiOSに証明書をインストールしてください
- 証明書は ~/.mitmproxy/mitmproxy-ca-cert.pem にあります
- 最後に、実際にアプリの通信を見たときのスクリーンショットを置いておきます
- ドラコレ&ポーカー
HTTPSも
確かに取れているということで
もうそろそろ
いいですよね
ではまた
おやすみなさい…。