本地主机上的 TCP 连接安全吗?

dub*_*adu 4 sockets security authentication tcp localhost

领域

我正在设计一个软件 ATM,我想在“加密守护进程”后面隐藏必要的加密操作,它访问磁盘上的加密密钥并为这些操作提供高级别的应用程序特定接口。

其他程序必须:

  • 向守护进程进行身份验证(有效的身份验证允许守护进程解密磁盘上的密钥)
  • 向守护程序发出命令并接收答案

我有通过 localhost 使用 TCP 进行这些操作的想法。完成 TCP 握手后,程序必须向守护程序进行身份验证,并且 - 如果成功 - 可以向守护程序发出加密命令。

实际问题

至少有两个假设必须成立,否则这在设计上是不安全的:

  1. 本地主机上的 TCP 通道不能被劫持/修改(管理员/root 除外)
  2. 本地主机上的 TCP 通道是私有的(无法窥视)(管理员/root 用户除外)

这些假设是真的吗?为什么?为什么不?其他有什么缺陷吗?

bob*_*nce 6

环回连接通常不受中间人攻击(来自同一机器上的其他非根进程,或来自机器外部)。

如果您打算将环回用作穷人的传输安全(而不是 TLS),则必须确保连接的两端都受到适当保护:

  • 在客户端,允许未经授权的低权限进程连接到服务器的后果是什么?如果客户端访问受明文密码保护,您可能会考虑对该密码进行暴力攻击,并通过密码复杂性和失败审核来解决该问题。

  • 在服务器端,是否可以想象一个低权限进程导致服务器终止(例如,由于输入格式错误或资源耗尽而使其崩溃),并将其替换为会从客户端窃取密码或返回误导性的木马监听器结果?您可能会考虑使用 Unix 的低端口号保护来阻止这种情况(但是您必须担心以 root/setuid/fork 身份运行)。

这取决于您的威胁模型,您对防止本地访问有多大的关注;您可能认为您的基础架构和监控足以降低攻击者获得低权限帐户的可能性。但在一般情况下,您最好咬紧牙关,采用众所周知的 TLS 解决方案。