漏洞
问题描述:程序中采用DNS名称进行安全认证,但DNS名称是容易被攻击者进行欺骗的。
许多 DNS 服务器都很容易被攻击者欺骗,所以应考虑到某天软件有可能会在有问题的 DNS 服务器环境下运行。如果允许攻击者进行 DNS 更新(有时称为 DNS 缓存中毒),则他们会通过自己的机器路由您的网络流量,或者让他们的 IP 地址看上去就在您的域中。勿将系统安全寄托在 DNS 名称上。
例如:下面代码片段中,如果发生DNS欺骗,会绕过安全验证。
String ip = request.getRemoteAddr();
InetAddress inetAddress = InetAddress.getByName(ip);
if (inetAddress.getCanonicalHostName().endsWith("demo.com")) {
//Verification passed
}
修复建议: 不要依赖DNS名称进行安全认证。