C# NetNamedPipeBinding安全吗?

C# NetNamedPipeBinding安全吗?,c#,wcf,named-pipes,netnamedpipebinding,C#,Wcf,Named Pipes,Netnamedpipebinding,我想知道netNamedPipeBinding是否被认为是安全的: 一方面,NetNamedPipeBinding仅在传输层实现安全性,它使用的NTLM()不再是Microsoft()推荐的 另一方面,远程计算机无法访问命名的Pipie,并且无法窃听用于传输数据或向其写入数据的特定开放管道实例,除非可以获得相关特定实例的句柄 这就是为什么我不知道该如何看待此解决方案的安全性。您提出的问题并不正确:不可能给出在所有情况下都有效的布尔答案。您应该始终评估整个解决方案的安全性,识别威胁并建模相关的安全

我想知道netNamedPipeBinding是否被认为是安全的:

一方面,NetNamedPipeBinding仅在传输层实现安全性,它使用的NTLM()不再是Microsoft()推荐的

另一方面,远程计算机无法访问命名的Pipie,并且无法窃听用于传输数据或向其写入数据的特定开放管道实例,除非可以获得相关特定实例的句柄


这就是为什么我不知道该如何看待此解决方案的安全性。

您提出的问题并不正确:不可能给出在所有情况下都有效的布尔答案。您应该始终评估整个解决方案的安全性,识别威胁并建模相关的安全风险

也就是说,WCF NetNamedPipeBinding确实具有安全特性,这使得它与基于网络协议的绑定有所不同:

  • 与任何网络协议相比,NetNamedPipeBinding本质上更安全,可以抵御传输连接上的通信威胁。在命名管道的情况下,消息不是通过网络传输的字节,而是通过一种机制进行交换,该机制涉及将字节数据(通过操作系统API)传递到单台机器上由操作系统内核管理的内存,以及从中传递数据。消息流不可能被窃听,除非攻击者已经拥有在内核模式下运行的特权代码(如果您的操作系统中已经有这样的攻击者,他可能已经可以对您的应用程序进程执行任何他喜欢的操作)。因此,WCF被称为“运输安全”
  • 命名管道绑定用于向潜在客户发布服务端点的机制本质上也比基于网络的协议更安全:它基于命名共享内存对象,因此不可能从任何远程计算机访问
  • 用于消息交换的命名管道使用GUID命名,该GUID在服务器每次重新启动时都会更改,并由ACL进一步保护,该ACL阻止任何远程用户打开它,即使他们能够以某种方式发现管道名称的当前GUID
另一方面,基于通过API访问的操作系统设施,而不是基于网络通信的公共标准,存在一些基于网络的绑定不会出现的特定安全漏洞:

  • 服务器“占用”攻击,其中除预期WCF服务主机之外的某些进程成功侦听指定管道。由于用于保护管道的绑定创建的ACL中存在错误,.NET 3.5及更早版本中的命名管道绑定无法抵御此漏洞。NET4主要纠正了这个错误
  • Windows上的命名管道具有内置机制,以支持模拟其客户端的命名管道服务器。WCF NetNamedPipeBinding包含一个错误,在某些情况下,该错误使管道服务器(即WCF服务)能够使用客户端的Windows凭据进行此类模拟,即使客户端WCF绑定配置为不允许模拟

综上所述,你需要根据你所面临的威胁来评估你的应用程序/系统的整体安全性,同时考虑到你可能考虑的各种绑定的特殊特性。NetNamedPipeBinding通常是相同机器场景的最佳选择

感谢您提供了非常完整的答案,这正是我所期望的:不是一个二进制答案,而是对NetNamedPipeBinding的优势和缺陷的概述!