跳过内容

MASTG-TEST-0234: 缺少使用 SSLSockets 的服务器主机名验证实现

概述

此测试检查Android应用是否使用SSLSocket而没有HostnameVerifier,从而允许连接到提供带有错误或无效主机名的证书的服务器。

默认情况下,SSLSocket不执行主机名验证。 为了强制执行它,应用程序必须显式调用HostnameVerifier.verify()并实现正确的检查。

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

注意:即使应用程序具有完全安全的网络安全配置(NSC),连接也会成功,因为SSLSocket不受其影响。

步骤

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

观察

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

评估

如果应用程序使用SSLSocket而没有HostnameVerifier,则测试用例失败。

注意:如果存在HostnameVerifier,请确保它不是以不安全的方式实现的。 有关指导,请参阅 服务器主机名验证的不正确实现

演示

MASTG-DEMO-0049:HostnameVerifier阻止了SSLSocket连接到错误的主机服务器 MASTG-DEMO-0048:由于缺少HostnameVerifier,允许SSLSocket连接到错误的主机服务器