15

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

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

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

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

4

1 回答 1

37

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

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

  • 与任何网络协议相比,NetNamedPipeBinding 本质上更加安全,可抵御传输连接上的通信威胁。在命名管道的情况下,不是通过网络传输字节,而是通过一种机制交换消息,该机制涉及将数据字节(通过操作系统 API)传入和传出由单个机器上的操作系统内核管理的内存。消息流不可能被窃听,除非攻击者已经拥有在内核模式下运行的特权代码(如果您的操作系统的内裤中已经有这样的攻击者,他可能已经可以对您的应用程序进行任何他喜欢的事情了)。因此,WCF“传输安全”或多或少与消息流的安全性无关,可以说应该经常在配置中禁用以避免不必要的运行时开销
  • 命名管道绑定用于将服务端点发布到预期客户端的机制在本质上也比基于网络的协议更安全:它基于命名的共享内存对象,因此无法从任何远程计算机访问。
  • 用于消息交换的命名管道以每次服务器重新启动时都会更改的 GUID 命名,并受到 ACL 的进一步保护,该 ACL 防止任何远程用户打开它,即使他们能够以某种方式发现管道名称的当前 GUID .

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

  • 服务器“抢注”攻击,其中除预期 WCF 服务主机之外的某些进程成功侦听命名管道。.NET 3.5 及更早版本中的命名管道绑定无法抵御此漏洞,因为该绑定创建的用于保护管道的 ACL 中存在错误。.NET 4 主要纠正了这个错误。
  • Named pipes on Windows have an in-built mechanism to support named pipe servers impersonating their clients. The WCF NetNamedPipeBinding contains a bug which in some scenarios enables the pipe server (i.e. the WCF service) to use the client's Windows credentials for such impersonation even if the client-side WCF binding is configured to disallow impersonation.

In summary, you need to evaluate the overall security of your application/system in the light of the threats which matter to you, taking into account the particular characteristics of the various bindings you might consider. The NetNamedPipeBinding will often be the best choice for same-machine scenarios.

于 2012-08-04T14:53:31.127 回答