如何提前防止你的源站地址泄露

Hugehard 2024年08月11日 编辑

2024-08-11T11:55:45.png

众所周知,分布式拒绝服务(DDoS)攻击如今极为普遍。我们通常借助Cloudflare等服务的帮助来抵御这类攻击,因为这些服务能够吸收恶意流量。然而,即便采用了额外的保护措施(比如在Cloudflare中结合“I’m Under Attack”模式和白名单),如果您不小心将IP地址暴露给了外界,这些保护措施也爱莫能助。在本文中,我们将讨论一个真实案例,并探讨如何防止此类情况发生(以及由此引发的DDoS攻击)。

前言:关于扫描工具的简介

要发现基础设施中的安全漏洞,您可以从使用一些广泛可用的服务开始。

以下是一些著名的系统,它们可以帮助您找到存在漏洞或配置错误的设备:

  • Shodan 是一个搜索引擎,允许您使用各种过滤器来查找连接到互联网的设备;
  • Censys.io 是一个基于物联网的新型搜索引擎,它像Shodan一样扫描所有公开可用的IP地址并保存它们的响应。您可以使用生成的设备列表(地图)来搜索各种漏洞或监控网络基础设施的当前状态;
  • CloudFail 是一种战术侦察工具,旨在收集有关由Cloudflare保护的服务的一切可用信息。它使用这些信息来发现服务器位置;
  • SecurityTrails 是一套用于收集域名、IP地址和WHOIS数据的工具。部分数据在同名网络平台上免费提供。额外的信息可以通过商业API获得;
  • Project Sonar 对超过70种不同的服务和协议进行互联网范围的调查,以获取全球对常见漏洞的暴露情况。
  • Spyse — 被誉为“每个网络安全专业人士最完整的互联网资产注册表”——帮助您以类似于Shodan的方式快速了解目标情况。

在我们下面讨论的真实案例中,我们使用了上述工具之一——Censys。

我们的案例

我们面临的情况如下:

  • test.com 域名;
  • 使用 Cloudflare 作为 DNS 服务;
  • 一个包含 1.test.com, 2.test.com, *.test.com 证书的 NGINX 负载均衡器。

问题何在?当有请求到达端口443时,NGINX 会提供一个证书(其中包含我们的 <strong>test.com</strong> 域名)。因此,攻击者可以轻易地将负载均衡器的 IP 地址与域名关联起来,并实施 DDoS 攻击。

例如,我们的域名(test.com)使用了 GCORE 服务器。您只需将这一信息输入到知名扫描器之一的搜索栏中,就能获得证书中指定的域名与 IP 地址的完整映射。但难道这些地址不应该被保护起来,避免公众访问吗?

这是相关的 Censys 屏幕截图:

2024-08-11T11:58:29.png

正如上图所示,您可以通过匹配 NGINX 提供的证书中包含的域名和公共 IP 地址来获取服务器的 IP 地址。攻击者可以利用这种方式获得这些信息。

问题是如何解决的

在我们的案例中,我们通过为 default_server 创建一个包含 example.com 作为域名的自签名证书来解决这个问题。我们在负载均衡器的 NGINX 配置中添加了以下几行:

server {
  listen 443 default_server ssl http2;
  ssl_certificate /etc/nginx/ssl/examplecom/tls.crt;
  ssl_certificate_key /etc/nginx/ssl/examplecom/tls.key;
}

这样,在所有未来的 IP 扫描中,NGINX 将提供一个与实际域名(test.com)无关的证书。example.com 域名将替代实际域名,使攻击者无法将域名与负载均衡器的 IP 地址关联。

同时,您需要将服务器暴露的 IP 地址替换为新的 IP 地址。

一般建议

以下是对问题的更全面分析,以及一些建议清单,如果您想避免此类情况的发生,请注意以下建议:

  1. 在网站被外部服务(如前面提到的 Cloudflare)保护之后,更改服务器的 IP 地址。这样,DNS 将提供代理服务器的地址,而原始服务器的地址将保持匿名。
  2. 使用白名单,只允许代理服务(如 Cloudflare)的 IP 地址直接访问您的站点。这样,扫描器(以及外界)将无法看到发送到特定 IP 地址/主机的具体内容。
  3. 为了保护 Web 服务器的匿名性,您应该设置一个与您的公司/网站无关的默认虚拟主机,并使用自签名证书指定一些假域名,如 youshallnotpass.com(或 example.com)。

2024-08-11T12:03:00.png

  1. 一个不错的建议是将默认的 Apache 或 NGINX 页面替换为类似 “It works!” 的内容。同时,您应该隐藏 Web 服务器的版本(nginx how-to, Apache how-to)。这样,您可以防止扫描器收集 IP 地址,从而增加攻击者发现您的 Web 服务的真实地址的难度。
  2. 使用 SSL 证书是一个好且优雅的解决方案。但是,请记住,颁发的证书信息会被记录在 证书透明度 日志中,这是公开可访问的。也就是说,如果您为您的域名颁发新证书,它将被公开。攻击者可以轻松找到它并发现主机名。这里是一个使用 crt.sh 证书搜索引擎对 example.com 域名的示例输出:

2024-08-11T12:04:56.png

您可以看到证书更新的时间以及所有以前证书的内容。

  1. 删除所有未使用的 DNS 记录。众所周知,一旦某物出现在互联网上,它就会永远留在那里。DNS 记录也是如此。除了可以使用在线服务(如 SecurityTrails)来查找特定域的旧 DNS 记录外,历史数据也可以在 Project Sonar 数据库中找到。
  2. 您还可以在服务器前放置一个云负载均衡器(例如 Amazon ELB),以获得更高的安全性。这将提供额外的保护层。然而,这个建议仅适用于您(或更准确地说,您的最终用户)能够忍受延迟增加的情况,同时我们国内的一些广为使用的面板(如宝塔)等也有相应的阻止扫描的WAF规则。

结论

SSL/TLS 是安全和可靠的互联网的基础。对于 Web 服务而言,它不仅适用于处理信用卡数据等明显领域。它确保了网站及其用户数据的机密性、关键级别的安全性和完整性。

有许多服务可以为网站提供额外的保护,例如抵御 DDoS 攻击、促进证书发放等。然而,如果您的基础设施一开始就配置错误,所有这些工具都将无法发挥作用。您可以使用本文开头提到的扫描器开始寻找潜在的安全挑战。

猜你喜欢