跳过内容

MASTG-TEST-0019: 测试网络数据加密

概述

静态分析

通过安全协议测试网络请求

首先,您应该识别源代码中的所有网络请求,并确保没有使用明文 HTTP URL。请确保通过使用 HttpsURLConnectionSSLSocket(用于使用 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 等代理配合使用。在这种情况下,请查看 测试自定义证书存储和证书固定

更多详情请参阅