MASWE-0050: 明文流量
概述¶
当数据以明文形式(即未加密)发送时,攻击者可以监视网络信道并访问这些数据。攻击者可以执行被动窃听来截取数据,或使用主动中间人 (MITM) 攻击来操纵数据,这可能会改变应用程序行为或注入恶意内容。
当敏感信息在未加密的情况下传输时,这种弱点尤其令人担忧,因为它直接威胁到用户隐私和安全。即使在未传输敏感数据时,使用明文通信仍然是一种漏洞。ARP 欺骗和 DNS 欺骗等网络攻击可能允许攻击者拦截或重定向流量,这可能会扰乱应用程序功能或通过将用户重定向到冒充合法服务的恶意网站来欺骗用户。
如果连接使用加密和适当的身份验证机制进行保护,这些攻击将更难执行,因为攻击者需要绕过加密和证书验证。安全的网络协议不仅提供机密性,还通过加密和证书验证确保数据完整性和真实性,从而防止攻击者更改数据。
影响¶
- 数据拦截:攻击者可以捕获和读取通过网络传输的敏感信息。
- 数据操纵:攻击者可能会更改传输中的数据,导致数据损坏或注入恶意内容。
- 未经授权的访问:攻击者可能会拦截通过明文通道发送的会话令牌或凭据,使他们能够冒充用户并获得对用户帐户或系统的未经授权的访问。
- 隐私泄露:个人和机密用户信息可能会被泄露,从而违反隐私法规。
- 违反法规合规性:敏感数据泄露可能导致不符合 GDPR 或 HIPAA 等法律规定,从而导致法律处罚。
- 声誉损害:安全漏洞会侵蚀用户信任并损害组织的声誉。
引入方式¶
- 平台提供的设置中允许明文流量:配置平台提供的设置(例如 Android 上的网络安全配置或 iOS 上的应用程序传输安全)以显式允许明文流量(全局或按域),使其成为这些设置管理的所有网络连接的默认行为。
- 使用 HTTP:使用 HTTP 而不是 HTTPS 进行通信,这不会对传输中的数据进行加密。
- 使用非 HTTP 不安全协议:使用不安全协议,例如 FTP、不带 TLS 的 SMTP、TCP 套接字或不加密传输中数据的自定义协议。
- 使用低级网络 API:使用不强制加密且不遵守平台网络安全设置的低级网络 API,例如 Android 上的
Socket
或 iOS 上的NSURLConnection
。 - 跨平台框架配置错误:跨平台框架中的不正确设置可能允许应用程序的 Android 和 iOS 版本都使用明文流量。
- 第三方库:使用默认采用不安全通信方法或配置不当的第三方库或 SDK。
缓解措施¶
- 使用安全协议:始终对所有通信信道使用 HTTPS(它采用 TLS 进行加密)、FTPS、SFTP 或 SMTPS 等安全协议。确保这些协议在整个应用程序中一致使用。
- 明确禁用明文流量:切勿在应用程序配置中全局允许明文流量。确保使用网络安全配置(Android)和应用程序传输安全 (ATS)(iOS)等安全设置明确禁用明文流量。优先使用按域例外而不是全局设置,但请谨慎使用它们,并且仅在没有其他选择时才使用。
- 谨慎使用按域例外:如果明文流量对于特定域绝对必要,请确保这些域是受信任的且对应用程序功能至关重要,并在包含它们之前进行彻底的风险评估。
- 优先进行服务器修复:尽可能与服务器团队合作,启用安全通信。与其向移动应用程序添加网络安全例外(例如允许明文流量或降低最低 TLS 版本),不如更新服务器配置以支持具有有效证书和现代 TLS 协议的 HTTPS。
- 使用高级网络 API:使用自动处理加密、证书验证和错误的高级网络 API,例如 Android 上的
HttpsURLConnection
或 iOS 上的URLSession
。避免使用绕过平台提供的网络安全功能的低级网络 API 或自定义网络堆栈。 - 使用安全的跨平台框架:确保 React Native、Flutter 或 Xamarin 等跨平台框架配置为默认强制执行安全通信,并且不允许明文流量。查看框架的文档并调整网络安全设置以符合最佳实践。
- 使用安全的第三方组件:验证应用程序中使用的任何第三方库和 SDK 是否强制执行安全通信协议,特别是当它们处理敏感数据或使用低级网络 API 时。确保这些组件定期更新以解决任何漏洞。
测试¶
MASTG-TEST-0238: 运行时使用网络 API 传输明文流量 MASTG-TEST-0236: 观察到网络上的明文流量 MASTG-TEST-0233: 硬编码 HTTP URL MASTG-TEST-0237: 允许明文流量的跨平台框架配置 MASTG-TEST-0218: 网络流量中的不安全 TLS 协议 MASTG-TEST-0217: 代码中明确允许的不安全 TLS 协议 MASTG-TEST-0239: 使用低级 API(例如 Socket)设置自定义 HTTP 连接 MASTG-TEST-0235: 允许明文流量的 Android 应用程序配置