MASTG-TEST-0283: 服务器主机名验证实现不正确
概述¶
此测试评估 Android 应用是否实现了 HostnameVerifier
,该验证器以一种 不安全的方式 使用 verify(...)
,从而有效地关闭了受影响连接的主机名验证。
这种不安全的实现可能允许攻击者使用有效的(或自签名)证书运行 MITM 攻击,并拦截或篡改应用程序的流量。
步骤¶
- 逆向工程应用( 反编译 Java 代码)。
- 检查源代码并运行静态分析( Android 上的静态分析)工具,并查找
HostnameVerifier
的所有用法。
观察¶
输出包含 HostnameVerifier
使用位置的列表。
评估¶
如果应用没有正确验证服务器的主机名是否与证书匹配,则测试失败。
这包括以下情况:
- 始终接受主机名: 覆盖
verify(...)
以无条件地返回true
,而不管实际的主机名或证书如何。 - 过于宽泛的匹配规则: 使用允许匹配意外域的宽松通配符逻辑。
- 不完整的验证覆盖: 未能在所有 SSL/TLS 通道上调用主机名验证,例如通过
SSLSocket
创建的通道,或者在重新协商期间。 - 缺少手动验证: 当不是自动完成主机名验证时,不执行主机名验证,例如使用底层
SSLSocket
API 时。
当使用自动化工具进行测试时,您将需要检查逆向工程代码中所有报告的位置,以确认错误的实现( 审查反编译的 Java 代码)。