OWASP 类别: MASVS-NETWORK:网络通信
概述
在 Android 应用中允许明文网络通信意味着任何监视网络流量的人都可以查看和操纵正在传输的数据。如果传输的数据包含敏感信息(如密码、信用卡号或其他个人信息),则此操作构成漏洞。
无论您是否发送敏感信息,使用明文通信仍然可能存在漏洞,因为明文通信也可能通过网络攻击(如 ARP 或 DNS 欺骗)进行操纵,从而可能使攻击者能够影响应用的行为。
影响
当 Android 应用通过网络以明文方式发送或接收数据时,任何监视网络的人都可以拦截和读取该数据。如果此数据包含敏感信息(如密码、信用卡号或个人消息),则可能导致身份盗窃、金融欺诈和其他严重问题。
例如,以明文方式传输密码的应用可能会将这些凭据暴露给拦截流量的恶意攻击者。然后,这些数据可用于未经授权访问用户的帐户。
风险:未加密的通信通道
通过未加密的通信通道传输数据会暴露设备与应用端点之间共享的数据。攻击者可以拦截并可能修改所述数据。
缓解措施
数据应通过加密的通信通道发送。应使用安全协议作为不提供加密功能的协议的替代方案。
具体风险
本节收集需要非标准缓解策略的风险,或者在特定 SDK 级别已得到缓解,此处出于完整性考虑进行列出。
风险:HTTP
本节中的指南仅适用于面向 Android 8.1(API 级别 27)或更早版本的应用。从 Android 9(API 级别 28)开始,默认情况下禁用明文支持。
缓解措施
使用 NetworkSecurityConfig.xml 功能选择退出明文流量
Xml
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="false">
<domain includeSubdomains="true">secure.example.com</domain>
</domain-config>
</network-security-config>
此选项有助于防止由于外部来源(如后端服务器)提供的 URL 中的变化导致应用出现意外的回归。
风险:FTP
使用 FTP 协议在设备之间交换文件存在多种风险,其中最重要的是通信通道缺乏加密。应改用更安全的替代方案,如 SFTP 或 HTTPS。
本节中的指南仅适用于面向 Android 8.1(API 级别 27)或更早版本的应用。从 Android 9(API 级别 28)开始,默认情况下禁用明文支持。
缓解措施
使用 HTTPS
此协议对传输中的数据进行加密。使用此类文件交换协议时,应考虑采取其他措施。
- 身份验证 – 用户应使用安全机制进行身份验证。通常不建议使用基本身份验证,因为凭据不受保护,并在每个请求中发送,从而增加了被泄露的风险。
- 授权 – 应限制用户仅访问其目标资源。
- 确保使用强大的协议和密码套件,遵循安全最佳实践。在撰写本文时,建议至少使用 TLSv1.3 协议。
- 在 Android 9 及更高版本中,默认情况下禁用明文 HTTP 通信,自动强制执行 HTTPS。
资源
使用 SFTP
此协议对传输中的数据进行加密。使用此类文件交换协议时,应考虑采取其他措施。
- SFTP 支持不同类型的身份验证。应使用公钥身份验证方法,而不是基于密码的身份验证。此类密钥应安全创建和存储,建议使用 Android 密钥库。
- 确保支持的密码遵循安全最佳实践。
资源
资源
- 网络安全配置的明文流量选择退出
- 基于 TLS 的 HTTP RFC
- HTTP 身份验证方案
- Mozilla 网络安全建议
- Mozilla SSL 建议配置生成器
- Mozilla 服务器端 TLS 建议
- OpenSSH 主手册页
- SSH RFC,详细说明了可用于此协议的配置和方案
- Mozilla OpenSSH 安全建议
- Android 密钥库系统