作为我正在开发的 iOS 应用程序安全测试的一部分,我想验证它在连接到各种 API 时是否正确验证了 SSL/TLS 证书。我在我的 Mac 上安装了 mitmproxy 并将其配置为透明代理,然后根据这个透明代理 iOS WiFi 截图配置 WiFi 。iPhone需要很长时间才能显示它已连接到WiFi,然后它就无法访问网络。mitmproxy 中什么也没有出现,包括在它的事件日志中:
mitmproxy 配置的详细信息
我在我的系统 python 中安装了 mitmproxy 0.11.3(并重命名了 OSX 附带的过时的 pyOpenSSL,以便它使用 pyOpenSSL 0.14 与 mitmproxy 通过 pip 一起安装)。
我正在使用以下脚本来配置和启动 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,因为这是我的 Mac 在同一个 WiFi 网络上的 IP 地址,我使用 ifconfig 找到了它:
$ 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
[...]