Quantcast
Channel: CodeSection,代码区,网络安全 - CodeSec
Viewing all articles
Browse latest Browse all 12749

【技术分享】如何在macOS上监控一个APP的HTTPS流量

$
0
0
【技术分享】如何在macOS上监控一个APP的HTTPS流量

2017-06-09 10:20:51

阅读:239次
点赞(0)
收藏
来源: calebfenton.github.io





【技术分享】如何在macOS上监控一个APP的HTTPS流量

作者:ForrestX386





【技术分享】如何在macOS上监控一个APP的HTTPS流量

翻译:ForrestX386

预估稿费:130RMB

投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿


0x00 前言

当你需要逆向分析一个网络协议的时候,或者进行一些关于网络安全方面的行为的时候,你就需要去收集网络中传输的流量数据,通过收集网络中的传输数据信息,你可以去理解网络协议是怎么工作的,或许还能发现网络中传输的敏感信息。

如果网络协议传输的是明文信息,那很好办,直接用tcpdump 或者wireshark等类似的抓包软件就可以获取网络协议传输的信息内容,但是现在越来越多的协议使用了加密机制,比如HTTPS协议,这时候就需要MITM(中间人攻击)进行拦截加密协议。

本篇文章我会向大家介绍如何在 OSX上监控一个app的HTTPS流量以及实验中遇到的问题。


0x01 正文

拦截HTTPS流量的基本步骤

1)生成一个根证书

2)安装这个根证书

3)用proxychains 去代理指定的app

4)使用mitmproxy 去拦截流量

一些需要安装的软件

1、 安装并配置proxychains

brewinstallproxychains-ng

创建一个名为 proxychains.conf 的文件,然后加入以下内容:

strict_chain quiet_mode proxy_dns remote_dns_subnet224 tcp_read_time_out15000 tcp_connect_time_out8000 [ProxyList] http127.0.0.18080

http 127.0.0.1 8080这行最重要,它的意思是说重定向app所有的流量到127.0.0.1:8080 (mitmproxy默认监控端口就是8080),然后我们就可以用mitmproxy在127.0.0.1:8080 监控所有的流量了。

2、使用pip安装并配置mitmproxy
pipinstall--upgradepip pipinstallmitmproxy

这两行命令就可以安装好mitmproxy

执行以下命令运行mitmproxy

./mitmproxy--host

接下来就是给系统安装根证书,默认情况下mitmproxy会自动生成一个根证书(mitm-ca-cert.pem),这个根证书位于~/.mitmproxy下面。

首先执行

open~/.mitmproxy

然后,按下组合键 Command + Space ,然后输入Keychain Access, 回车

然后找到mitmproxy根证书,双击 ,或者将mitmproxy根证书拖拽到Keychain Access 窗口中上述执行OK,之后,你将会看到下图显示内容


【技术分享】如何在macOS上监控一个APP的HTTPS流量

如果你足够细心的话,你会发现删除安装好的mitmproxy 根证书前面有个红叉,这表示系统并不信任这个根证书, 为了让系统信任这个根证书,你需要这样做:右键单击mitmproxy根证书,然后选择"Get Info"(如果你是英文界面的话),展开 "Trust"将: When using this certificate 修改为 Always Trust修改后的内容如下:


【技术分享】如何在macOS上监控一个APP的HTTPS流量

接下来, 你还需要执行以下命令,这样系统才能完全信任这个根证书

sudosecurityadd-trusted-cert-d-rtrustRoot-k/Library/Keychains/System.keychain~/.mitmproxy/mitmproxy-ca-cert.pem

OK,最后的mitmproxy证书信息界面如下:


【技术分享】如何在macOS上监控一个APP的HTTPS流量

看到了吧,mitmproxy 根证书前面的红叉提示不见了,说明系统完全信任了这个根证书

3、开始使用mitmproxy

其实github上mitmproxy的手册写的非常好,很详细,这里我就不过多解释了

