RPC 接口限制

默认情况下,远程过程调用 (RPC) 服务使 RPC 接口安全,以减少攻击。 使用 RestrictRemoteClients 注册表项,可以修改系统上所有 RPC 接口的行为,并能用于消除对系统上 RPC 接口的远程匿名访问,但有一些例外情况。 可以使用本文中介绍的 EnableAuthEpResolution 注册表项应用其他接口控制措施。 RPC 应用程序开发人员和系统管理员都可以配置 RPC 接口限制。

Prerequisites

在服务器上使用 RestrictRemoteClients 时:

  • 你的 RPC 客户端需要在联系你的服务器应用程序时使用 RPC 安全性,这是缓解安全威胁的最佳方法。

  • 通过在注册期间设置 RPC_IF_ALLOW_CALLBACKS_WITH_NO_AUTH 标志,免除 RPC 设置要求进行身份验证。 这样做会将 RPC 配置为允许匿名连接到应用程序。

RestrictRemoteClients 威胁缓解

启用 RestrictRemoteClients 有助于缓解依赖于可利用的缓冲区溢出的蠕虫(这些蠕虫可以通过匿名连接远程调用)所带来的威胁。 使用此功能时,预期从远程匿名 RPC 客户端接收调用的 RPC 应用程序可能无法正常运行。 因此,如果设置了此值,则使用 DCOM(分布式组件对象模型)的应用程序可能无法正常工作。

如果启用此密钥,则使用无连接协议的 RPC 调用会失败。 与面向连接的协议相比,通过无连接协议(如 UDP(用户数据报协议)和 IPX(Internet 数据包交换))的安全 RPC 调用使用较低级别的安全性。 具体而言,ncadg_ip_udpncadg_ipx 被认为不太安全。 出于此策略的目的,这些调用始终被视为不安全。

若要允许使用无连接协议进行 RPC 客户端调用,请将 RestrictRemoteClients 值设置为 禁用

RPC 客户端的限制

使用 RpcServerRegisterIf 注册接口时,RPC 允许服务器应用程序通过安全回调限制对接口的访问。 注册表项 RestrictRemoteClients 强制 RPC 对所有接口执行附加的安全检查,即使该接口没有注册安全回调。

使用命名管道协议序列 (ncacn_np) 的 RPC 客户端不受本部分中讨论的所有限制影响。 由于存在严重的向后兼容性问题,无法限制命名管道协议序列。

RestrictRemoteClients 也可以在 rpcdce.h API(应用程序编程接口)标头中以编程方式控制。

配置 RestrictRemoteClients

要使用 GPO(组策略对象)编辑器编辑这些策略,请执行以下操作:

  1. 选择 “开始> ”类型 gpedit.msc> 点击 Enter 以打开 本地组策略编辑器

  2. 要启用 RestrictRemoteClients 设置的等效项,请导航到 计算机配置\管理模板\系统\远程过程调用\用于未验证的 RPC 客户端的限制,并选择下列项之一:

    • 已禁用 - 此设置是服务器 SKU 的默认值。 对应于 rpcdce.h 中的值 RPC_RESTRICT_REMOTE_CLIENT_NONE ,服务器应用程序负责施加适当的 RPC 限制。
    • 身份验证 - 对应于 rpcdce.h 中 RPC_RESTRICT_REMOTE_CLIENT_DEFAULT 的值。 仅允许经过验证的 RPC 客户端连接到应用该策略设置的计算机上运行的 RPC 服务器。 RPC 运行时拒绝匿名调用。 如果接口注册安全回调并提供 RPC_IF_ALLOW_CALLBACKS_WITH_NO_AUTH 标志,则此限制不适用于该接口。
    • 未经异常身份验证1 - 对应于 rpcdce.h 中 RPC_RESTRICT_REMOTE_CLIENT_HIGH 的值。 仅允许经过验证的 RPC 客户端连接到应用该策略设置的计算机上运行的 RPC 服务器。 当此值设置为系统无法接收使用 RPC 的远程匿名调用时,不存在任何例外。

对其中任一设置所做的任何更改都需要 系统重启 才能生效。

Caution

¹如果不进行重大测试,请不要使用此值。 有关详细信息,请参阅针对未经身份验证的 RPC 客户端的限制

EnableAuthEpResolution

