远程 IP 地址是否可以在 Windows 下的传入 TCP 会话中被欺骗



我在Windows下编写了一个HTTP小型服务器。 对服务器的访问是使用通常的HTTP身份验证机制(我使用Windows HTTP API)保护的。但是我想对本地主机没有身份验证,即本地用户应该能够在没有密码的情况下访问服务器。

问题是:这是保存吗? 更准确地说,在没有进一步身份验证的情况下信任 TCP 连接的远程地址是否安全?

假设一个对手(Charly)试图向我的服务器发送一个恶意的HTTP GET。 此外,假设所有 Windows/路由器防火墙入口检查本地主机地址都允许源地址 127.0.0.1 和 [::1] 通过。

因此,远程地址可能会被欺骗,但对于TCP连接,我们需要完整的三向握手。 因此,SYN-ACK 由 Windows 在接收到 SYN 时发送。 这个 SYN-ACK 无处可去,但 Charly 可能会在不久之后发送一个 ACK。 如果 SYN-ACK 的确认 SEQ 正确,则此 ACK 将被接受。 之后,Charly 可以发送恶意负载,因为他知道正确的 TCP SEQ 和 ACK 编号。

因此,所有的安全性都取决于Windows的TCP传出初始序列号(ISN)的不可预测性。 我不确定这有多安全,预测下一届会议的ISN有多难。

任何见解都值得赞赏。

在您描述的场景中,攻击者不会从您的 Web 服务器获取任何数据包。如果你可以使用类似摘要身份验证的东西(服务器首先向客户端发送一个短的随机随机字符串,然后客户端使用该随机数来创建身份验证哈希),你会很好。

如果可以选择在系统上安装防火墙,则可以使用简单的规则,例如"不接受来自环回以外的任何接口的源 ip 为 127.0.0.1 的数据包"。

最新更新