跳过内容

MASTG-TEST-0282: 不安全自定义信任评估

概述

此测试评估 Android 应用是否以不安全的方式使用checkServerTrusted(...) 作为自定义 TrustManager 的一部分,导致任何配置为使用该 TrustManager 的连接跳过证书验证。

这种不安全的实现可能允许攻击者使用有效的(或自签名的)证书运行MITM 攻击,并拦截或篡改应用的流量。

步骤

  1. 对应用进行逆向工程 ( 反编译 Java 代码)。
  2. 对应用运行静态分析 ( Android 静态分析) 工具,并查找 checkServerTrusted(...) 的所有用法。

观察

输出包含使用 checkServerTrusted(...) 的位置列表。

评估

如果 checkServerTrusted(...) 在自定义 X509TrustManager 中实现,并且没有正确验证服务器证书,则测试失败。

这包括以下情况:

  • **在 NSC 足够的情况下,使用容易出错的checkServerTrusted(...)
  • 什么都不做的信任管理器: 重写 checkServerTrusted(...) 以接受所有证书而不进行任何验证,例如通过立即返回而不验证证书链或始终返回 true
  • 忽略错误: 无法在验证失败时抛出适当的异常 (例如 CertificateExceptionIllegalArgumentException),或者捕获并抑制它们。
  • 使用 checkValidity() 而不是完整验证: 仅依赖 checkValidity() 检查证书是否已过期或尚未生效,但不会验证信任或主机名匹配。
  • 显式放宽信任: 禁用信任检查以接受自签名或不受信任的证书,以便在开发或测试期间提供便利。
  • 滥用 getAcceptedIssuers():返回 null 或空数组而不进行适当处理可能会有效地禁用颁发者验证。

当使用自动化工具进行测试时,您需要检查逆向工程代码中报告的所有位置,以确认不正确的实现( 审查反编译的 Java 代码)。