【发布时间】:2015-01-15 16:45:14
【问题描述】:
作为我正在开发的 iOS 应用程序安全测试的一部分,我想验证它在连接到各种 API 时是否正确验证 SSL/TLS 证书。我在我的 Mac 和configured it as a transparent proxy 上安装了 mitmproxy,然后基于这个transparent proxy iOS WiFi screenshot 配置了 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
Interface 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
[...]
【问题讨论】:
-
这对我来说真的很好。 (1) 您使用的是哪个 OSX 版本? (2) 你能在 Wireshark 中观察到网络上有趣的东西吗?随意跳入 mitmproxy irc 频道并 ping cortesi 或我,以便我们一起仔细观察。
-
OSX 1.9.5(小牛队)。 Wireshark 不显示来自或来自设备的任何流量。我也尝试了第二台设备,这次是运行 iOS 8.1 的 iPad 4。结果相同。
-
我很确定 mitmproxy 工作正常,因为我可以通过在 iOS 设备上配置 https 代理来连接它(在从 mitmproxy 命令行中删除 -T 标志之后) .然而,透明代理似乎不起作用。
-
非常奇怪。任何不寻常的防火墙/路由器配置?您是否可以访问另一台计算机,您可以将其配置为透明地使用 mitmproxy,然后在那里运行 wireshark?您可能会从路由器或类似的地方获得 ICMP 重定向。
-
为什么不使用
virtualenv而不是重命名系统OpenSSL python 模块? dabapps.com/blog/introduction-to-pip-and-virtualenv-python
标签: ios macos ssl-certificate mitmproxy security-testing