「MS-RPC」は、リモートのコンピュータ上で稼働するサービスを呼び出すためのプロトコルである。MS-RPCを利用する場合は、まず「ポートマッパー」と呼ばれるポートを呼び出し、実際のサービスを受けるポート番号の通知や認証などを受ける。そのため、実際に利用するポート番号は実行時に動的に変わる。MS-RPCはSMBやCIFS上でも利用されている。ファイアウォールを設定する場合は、MS-RPCのポートだけでなく、SMBやCIFSのポートもフィルタリングする必要がある。
対象:Windows NT/Windows 2000/Windows XP/Windows Vista、Windows Server 2003
Windows OSネットワーク環境でよく使われるプロトコルの1つに、「MS-RPC」(Microsoft Remote Procedure Call)がある。Windows OSの基本サービスのほか、例えばExchange Serverなどでもよく使われている重要なプロトコルである。
ところが、最近ではセキュリティの脆弱性情報などでも目にすることが少なくない。その場合、脆弱性を避けるためにはMS-RPCプロトコルを禁止するという手段が推奨されていたりする。
しかし、そもそもMS-RPCとは何であるか、その通信メカニズムはどうなっているか、などを知らないとファイアウォールを設定することもできない。本Tech TIPSでは、このMS-RPCについて簡単に説明する。
MS-RPCとは、分散コンピューティング環境において、リモートのPC上のプログラム(手続き)を呼び出すために開発された「RPC」(Remote Procedure Call)という機能を、Windows OS上に実装したものである。
元々は「OSF」(Open Software Foundation。ソフトウェアのオープン化を推進する団体)によって規定された「DCE」(Distributed Computing Environment。分散コンピューティング環境)仕様をベースに、マイクロソフトが拡張したものである。
MS-RPC機能を使えば、ローカルPCで動作するサービスやサブルーチンなどを呼び出すのと同じように、リモートPCで動作しているサービスを呼び出し、処理を依頼できる。
MS-RPCでは、サービスを提供する側(サーバ側)と、そのサービスを利用する側(クライアント側)が協調して動作する。通常のサーバとクライアントの関係でもこれは同じだ(例えばHTTPではTCPの80番ポートでサーバが待ち受けし、クライアントはそのポートへ接続する)。
ただし、MS-RPCの場合、次の2つの段階を経てサービスを利用する。
MS-RPCでリモートPCへ接続する場合、最初は「ポートマッパー」(port mapper)と呼ばれる代表ポートへ接続し、セキュリティチェックや対象となるサービスが稼働しているかどうかのチェック、通信環境のセットアップなどを行う。
現実の世界でいうなら、まず代表番号へ電話して、自分自身の認証を受けたり、呼び出したいサービスが存在しているかどうかを問い合わせたり、そのサービスへ接続するためのポート番号情報などを尋ねることに例えられる。
実際のMS-RPCサービスでは、ポートマッパーはTCPの135番で待ち受けしているので、ここへ接続して対象となるサービスへの接続要求を送信する。接続が許可されると、MS-RPCのサーバは、新しくポートを割り当て、以後はそのポートへ接続するように応答を返す。
このように、接続するべき新しいポート番号を返すので(マッピングするので)、ポートマッパーと呼ばれる。このときに返されるポート番号は、動的に決定されるため、事前にファイアウォールで静的に許可しておくことは困難である。
ポートマッパーへの接続が成功すると、クライアント側では、サーバから返された動的ポートへ接続を行い、サービスを受ける。
以上がMS-RPCを使った場合の通信の状態である。この様子は、例えば「netstat -an」コマンドなどで、待ち受けしているポート番号を調べることによって確認できる。
C:\>netstat -an
Active Connections
Proto Local Address Foreign Address State
TCP 0.0.0.0:23 0.0.0.0:0 LISTENING
TCP 0.0.0.0:135 0.0.0.0:0 LISTENING …… (1)MS-RPCのポートマッパー
TCP 0.0.0.0:445 0.0.0.0:0 LISTENING
TCP 0.0.0.0:3389 0.0.0.0:0 LISTENING
TCP 192.168.1.155:139 0.0.0.0:0 LISTENING
UDP 0.0.0.0:445 *:*
UDP 0.0.0.0:500 *:*
UDP 0.0.0.0:1025 *:* …… (2)MS-RPCの動的ポート1
UDP 0.0.0.0:1026 *:* …… (2)MS-RPCの動的ポート2
UDP 0.0.0.0:4500 *:*
UDP 127.0.0.1:123 *:*
UDP 192.168.1.155:123 *:*
UDP 192.168.1.155:137 *:*
UDP 192.168.1.155:138 *:*
C:\>
この画面で、(1)のTCP 135番が、MS-RPCのポートマッパーの待ち受けポート番号である。MS-RPCを利用したいクライアントはまずこのポートへ接続を試み、成功すれば、次に(サーバから指示された)サービス用のポート(この例では(2))へ接続する。
サービス用のポート番号はこの例では「1025」「1026」となっている。ただし、先ほども述べたように、この番号は実行時に動的に決定される。そのため、システムによって異なる可能性がある。
もっともWindows OSでは、デフォルトでは1024番から順番にポート番号を利用するようになっているため、初期ポート番号はいつもこのあたりになっているはずである(MS-RPC以外でも利用されることがあるので、これらが必ずしもMS-RPCで利用されているポートとは限らない)。
また以下のサポート技術情報で示される方法を利用して、別の範囲のポートを利用させることもできる。
以上の説明は、TCPの135番ポートを使ったMS-RPCにおける通信方法である。これ以外にも、「SMB」(Server Message Block)もしくは「CIFS」(Common Internet File System)プロトコル上でもMS-RPCを利用できる。
SMBやCIFSは、Windows OSにおけるファイル共有プロトコルである一方で、Windows OSはこの機能を使ってリモートのサーバ上のMS-RPCサービスを呼び出すのである。この場合は、ネットワーク的にはSMBやCIFSプロトコル中にMS-RPCプロトコルが隠ぺい(含有)されることになる。
これらのプロトコルについては、以下の記事などを参照していただきたい。
MS-RPCで提供されているサービスの一覧は、例えば「portqry.exe」コマンドを使えば調査できる。具体的な方法については、Tech TIPS「ポートのリッスン状態を調査する」を参照していただきたい。
以上の説明で分かるように、MS-RPCで使われるプロトコルには複数のものがある。ファイアウォールでMS-RPCの通信を許可したい(もしくは禁止したい)場合は、TCPの135番だけでなく、SMB(NBT:NetBIOS over TCP/IP)やCIFSのポートなどもフィルタの対象とする必要がある。
プロトコル | 種別 | ポート番号 |
---|---|---|
MS-RPC | TCP | 135 |
NetBIOS名前サービス | UDP | 137 |
NetBIOS名前サービス | TCP | 137 |
NetBIOSデータグラムサービス | UDP | 138 |
NetBIOSセッションサービス | TCP | 139 |
CIFS | TCP/UDP | 445 |
MS-RPC関連で使われるポート番号 MS-RPC通信を許可したい(禁止したい)場合は、これらのポート番号をファイアウォールのルールに設定する。 |
■この記事と関連性の高い別の記事
Copyright© Digital Advantage Corp. All Rights Reserved.