バラエティに富む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においても,現在の時刻/パソコンの起動時間やローカル・ログオン・ユーザーの一覧などが取得できることをこの場を借りてお伝えしておく。 |
関 英信 Hidenobu Sekiセキュリティフライデー 技術企画室長Windowsのセキュリティについての調査や製品開発を行う一方,啓蒙活動としてSecurityFriday.comで技術文書や無償ツールを公開している。2004年1月に米国シアトルで開催された「Black Hat Windows Security 2004 Briefings」において,Microsoft RPCの知られざる危険性を報告し,注目を集めた。 |