開発中の iOS アプリのセキュリティ テストの一環として、さまざまな API に接続するときに SSL/TLS 証明書が正しく検証されることを確認したいと思います。Mac に mitmproxy をインストールし、それを透過プロキシとして構成してから、この透過プロキシ iOS WiFi スクリーンショットに基づいて WiFi を構成しました。iPhone が WiFi に接続されていることを示すのに非常に長い時間がかかり、その後ネットワークにアクセスできなくなります。イベントログを含め、mitmproxy には何も表示されません。
mitmproxy 構成の詳細
システムpythonにmitmproxy 0.11.3をインストールしました(そして、OSXに同梱されている古いpyOpenSSLの名前を変更して、pipによってmitmproxyとともにインストールされたpyOpenSSL 0.14を使用するようにしました)。
次のスクリプトを使用して、pf と mitmproxy を構成および開始しています。
#!/bin/bash -x
sudo sysctl -w net.inet.ip.forwarding=1
# sudo sysctl -w net.inet.ip.scopedroute=0
## OSX can't change the net.inet.ip.scopedroute kernel flag in user space so I used:
## sudo defaults write "/Library/Preferences/SystemConfiguration/com.apple.Boot" "Kernel Flags" "net.inet.ip.scopedroute=0
## and then rebooted
sudo defaults read /Library/Preferences/SystemConfiguration/com.apple.Boot
cat > pf.conf << _EOF_
rdr on en0 inet proto tcp to any port 80 -> 127.0.0.1 port 8080
rdr on en0 inet proto tcp to any port 443 -> 127.0.0.1 port 8080
_EOF_
cat pf.conf
sudo pfctl -d
sudo pfctl -f pf.conf
sudo pfctl -e
mitmproxy -T --host
インターフェイス en0 は、私の Mac の WiFi 接続です。
そのスクリプトからの出力 (control-C で mitmproxy を停止した後に表示されます) は次のようになります。
$ ./transparent.sh
+ sudo sysctl -w net.inet.ip.forwarding=1
net.inet.ip.forwarding: 1 -> 1
+ sudo defaults read /Library/Preferences/SystemConfiguration/com.apple.Boot
{
"Kernel Flags" = "net.inet.ip.scopedroute=0";
}
+ cat
+ cat pf.conf
rdr on en0 inet proto tcp to any port 80 -> 127.0.0.1 port 8080
rdr on en0 inet proto tcp to any port 443 -> 127.0.0.1 port 8080
+ sudo pfctl -d
No ALTQ support in kernel
ALTQ related functions disabled
pf disabled
+ sudo pfctl -f pf.conf
pfctl: Use of -f option, could result in flushing of rules
present in the main ruleset added by the system at startup.
See /etc/pf.conf for further details.
No ALTQ support in kernel
ALTQ related functions disabled
+ sudo pfctl -e
No ALTQ support in kernel
ALTQ related functions disabled
pf enabled
+ mitmproxy -T --host
iOS構成の詳細
iOS 8.1 で物理的な iPhone5s を使用しており、Mac と同じ WiFi ネットワークに接続しています。私のWiFi構成は次のようになります。
192.168.20.118 を使用しました。これは、ifconfig を使用して見つけた同じ WiFi ネットワーク上の Mac の IP アドレスであるためです。
$ ifconfig
[...]
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
ether xx:xx:xx:xx:xx:xx
inet6 fe80::22c9:d0ff:fe84:983b%en0 prefixlen 64 scopeid 0x4
inet 192.168.20.118 netmask 0xffffff00 broadcast 192.168.20.255
nd6 options=1<PERFORMNUD>
media: autoselect
status: active
[...]