IPC安全命名管道

时间:2011-04-23 11:15:34

标签: c++ ipc named-pipes boost-interprocess

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

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

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

2 个答案:

答案 0 :(得分:0)

AFAIK,多个不同的客户端进程都可以打开命名管道并写入单个读取器进程。这肯定适用于Unix,所以它也可能在Windows上运行。

这意味着单个进程无法阻止其他进程写入服务器 - 尽管行为不当的进程可能会使服务器的消息不堪重负。对过度热心的客户没有简单的保护。

答案 1 :(得分:0)

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

  • Windows操作系统中的命名管道放置在特殊路径hash = Hash.from_xml("my_xml.xml") 中,每个用户(包括来宾)都可以访问

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

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

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

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

    • 为服务器利用FILE_CREATE_PIPE_INSTANCE标志,以确保它正在创建第一个实例。

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