MASTG-TEST-0234: 缺少使用 SSLSockets 的服务器主机名验证实现
概述¶
此测试检查Android应用是否使用SSLSocket
而没有HostnameVerifier
,从而允许连接到提供带有错误或无效主机名的证书的服务器。
默认情况下,SSLSocket
不执行主机名验证。 为了强制执行它,应用程序必须显式调用HostnameVerifier.verify()
并实现正确的检查。
这种不安全的实现可能允许攻击者使用有效的(或自签名的)证书运行MITM攻击,并拦截或篡改应用程序的流量。
注意:即使应用程序具有完全安全的网络安全配置(NSC),连接也会成功,因为SSLSocket
不受其影响。
步骤¶
- 反向工程应用程序( 反编译Java代码)。
- 运行静态分析( Android上的静态分析)工具,并查找
SSLSocket
和HostnameVerifier
的所有用法。
观察¶
输出包含使用SSLSocket
和HostnameVerifier
的位置列表。
评估¶
如果应用程序使用SSLSocket
而没有HostnameVerifier
,则测试用例失败。
注意:如果存在HostnameVerifier
,请确保它不是以不安全的方式实现的。 有关指导,请参阅 服务器主机名验证的不正确实现。
演示¶
MASTG-DEMO-0049:HostnameVerifier阻止了SSLSocket连接到错误的主机服务器 MASTG-DEMO-0048:由于缺少HostnameVerifier,允许SSLSocket连接到错误的主机服务器