我想知道您是否可以在传输层之上获取带有伪造 IP 地址的数据包。我的想法是:
- TCP:不行,因为如果 IP 被欺骗,确认信息将永远无法到达原始发送者。无法建立会话,因此之后传输将无法通过。
- UDP:是的,因为它不需要确认
还有什么需要考虑的吗?我读到过,可以猜测 ACK 或 SEQ 来建立欺骗性的 TCP 会话 - 这在现代操作系统上有多可行?
谢谢
答案1
关于 UDP,您说得对。您必须实现自己的协议(使用 HMAC 来保证真实性等)以防止基于 UDP 的协议被欺骗。
TCP 序列号预测在过去是一种可行的攻击。一些操作系统在初始序列号方面做出了非常糟糕的选择,从而允许这些攻击。攻击者的连接是单向的,因为具有欺骗数据包的真实源地址的机器将接收被攻击主机发送的流,但如果您不需要远程主机可能发送的任何内容(即您正在执行仅涉及写入远程主机的攻击),那么缺少从远程主机返回的接收通道就无关紧要了。
这里有一篇有趣的论文,其中包含一些 TCP 初始序列号分析的相空间图:http://lcamtuf.coredump.cx/oldtcp/tcpseq.html 唉,这是 Windows 2000 和 Linux 2.2 时代的数据。(不过,也有一些很酷的图片!)
就我所知,目前还没有哪篇论文研究现代操作系统 TCP 初始序列号的生成,但可能确实有。业界的趋势是采用更强大的算法,我的感觉是,虽然可能有些嵌入式设备很容易受到攻击,但大多数主流操作系统现在使用的算法具有足够的随机性,可以防止序列号预测攻击。
如果攻击者可以拦截您的 TCP 流,那么世界上所有初始序列号的随机性都帮不了您。加密您的流量(将其包装在 SSL、IPSEC 等中),您也解决了这个问题。(然后您可以担心密钥分发、主机身份验证等......别担心——这些问题的来源还有更多。我们会制造更多,永远不会用完......>微笑<)
答案2
考虑一下中间人攻击,被入侵的防火墙或路由器允许使用伪造的 IP 地址设置 TCP 会话。