Android / iOS 应用内浏览器上的证书固定

Posted

技术标签:

【中文标题】Android / iOS 应用内浏览器上的证书固定【英文标题】:Certificate Pinning on Android / iOS in-App Browser 【发布时间】:2019-09-26 17:18:09 【问题描述】:

我的公司遵循移动设备的证书固定。我们开始在我们的移动应用(类似于 google、facebook 和其他企业公司)中通过应用内浏览器添加登录。我与实现此功能的网络团队进行了交谈,他们从未听说过证书固定,这是移动设备上的常见做法。

我很好奇 chrome / safari 是自动证书 pin,还是你必须在浏览器中手动执行的操作。

【问题讨论】:

【参考方案1】:

我很好奇 chrome / safari 是自动证书 pin,还是你必须在浏览器中手动执行的操作。

Chrome 支持 HPKP,但在桌面版和 android 版的 Chrome 72 版本中一直支持 removed。

您可以看到支持它的浏览器的完整列表here,现在看起来像这样:

但具有讽刺意味的是,这个网站说它在桌面上被删除了,但在 Android 上却没有,而且 ios Safari 似乎从未支持过。

他们从未听说过证书固定,这是移动设备上的常见做法。

我想提醒您,可以绕过证书固定,因此您不能将其用作唯一的安全措施。您可以阅读我写的文章Bypassing Certificate Pinning 了解更多信息,了解如何在移动应用中绕过证书固定。

在本文中,您将学习如何重新打包移动应用程序以使其信任自定义 ssl 证书。这将允许我们绕过证书固定。

【讨论】:

我不同意您绕过证书固定的观点。一旦您承认攻击者可以修改已安装的应用程序,任何东西都可以被绕过,包括代码。您还可以通过删除 dex 字节码中的证书固定配置来绕过它,或者在设备上解密后拦截流量并将其发送到另一台服务器。如果攻击者可以物理访问设备并修改已安装的应用程序,那么所有的赌注都将失败。 @spierce7 我在我的文章中声明证书固定绕过说明在攻击者使用它控制的设备的情况下,我已经说明了最简单的方法,但还有其他更复杂的方法退出,比如删除 dex 字节码,正如你提到的,或者在运行时使用检测框架,比如 Frida 或 xPosed,就像在这个 video 中一样。攻击者绕过固定在自己设备上的应用程序的常见用途是了解应用程序和 API 之间的通信是如何发生的,然后对 API 发起攻击。 @spierce7 是的,在攻击者控制的设备中,他可以通过再次使用 Frida 或 xPosed 来更改代码行为,甚至通过挂钩正确的调用来获取加密数据。现在,关于修改和绕过他无法控制的设备中的固定是另一段历史,但并非不可能,但需要一系列漏洞/操作,并且用户通过社会工程安装了一些受感染的应用程序。

以上是关于Android / iOS 应用内浏览器上的证书固定的主要内容,如果未能解决你的问题,请参考以下文章

从 Android 上的应用内浏览器重定向到 Chrome 的最佳方式?

证书固定:应用程序从 android 和 ios 的应用程序数据中获取旧证书?

Android/Ios 应用内计费。唯一身份

由于 BoringSSL 证书验证失败,iOS 上的安全 websocket 连接失败

iOS 允许无效证书,而 android 不允许

Android 和 iOS 上的本地存储有多持久?