问题在标题中。我一直在阅读有关 DNS 欺骗的信息。如果我要保存我认为敏感的网站的 IP 地址,然后在我使用可疑连接时输入 IP 地址以防止自己受到 DNS 欺骗攻击,该怎么办?它会起作用吗?为什么或者为什么不?
我可以通过输入 IP 地址来避免 DNS 欺骗吗?
这不适用于许多网站。许多网站使用虚拟主机,它们从单个网络服务器托管多个域的网站。在这种情况下,他们知道您来自哪个站点的唯一方法是通过您的浏览器在Host
HTTP 请求的标头中发送的主机名。
执行此操作的方法是将这些条目专门添加到您的/etc/hosts
(或在 Windows 上\Windows\System32\drivers\etc\hosts
)文件中,并像往常一样继续键入域。
不幸的是,即使这样也是不切实际的。您不仅可以禁用基于 DNS 的负载平衡和基于位置的 DNS 结果(如果您旅行)等功能,还可以在站点更改 IP 地址时让自己受到攻击。攻击者考虑尝试获取大型站点可能已放弃的 IP 地址并非没有道理。
TL;DR 这个
- 很不方便,
- 可以禁用有用的基于 DNS 的功能
- 并没有真正增加太多实际的安全性,并且
- 引入尽可能多的新攻击向量,因为它关闭
假设foo.com
有 IP 地址11.11.11.11
。
使用 DNS 欺骗,您担心foo.com
无法正确解析为11.11.11.11
,因为攻击者欺骗您认为其 IP 地址是22.22.22.22
. 在这种情况下,您的问题是您拥有的域记录没有指向您真正想要的 IP 地址。
现在,假设您总是输入11.11.11.11
以避免被 DNS 欺骗的可能性。现在假设foo.com
刚刚从移动11.11.11.11
到33.33.33.33
。您突然遇到了相反的问题:您拥有的 IP 地址与您想要的域不对应。(在这种情况下,您可能会受到能够将 IP 重新分配给11.11.11.11
特定主机的人的攻击。)这是您可以使用 DNS解决的管理问题。如果主机更改了 IP 地址,除非您检查其 DNS 记录,否则您如何才能发现它的移动位置?
另一个(次要)问题是 Web 服务器期望获得一个Host
标头,该标头指定您尝试访问的主机名。Web 服务器可能在一个 IP 地址上托管多个域(例如,11.11.11.11
可能同时响应foo.com
和bar.com
,并且它需要知道您真正想要哪个域)。如果你11.11.11.11
在地址栏中输入,你的浏览器会说你想要.Host: 11.11.11.11
而不是Host: foo.com
. 这可以通过手动指定 HTTP 字段(或获取/制作为您执行此操作的浏览器扩展)来克服。
回应所说的一切。
我认为您正在倒退解决这个问题。如果 DNS 记录被欺骗,为什么要尝试逐个覆盖站点?找到一个值得信赖的、安全的 openDNS 提供商并设置您的机器以始终将 DNS 解析到该服务器,而不是您所连接的网络想要为您提供的任何服务器。要添加另一层锡箔纸,您可以在 EC2 或类似设备上设置您自己的 DNS 服务器,并始终解决该问题。
如果您以某种方式知道主机 IP 地址并且不想依赖 DNS,只需将其添加到您的 HOST 文件中。如果您碰巧有许多机器来维护这些 DNS 设置,您将需要一种方法来更新所有这些文件。XCopy 通常可以很好地解决这个问题,没有重新发明 DNS ......
如果您的主机没有通过 VPN 持续连接,另一种维护多个 HOST 文件的方法是设置您自己的私有 DNS 服务器,并为所有区域启用 DNSSec。如果您采用这种方法,您应该禁用递归名称解析,这样您就不会无意中毒害您的缓存或保存来自给您错误信息的人的“被黑”DNS 条目。
我建议不要使用所有这些解决方案,因为网站被黑客入侵(SQL 注入等)是可能的并且很常见,并且一些网站管理员使用 DNS 更新来处理该问题,而您的 PC 将无法获得更新。
再说一次,您可能会通过有条件地将递归查询转发给您不“关心”的域来找到一个共同的中间立场。