Gmail Android app的最新版本(在写作本文时是8.7.15.206199545)存在一个不安全的网络安全配置,为通过用户提供的CA实现对Android7以上版本(43% 以上的Android系统)的中间人攻击提供了可能性。
Android Nougat通过引入CA认证提高了安全性,所有API 级别24以上且运行在安卓7以上版本的应用程序,都实现了默认网络安全配置,不信任用户在系统中配置的CA,以防止用户误安装被攻击者控制的CA而引起中间人攻击。
用户添加的CA保护应用数据安全是安卓沙箱的一个关键目标。Android Nougat改变了应用程序对用户或管理员提交CA的交互方式。默认情况下,API级别24以上的应用程序不会使用此类CA,除非应用程序明确选择引入。这种默认的安全配置可以减少应用程序攻击面,并对网络和基于文件的应用程序数据实现统一处理。(https://android-developers.googleblog.com/2016/07/changes-to-trusted-certificate.html))
用户添加的CA
保护应用数据安全是安卓沙箱的一个关键目标。Android Nougat改变了应用程序对用户或管理员提交CA的交互方式。
默认情况下,API级别24以上的应用程序不会使用此类CA,除非应用程序明确选择引入。这种默认的安全配置可以
减少应用程序攻击面,并对网络和基于文件的应用程序数据实现统一处理。
(https://android-developers.googleblog.com/2016/07/changes-to-trusted-certificate.html))
但是,自定义网络安全配置允许特定应用程序信任用户提交的CA,这会明显削弱默认安全配置的安全性。
让我们来看Gmail Android app。在用Droidstat-x做静态分析之前,我已经动态测试了很多应用程序并发现了这个问题。最新版本(8.7.15.206199545)通过设置一个自定义信任锚,就可以在网络安全配置文件中实现对用户提供CA的信任。这意味着,攻击者只要成功诱导用户安装被控制的CA,就可以在同一个网络段中拦截应用程序通信。
网络安全配置文件在/res/xml文件夹中,名称为network_security_config.xml。
<?xml version="1.0" encoding="utf-8"?>
<network-security-config><base-config cleartextTrafficPermitted="true"><trust-anchors><certificates src="system" /><certificates src="user" /></trust-anchors></base-config>
<network-security-config>
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
<certificates src="user" />
</trust-anchors>
</base-config>
要使用Burp Suite模拟中间人攻击,我们需在一个没有被root过的安卓8.1.0系统的设备上安装Burp Suite 根CA。
启动Gmail app,可以获得所有app通信数据,比如最新邮件同步。
另一方面,如果在相同配置下使用谷歌应用商店,因为其使用了默认网络安全配置,所以你无法获得该app的任何HTTP请求,而在Burp套件的Alerts选项卡中会有错误显示。
这个错误还提醒我们证书锁定的重要性。即使用户提供的CA被app安装和信任,证书锁定仍可以帮助我们防御这种攻击。
当出于调试目的或项目还在开发阶段时,可以使用元素<debug-overrides>,该元素仅允许应用程序在调试模式下信任用户提供的CA。
已有应用程序都应该实现API级别24以上,以便在安卓7以上版本运行时受到默认安全配置的安全保护。
另外,申请在应用商店上架的新应用程序被要求实现26级别及以上的API,从2018年11月1日开始,应用程序更新也有同样要求。
实现证书锁定。
2018/5/30 将漏洞报告给谷歌安全
2018/5/30 创建问题80482278
2018/5/30 谷歌安全回复并更改状态为不会修复(故意的行为):
我们已接收您的漏洞提交,决定不将其作为安全漏洞进行修复。在我们看来,您描述的问题只会发生社会工程学中,我们的用户很少收到这种攻击。请参阅https://sites.google.com/site/bughunteruniversity/nonvuln/attacks-facilitating-phishing-or-social-engineering获得更多解释。很抱歉我们的VRP不能接受这份报告。只有对我们用户数据的保密性或完整性造成重大影响的技术安全漏洞的报告才会被接受,我们认为您提到的问题不符合标准。如果您认为我们的理解有误,麻烦告知!
我们已接收您的漏洞提交,决定不将其作为安全漏洞进行修复。
在我们看来,您描述的问题只会发生社会工程学中,我们的用户很少收到这种攻击。请参阅https://sites.google.com/site/bughunteruniversity/nonvuln/attacks-facilitating-phishing-or-social-engineering获得更多解释。
很抱歉我们的VRP不能接受这份报告。只有对我们用户数据的保密性或完整性造成重大影响的技术安全漏洞的报告才会被接受,我们认为您提到的问题不符合标准。
如果您认为我们的理解有误,麻烦告知!
2018/5/30 我们试图证明,基础操作系统会遭受这种类型的攻击,因此不应该放弃这个问题。
2018/5/31 最后的请求没有得到回复。我们试图确认这是否为谷歌的最后决定。
2018/6/4 谷歌安全回复:
您好,我不知道安卓团队为什么得出这样的结论。这不是一个安全漏洞,我们接受这个结论。
2018/6/4 我们回复,并明确指出,研究这个漏洞的最终目标不是为了帮助像之前链接中的示例那样的网络钓鱼或社会工程。
2018/6/5 谷歌安全回复:
重新阅读报告后,我们认为你是对的。我不知道Gmail app是否或为什么这样做,但是它会从Android Nougat的硬件设置中退出。我们会继续调查。
2018/6/8 谷歌安全回复:
感谢您的报告。我们会根据您的报告提出这个漏洞。初看报告时可能会觉得这个问题没那么严重,但是评审团会很快重新评审。评审团将在下次会议上评估您的报告,一旦我们得到更多的信息会及时通知您。您现在要做的就是等待。如果您在2-3周内没有收到我们的回复或者有关于漏洞的其他信息,请告诉我们!
感谢您的报告。
我们会根据您的报告提出这个漏洞。初看报告时可能会觉得这个问题没那么严重,但是评审团会很快重新评审。
评审团将在下次会议上评估您的报告,一旦我们得到更多的信息会及时通知您。您现在要做的就是等待。如果您在2-3周内没有收到我们的回复或者有关于漏洞的其他信息,请告诉我们!
2018/6/12 谷歌安全回复:
您好,感谢您提交的漏洞。我们已将问题提交给有关团队,他们会评估您的报告并决定是否进行改进。关于漏洞奖励计划,我们决定它不符合财务奖励的标准,但我们会在名人堂中感谢您对谷歌安全的贡献:http://www.google.com/about/appsecurity/hall-of-fame/distinction/如果您希望进入名人堂,请在以下网址中创建账户:https://bughunter.withgoogle.com/new_profile您的排名由有效报告的数量决定。
您好,
感谢您提交的漏洞。我们已将问题提交给有关团队,他们会评估您的报告并决定是否进行改进。
关于漏洞奖励计划,我们决定它不符合财务奖励的标准,但我们会在名人堂中感谢您对谷歌安全的贡献:
http://www.google.com/about/appsecurity/hall-of-fame/distinction/
如果您希望进入名人堂,请在以下网址中创建账户:
https://bughunter.withgoogle.com/new_profile
您的排名由有效报告的数量决定。
2018/6/29 我们通知谷歌计划在8月28日向公众发布这一信息,在确认时间是否合适。
2018/6/29 谷歌安全回复:
您好,虽然我们还不能确定是否会修复,但我认为这个日期目前没有问题。感谢您的报告。
2018/8/28 漏洞发布。
https://developer.android.com/training/articles/security-config
校对:jasonk龙莲
[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。