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

时间:2013-09-17 14:25:43

标签: windows http authentication tcp

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

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

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

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

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

感谢任何见解。

1 个答案:

答案 0 :(得分:1)

在您描述的方案中,攻击者不会从您的Web服务器获取任何数据包。如果您可以使用digest auth(服务器首先向客户端发送一个短的随机nonce字符串,然后客户端使用该nonce创建一个身份验证哈希),那就没关系了。

如果在系统上安装防火墙是一种选择,您可以使用一个简单的规则,例如“不接受来自任何接口的源IP地址为127.0.0.1的数据包,然后再进行环回”。