一旦建立,本地主机上的套接字是否安全?

信息安全 服务器 tcp
2021-08-19 13:04:29

一旦在 上建立 TCP 套接字并localhost使用 建立连接accept,非特权用户是否可以拦截或修改通过此连接发送的字节,或者可以保证此连接安全?

有问题的操作系统是 Windows 和 Unix 上的任何现代变体。Windows 是最重要的,因为我可以在其他平台上使用 Unix 域套接字。

我将使用身份验证(存储在文件中的 16 字节随机密钥)来确保立即删除恶意连接。

1个回答

对于所描述的威胁,您是安全的,因为在任何情况下,在低级别拦截和更改网络流量总是需要用户在本地计算机上具有提升的权限。无特权的最终用户无法拦截或篡改它们,因此您可以将本地连接视为安全的。

但是,您的问题提出了一个有趣的观点,我想深入一点,特别是如果我们稍微放松一下“非特权最终用户”的观点。确实,您在问题中提到了 Windows 和 Unix,但这些情况却大不相同。

在 Windows(和一些 Unix,即 Solaris 和 HP-UX)上,出于优化目的(我猜)环回通信不会通过完整的 IP 堆栈。因此,在正常情况下不可能拦截,更不可能改变本地通信。

我说“在正常情况下”是因为仍有可能强制 Windows 主机通过附近的路由器路由其本地流量,从而有效地强制数据通过整个主机的 IP 堆栈传输。这可用于调查无法以其他方式拦截的通信,但是需要本地计算机的管理员才能强制执行此类路由,并且操作根本不会谨慎(带有新条目的路由表,交换机/会看到异常流量的路由器,突然变得非常慢的应用程序等)。

或者,仍然有可能访问原始套接字通信,并且还有一些商业软件在本地接口上提供 IP 嗅探。我不确定这样的解决方案是否可以改变通信,而且似乎无论如何都需要更多的工作。您可以在Wireshark 网站上找到有关该主题的更多信息

相反,大多数 Unix 和类 Unix 系统将环回实现为任何其他网络设备,允许拦截发生在其上的通信,就像您对任何其他网络接口所做的那样,因此至少在理论上允许更改通信。我提醒一下,这仍然需要潜在的攻击者已经在主机上获得了足够的权限,此时可能有更简单的方法来利用您的应用程序。