【问题标题】:IPC security named pipesIPC 安全命名管道
【发布时间】:2011-04-23 11:15:34
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

    • Windows 操作系统中的命名管道被放置在一个特殊的路径\\.\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 方法的危害。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-03-05
        • 1970-01-01
        • 2013-10-26
        • 1970-01-01
        • 2010-11-27
        • 2011-09-23
        • 1970-01-01
        • 2010-11-17
        相关资源
        最近更新 更多