是否可以判断两个IP地址是否属于同一台服务器?

Mic*_*lle 21 networking

给定两个公共 IP 地址和都在同一 /27 网络上的知识,是否可以从远程位置(即不同的国家/地区)确定它们是否属于一台或两台服务器?

Sve*_*ven 29

不,在一般情况下不是。


一些补充,让我们的客人很高兴:

  • 基本 TCP/IP 协议(​​例如 IP/TCP/UDP、ICMP)中没有任何内容专门用于区分问题中要求的区别。
  • 许多更高级别的协议也是如此,例如 HTTP。
  • 确实可以使用答案模式中或多或少的细微差异来对系统进行猜测。如果您有两个截然不同的系统,例如 Linux 和 Windows 服务器,这可能足以确保拥有两台主机。
  • 系统越相似,这将变得更加困难。具有相同硬件和操作系统的 HA Web 集群中的两个节点可能无法以这种方式分开。我认为这是当今大多数情况下的一般情况。
  • 最后:同一物理机上的两台虚拟机是一台还是两台服务器?根据您首先尝试区分的原因,这可能很重要,并且在网络级别上完全无法区分。

  • @Sven:问题是两个 IP 是否与一台计算机相关,而不是公共 IP 上的服务是否与多台机器相关。我同意没有一种通用的方法可以保证每次都有效,但是如果可以在收到的响应之间找到足够的共性,则可能会做出合理的猜测。Michelle 需要详细说明要完成什么才能确定是否存在有用的解决方案。例如,它是负载平衡配置还是虚拟配置有关系吗? (3认同)
  • Sven 的回答 100% 正确,但有可能猜测它们是否运行不同的操作系统(通过 nmap 或此处描述的 ping 测试 http://www.kellyodonnell.com/content/determining-os-type-ping) . 不过,它们可能仍然是在一台主机上运行的虚拟机。 (2认同)

Bri*_*ian 13

好奇“为什么”。对双宿主机的担忧通常被本地化为一些未命名的系统管理员的头疼问题。详细信息旨在被 OSI 模型隐藏。

以 Linux 为中心的答案。

有一些方法可以生成指纹并进行教育猜测。

  1. nmap -o 和 nmap 具有良好的端口扫描。服务器并不总是绑定到两个 NIC。但很多时候他们会这样做。

  2. MAC 地址。如果您有任何方法可以获得 MAC 地址,制造商喜欢为集成硬件使用连续地址。两个几乎相同的 MAC 地址更有可能是同一块主板。当然,这不适用于售后卡。

  3. 你好。Telnet、ftp、smtp 等都提供识别信息。查看这些服务是否正在运行,提供足够的不同信息。横幅今天可能很少见,但仍然值得一试。

  4. 测试 NIC 独立行为。例如,尝试通过多次向 ssh 提供虚假身份验证来阻止拒绝主机。如果拒绝主机被触发,您应该会发现套接字在下次尝试时立即关闭。看看其他 IP 是否也发生了这种情况。

一个 /27 网络是……什么,29 台主机?我想说,以高可信度识别双户型机器的机会非常渺茫,可能只有 5%。但鉴于主机很少,您或许可以做出有根据的猜测。

一个有趣的面试问题。我可能真的偷了它。

  • 至于#4,如果两个地址都在运行 ssh 并且您可以连接到它,则可以比较主机密钥。原则上,可以为两个不同的服务器提供相同的主机密钥,但这将是一个非常奇怪的设置。因此,如果您从两个地址获得相同的主机密钥,则它们很可能是同一台服务器。 (4认同)

Kai*_*har 8

从理论上讲,您可以在大多数情况下给出有意义的置信度。但是有一些警告在实践中变得更加困难。

我将与其他答案重叠,我可能错过了一些东西,但这至少是关于为什么这些特定位重要或不重要的详细推理。

首先,忘记任何关于 MAC 地址的想法。除非您可以直接访问该网段,否则您将无法看到它们。

也不要相信端口扫描。对于仅针对特定 IP 的防火墙端口、让软件仅侦听特定 IP 或拥有在检测到扫描时应用过滤的 IDS/IPS 系统,这些都是微不足道的。所有这些都会破坏你的测试。

好的,所以你的判断方式很简单:两个盒子完全相同的概率很低,除非它们有其他关联。所以你实际上在做的是试图证明它们是不同的盒子,而不是试图证明它们是相同的。

  1. 平。您需要同时测试两者并进行大量测试。事实证明,虽然网络时间存在抖动,但它是相当高质量的伪随机噪声,如果您在较短的时间范围内有足够的样本,则噪声的平均值足以为您提供准确的比较。

    网络中的每个第 2 层跃点都会增加少量的延迟,不同的拥塞级别将给出不同的延迟值。如果两个 IP 显示出明显不同的并发延迟,那么您可以假设它们可能不是同一个盒子。

    警告 1:具有两个上行链路(未绑定)并在每个上行链路上配置不同 IP 的单个服务器可能会有足够的上行链路不平衡来解决此问题。

  2. 端口扫描。目标端口可以处于以下三种状态之一:侦听、关闭、过滤。如上所述,它们实际上并没有多大用处,但仍有一些有用的信息可供使用。

    1. 在多个 IP 上打开端口的机器很可能会在所有 IP 上运行相同的软件。例如,可以在一个 IP 上运行 nginx 而在另一个 IP 上运行 apache,但大多数人不会打扰。对正在运行的服务进行指纹识别以寻找相似之处。寻找它宣传的软件和版本,它支持哪些选项,宣传的主机名(如果有),软件行为是否有任何怪癖,诸如此类。

      Web 服务对此最没用,更有用的是 SMTP(由于 sendmail 支持而难以混合和匹配,泄漏大量信息)、SNMP(信息金矿)、SSH(谁运行多个 SSH 守护程序? ) 和 HTTPS(如果你很幸运并且它们运行的​​是相同的软件,你可以检查 SSL 配置中的差异,一个相同但不寻常的配置是一个很好的指标)。NTP 曾经是一个很好的测试,但现在由于它被大量用作 DoS 放大器而被严格锁定,SNTP 对于同样的吸烟枪来说不够准确。

    2. 第 3 层指纹。远程指纹操作系统的主要方法来自它的 TCP/IP 实现中的怪癖。确切的细节太长而无法在这里介绍,但基本上数据包元数据会泄漏大量信息,关闭或过滤的端口如何响应连接以及主机在接收格式错误的数据包时的行为也是如此。虽然这些特征不能确定正在运行什么,但对于绑定到特定 TCP/IP 堆栈的每个 IP,它们可以合理地保证接近相同。显着不同的系统应该具有显着不同的特征。

    警告 2:运行完全相同的操作系统和供应商补丁的两个机器可能看起来相同。在 Windows 上,运行自动更新的相同 Windows 版本的两个副本将很难区分,除非它们运行不同的防火墙。在 Linux 上,差异可能主要与发布的内核版本和选项有关。此测试只能给出两个 IP 不在同一操作系统上的高概率。

  3. 重放攻击。使用在两个 IP 上打开的端口列表,对每个 IP 执行相同的操作并查找行为差异。诸如超时、错误消息、重试限制等事情。某些软件更难或更不经常配置为基于 IP 的不同。如果您知道一个 IP 正在接受特定域的邮件,请查看另一个 IP 是否也接受该域的邮件。

    警告 3:这是比测试 2 的服务指纹识别部分质量低的数据,因为这些东西更容易在不同的 IP 上进行不同的配置,并且可能有各种幕后交互。错误结果的高概率使得对这些结果缺乏信心。

正如我所说,基本理论是不同的主机可能会有不同的配置并且会泄漏信息。

这没有说明的是,很难判断在两个 IP 上运行的同一个站点是同一台服务器还是两台配置为冗余的服务器。它还没有考虑运行配置管理以保持系统非常相似的系统管理员。它也没有考虑将在不同主机上运行的多个服务 DNATing 到单个 IP 地址的主机。

虚拟化技术在工作中投入了一些奇怪的扳手。像 Docker 这样的容器化系统正在共享足够多的堆栈,使单独的容器看起来比实际情况更相似。桥接到物理网卡的虚拟网卡应该不可能与物理上分离的硬件区分开来,但这主要是因为网桥是软件,因此数据包必须通过主机 IP 堆栈。

有很多方法可以混淆试图测试可重复性的人。您可以期望的最好的模式是具有低怀疑幅度的模式。

对于运行服务器的人来说,这样做的寓意是您应该将服务器配置为泄漏尽可能少的信息:

  1. 尽可能关闭横幅信息。攻击对您的配置了解得越少对您越好。

  2. 让软件仅在必要时接受它应该提供服务的 IP 上的连接。如果不需要从外部访问,请将其绑定到本地主机。减少攻击面总是好的。

  3. 如果您绝对必须监听某些内容,并且您想避免两个 IP 之间的关联,请尽量将不寻常的选项保持在最低限度。你想让它融入。

  4. 使用默认丢弃策略运行防火墙。我认为 IDS 设置可能有价值,它以随机响应来响应攻击者,噪音会使攻击者更难相信他们的结果,但确实会让你脱颖而出。

  5. 随机延迟模块对于防止定时攻击毫无价值。不完全是。选择一个随机数,然后多次掷骰子,写下结果加上您在开始时选择的数字。你最终得到的是一个具有固定偏移量的范围。如果随机数被替换,则范围移动。如果范围改变,偏移量保持不变,只需重复采样过程以获得新的基线。

  6. IP 堆栈规范器确实存在,但在我上次查看时是安全研究中被忽略的部分。对于安全供应商来说,这可能是一个不错的投资市场。