现在我们已经做好了

1)配置proxychains 将app的http流量指向了127.0.0.1:8080

2)安装好了mitmproxy的根证书

3)mitmproxy运行OK

现在需要做的就是测试是否工作的OK

在另一个终端窗口执行:

proxychains4-fproxychains.confcurlhttps://calebfenton.github.io/

现在切换到mitmproxy的运行窗口观察是否有流量被捕获到, 结果非常令人失望, 竟然没有捕获到任何流量,为毛?因为系统app 根本没鸟你,我查了一下proxychains 在github上的问题反馈列表,找到了原因 (和SIP有关): https://github.com/rofl0r/proxychains-ng/issues/78 你可以这样解决这个问题:

cp`whichcurl`. proxychains4-fproxychains.conf./curlhttps://calebfenton.github.io/ 或者你可以先安装一个wget,然后将curl替换为wget
brewinstallwget proxychains4-fproxychains.conf./wgethttps://calebfenton.github.io/ 注:wget不是系统app

一旦你观察到mitmproxy捕获到了通信数据,mitmproxy现在工作是正常的, 说明刚才新安装到系统的mitmproxy的根证书被系统信任了, proxychains 也正确地Hook了网络通信数据,看起来都很OK,可能很多人都很满足现在的一切了。

但是当我试图用proxychains Hook python 代码所产生的的网络数据的时候, 问题出现了。

python 代码如下(保存为文件req.py):

importrequests r=requests.get('https://calebfenton.github.io/') print(r) 非常简单的一段代码(前提是你要安装了requests库),和上面curl起到的作用类似,但是执行proxychains4python req.py 的时候出现了错误:

【技术分享】如何在macOS上监控一个APP的HTTPS流量

看到错误信息,我好像知道了问题的原因了,网络数据被Hook给了mitmproxy,mitmproxy给的证书requests根本不信任啊,因为python 代码根本不知道mitmproxy的根证书在哪儿啊,所以我们只要修改python代码,在get请求中指定mitmproxy的根证书路径即可

importrequests r=requests.get('https://calebfenton.github.io/',verify='/Users/caleb/.mitmproxy/mitmproxy-ca-cert.pem') print(r)

使用verify参数指定mitmproxy根证书所在的路径

修改之后一切就Ok了,因为你告诉了requests去信任mitmproxy的证书。其实还有一个问题,如果你不能修改源代码,或者你用了不是requests库的其他模块呢?有个解决办法,对于requests库,如果你不能修改源码,设置一个环境变量REQUESTS_CA_BUNDLE指向/Users/caleb/.mitmproxy/mitmproxy-ca-cert.cer(mitmproxy根证书路径),然后在执行proxychains4

REQUESTS_CA_BUNDLE=/Users/caleb/.mitmproxy/mitmproxy-ca-cert.cerproxychains4pythonreq.py

举例栗子,以修改前的req.py为例(就是不加verify参数那个版本)


【技术分享】如何在macOS上监控一个APP的HTTPS流量

如果是其他非requests库, 可以试着设置一个环境变量 SSL_CERT_FILE 指向/Users/caleb/.mitmproxy/mitmproxy-ca-cert.cer (mitmproxy根证书路径)


0x02. 总结

本篇文章介绍一些我在mitm https 通信试验中遇到的一些小问题,我使用proxychains,是因为我不想用iptables将所有的http流量都重定向到一个监听端口,我只想重定向一个app的流量到指定监听端口。 最后,希望你的试验也能顺利完成。


【技术分享】如何在macOS上监控一个APP的HTTPS流量
【技术分享】如何在macOS上监控一个APP的HTTPS流量
本文由 安全客 翻译,转载请注明“转自安全客”,并附上链接。
原文链接:https://calebfenton.github.io/2017/05/27/monitoring-https-of-a-single-app-on-osx/

Viewing all articles
Browse latest Browse all 12749

Latest Images

Trending Articles





Latest Images