“基于 TCP 的跟踪路由”如何工作,有哪些风险,如何降低风险?

信息安全 网络 网络扫描仪 路由 地图 tcp
2021-09-01 06:32:22

有一个名为tcptraceroute的实用程序,此增强功能称为intrace,它的使用方式与标准 traceroute 一样,但它通过 TCP 工作。

  • TCP中的标志如何syn用于实现类似跟踪路由的功能(当 ICMP 关闭时)

  • 可以披露哪些信息(或其他风险)?

  • 如何减轻这种情况?(路由器,主机,......两者?)

这被描述为类似于传递 -sS 标志时的 nmap 命令。如果这是准确的,它实际上意味着什么?

3个回答

所有的跟踪路由工具都依赖于以下原理:它们发送生命周期较短的数据包,并等待 ICMP 数据包报告这些数据包的死亡。IP 数据包有一个名为“TTL”(即“生存时间”)的字段,该字段在每一跳递减;当它达到 0 时,数据包死亡,发生这种情况的路由器应该发回“超时”ICMP 消息该 ICMP 消息包含所述路由器的 IP 地址,从而显示它。

如果某些防火墙阻止“超时”ICMP 数据包,则链接到的任何工具都无法执行任何操作。但是,阻止此类数据包往往会破坏 Internet(因为主机会自适应地更改它们发送的数据包中的 TTL 以应对较长的网络路径,并且它们需要这些 ICMP 来进行此过程),因此,一般来说,“ Time Exceeded” ICMP 数据包未被阻止。

然而,经常被阻塞的是发送的那种短寿命的数据包traceroute这些是具有人为低 TTL 的数据包。如果它们被防火墙阻止,它们永远不会“老死”,因此不会出现 Time Exceeded ICMP。对于 TTL 处理和“超时”ICMP,数据包的类型无关紧要;这发生在 IP 级别。但防火墙也会查看数据包内容。目标是欺骗防火墙,使它们允许短暂的数据包流动(然后死亡)。

Plaintraceroute使用 UDP 数据包或 ICMP“Echo”数据包,这两种数据包都会被(过度)热心的系统管理员阻止。而是使用 TCP“SYN”数据包,即作为TCP “三次握手”tcptraceroute的第一步出现的数据包类型。这种数据包通常不会被防火墙阻止,至少只要目标端口是“允许的”。不会完成任何 TCP 握手;它只是依赖于 SYN 数据包不会被防火墙看到的想法。tcptraceroute

intrace更进一步,它等待现有的 TCP 连接(它通过检查所有数据包来做到这一点,à la tcpdump)。当它看到一个连接并且用户按下 ENTER 时,intrace将发送短期数据包,这些数据包看起来是观察到的连接的一部分。intrace可以这样做,因为它已经看到了数据包,因此知道 IP 地址、端口和序列号。所有相关的防火墙都会让这些数据包通过,因为它们(显然)允许观察到的 TCP 连接继续进行。短期数据包被调整,以便它们不会中断 TCP 连接(即它们是简单的“ACK”数据包,本身没有数据,因此目标操作系统将简单地忽略它们)。


编辑:我注意到我没有回答部分问题。就是这样:没有风险。没有什么可以减轻的。

traceroute揭示了路由数据包所涉及的路由器的 IP 地址。IP 地址并不意味着秘密,攻击者很容易通过各种方式获得(想到大规模扫描,但也搜索垃圾袋以打印网络地图 - 现代回收方式使得垃圾箱潜水变得更加容易,并且比以前更清洁的活动)。然而,一个相对普遍的神话是,将您的地址保密以某种方式确保安全。相应地,许多系统管理员认为traceroute是严重的违规行为,需要尽快修复和阻止。然而,在实践中,这都是胡扯。如果泄露一些内部 IP 地址是一个主要问题,那么这意味着您的网络注定要失败。

