次の方法で共有


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 (Internetwork Packet Exchange) などのコネクションレス プロトコルを介した安全な 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 制限を適用するのはサーバー アプリケーションの責任です。
    • Authenticated - 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 Endpoint Mapper Client Authentication を有効にする] の順に移動し、利用可能な次の 2 つの設定のいずれかを選択します。

    • 無効 - この設定が既定値です。 RPC クライアントはエンドポイント マッパー サービスに対して認証を行いませんが、Windows NT4 サーバー上のエンドポイント マッパー サービスと通信できます。
    • 有効 - PC クライアントは、認証情報を含む呼び出しに対してエンドポイント マッパー サービスを介して認証します。 このような呼び出しを行うクライアントは、Windows NT4 サーバー エンドポイント マッパー サービスと通信できません。

これらの設定のいずれかに変更を加える場合は、 システムの再起動 を有効にする必要があります。

Important

コンピューターの構成\Windows 設定\セキュリティ設定\ローカル ポリシー\セキュリティ オプションに含まれる次のグループ ポリシー設定は、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
    アクセスを制限するインターフェイスのセキュリティ コールバックが登録されます。 通常、セキュリティ コールバックは、クライアントがインターフェイスの呼び出しを行うのに十分な権限を持っているかどうかを確認するために、クライアントを偽装します。 特定のクライアント ID がセキュリティ コールバックを渡すと、通常、後続の試行で同じセキュリティ コールバックが渡されます。

    RPC ランタイムは、個々のクライアント ID がセキュリティ コールバックを渡すタイミングを記憶することで、このパターンを利用します。 その後、そのクライアントによる同じインターフェイスへの後続の呼び出しのセキュリティ コールバックをスキップします。 この機能はセキュリティ コールバック キャッシュと呼ばれ、Microsoft Windows 2000 オペレーティング システム ファミリ以降に存在します。 RPC_IF_SEC_NO_CACHE フラグを使用して、特定のインターフェイスのセキュリティ コールバック キャッシュを無効にすることができます。 これは、セキュリティ チェックが変更される可能性があり、以前に許可されていたクライアント ID を拒否する可能性がある場合に便利です。

  • RPC_IF_LOCAL_ONLY
    インターフェイスがこのフラグに登録されている場合、RPC はリモート RPC クライアントによって行われた呼び出しを拒否します。 さらに、すべての ncadg_* プロトコル シーケンスとすべての ncacn_* プロトコル シーケンス (ncacn_np を使用する名前付きパイプを除く) 経由のローカル呼び出しも拒否されます。 ncacn_np で呼び出しが行われた場合、SRV (サービス ロケーション プロトコル) 経由のリモート呼び出しはすべてフィルターで除外され、それ以外の呼び出しが RPC によって許可されます。 Ncalrpc 呼び出しは常に許可されます。

これらのフラグの使用は、アプリケーション開発者の裁量に任されます。 RPC アプリケーション開発者には、RPC インターフェイスをセキュリティで保護するための追加のセキュリティ ツールが用意されています。これらのフラグによって既存のアプリケーションが変更されたり、正しく実行されなかったりすることはありません。

こちらも参照ください