2003年はMicrosoft RPCにとって非常に不名誉な年であった。「Microsoft RPCの危険性は低い」という“神話”が完全に崩壊したからだ。

 2002年に公開された米Microsoft社の技術ドキュメントに次のような内容のものがある。「RPCを通すファイアウォールなんて<侵入容易>という看板を掲げているようなもので,米Cisco Systems社の調査でも最も脆弱なインターネットサービスはRPCとなっており,WindowsのコミュニティでもRPCは害悪で使用を制限すべきものというのが一般的な認識である。とはいうものの,SANSのインターネットセキュリティ脆弱性リスト(SANSトップ20リスト)にあるのはUNIXのRPCで,WindowsのRPCは載っていないし,CERTにもWindows 2000のRPCに関する重大な脆弱性は掲載されていない」(筆者概訳)。

 確かに,このドキュメントが作成された当時までに明らかになっていたMicrosoft RPCに関する脆弱性は,いわゆるサービス拒否(Denial of Service)に分類されるものばかりで,あまり危険視されることはなかった。しかし,2003年,いくつかのMicrosoft RPCに関連する脆弱性と,そしてそれを利用したウイルスやワームによる大混乱が新聞やテレビなどで大きく報道された。その結果,2003年10月に発表されたSANSトップ20リストにはMicrosoft RPCが初登場した。しかも,US-CERTの過去の脆弱性も含めた深刻度順リストで2003年に明らかになったMicrosoft RPC関連の脆弱性はトップ20の中に三つも名を連ねることとなった。

 ただ,SANSトップ20リストやUS-CERTのリストで指摘されているMicrosoft RPCの脆弱性はすべて,いわゆるバッファ・オーバーフロー(Buffer Overflow)に関するものでWindowsのバグに原因がある。それでは,SANSトップ20リストに掲載されているAnonymous Logon NULL sessionsのような仕様上の問題といえるものは,Microsoft RPCにはないのだろうか。Anonymous Logon NULL sessionsとは,SMBの仕様上の問題点で,空(から)のユーザー名と空のパスワードでリモート・コンピュータにログオンすることができ,ユーザー名の一覧やユーザーの権限,ファイル共有名やパスワードポリシーなどの情報が取得できるというものだ。

 実はAnonimous Logon NULL sessionsと同様またはそれ以上の問題がMicrosoft RPCには隠されている。これまでに指摘されているMicrosoft RPCのセキュリティ上の問題点とその原因となっているRPCの仕様について迫ってみたい。

おしゃべりなポート135

図1●Portqryの出力結果
Portqryを使えば,どのプロトコルのどのポートで,どんなインタフェースに接続できるかという情報を得ることができる。出力としては,インタフェースの識別子「UUID」,このインタフェースの説明「コメント付き名前」(ない場合もある),インタフェースへの接続場所「エンドポイント」が一覧表示される。エンドポイントを公開するトランスポートとしては,TCP/IPを使うncacn_ip_tcpなど多数の種類がある。

 マイクロソフトがネットワーク管理者のために提供している数々のツールの中に,RPCをサポートするものとしてPortqry(Microsoftのサポート技術情報「832919」)がある。

 Portqryは,Exchange ServerやActive DirectoryのRPCサービスの稼動状態をリモートから確認するのに利用できる。Microsoftサポート技術情報310298や310456から抜粋する。「この例では,ポート135はリッスン状態です。この出力から対象のサーバーのRPCエンドポイントマッパーデータベースに登録されているサービスおよびアプリケーションを確認できます。出力には,各アプリケーションの汎用一意識別子(UUID),コメント付きの名前(存在する場合),アプリケーションで使用されるプロトコル,アプリケーションがバインドされているネットワークアドレス,およびアプリケーションのエンドポイント(ポート番号,角かっこで囲まれた名前付きパイプ)が含まれています。この情報は,さまざまな問題のトラブルシューティングでも役立つ場合があります」。

 この説明はRPCに関する知識がないと非常に分かりづらい。そこで,実際のPortqryの出力例(図1[拡大表示])と比較してみる。「コメント付きの名前」の部分を見ると「MS Exchange Directory NSPIProxy」などとあり,Exchange Server関連らしきサービス/アプリケーションが動作していることが分かる。そのうちの一つのサービスはTCPの1100番ポートで接続を待ち受けている。

 ここで最も重要な点は,これらの情報を取得するのにリモート・コンピュータ上の権限は全く必要ない,ということである。つまり,エンドポイント・マッパー(ポート135)に接続することができれば誰でもエンドポイント・マッパー・データベースに登録されているサービスの一覧を取得することができるのである。しかも,Exchangeが動いていることが分かるなど,その内容は不正侵入を試みようとする者からすると,侵入のために貴重な情報となる*1

 もう少しエンドポイント・マッパー・データベースの情報について話を続けたい。「コメント付きの名前」フィールドはサーバー・アプリケーション開発者がオプションで追加する情報なので,記述しなくてもよい。そのせいか,Windowsに付随するアプリケーションでは,Exchange Serverのように「コメント付きの名前」が存在するケースはほとんどない。「コメント付きの名前」がなければ人間がサービスの種別を類推することは難しそうだ。そうなら,このRPCの情報は実はそれほどたいした問題ではないのでは,とも考えられる。

 ところが,事はそれほど単純ではない。「コメント付きの名前」のほかにサービスを特定する手段があるのだ。UUIDである。

 UUIDとはUniversally Unique Identifierの略称で,その名のとおりユニバーサルにユニークなIDである。サービス/アプリケーションが公開するインタフェース(後述)ごとにユニークなUUIDが割り当てられている(図1を参照)。つまり,UUIDが一体どのようなサービスと結びついているのかをもし調べることができれば,そのマシンで稼動しているサービスを特定できることを意味している。また,アプリケーションに機能が追加されたり削除されるなどしてインタフェースが増えたり減ったりすると,それに応じてUUIDが変わる。このことは,Windowsの種類(NT/2000/XP/2003)やサービスパックのバージョン,特定のセキュリティ・パッチの適用の有無を判断できる可能性があることを示している。稼働しているサービスの種類,インタフェースの有無などから推測できるのである。


関 英信 Hidenobu Seki

セキュリティフライデー 技術企画室長
Windowsのセキュリティについての調査や製品開発を行う一方,啓蒙活動としてSecurityFriday.comで技術文書や無償ツールを公開している。2004年1月に米国シアトルで開催された「Black Hat Windows Security 2004 Briefings」において,Microsoft RPCの知られざる危険性を報告し,注目を集めた。