跳过内容

MASTG-TEST-0283: 服务器主机名验证实现不正确

概述

此测试评估 Android 应用是否实现了 HostnameVerifier,该验证器以一种 不安全的方式 使用 verify(...),从而有效地关闭了受影响连接的主机名验证。

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

步骤

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

观察

输出包含 HostnameVerifier 使用位置的列表。

评估

如果应用没有正确验证服务器的主机名是否与证书匹配,则测试失败。

这包括以下情况:

  • 始终接受主机名: 覆盖 verify(...) 以无条件地返回 true,而不管实际的主机名或证书如何。
  • 过于宽泛的匹配规则: 使用允许匹配意外域的宽松通配符逻辑。
  • 不完整的验证覆盖: 未能在所有 SSL/TLS 通道上调用主机名验证,例如通过 SSLSocket 创建的通道,或者在重新协商期间。
  • 缺少手动验证: 当不是自动完成主机名验证时,不执行主机名验证,例如使用底层 SSLSocket API 时。

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