Host Header 可以用来隐藏服务的存在吗?

信息安全 网络服务
2021-08-11 06:53:48

想象一个运行在其上的 Web 服务器93.184.216.34,通常可以通过公共 DNS 条目访问example.comHostWeb 服务器通常允许根据通过 HTTP 请求接收到的标头来区分多个“虚拟”服务器。

现在想象一下,当通过 请求时,同一个 Web 服务器会提供不同的服务cx6wdffpuik997eljf6d878i6f3np4207ne30vyjsvhpra69,这不是公共 DNS 条目,而是通过本地 DNS 服务器或修改后的 hosts 文件完成的。

这会有效地隐藏隐藏服务的存在吗?这是在实践中完成的吗?


注意:我知道仅此一项不应用于保护服务。此外,还将通过客户端证书进行身份验证。

3个回答

确定同一 IP 地址上基于其他名称的虚拟主机的唯一方法是对所有域执行正向查找并查看A具有相同 IP 地址的记录。只有在此之后,才能查看服务器是否通过Host标头响应所有这些主机名,并且每个主机名的响应是否相同或是否存在不同的服务。

知道了这一点,确实可以隐藏这样的服务,但它仍然是通过 obscurity 实现的安全性虽然有人可能会使用它,但它有一些缺点:

  • 秘密主机名可能会意外泄漏,这使得“Host:标题”成为密码的一个相当糟糕的地方。这可能是由以下原因引起的:
  • 通过 3rd 方 DNS 服务的请求。DNS 通常是未加密的,并且它可能缓存在多个递归服务器上,这并没有让这一切变得不那么糟糕。
  • 如果主机名位于公共权威 DNS 服务器上,则它可能容易受到区域传输限制或 DNSSEC区域遍历不足的影响(可能使用较旧的NSEC记录,由NSEC3RFC 5155RFC 6781, 5修复)。
  • 服务器名称指示(SNI, RFC 6066, 3ClientHello ) 显示主机名,因为它是1.3 之前的所有 TLS 版本中未加密的一部分(加密 SNI 的工作原理)。
  • 根据主机名的泄露方式,您可能仍然需要知道要连接到哪个 IP 地址,但这只是慢下来。
  • 如果记录仅在专用网络上的 DNS 服务器上可用,则 IP 地址将被隐藏A,但这会使在网络外使用服务变得困难:在这种情况下,最好在专用网络上提供服务, 也。
  • 如果 IP 地址在本地文件中,那么任何可以在网络层(L3)hosts上看到您的流量的人仍然可以在 IP 数据包标头中使用它。这将包括已经通过监控您的 DNS 请求或 SNI 获得主机名的任何人。
  • TLS 实施的困难。
  • 您不会获得任意假地址的证书。
  • 如果它是您真实域的子域...
  • 规避这种情况的合适方法是
    • 自己的内部证书颁发机构
    • *.example.com涵盖“秘密”子域的通配符证书。

因为它产生的问题多于解决的问题,所以我不推荐它。具有多因素身份验证和可能的客户端证书的密码保护是更好的选择,隐藏服务的位置并不能真正增加太多的安全性。

它可以工作 - 一段时间......

拥有Host不可直接解析的域的标头意味着任何不知道正确标头和 IP 的人将无法打开该服务。这将一直有效,直到秘密域和 IP 泄漏,这可能需要很长时间。

除了Esa Jokinen已经指出的外部 DNS 和证书透明度之外,还有Referer标题:

如果您在隐藏站点上有任何外部链接或资源(图像、Javascript),客户端浏览器将设置Referer您的隐藏域,因此您链接的任何站点都会知道它的存在。

但这只是问题的一部分。如果不知道服务器的 IP 地址,知道域就没有任何意义,而且更难意外泄漏。

客户端泄露会泄露秘密域,但服务器的 IP 地址必须从服务器端泄露(或在某处同时发布 IP 和秘密域的人)。而发现这一点的方法更难提取。

对于 Tor 秘密服务,您无需知道服务器 IP 即可对其进行攻击:Tor 无需 IP 即可将您连接到服务器。但是在你的隐藏服务上,你需要先连接到服务器,然后才能以某种方式攻击它并获取它的 IP。但是没有IP就无法连接,需要IP才能获取IP。

如何找到你的服务器?Bruteforce ...连接到每个活动的公共IP,发送Host带有秘密域的标头,然后查看返回的内容。可能需要一段时间,但会找到它。

我不会仅仅依靠这个来保证安全,因为它是通过默默无闻的安全性,但在这种情况下是非常晦涩的

这不完全是您描述的情况,但域前端是滥用主机标头以隐藏通信的真实性质的一个示例 - 通常是为了逃避防火墙。

域前端的基本设置是:

  1. 您向 innocuous.example.com 发出 DNS 请求
  2. 您打开与返回的 IP 地址的 SSL 连接,指定 innocuous.example.com 作为 SNI 的地址
  3. 通过加密连接,您向主机可疑.example.com 发出 HTTP 请求

就防火墙所知,这是与 innocuous.example.com 的连接,这是允许的。但是,如果服务器配置为为可疑.example.com 和 innocuous.example.com 提供流量(例如,如果它们都由同一个 CDN 提供服务,可能就是这种情况),它将提供响应对于可疑的.example.com。

请注意,在大多数实际用例中,susceptable.example.com 的存在不太可能是秘密的。域前端通常用于访问合法但被防火墙阻止的站点。

如果您正在设计一个系统以将可疑网站隐藏在视线范围内,那么将其托管在https://innocuous.example.com/cx6wdffpuik997eljf6d878i6f3np4207ne30vyjsvhpra69会更简单,因为它无需担心 DNS 或 SNI 泄漏。