MASTG-TEST-0282: 不安全自定义信任评估
概述¶
此测试评估 Android 应用是否以不安全的方式使用checkServerTrusted(...)
作为自定义 TrustManager
的一部分,导致任何配置为使用该 TrustManager
的连接跳过证书验证。
这种不安全的实现可能允许攻击者使用有效的(或自签名的)证书运行MITM 攻击,并拦截或篡改应用的流量。
步骤¶
- 对应用进行逆向工程 ( 反编译 Java 代码)。
- 对应用运行静态分析 ( Android 静态分析) 工具,并查找
checkServerTrusted(...)
的所有用法。
观察¶
输出包含使用 checkServerTrusted(...)
的位置列表。
评估¶
如果 checkServerTrusted(...)
在自定义 X509TrustManager
中实现,并且没有正确验证服务器证书,则测试失败。
这包括以下情况:
- **在 NSC 足够的情况下,使用容易出错的
checkServerTrusted(...)
。 - 什么都不做的信任管理器: 重写
checkServerTrusted(...)
以接受所有证书而不进行任何验证,例如通过立即返回而不验证证书链或始终返回true
。 - 忽略错误: 无法在验证失败时抛出适当的异常 (例如
CertificateException
或IllegalArgumentException
),或者捕获并抑制它们。 - 使用
checkValidity()
而不是完整验证: 仅依赖checkValidity()
检查证书是否已过期或尚未生效,但不会验证信任或主机名匹配。 - 显式放宽信任: 禁用信任检查以接受自签名或不受信任的证书,以便在开发或测试期间提供便利。
- 滥用
getAcceptedIssuers()
:返回null
或空数组而不进行适当处理可能会有效地禁用颁发者验证。
当使用自动化工具进行测试时,您需要检查逆向工程代码中报告的所有位置,以确认不正确的实现( 审查反编译的 Java 代码)。