【问题标题】:Could the remote IP address be spoofed in an incoming TCP session under Windows?在 Windows 下的传入 TCP 会话中,远程 IP 地址会被欺骗吗?
【发布时间】:2013-09-17 14:25:42
【问题描述】:

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

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

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

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

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

感谢任何见解。

【问题讨论】:

    标签: windows http authentication tcp


    【解决方案1】:

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

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

    【讨论】:

    • 如果我猜对了,即使数据包永远不会返回给攻击者,攻击也会按照描述的方式进行。重新消化身份验证:我猜这是 HTTPS 的一部分?当然,我可以在没有密码的情况下使用 HTTPS。所以我可以接受来自 localhost 的 HTTPS 连接而无需密码来解决我的问题。我对吗?重新防火墙:我不想依赖它。
    • 据我所知,摘要式身份验证不是 HTTPS 的一部分。这是一个非常简单和流行的身份验证协议(例如 mod_auth_digest 在 apache web 服务器中实现了它;星号也使用它来验证 sip 对等方)。 en.wikipedia.org/wiki/Digest_access_authentication。顺便说一句,如果你可以使用 https,那也可以解决你的问题,因为端点必须交换一大堆数据才能建立连接,而黑客需要很大的运气才能猜到这一切。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-22
    • 2013-06-29
    • 2012-02-22
    • 2016-02-14
    • 1970-01-01
    • 2010-11-13
    • 1970-01-01
    相关资源
    最近更新 更多