我正在设计一个软件ATM,我想在“加密守护程序”后面隐藏必要的加密操作,“加密守护程序”访问磁盘上的加密密钥,并为这些操作提供高级别的应用程序特定接口。
其他计划必须:
我想通过localhost使用TCP进行这些操作。执行TCP握手后,程序必须对守护程序进行身份验证,并且 - 如果成功 - 可以向守护程序发出crypto命令。
至少有两个假设必须保持,否则这是不安全的设计:
这些假设是真的吗?为什么?为什么不?还有其他缺陷吗?
答案 0 :(得分:4)
环回连接通常不受中间人攻击(来自同一盒子上或盒子外部的其他非根进程)。
如果您打算将环回用作穷人的传输安全性(而不是TLS),则必须确保连接的两端都受到适当保护:
在客户端,允许未经授权的低权限进程连接到服务器的后果是什么?如果客户端访问受明文密码保护,您可能会考虑对该密码进行暴力攻击,并通过密码复杂性和故障审核来解决该问题。
在服务器端,可以想象一个低权限进程导致服务器终止(例如,输入错误或资源耗尽导致崩溃),并将其替换为窃取密码的特洛伊木马侦听器来自客户或返回误导性结果?您可以考虑使用Unix的低端口号保护来阻止它(但是你必须担心以root / setuid / fork运行)。
这取决于您的威胁模型您对防止本地访问的担忧程度;您可以采取以下立场:您的infra sec和监控足以抵消攻击者获得低权限帐户的情况。但是在一般情况下,你最好不要咬紧牙关并使用众所周知的TLS解决方案。
答案 1 :(得分:3)
除了在localhost中运行的内核和其他应用程序之外,它是安全的。如果你能相信那些,那就安全了。如果不是,不是。
答案 2 :(得分:2)
来自维基百科,强调相关信息。
Internet协议套件的实现包括一个虚拟网络接口,网络应用程序客户端和服务器在同一台计算机上运行时可以通过该接口进行通信。 完全在操作系统的网络软件中实现,并且不会将数据包传递给任何网络接口控制器。计算机程序发送到环回IP地址的任何流量都可以简单地立即传回网络软件堆栈,就像从其他设备接收一样。
类Unix系统通常将此LOopback接口命名为lo或lo0。
为此,各种IETF标准保留IPv4地址块127/8(最常用的127.0.0.1),IPv6地址:: 1和名称 localhost 。