バラエティに富むRPCへの攻撃

画面●RpcScanの実行例
Windows XP SP1マシンに対して実行したところ。TCPの1025番ポートでタスクスケジューラ以外のサービスを利用するためのインタフェースが多数公開されていることが分かる。
図4●RPCサーバー呼び出しの認証シーケンス
認証が失敗すれば,オペレーションの失敗通知,成功すればオペレーションの完了通知が来るため,パスワード推測に利用できる。

 では,実際にデフォルトでどのようなRPCサービスがWindows上で動いているのだろうか。画面[拡大表示]は作者が作成したツールRpcScanを使ってWindows XP Service Pack 1マシンからUUIDを取得した様子を示している。RpcScanはエンドポイント・マップ情報のほか,RMIによるRPCサーバーが提供する全インタフェースのIDを取得する。また,UUIDから推測できるサービス名とWindowsのバージョンなどに関する情報を出力する。

 これを見れば分かるように,TCPの1025番ポートでタスクスケジューラや無線LAN用のWireless Zero Configuration,IP電話用のTelephony,メッセージ送信用のMessenger,ファイル/プリンタ共有などのサーバー機能を提供するServer,ローカルの環境を提供するWorkstationなどさまざまなサービスが公開されている(別掲記事「RPCでなぜ多数のサービスが公開されているのか」を参照)。

 筆者はこれらのサービスがどのような機能/オペレーションを持つのかについて,すべては把握できていない。しかし,いくつかのサービスへの攻撃を考えただけでもその危険性が分かる。

 例えば,タスクスケジューラ。スクリプトやプログラムの実行,あるいはドキュメントを開くことをタスクとして登録し,決まった時間/トリガーに沿ってそのタスクを実行させるために使う。

 タスクスケジューラをRPC経由で利用することで,悪意のあるタスクを登録し,攻撃ができる。例えば,リモートからファイル転送用の「TFTP」クライアントを起動し,インターネットからバックドア・プログラムをダウンロードし,その10分後にこれを起動するようにすることで,バックドアを開ける攻撃が考えられる。

 タスクスケジューラにタスクを登録するには,Administratorのパスワードが必要になる。ただし攻撃者は,RPCを使ってパスワード推測を試みることができる。推測したAdministratorのパスワードを手当たり次第に入れてみて,タスクを登録してみるのだ。合致すればタスクが登録される。

 タスクスケジューラはAdministratorのみだが,前述のRMIを使うとすべてのユーザー・アカウントに対してパスワード推測攻撃ができる。RMIは認証を必要とせずに利用できるインタフェースであるが,わざと認証を要求して接続するのである。もし,パスワードが間違っていれば,処理依頼は拒否される。合致してれば処理依頼が適切に処理される(図4[拡大表示])。これを使ってパスワードを変更してアクセスする作業を繰り返せば,いずれパスワードが合致し,成功応答が返ってくるので,パスワードが判明する*3*4

 このほか,Server/Workstationサービスからは攻撃に有用な情報が取れる。ServerサービスにRPCを使って問い合わせることで,(1)現在の時刻/パソコンの起動してからの経過時間,(2)Windowsのバージョン,(3)ドメイン・コントローラ/マスタブラウザなどの役割,(4)SQL Server/Terminal Serverなどがインストールされているか否か,(5)ファイルやプリンタなどの共有リソースの一覧の取得,(6)ネットワーク・ログオン・ユーザーの一覧――などを手に入れられる。また,Workstationサービスからはローカル・ログオン・ユーザーの一覧が取得できる。しかも,ここの挙げたほとんどの情報が匿名接続(ユーザー名/パスワードを空欄)で取得できる*5

 これらの情報は攻撃者にとって攻撃のための足がかりとなる。例えば,(1)の起動時間からは,セキュリティ・パッチ適用の有無が推測できる。Microsoftのセキュリティ・パッチはほとんど再起動を必要とするので,長い間起動したままのコンピュータは,セキュリティ修正プログラムがインストールされていないと推測できるのだ。また,ユーザー名が取得できれば,ユーザー名を足がかりとして前述したパスワード推測攻撃を効率的に行えてしまう。

 以上のように,いずれも悪用されれば危険なものばかりだ。筆者が指摘したもの以外にも危険なRPCサーバー(RPC経由で利用できるサービス)が多数あると思われる。Windows XP以降のOSに標準で搭載されるInternet Connection Firewall(ICF)や市販のパーソナル・ファイアウォールを利用するなどして,RPCのインタフェースが公開されているポートを外部にさらさない工夫が必要だろう。

