有没有办法阻止getaddrinfo泄露主机名的真实IP地址?

时间:2014-04-22 08:22:10

标签: dns hosts getaddrinfo

我们假设有一个程序可以打开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?

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

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

1 个答案:

答案 0 :(得分:2)

getaddrinfo()查找来自不同来源的网络名称解析。让我们简化并说它先查看HOSTS文件,然后再查看DNS服务器。这些是你可以尝试欺骗你的智能程序的一些方法来思考" www.example.com"合法地是123.123.1.123(复杂性越来越高):

  1. 使用HOSTS文件。正如您已经指出的那样,程序可以轻松检查此文件,因此这看起来并不乐观。保护HOSTS文件不被读取也不会有任何帮助,因为那时您将无法使用它来解析名称。

  2. 使用本地DNS服务器。根据您的程序可能获得的智能程度,这可能不容易实现 - 我们毕竟谈论的是DNS欺骗。在简单的情况下,您可以将此服务器配置为" example.com"的权威DNS服务器。 zone,但如果你想真正令人信服(我们已经超出了getaddrinfo()的范围),你可能还需要对根服务器配置进行一些更改,以避免程序与一些根服务器或" com" TLD服务器(我知道所有这些配置都可以在bind中完成,我不了解其他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签名密钥。好吧,我担心我在这里无法帮助您,但请考虑分享您的经验,如果你到了这一点。