MASTG-TEST-0217: 代码中明确允许不安全 TLS 协议
概述¶
Android 网络安全配置不提供对特定 TLS 版本的直接控制(与 iOS 不同),并且从 Android 10 开始,TLS v1.3 默认情况下已为所有 TLS 连接启用。
仍有几种方法可以启用不安全的 TLS 版本,包括:
Java Sockets¶
应用可以通过调用 SSLContext.getInstance("TLSv1.1")
获取使用不安全 TLS 协议的 SSLContext,并且还可以使用 API 调用 javax.net.ssl.SSLSocket.setEnabledProtocols(String[] protocols)
启用特定的、可能不安全的协议版本。
第三方库¶
一些第三方库,如 OkHttp、Retrofit 或 Apache HttpClient,为 TLS 协议提供了自定义配置。如果管理不当,这些库可能会允许启用过时的协议。
例如,在 OkHttp 中使用 ConnectionSpec.COMPATIBLE_TLS
(通过 okhttp3.ConnectionSpec.Builder.connectionSpecs(...)
)可能导致在某些版本中默认启用不安全的 TLS 版本,如 TLS 1.1。有关支持协议的详细信息,请参阅 OkHttp 的配置历史。
API 调用 okhttp3.ConnectionSpec.Builder.tlsVersions(...)
也可以用于设置启用的协议(OkHttp 文档)。
步骤¶
- 逆向工程应用( 反编译 Java 代码)。
- 对逆向工程的应用运行静态分析工具( Android 静态分析),目标是设置 TLS 协议的 API 调用。
观察¶
输出包含上述 API 调用中所有已启用的 TLS 版本列表。
评估¶
如果直接启用了任何不安全的 TLS 版本,或者应用启用了任何允许使用过时 TLS 版本的设置(如 okhttp3.ConnectionSpec.COMPATIBLE_TLS
),则测试用例失败。