没有修补应用程序就没有办法绕过证书固定吗?

信息安全 tls 证书固定 tls-拦截
2021-09-10 14:57:01

除了修补应用程序的编译代码/证书文件(特定于应用程序,需要手动分析和修补 + 超级用户/root)之外,您还能做任何事情来拦截使用证书固定的应用程序的 TLS 流量吗?

答案似乎是否定的,来自mitmproxy文档

证书固定

一些应用程序使用证书固定来防止中间人攻击。这意味着如果不修改 mitmproxy 和 mitmdump 的证书,这些应用程序将不会接受它们。建议使用直通功能,以防止 mitmproxy 和 mitmdump 拦截到这些特定域的流量。如果要拦截固定连接,则需要手动修补应用程序对于 Android 和(越狱)iOS 设备,存在各种工具来完成此操作。

我了解证书固定是这些应用程序信任模型的一部分,同时作为用户,我想在我的设备上本地嗅探/拦截他们的流量以进行分析,以便对我的习惯进行统计/洞察和行为,例如发送的电子邮件(使用 ProtonMail)、发送的消息(使用 Signal/WhatsApp)或可以从流量分析中推断出的任何事件(使用类似于/as-powerful-as mitmproxy 的 Python 脚本 API或 Scapy 的过滤器)。

2个回答

,没有应用程序修补或使用调试器(跟踪器)就无法绕过证书固定。原因是,简单来说,证书固定是指将 CA 证书硬编码到应用程序中。此应用程序将证书设置为建立网络连接的唯一信任根在 Android 上,它是通过TrustManager实现执行的。

您有以下选择:

  1. 逆向工程、修改和重新打包应用程序。
  2. 将 Frida 附加到取消固定证书(例如,有一个 Android 代码片段)。
  3. 在加密之前附加 Frida 以读取流量。

您不需要使用 Frida Gadget 的 root(超级用户、越狱),它应该在安装之前注入到应用程序中。例如,看看如何在 Android 上使用没有 root 的 Frida

请注意,在某些情况下,应用程序没有真正的证书固定。例如,存在一个已知问题,即默认情况下 Android 应用程序只信任系统证书存储,因此默认情况下用户的自定义 MITM 证书无法正常工作。

如果您询问是否有办法在不生根设备或修补可执行文件的情况下解密 TLS 数据,答案可能是否定的。

但是,如果您询问是否有其他方法可以解密 TLS 数据而无需绕过 TLS 证书固定。

例如,这是我为解密 iOS 设备上的 TLS 数据而制作的一个小工具,它利用 Frida 框架注入自身并挂钩处理 TLS 加密的函数,以便您可以在加密之前打印出普通缓冲区。

https://github.com/gkpln3/ios_ssl_sniffer