NetNamedPipeBinding安全吗?

时间:2012-08-03 15:05:27

标签: c# wcf named-pipes netnamedpipebinding

我想知道netNamedPipeBinding是否安全:

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

另一方面,无法从远程计算机访问命名Pipie,并且无法窃听用于传输数据或向其写入数据的特定打开管道实例,除非可以获取到具体的例子。

这就是为什么我不知道如何考虑这个解决方案的安全性的原因。

1 个答案:

答案 0 :(得分:32)

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

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

  • 与任何网络协议相比,NetNamedPipeBinding本质上更安全,可抵御传输连接上的通信威胁。在命名管道的情况下,不是通过网络传输字节,而是通过一种机制来交换消息,该机制涉及在一台机器上将数据字节(通过操作系统API)传送到操作系统内核管理的内存。除了已经拥有以内核模式运行的特权代码的攻击者之外,消息流不可能被窃听(如果您的操作系统内部已经有这样的攻击者,他可能已经在您的应用程序进程中做了他喜欢的任何事情)。因此,WCF“运输安全”is more or less irrelevant to the security of the message stream and should arguably often be disabled in configuration to avoid unnecessary runtime overhead
  • 命名管道绑定用于将服务端点发布到预期客户端的机制本身也比基于网络的协议更安全:它基于命名的共享内存对象,因此无法从任何远程计算机访问。
  • 用于消息交换的命名管道以GUID命名,GUID在每次服务器重新启动时都会更改,并且受到ACL的进一步保护,这会阻止任何远程用户打开它,即使他们能够以某种方式发现当前的GUID管道名称。

另一方面,基于通过API访问的操作系统设施,而不是基于网络通信的公共标准,基于网络的绑定不会出现一些特定的安全漏洞:

  • 服务器“抢注”攻击,其中除了预期的WCF服务主机之外的某些进程成功侦听命名管道。由于绑定为保护管道而创建的ACL中的错误,.NET 3.5及更早版本中的命名管道绑定对此漏洞不安全。 .NET 4主要纠正了这个错误。
  • Windows上的命名管道具有内置机制,可支持冒充客户端的命名管道服务器。 WCF NetNamedPipeBinding包含一个错误,在某些情况下,即使客户端WCF绑定配置为禁止模拟,管道服务器(即WCF服务)也可以使用客户端的Windows凭据进行此类模拟。

总之,您需要根据对您而言重要的威胁来评估应用程序/系统的整体安全性,同时考虑您可能考虑的各种绑定的特定特征。 NetNamedPipeBinding通常是同机场景的最佳选择。