本站已关停,现有内容仅作科研等非赢利用途使用。特此声明。
查看: 1884|回复: 0
打印 上一主题 下一主题

防止 Android 应用意外回退到明文通信方式

[复制链接]
跳转到指定楼层
1#
发表于 2016-5-31 12:11:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 truthrudy 于 2016-5-31 12:13 编辑

发布人:Android 安全团队 Alex Klyubin

当您的应用使用明文网络通信(例如 HTTP)与服务器通信时,通信将可能被第三方窃听和篡改。这可能会泄露有关您的用户的信息并敞开应用的大门,使之可能被注入未经授权的内容或遭到非法利用。理想情况下,您的应用应当仅使用安全通信,例如使用 HTTPS 取代 HTTP。此类通信受到保护,可防止遭到窃听和篡改。

许多 Android 应用已经仅使用安全通信。然而,有些应用偶尔会意外回退到明文通信方式。例如,某个服务器组件中的某个意外改动可能会导致服务器为应用提供 HTTP URL,而不是 HTTPS URL。随后,该应用会继续以明文方式进行通信,而不会有任何用户可见的提示。应用的开发者和用户可能不会觉察到这种情况。

甚至,即便您相信您的应用仅使用安全通信,也请务必使用 Android Marshmallow (Android 6.0) 提供的新机制来发现并防止意外的回退。


新的保护机制

对于仅使用安全通信的应用,Android 6.0 Marshmallow(API 级别 23)引入了两种机制来解决回退到明文通信的问题:(1) 在生产/安装库中,禁止明文通信,以及 (2) 在开发/QA 期间,在遇到任何非 TLS/SSL 通信时,予以记录或者触发崩溃。下文将更详细地介绍这两种机制。


在生产库中禁止明文通信
要防止应用的安装库回退到明文通信,请在应用的 AndroidManifest.xml 文件中,在 application 元素中声明android:usesCleartextTraffic=”false” 属性。此声明指示该应用不使用明文网络通信,并使 Android Marshmallow 的平台网络堆栈禁止该应用中的明文通信。例如,如果您的应用意外尝试通过 HTTP 明文请求登录用户,该请求将被阻止,该用户的身份和密码信息不会泄露到网络上。

您不必将应用的 minSdkVersion 或 targetSdkVersion 设置为 23 (Android Marshmallow),也可使用android:usesCleartextTraffic。在早期平台上,此属性会直接被忽略,因此,不会有任何影响。

请注意,WebView 尚不支持此功能。

在特定的情形下,明文通信可能仍会进出应用。例如,套接字 API 会忽略明文策略,因为它并不知道其收发的数据是否可被归类为明文。另一方面,Android 平台 HTTP 堆栈则遵从此策略,因为它们知道通信是否为明文。

Google AdMob 的设计也遵从此策略。如果您的应用声明其不使用明文通信,则只能通过该应用提供 HTTPS 广告。

建议使用第三方网络、广告和分析库,以增强对此策略的支持。它们可以通过 NetworkSecurityPolicy 类查询明文通信策略。


在开发期间检测明文通信
要在开发或 QA 期间检测出明文通信,可使用 StrictMode API 修改应用,使之检测非 TLS/SSL 通信,然后将违规情形记录到系统日志中或者使应用崩溃(参阅 StrictMode.VmPolicy.Builder.detectCleartextNetwork())。该工具很有用,可帮助识别应用的哪些数据使用非 TLS/SSL(和 DLTS)通信。与 android:usesCleartextTraffic 属性不同,在面向用户发行的应用版本中,不会启用此功能。

首先,此功能将会标记非 TLS/SSL 的安全通信。更重要的是,还可能会标记通过 HTTP 代理的 TLS/SSL 通信。这会带来问题,因为作为开发者,您无法控制应用的某个用户是否会配置其 Android 设备使用 HTTP 代理。最后,此功能并非永不过时,可能不适应未来的 TLS/SSL 协议版本。因此,此功能仅应用于开发和 QA 阶段。


在 Network Security Config 中声明更精细的明文策略
Android N 提供对明文通信策略的精细控制功能。与应用于应用通信所有目标端的 android:usesCleartextTraffic 属性相反,Android N 的 Network Security Config 允许应用针对特定的目标端指定明文策略。例如,为了方便更平滑地过渡到不允许明文通信的策略,应用首先仅禁止使用明文与其最重要的后端进行通信,而允许使用明文与其他目标端进行通信。


未来计划

在您的应用与服务器之间仅使用安全网络通信方式进行通信,是一种安全最佳做法。借助 Android Marshmallow,您可以实施这一做法,赶紧试试吧!

我们一如既往地感谢您的反馈,欢迎就改进 Android 提供宝贵建议。请通过 security@android.com 联系我们。HTTPS, Android 安全




ChinaGDG.com
回复

使用道具 举报

*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表