日前开发者调试工具 HTTP Toolkit 发布了一篇文章,文章直指 Android 正在变得封闭,不再允许开发者修改系统内置根证书进行调试,这意味着开发者无法通过诸如替换证书或中间人劫持的方式来检测某些流量。
这种变化是从 Android 7.0 版开始的,但彼时开发者还有办法应对,然而在 Android 14 中,开发者已经无法再修改内置根证书,因此 HTTP Toolkit 抱怨 Android 走向封闭的同时,也提醒有需要的开发者不要升级到 Android 14。
问题在哪里:
Android 系统的证书存储库位于 /system/etc/security/cacerts/,尽管从 Android 7.0 开始开发者无法直接修改证书库,但如果 root 了那么还可以修改证书库路径,直接注入自己需要的证书,比如自签名的泛证书。
而在 Android 14 中,谷歌做了一项可以快速反应的安全措施:通过 Google Play 更新安卓系统的证书库。
这样做也不是没有原因,以前证书绑定在系统里,谷歌无法直接更新,这导致有些证书被吊销后谷歌也无法及时操作,这也导致注入 Let's Encrypt 因为需要兼容旧版安卓系统,不得不推迟证书更新,因为新证书不受旧版安卓系统的信任。
后续谷歌可以随时通过 Google Play 更新证书库,包括加载新的 ROOT CA 和吊销某些 ROOT CA,这让谷歌可以快速应对 CA 行业的某些问题。
然而问题在于这种新的更新方法不再从 /system/etc/security/cacerts/ 读取证书,而是从另一个路径 /apex/com.android.conscrypt/cacerts/ 读取证书。
而 APEX 容器背后确切的机制很难完全理解,因为存在很多细节没有公布出来,而在测试的时候开发者也发现尝试修改这个目录是没用的,系统会直接忽略修改。
因此即便注入自签名的证书也无法被系统读取,所以也没法再使用中间人之类的手段进行劫持,来达到调试某些 TLS 流量的目的。
后果是什么?
好消息是 Android 14 的这项变化有助于大幅度提高 Android 对 CA 行业的响应速度,例如快速吊销或信任证书,这将有助于提高 Android 设备的安全性。
坏消息就是对开发者和安全研究人员来说这就很难受了,因为无法让系统信任自签名证书,这将对调试和安全分析工作产生严重影响。
目前谷歌还没有就这类东西发布支持文档,不知道这类问题后续是否有解决方案。
版权声明:感谢您的阅读,除非文中已注明来源网站名称或链接,否则均为蓝点网原创内容。转载时请务必注明:来源于蓝点网、标注作者及本文完整链接,谢谢理解。