我有几个进程运行在一个系统上,通过TCP相互交互(例如。与异步消息协议一起使用)。
process1 <=====> broker <=====> process2在linux主机上运行一个服务器实例(代理),侦听TCP套接字本地主机:端口。还有一些运行在同一主机上的其他进程,它们通过TCP使用套接字来查询代理实例(由扭曲提供)。代理可以访问硬件安全模块(HSM)。
我目前正在考虑这个设计的安全方面。对主机具有直接物理访问权限的窃听者是否有可能侦听此主机上客户端与代理之间的TCP通信?由于有时传输敏感数据,所以我希望确保主机上进程和代理之间的通信安全。
这是如何做到的呢?总是存在着存储私人秘密的问题。对于代理来说,它没有问题,因为它可以访问HSM,但是对于与代理交互的客户端进程而言。对于拥有对主机的物理访问权限的攻击者来说,很难隐藏一个秘密。如何实现进程和代理之间的身份验证/加密?
希望你能理解我的问题,并能帮助我!
编辑: SSL/TLS不是一种好的方法,因为它具有很高的开销,并且还存在私有秘密的安全存储问题。
发布于 2016-12-29 06:01:04
如果您想限制计算机上的进程间通信,我建议取消TCP,而使用Unix域套接字。Unix域套接字可以与TCP (它是双向套接字)完全相同的方式使用,但是它创建一个套接字文件而不是监听TCP端口。您可以使用标准文件系统权限控制套接字文件的权限。扭曲支持Unix域套接字。
如果您真的必须使用TCP,那么您可以使用SSL不加密。默认情况下,eNULL密码和aNULL身份验证在OpenSSL中是不允许的,但是您可以显式请求它。我个人不建议这样做。
定义限制进程如何连接到某个TCP端口的可依规则也可能会有些运气。
但是,总的来说,试图防御对机器的无限制根/物理访问是徒劳的,对同一台机器中进程间通信进行加密是相当愚蠢的,但这是相当无害的。
发布于 2016-12-27 15:15:42
在Windows和Linux上也可以监听本地主机流量。
在Linux tcpdump -i lo中。
您至少应该考虑使用特殊的算法对通信进行编码,并考虑保护代理过程不被丢弃、调试或逆向工程。
发布于 2016-12-29 01:31:07
这些进程之间的通信始终可以被具有特权访问系统的攻击者拦截。
通过根用户访问该框,攻击者将拥有系统,并可以绕过您实现的任何东西和一切(大部分情况下)。加密的流量?处理加密密钥的函数可以挂起,也可以转储进程内存。反逆向工程是一种可能,但它总是可以被一个足够熟练的人绕过。更有效和安全的方法是编写一个LKM,它在内核级别强制您的进程的安全性;这需要大量的内核编程经验,并且非常难正确地完成(我敢说不可能?!) --有人总会找到一个漏洞,尽管这是需要考虑的事情。
此外,非根用户无法创建原始套接字,这是嗅探数据包所需的(这意味着攻击者将需要根访问您的系统,以拦截您的进程之间的通信)。
从已经拥有该系统的攻击者那里保护系统上的信息并不是一项简单的任务。您可以使访问所述信息变得更加困难,但您永远无法完全保护它。
https://security.stackexchange.com/questions/146522
复制相似问题