MASTG-TEST-0019: 测试网络数据加密
已弃用测试
此测试已**弃用**,不应再使用。**原因**:MASTG V2 中提供新版本
请查看以下涵盖此 v1 测试的 MASTG v2 测试
概述¶
静态分析¶
通过安全协议测试网络请求¶
首先,您应该识别源代码中的所有网络请求,并确保没有使用明文 HTTP URL。请确保通过使用 HttpsURLConnection
或 SSLSocket
(用于使用 TLS 的套接字级通信)在安全通道上传输敏感信息。
测试网络 API 使用情况¶
其次,即使使用旨在建立安全连接的底层 API(例如 SSLSocket
),也请注意它必须安全地实现。例如,SSLSocket
**不**验证主机名。使用 getDefaultHostnameVerifier
来验证主机名。Android 开发者文档中包含一个代码示例。
测试明文流量¶
接下来,您应该确保应用程序不允许明文 HTTP 流量。由于 Android 9(API 级别 28)默认阻止明文 HTTP 流量(归功于默认网络安全配置),但应用程序仍可以通过多种方式发送它
- 在 AndroidManifest.xml 文件中的
<application>
标签中设置android:usesCleartextTraffic
属性。请注意,如果配置了网络安全配置,此标志将被忽略。 - 通过在
<domain-config>
元素上将cleartextTrafficPermitted
属性设置为 true,来配置网络安全配置以启用明文流量。 - 使用底层 API(例如
Socket
)来设置自定义 HTTP 连接。 - 使用跨平台框架(例如 Flutter、Xamarin 等),因为这些框架通常有自己的 HTTP 库实现。
以上所有情况都必须作为一个整体进行仔细分析。例如,即使应用程序在其 Android Manifest 或网络安全配置中不允许明文流量,它实际上可能仍在发送 HTTP 流量。如果它使用了底层 API(网络安全配置会被忽略)或配置不当的跨平台框架,则可能会出现这种情况。
更多信息请参阅文章“HTTPS 和 SSL 安全性”。
动态分析¶
拦截被测应用程序的传入和传出网络流量,并确保这些流量已加密。您可以通过以下任何一种方式拦截网络流量
- 使用拦截代理(例如 ZAP 或 Burp Suite)捕获所有 HTTP(S) 和 Websocket 流量,并确保所有请求都通过 HTTPS 而不是 HTTP 进行。
- Burp 和 ZAP 等拦截代理主要显示与 Web 相关的流量(例如 HTTP(S)、Web Sockets、gRPC 等)。但是,您可以使用 Burp 插件(例如 Burp-non-HTTP-Extension)或工具 mitm-relay 来解码和可视化通过 XMPP 和其他协议进行的通信。
由于证书固定,某些应用程序可能无法与 Burp 和 ZAP 等代理配合使用。在这种情况下,请查看 测试自定义证书存储和证书固定。
更多详情请参阅