如何嗅探iOS设备的HTTPS流量



嗨,我叫Andrey Batutin,我是DataArt的高级iOS开发人员,今天我们将嗅探您iPhone的HTTPS流量。

FoodSniffer及其与之一起吃


以非常简单的iOS应用程序FoodSniffer为例 。 根据一天中的时间,它向用户显示吃什么。



应用程序从服务器接收以下形式的JSON:

[ { "name" : "soup", "consumePeriod" : "morning" }, … ] 

在这种情况下,服务器是Dropbox,可以在此处查看JSON。

问题编号1


出现了一个错误,该应用程序只显示一个,而不是早上允许的食物列表中的两个项目。

检查出问题的一种方法是查看服务器返回给您的JSON。

如何嗅探流量?


假设您的MacOS计算机和iOS设备在同一本地网络上,如下所示:



无论计算机流量如何,流量都从iOS设备通过路由器流向服务器。

要读取iOS设备的流量,我们需要使其通过Mac。 像这样:



另外,我们将需要一个HTTP / S 代理服务器 ,通过它可以监视/修改iOS设备的通过流量。

另一个非常重要的任务是能够嗅探HTTPS流量。 问题在于创建了HTTPS协议,因此,除了客户端和服务器之外,没有人可以读取HTTPS请求中传输的内容。 因此,HTTPS代理还必须随附SSL证书 ,这是使用HTTPS流量所必需的。

换句话说,我们需要在自己的网络上实施“ 中间人攻击”。



Charles Web调试代理应用程序


如您所见,嗅探HTTPS流量是一个多阶段的任务,因此,为了尽可能简化我的生活,我使用了Charles Proxy

让我们从缺点开始:

  • 它是有偿的,但是试用版中的唯一限制是Charles的工作时间不能超过30分钟,然后必须重新启动。 启动仍然有五秒钟的延迟。 这很烦人,但是你可以活下去。
  • 如果您需要真正的黑客工具才能在24/7全天候远程服务器上运行,甚至使用普通的CLI,Charles也不适合您。
  • 如果您使用的是Windows,最好选择Fiddler ,它也是免费的。
  • 如果您需要用于大量设备(超过两个或三个)的代理服务器,Charles不适合您。
  • 如果您需要使用纯格式的TCP / IP数据包,请使用Wireshark

现在的优点:

  • 用户友好的用户界面。 Charles不需要任何特殊知识来安装,配置或使用。 普通的MacOs窗口应用程序。
  • 适用于iOS的HTTPS-Charles具有一组工具,可使从您的iOS设备进行HTTPS嗅探尽可能简单。
  • 功能-Charles可以嗅探,修改通过它的流量,模拟慢速Internet,收集统计信息,以各种格式导入/导出流量。
  • 适用于Windows和Linux。

对我来说,这是使用iOS设备时功能和易用性比率的最佳解决方案。

Charles和iOS设备设置


下面将介绍iOS设备与Charles Proxy一起使用的初始设置过程。

1.在计算机上启动Charles:



2.在您的iOS设备上安装Charles Root证书:

从菜单中,选择帮助-> SSL代理->在移动设备或远程浏览器上安装Charles Root证书。



将出现以下窗口:



3.在iOS设备的网络设置中,指定Charles Proxy的IP和端口:



根据您的网络体系结构,运行Charles的IP地址可能会有所不同。

4.在iOS设备上打开浏览器,然后点击链接-http://chls.pro/ssl



5.在设备上安装Charles SSL证书:



6.我们在设备设置中表明我们完全信任此证书:



具有iOS 10或更高版本的设备需要第六阶段。

在第5-6阶段,我们在Charles设备上安装了SSL证书,并表示我们信任它。 也就是说,现在所有使用此证书签名的HTTPS通信都不会被ATS阻止。

如何观看iOS设备流量


打开FoodSniffer应用。 如果正确完成了代理设置,则应该看到如下屏幕:



在Charles Proxy中,转到工具->无缓存。

并完全关闭代理服务器上的缓存。



在更新产品列表之后,该应用程序实现了“推入刷新”功能,您应该在Charles左侧的列表中看到https://www.dropbox.com 。 右键单击它,然后选择“ 启用S​​SL Proxing”



之后,再次更新应用程序中的产品列表。 现在,您应该看到类似以下内容:



现在,我们可以自由读取来自Dropbox上应用程序的JSON的HTTPS流量。

但这还不是全部!

Dropbox不会直接从dropbox.com主机提供JSON。 相反,它返回302响应并重定向到正在从中下载数据的另一个主机。

您可以通过查看以下查询的原始响应来找到它:



在这种情况下,它是-
uc9c29db95802af8490afc3afda9.dl.dropboxusercontent.com

您很可能会拥有稍微不同的主机。

然后启用S​​SL Proxing:已启用

我们将再次更新FoodSniffer

现在,我们终于可以看到应用程序显示的真实JSON!



我们看到晚上只有一种食物-威士忌,写给我们的团队负责人,然后去喝咖啡,问题不在我们这边。

*该项目使用已经更正的JSON,晚上有两种食物:啤酒和威士忌。
*如果在窗口左侧的列表中没有看到主机http://uc9c29db95802af8490afc3afda9.dl.dropboxusercontent.com或类似的主机,请尝试多次更新应用程序中的产品列表。

问题2,或如何更改iOS设备的HTTPS流量


后端团队修复了晚上的菜单,现在可以正确形成JSON。 但是,如果是早晨,而又不想等到晚上检查修复方法,该怎么办?

一种选择是使用Charles更改Dropbox附带的JSON。

在这种情况下,我们需要从晚上更改到早上的 消耗 时间

为此,请从菜单中选择工具->重写

在出现的“ 重写设置”窗口中,添加新的覆盖类别-dropbox



通过在“ 编辑位置”菜单中指定https端口来添加主机:



之后,我们在“ 重写规则”菜单中添加重写规则,如下所示:



也就是说,现在在我们服务器的响应的每个正文中,“ ”一词将被替换为“ ”一词。

如有必要,我们可以更改HTTP请求/响应的任何部分,并使用正则表达式替换文本。

现在,在更新列表之后,我们应该看到四种类型的产品:



结论


Charles非常简单,是共享软件,具有丰富的HTTPS代理功能。 从我的角度来看,在MacOS和iOS设备上使用时效果最佳。

这绝不是嗅探流量的唯一方法。 对于HTTP / S流量, Fiddler也被广泛使用。 如果您需要更深入地研究TCP / IP堆栈,可以使用Wireshark

此外,还有证书固定问题。 如果在您的应用程序中实现,则需要将Charles SSL证书添加到允许的证书列表中,或者使用Frida之类的工具在应用程序级别上禁用证书固定。 我希望在下一篇文章中讨论更多。

如果您分享您在监控流量方面的经验,包括HTTP / S,技巧和Lifehacks,我将非常高兴。

注意事项 请仅将此技术用于您的应用程序。 成为白色兔子黑客!

注意2。最近,有关此故事的报道以乌克兰语发布,但我以俄语发布了这是第一次。

Source: https://habr.com/ru/post/zh-CN419677/


All Articles