EnableAuthEpResolution 密钥允许 RPC 客户端运行时在启用时使用 NTLM(NT LAN 管理器)向终结点映射器进行身份验证。 仅当实际 RPC 客户端调用使用 RPC 身份验证时,才会发生此经过身份验证的查询。

RPC 客户端向具有启用了 RPC 终结点映射程序客户端身份验证的已注册动态终结点的 RPC 服务器发出调用。 使用 NTLM 身份验证代表经过身份验证的调用查询这些调用。

尝试使用动态终结点进行调用的 RPC 客户端会查询服务器上的 RPC 终结点映射器,以确定应连接到的终结点。 此查询是匿名执行的,即使 RPC 客户端调用本身是使用 RPC 安全性执行的。 如果 RestrictRemoteClients 启用此设置,则 RPC 终结点映射器接口无法匿名访问。

配置 EnableAuthEpResolution

要使用 GPO(组策略对象)编辑器编辑这些策略,请执行以下操作:

  1. 选择 “开始> ”类型 gpedit.msc> 点击 Enter 以打开 本地组策略编辑器

  2. 要启用 EnableAuthEpResolution 设置的等效项,请导航到计算机配置\管理模板\系统\远程过程调用\启用 RPC 终结点映射器客户端身份验证,并在两种可用的设置中选择一项:

    • 已禁用 - 此设置是默认设置。 RPC 客户端不会向终结点映射器服务进行身份验证,但它们能够与 Windows NT4 服务器上的 Endpoint Mapper 服务通信。
    • 已启用 - 电脑客户端通过终结点映射器服务进行身份验证,用于包含身份验证信息的调用。 进行此类调用的客户端无法与 Windows NT4 服务器终结点映射器服务通信。

对其中任一设置所做的任何更改都需要 系统重启 才能生效。

Important

无法与一起使用的以下组策略设置位于EnableAuthEpResolution中:

  • 网络安全:限制 NTLM:传入的 NTLM 流量 -“拒绝所有帐户”
  • 网络安全:限制 NTLM:向远程服务器传出 NTLM 流量 - “全部拒绝”

建议远离 NTLM,以便更好地保护环境。 要在限制 NTLM 和使用 EnableAuthEpResolution之间进行选择,建议在环境中限制 NTLM。

其他 RPC 接口注册标志

创建这些接口注册标志,使应用程序开发人员能够更轻松地保护 RPC 接口:

  • RPC_IF_ALLOW_CALLBACKS_WITH_NO_AUTH
    注册此标志后,无论调用安全设置是怎样的,RPC 运行时都会为所有调用调用调用已注册的安全回调。 如果没有此标志,RPC 会在所有未经身份验证的调用到达安全回调之前拒绝这些调用。 仅当注册了安全回调时,此标志才有效。

  • RPC_IF_SEC_NO_CACHE
    为接口注册安全回调以限制访问。 通常,安全回调模拟客户端来验证客户端是否有足够的权限来调用接口。 特定客户端标识通过安全回调后,通常会在后续尝试时传递相同的安全回调。

    RPC 运行时通过记住单个客户端标识何时通过安全回调来利用此模式。 然后,它会跳过该客户端对同一接口的后续调用的安全回调。 此功能被称为安全回调缓存功能,自 Microsoft Windows 2000 操作系统系列以来一直存在。 可以使用 RPC_IF_SEC_NO_CACHE 标志来禁用给定接口的安全回调缓存。 如果安全检查可能发生更改,可能会拒绝以前允许的客户端标识,那么这将非常有用。

  • RPC_IF_LOCAL_ONLY
    使用此标志注册接口时,RPC 会拒绝远程 RPC 客户端发出的调用。 此外,对所有ncadg_*协议序列和所有ncacn_*协议序列(使用 ncacn_np 的命名管道除外)的本地调用也会被拒绝。 如果在 ncacn_np 上进行调用,则 RPC 仅允许不来自 SRV(服务位置协议)的调用,这会筛选掉所有远程调用。 Ncalrpc 调用则是始终受允许的。

这些标志的用法由应用程序开发人员决定。 RPC 应用程序开发人员提供了其他安全工具来帮助保护其 RPC 接口,因为这些标志不会更改任何现有应用程序或导致它们运行不正确。

另请参阅