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