1

我希望在我的应用程序中使用命名管道。服务器将是 NT 服务,客户端是用户空间应用程序。我认为如果有人可以创建锁定管道(或其他东西)的应用程序客户端并且我的服务器停止接收消息,则可能会出现问题。

我想补充一点,客户端应该始终发送消息,服务器接收它们。如果有人扰乱了这个过程,就会有问题。

我需要建议如何保护命名管道

4

2 回答 2

1

以下是在实现“安全”命名管道方面需要考虑的一些事项。

  • Windows 操作系统中的命名管道放置在\\.\pipe\每个用户(包括来宾)都可以访问的特殊路径中

  • 一个命名管道可以有多个同名的实例;

    • 每个实例只连接一个管道服务器和一个管道客户端。
    • 新的管道客户端以循环顺序连接到管道服务器。
  • 第一个实例的创建者决定实例的最大数量并指定安全描述符

    • 这包括用于控制所有实例的访问控制列表 (DACL)。
    • 默认描述符授予每个人读取访问权限,仅授予创建者用户和管理员完全访问权限。
  • 如果命名管道不存在,任何用户都可以创建第一个实例并设置所有管道实例的 DACL。

  • 如果存在,则只有具有FILE_CREATE_PIPE_INSTANCE权限的用户才能创建新实例。

    • 利用FILE_FLAG_FIRST_PIPE_INSTANCE服务器的标志来确保它正在创建第一个实例。

致谢:对不安全的进程间通信进行机器中人 (MitMa) 攻击,这解释了不保护包括命名管道在内的许多 IPC 方法的危害。

于 2020-01-30T09:55:27.533 回答
0

AFAIK,多个不同的客户端进程都可以打开命名管道并写入单个读取器进程。这在 Unix 上肯定是正确的,所以在 Windows 上也可能如此。

这意味着单个进程无法阻止其他进程写入服务器——尽管行为不端的进程可能会用它的消息压倒服务器。对于过于热情的客户,没有简单的保护措施。

于 2011-04-23T15:57:07.967 回答