在 Android 应用上拦截 SSL 流量

信息安全 tls 证书 中间人 安卓 代理人
2021-09-10 17:49:21

我正在尝试拦截来自我的 Android 应用程序的 SSL 流量以测试安全性。我正在使用证书固定,希望可以防止人们窥探。我已经通过配置 ProxyDroid 来通过我的代理路由流量进行测试,为此我使用了 Fiddler 和 Charles。但是,我使用这两个代理服务器软件得到了不同的结果。

使用 Fiddler,我无法拦截流量,并且我的应用无法连接到服务器。我什至手动将 Fiddler 根证书导入 /system/etc/security/cacerts 并验证它是否显示在系统信任库中,但我的应用程序仍然正常运行。

然而,有了 Charles,我什至不需要将根证书导入我的 Android 手机。开箱即用,我能够拦截我的应用程序和服务器之间的所有 SSL 流量。

所以我的问题是,即使 Fiddler 做不到,Charles 怎么可能做到这一点?

3个回答

如果 Charles 代理能够拦截 SSL/TLS 流量,则证书验证失败。这表明移动设备没有正确验证服务器的证书。

在移动安全评估中,可以通过挂钩平台的 SSL/TLS 实现并更改证书验证的工作方式来禁用证书锁定。这种攻击的一个例子是Android SSL bypassiOS SSL killswitch

大多数情况下,即使您已经为应用程序实施了证书固定,也可以拦截应用程序流量,但是当您使用 Charles 代理拦截时,请求应该被加密。但是可以使用 SSLBypass、SSL Trust Killer、iOS SSL Kill Switch 来拦截流量,使用 Burp 等代理。

您为应用程序编写的证书锁定代码中应该存在一些缺陷。

如果证书固定正确完成,那么假设您没有篡改应用程序,则没有代理可以拦截流量。

我建议您在此处查看有关如何实施证书固定的一些很好的示例