IPC安全命名管道

问题描述 投票:0回答:2

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

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

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

c++ ipc named-pipes boost-interprocess
2个回答
0
投票

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

这意味着单个进程无法停止其他进程向服务器的写操作-尽管行为不当的进程可能会淹没服务器并显示其消息。没有针对过度热情的客户的简便保护措施。


0
投票

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

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

  • 命名管道可以具有多个共享相同名称的实例;

    • 每个实例恰好连接一个管道服务器和一个管道客户端。
    • 新的管道客户端以轮询顺序连接到管道服务器。
  • 第一个实例的创建者确定最大实例数并指定安全描述符

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

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

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

    信用:Man-in-the-Machine (MitMa) attacks on ill-secured inter process communications,这说明了不保护许多IPC方法(包括命名管道)的危害。

© www.soinside.com 2019 - 2024. All rights reserved.