1

假设有一个程序可以打开 HOSTS 文件以确保它没有被重新路由到某个地方。(它想连接到 www.example.com,但它确保您在 HOSTS 文件中没有相应的条目)。

因此,您决定添加一个 DNS 条目,以便 www.example.com 真正指向 123.123.1.123。所以这行得通。

但随后程序变得更智能并调用 getaddrinfo 来确定它是否被重新路由到 123.123.1.123。有没有办法隐藏这些信息,或者有什么替代方法可以改变给定主机名的 IP 地址?

有什么办法可以让www.example.com的正常IP指向123.123.1.123?

我能想到的可能是弯路,但我想知道是否有更好的方法。也许有一种方法可以保护 Windows HOSTS 文件不被读取?

或者有没有办法欺骗数据包,使它们看起来来自“www.example.com”?(假设我可以完全控制发送/接收数据包的软件)

4

1 回答 1

2

getaddrinfo()查找来自不同来源的网络名称解析。让我们简化一下,它只是先查看 HOSTS 文件,然后再查看 DNS 服务器。您可以尝试以下一些方法来欺骗您的智能程序,使其认为“www.example.com”是合法的 123.123.1.123(越来越复杂):

  1. 使用 HOSTS 文件。正如您已经指出的那样,该程序可以轻松检查此文件,因此这看起来不太有希望。保护 HOSTS 文件不被读取也无济于事,因为那样您将无法使用它来解析名称。

  2. 使用本地 DNS 服务器。根据您的程序可能变得多么聪明,这可能并不容易 - 毕竟我们正在谈论 DNS 欺骗。在简单的情况下,您可以将此服务器配置为“example.com”区域的权威 DNS 服务器,但如果您想要真正令人信服(而且我们已经超出了getaddrinfo()在这里)您可能还必须在根服务器配置中进行一些更改,以避免程序与某些根服务器或“com”TLD服务器进行双重检查(我知道所有这些配置都可以在绑定中完成,我不知道'不知道其他 DNS 服务器)。即便如此,该程序可能会争辩说它不会信任本地 DNS 服务器。即使您没有使用“127.0.0.1”而是您的网络 IP,它也可能检测到 DNS 地址归本地计算机所有。所以让我们更进一步。

  3. 使用远程 DNS 服务器。这里不多说。与您之前所做的一样,只是在外部计算机中。如果程序不愿意接受来自您自己的网络或任何专用网络(例如 192.168.1.X)的 DNS,您可能必须设法将其置于公共 IP 上。在这一点上,程序需要非常谨慎才能在欺骗中找到漏洞。但是假设是这样,并且假设它已经硬编码了 DNS 根服务器的 IP 地址——它会发现这一直是一个阴谋!那么,再上一步。

  4. 根据您的技巧配置网络中的路由器。我们在这里开始变得极端,但是,假设您完全控制了网络,这是使该程序真正相信它在合法土地上的最终解决方案。只需设置路由,以便将根 DNS IP 映射到您的 DNS 服务器。就是这样了。我们现在必须完成,对吧?

    正确的?

    好吧,不出所料,有些人认为这一切都太容易了,所以他们想出了DNSSEC,它基本上是协议的扩展,需要使用加密密钥对 DNS 数据进行签名。因此归结为这样一个事实,如果这个地狱般的程序知道合法 DNS 服务器的公钥并要求所有请愿书使用 DNSSEC,那么它可能会使您的所有努力付诸东流。

  5. 从 DNS 根服务器窃取 DNSSEC 签名密钥。好吧,恐怕我在这里无法真正帮助您,但是如果您到了这一点,请考虑分享您的经验。

于 2014-04-27T00:46:55.303 回答