IBM ThinkPad X41 が外部から誰でもシャットダウンできる仕様について

最近、IBM ThinkPad X41 (指紋認証付) を購入したのだが、このマシンを使っているうちに、変なことに気がついた。
脆弱性として公表前に報告するべきか迷ったが、堂々と画面に表示されていることで明らかに誰でも気付くことであり、これはバグではなく仕様ではないかと思った。そこで、このおかしな仕様について解説しようと思う。


まず、Windows XP Professional には、リモートデスクトップのサーバーとなる機能がある。これは、Windows NT 4.0 TSE / Windows 2000 Server のターミナルサービスを拡張したもので、大変便利である。恐らく、大半の Windows ユーザーの方は使用されたことがあるだろう。
このリモートデスクトップ機能は、クライアントがサーバー側の PC に接続すると、サーバー側の PC (ここでいう接続先の Windows XP マシン) 内で新しいデスクトップセッションとウインドウステーションが生成される。そして winlogon プロセスが起動し、Windows のユーザー名とパスワードを入力するためのログオン画面が表示される。

このリモートデスクトップ経由で表示されるログオン画面とその後のすべての操作は、直接そのマシンのコンソール (ディスプレイとキーボード) を操作するときとまったく同様に操作できる。Windows 側に仮想ディスプレイアダプタがあり、そこに対して描画された GDI 要求を、そのままリモートデスクトップクライアント側にリダイレクトして描画しているからである。VNC と違って軽いし、大変使いやすいので重宝する。

さて、普通のバージョンの Windows XP Professional に、LAN 上 (またはインターネット上) のリモートデスクトップクライアントからリモートデスクトップ接続すると、ログオン画面が表示されるが、[シャットダウン] ボタンは必ず灰色表示になり、クリックできなくなっているWindows XP をローカルのコンソールで使用するときは、ログオン画面からログオン無しでシャットダウンできたが、リモートデスクトップ経由で表示されるログオン画面は、その画面まではすべての匿名ユーザーがネットワーク経由で接続できるので、ログオン (認証) 無しでは勝手にシャットダウンできないようになっている。
もし、リモートデスクトップ経由のログオン画面で誰でもシャットダウンできてしまったら、あるユーザーが使用している Windows XP のマシンに、別の悪意のあるユーザーがリモートデスクトップで接続し、ログオン画面が表示されたら、[シャットダウン] をクリックして突然そのコンピュータを再起動したり電源を切ったりできるからである。


ところで、このログオン画面というやつは、別のものに置換することができる。Windows 2000 以降にある、Graphical Identification and Authentication dynamic-link library (DLL) というプラグインのような仕組み (略して 『GINA』 と言う。詳しくは MSDN を参照) で、認証ソフトの開発者が開発したカスタムログオン画面をインストールすれば、標準のログオン画面が表示される代わりに、カスタマイズされた独自のログオン画面が表示されるのである。
この GINA DLL の書き換えというのは、スマートカードなどの認証デバイスのドライバ CD などをインストールすると、よく書き換えられる。たとえばパスワードを入れる代わりに、「スマートカードを挿入してください」といった画面を表示してカードでログオンできるようになる。


さて、IBM ThinkPad X41 に標準で付いてくる、指紋認証用モジュール用のドライバも、GINA DLL を書き換えて、ログオン時にユーザー名とパスワードの代わりに指紋スキャナに指を乗せるだけでログオンできるようになっていて、大変便利である。


ところが、この指紋認証ドライバ (出荷時にプリインストールされている) が置換する、独自の GINA DLL のログオン画面の仕様が、大変斬新である。

↑これが、リモートデスクトップ経由で表示されるログオン画面である。IBMプログラマーがカスタマイズしたものだと思われる。リモートでは当然指紋認証は使えないので、通常のユーザー名とパスワードを入力することでログオンするようになっている。


右のボタンのところを拡大してみよう。


なんと、シャットダウンボタンをクリックすることができるようになっている。
とりあえず、リモートマシンからクリックしてみる。


なんと、ThinkPad X41 の電源が本当に切れてしまった。


この仕様は、良くないと思う。なぜならば、ThinkPad X41 指紋認証付モデルで、リモートデスクトップを有効にしている場合、同一の LAN 上にある他のマシンから、誰でもそのマシンにリモートデスクトップで接続して、ユーザー認証を行う前に、コンピュータをシャットダウンできてしまう。場合によっては、そのコンピュータのローカルコンソールでユーザーが作業中かも知れないが、そういう場合でも突然シャットダウンが始まるので、驚かせるには最適かも知れない。

同一の LAN でなくても、そのコンピュータが別の IP ネットワークや、インターネットから TCP/IP で到達可能な場合は、同様の悪事ができてしまう。グローバル IP を付けていれば、インターネット上のすべてのユーザーが、そのコンピュータにリモートデスクトップで接続し、勝手に電源を切ったり再起動したりできる。

これは、レジストリの値に基づいた『正しい動作』であるが、リモートデスクトップ経由の場合はレジストリの値を無視して常にボタンを灰色にしてくれれば良いと思うのだが。