セキュアになったWindows XP SP2

 最後に,Microsoftが2004年6月に提供を開始するといわれているWindows XP Service Pack 2について述べておきたい。Microsoftは,Service Pack 2で前述のエンドポイント・マップの取得に対してユーザー認証が必要となるよう仕様変更することを決断したようだ。マイクロソフトの技術文書「Microsoft Windows XP Service Pack 2での機能の変更点」からその部分の説明を引用する。

 「リモートから匿名でアクセスでき,既定でWindows XPに登録されるRPCインターフェイスは,重大な攻撃対象をさらすことになります。(中略)RPCエンドポイントマッパーインターフェイスの匿名コールは,Windows XP Service Pack 2では新しいRestrictRemoteClientsキーの既定値のために,既定では失敗します」。

 この技術文書には記載されていないが,Windows XP SP2 Beta(昨年12月公開)において筆者が確認したところ,RMIインタフェースも匿名ではアクセスできないようになっていた。また,タスクスケジューラの危険なエンドポイントもWindows XP SP2 RC1(今年3月公開)では削除されていた。Windows 2000やServer 2003への適用も早期に実現して欲しいと思う。


 2004年8月に公開されたWindows XP Service Pack 2は「Windowsファイアウォール」がデフォルトで有効になっているので,そのままでは外部からRPCにアクセスすることはできない。「Windowsファイアウォール」をオフにした状態でも,本稿に記した通り,エンドポイント・マップの取得に対してユーザー認証が必要となる。RMIインタフェースも匿名ではアクセスできない。また,タスクスケジューラの危険なエンドポイントもなくなっている。

 ただし,「Microsoft Windows XP Service Pack 2での機能の変更点」にある通り,「名前付きパイププロトコルシーケンス (ncacn_np) を使用する RPC クライアントは,(中略)制限の対象外」なので,「Windowsファイアウォール」をオフにした状態,あるいはオン状態でも「ファイルとプリンタの共有」を例外として有効にしている場合は,SMBのNull Session(匿名接続)経由で特殊な方法によりWindows XP SP2においても,現在の時刻/パソコンの起動時間やローカル・ログオン・ユーザーの一覧などが取得できることをこの場を借りてお伝えしておく。


svchost.exeが管理するサービス
「tasklist /svc」で表示できる(Windows XP Professionalの場合)。svchost.exeが複数あり,それぞれがサービスを起動しているが,それぞれのsvchost.exeは起動されるときの権限が異なる。これにより,サービスが動作する権限を細かく制御していると思われる。

RPCでなぜ多数のサービスが公開されているのか

 本文中の画面「RpcScanの実行例」(p.68)を見て分かるように,なぜかタスクスケジューラのインタフェースの後ろには多数のサービスが見えている。タスクスケジューラの公開はある程度理解できる。管理者がリモートにあるクライアントにタスクを登録するシーンが考えられるからだ。しかし,それ以外のサービスに関しては公開の理由が理解できない。

 Windows XPやWindows Server 2003ではほとんどのサービスがDLL(Dynamic Link Library)として提供されており,svchost.exeがこれらを起動する形態である。タスクスケジューラ,Serverサービス,Workstationサービスなど30個近いサービスが起動される。このような形態なので,タスクスケジューラのインタフェースを公開する場合は,svchost.exeがタスクスケジューラを公開する形になる。このような仕組みのため,同じsvchost.exeが管理するサービスのうち,内部的にRPCを利用するものまでいっしょに公開されてしまったのであろう。

 ちなみに,Windows 2000ではタスクスケジューラはsvchost.exeから起動されるものではなく,独立したexeである。このため,タスクスケジューラのインタフェース以外は外部に公開されない。


関 英信 Hidenobu Seki

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