跳过内容

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) 启用特定的、可能不安全的协议版本。

第三方库

一些第三方库,如 OkHttpRetrofit 或 Apache HttpClient,为 TLS 协议提供了自定义配置。如果管理不当,这些库可能会允许启用过时的协议。

例如,在 OkHttp 中使用 ConnectionSpec.COMPATIBLE_TLS(通过 okhttp3.ConnectionSpec.Builder.connectionSpecs(...))可能导致在某些版本中默认启用不安全的 TLS 版本,如 TLS 1.1。有关支持协议的详细信息,请参阅 OkHttp 的配置历史

API 调用 okhttp3.ConnectionSpec.Builder.tlsVersions(...) 也可以用于设置启用的协议(OkHttp 文档)。

步骤

  1. 逆向工程应用( 反编译 Java 代码)。
  2. 对逆向工程的应用运行静态分析工具( Android 静态分析),目标是设置 TLS 协议的 API 调用。

观察

输出包含上述 API 调用中所有已启用的 TLS 版本列表。

评估

如果直接启用了任何不安全的 TLS 版本,或者应用启用了任何允许使用过时 TLS 版本的设置(如 okhttp3.ConnectionSpec.COMPATIBLE_TLS),则测试用例失败。