明文通信

明文通信

OWASP 类别:MASVS-NETWORK:网络通信

概览

在 Android 应用中允许明文网络通信,意味着监控网络流量的任何人都可以查看和操纵正在传输的数据。如果传输的数据包含敏感信息(例如密码、信用卡号或其他个人信息),这就会成为一个漏洞。

无论您是否发送敏感信息,使用明文仍可能存在漏洞,因为明文流量也可能通过 ARP 或 DNS 欺骗等网络攻击进行操纵,从而使攻击者能够影响应用的行为。

影响

当 Android 应用通过网络发送或接收明文数据时,监控网络的任何人都可以拦截并读取这些数据。如果这些数据包含敏感信息(例如密码、信用卡号或个人消息),可能会导致身份窃取、金融欺诈和其他严重问题。

例如,应用如果以明文形式传输密码,可能会将这些凭据泄露给拦截流量的恶意方。然后,他们可能会利用这些数据,在未经授权的情况下获得用户账号的访问权限。

风险:未加密的通信渠道

通过未加密的通信渠道传输数据会暴露设备与应用端点之间共享的数据。攻击者可以拦截并可能修改上述数据。

缓解措施

数据应通过加密的通信渠道发送。应使用安全协议来替代不提供加密功能的协议。

具体风险

本部分将汇总符合以下条件的风险:需要采用非标准的缓解策略,或原本已在特定 SDK 级别得到缓解,而为了提供完整信息才列在此处。

风险:HTTP

此部分中的指南仅适用于以 Android 8.1(API 级别 27)或更低版本为目标平台的应用。从 Android 9(API 级别 28)开始,网址Connection、Cronet 和 OkHttp 等 HTTP 客户端会强制使用 HTTPS,因此系统默认情况下已停用明文支持。不过,请注意,其他 HTTP 客户端库(例如 Ktor)不太可能会强制执行这些明文限制,因此应谨慎使用。

缓解措施

使用 NetworkSecurityConfig.xml 功能来选择停用明文流量,并为您的应用强制执行 HTTPS,但仅针对所需的特定网域(通常用于调试目的)设置例外情况:

Xml

debug.domain.com

此选项有助于防止应用因外部源(如后端服务器)提供的网址发生变化而意外回归。

风险:FTP

使用 FTP 协议在设备之间交换文件存在多种风险,其中最严重的是通信渠道缺乏加密。应改用更安全的替代方案,例如 SFTP 或 HTTPS。

缓解措施

在应用中通过互联网实现数据交换机制时,您应使用 HTTPS 等安全协议。Android 提供了一组 API,可让开发者创建客户端-服务器逻辑。可以使用传输层安全协议 (TLS) 来保护此连接,确保两个端点之间的数据交换经过加密,从而防止恶意用户窃听通信并检索敏感数据。

通常,客户端-服务器架构依赖于开发者拥有的 API。如果您的应用依赖于一组 API 端点,请遵循以下安全最佳实践来保护 HTTPS 通信,从而确保深度安全:

身份验证 - 用户应使用安全机制(例如 OAuth 2.0)进行身份验证。我们通常不建议使用基本身份验证,因为它不提供会话管理机制,并且如果凭据存储不当,可能会被从 Base64 中解码。

授权 - 应遵循最小权限原则,限制用户只能访问预期的资源。为此,您可以为应用资源采用周密的访问权限控制解决方案。

确保使用经过深思熟虑的最新加密套件,并遵循安全最佳实践。例如,考虑支持 TLSv1.3 协议,并在需要时实现向后兼容性,以用于 HTTPS 通信。

风险:自定义通信协议

实现自定义通信协议或尝试手动实现知名协议可能很危险。

虽然自定义协议允许开发者量身定制可满足预期需求的独特解决方案,但开发过程中的任何错误都可能会导致安全漏洞。例如,会话处理机制开发中的错误可能会导致攻击者能够窃听通信,并实时检索敏感信息。

另一方面,如果不使用操作系统或维护良好的第三方库来实现 HTTPS 等知名协议,则会增加引入编码错误的几率,这可能会导致在需要时难以(甚至无法)更新您实现的协议。此外,这可能会引入与使用自定义协议相同的安全漏洞。

缓解措施

使用维护良好的库来实现知名通信协议

如需在应用中实现 HTTPS 等知名协议,应使用操作系统库或维护的第三方库。

这样一来,开发者就可以放心地选择经过全面测试、不断改进且持续接收安全更新以修复常见漏洞的解决方案。

此外,通过选择知名协议,开发者可以受益于各种系统、平台和 IDE 之间的广泛兼容性,从而降低开发过程中出现人为错误的几率。

使用 SFTP

此协议会对传输中的数据进行加密。使用此类文件交换协议时,应考虑采取以下额外措施:

SFTP 支持不同类型的身份验证。应使用公钥身份验证方法,而不是基于密码的身份验证。此类密钥应安全地创建和存储,建议为此使用 Android 密钥库。

确保受支持的加密方式遵循安全最佳实践。

资源

Ktor

使用 Cronet 执行网络操作

OkHttp

为网络安全配置选择停用明文流量

连接到网络

通过网络协议确保安全

适用于移动应用和桌面应用的 OAuth 2.0

HTTP over TLS RFC

HTTP 身份验证方案

Mozilla 网络安全建议

Mozilla SSL 推荐配置生成器

Mozilla 服务器端 TLS 建议

OpenSSH 主要手册页面

SSH RFC,其中详细介绍了可用于此协议的配置和方案

Mozilla OpenSSH 安全建议

Android 密钥库系统

相关推荐