担心 IP 地址的保密性就像触发一个重大事件响应计划,因为一个局外人在公司的自助餐厅得知了菜单。这是不成比例的。诚然,对网络基础设施有准确而广泛的了解只能帮助攻击者;但数量并不大。将 IP 地址保密不值得通过过度过滤来破坏连接(例如,阻止“需要分段”的 ICMP 对于 ADSL+PPPoE 链接后面的任何客户端都是致命的)。

traceroute 和 tcptraceroute 的工作原理相同:

  1. 以非常低的 TTL 发送数据包
  2. 查看谁发回了 TTL 到期时超出的 ICMP TTL
  3. 如果 send-backer 是目的地,则停止
  4. 否则,将 TTL 加 1 并返回步骤 #1

唯一的区别是发送什么类型的数据包(Linux 上默认是 UDP,Windows 上是 ICMP,而 TCP 正在成为更流行的选项)。当 TTL 到期时,所有设备都会从有用的设备生成 ICMP 错误消息。

  • 因此,UDP/ICMP/TCP 数据包没有什么特别之处,这使它成为 traceroute-y。使用该SYN标志是因为像防火墙这样的干预设备通常会允许SYN但阻止不属于已建立连接的其他 TCP 数据包。
  • 提供与常规跟踪路由相同的信息,但可能比常规跟踪路由更可能被允许进入。以 amazon.com 之类的网站为例。基于 UDP 的跟踪路由停止在 205.251.248.5,这可能是某种防火墙。到端口 80 的基于 TCP 的跟踪路由(我们知道“amazon.com”允许)更进一步到 72.21.194.212。
  • Traceroute 可以通过不允许数据包进入或阻止 ICMP 响应来缓解。前者是 tcptraceroute 变得更受欢迎的原因;任何允许在至少一个 TCP 端口上进行连接的站点(如网站)都允许数据包进入。阻止 ICMP 响应具有破坏必要的 IP 网络基础的副作用,从轻微的不礼貌到非常适得其反。

nmap -sS将执行 SYN 扫描,其中仅发送 SYN 数据包。但是,它本身不会执行跟踪路由。您需要将它与 --traceroute 选项结合使用(然后我认为您仍在扫描,而不仅仅是执行跟踪路由,所以如果您想跟踪我建议tcptraceroute或者traceroute -T您的操作系统支持它)。

  • TCP 中的 syn 标志如何用于实现类似跟踪路由的功能(当 ICMP 关闭时)

当 TTL 值达到零时,任何 IP 数据包都会触发来自中间路由器的 ICMP“超时”响应。这可以是 TCP、UDP、ICMP 或任何其他。只要中间路由器将传递数据包,跟踪就会起作用。传统的 traceroute 使用 ICMP 回显请求,但这只是惯例。

请注意,目标服务器是否允许 ICMP完全无关紧要,因为返回 Time Exceeded 响应的是中间路由器您可能会错过的唯一一件事是来自最终目标主机的响应,但 traceroute 是最不重要的响应,因为 traceroute 为您提供的是中间路由器列表。

在 TCP 数据包上使用 SYN 标志可能会从目标服务器获得 SYN/ACK,或者如果端口未打开或策略阻止您的数据包,则可能不会。但同样,目标服务器是最不重要的。如果您只对跃点列表感兴趣,您可以轻松地发送 UDP 或 TCP 延续。

一些路由器被配置为以不同的方式处理 PING 数据包;不同的路由、不同的优先级等。改用 TCP 数据包可能会给您不同的结果,这应该更能说明 TCP 流量将采用的路由。

  • 可以披露哪些信息(或其他风险)?

没有什么是不公开的。如果您的安全取决于对此类信息保密,那么您应该坐下来重新考虑让您来到这里的决定。

  • 如何减轻这种情况?(路由器,主机,......两者?)

没有什么可以减轻的。当然,你总是可以拔掉你的服务器,这会减轻各种各样的事情。否则,在您采用缓解策略之前,您应该考虑您正在获得什么以及您正在放弃什么。在这种情况下,您似乎没有任何收获。