【问题标题】:Testing an iOS app's SSL/TLS certificate validation using a transparent mitmproxy on OSX在 OSX 上使用透明的 mitmproxy 测试 iOS 应用的 SSL/TLS 证书验证
【发布时间】: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


【解决方案1】:

我遇到了同样的问题。就我而言,我在设置面板中关闭了 Mac OS 防火墙。它可以工作,我可以使用 mitmproxy 作为透明代理。

【讨论】:

【解决方案2】:

我今天遇到同样的问题。我解决了它只设置了 dns。我认为 mitmproxy 没有提供 dns

【讨论】:

  • 已经三年多了,所以我没有用来测试这个的任何设备,但我相信 DNS 会解释我看到的行为。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-14
  • 2015-05-19
  • 2022-08-23
  • 1970-01-01
  • 2018-02-10
  • 2016-04-16
  • 1970-01-01
相关资源
最近更新 更多