使用单个数字而不是 IP 地址或 DNS 名称,具体用途是什么?

信息安全 访问控制 身份证 ip 混淆
2021-08-14 03:28:44

我的问题:

我已经读过,使用 IP 地址的单个数字等价物(作者称为“二进制等价物”)而不是实际的 IP 地址或域名可以“绕过基本 ACL ”。

我想知道这种“深奥”的做法是否真的被使用过,如果是,在哪些情况下?

我的理解是过滤可能发生在两层:

  • 在应用层。此处代理将根据黑名单检查域名。使用IP绕过这个似乎是一种更实用的方法,
  • 在网络层。在这里,防火墙会根据黑名单检查目标 IP:据我了解,无论一个人如何输入 IP 地址,无论他使用 DNS、IP、二进制还是其他任何方式,他仍然会被阻止。

我能想象的唯一理论场景是一个愚蠢的系统管理员使用配置错误的代理而不是防火墙来伪造基于 IP 的过滤。

有没有更真实的场景?除非我的理论情况实际上反映了现实生活中的安全问题?

所谓的“二进制等价”的东西:

对于那些不知道我指的是什么的人,我认为很少有人知道www.google.com可以通过三种方式到达主机(我们以清酒为例):

  • 最明显的:它的域名:www.google.com,
  • 一种更技术的方式:它的IP地址:216.58.210.228
  • 一种绝对技术含量更高的方法:使用 IP 地址的十进制表示:3627733732.

我在这里感兴趣的是后者。要计算它,您需要从主机的 IP 地址开始:

$ host www.google.com
www.google.com has address 216.58.210.228

我读的书建议将每个 IP 地址组件转换为二进制数,将它们连接起来得到一个大的二进制数,然后将其转换回十进制。每个人都有自己的口味,我个人更喜欢简单地循环乘以 256 并添加每个组件,如下例所示:

$ bc
((( 216 * 256) + 58) * 256 + 210) * 256 + 228
3627733732

这会产生一个数字,您可以使用它使用不透明的 URL(例如http://3627733732)访问 Google 的服务器,或者通过 ping 来确保联系到正确的 IP 地址,例如:

$ ping 3627733732
PING 3627733732 (216.58.210.228) 56(84) bytes of data.
64 bytes from 216.58.210.228: icmp_seq=1 ttl=53 time=26.5 ms

这是一件很酷的事情,网络巫师,用这个奇妙的 1337 技巧让你的朋友惊叹不已,太棒了!但除此之外,我想知道这是否有任何实际用途?

1个回答

取决于过滤器的实现,也可能取决于客户端机器上的操作系统。

正如您所说 - 无论它最初是如何传递给套接字软件层的,IP 地址都将以二进制表示形式出现在 TCP 数据包中。防火墙将过滤这个二进制地址,从而捕获任何东西——这是没有办法的。

但是,如果“防火墙”或“代理”在受阻塞的机器上运行(例如,在员工机器上而不是公司防火墙上),我看到了一种可行的方法:

如果“IP 过滤器”被实现为操作系统网络库(例如 Windows 防火墙/Windows Defender)的一种委托替换。当软件向主机 XY 请求新的套接字时,它会根据黑名单检查 XY。如果未列入黑名单,它会将 API 调用传递给操作系统。
如果该过滤器软件不考虑单号表示,它将允许连接到列入黑名单的主机。

PS:我认为这个场景相当模糊。我无法想象一个严肃的系统管理员会依赖 Windows 防火墙或某事。相似的。此外,认为 Windows 防火墙使用白名单(还记得这些“允许软件 ABC 访问网络 XYZ 吗?”对话框?)