Windows 2000 ProfessionalやWindows XPなどのデスクトップOSは,サーバーでもないのにファイルやプリンタの共有が可能だ。これは一体どのような仕組みで動作しているのだろうか?MS-DOSの時代から使われているファイル/プリンタ共有機能は,Windows 2000/XPの世代になって進化した。ただし,思わぬところでセキュリティの落とし穴になることもあるので注意が必要だ。

 WindowsやUNIX/Linuxなどのネットワーク対応OSは,ファイルやプリンタを複数のコンピュータで共有する機能を備えている。一般にはサーバーOSの機能だと思われがちだが,Windows 9xやWindows 2000/XPなどのデスクトップOSにも「ファイル/プリンタ共有サービス」は標準で組み込まれている。このため,サーバーがなくても簡単にファイルやプリンタの共有環境を構築できる。小規模なネットワーク環境や家庭内LANで,Windows 2000/XPのファイル/プリンタ共有サービスを利用しているユーザーは多いはずだ。

 ただし,いいかげんな設定をしていると予期せぬトラブルが起こることもある。例えばインターネットが普及し始めたころによく起こった問題は,マンション内に敷いたインターネット接続用のLANを通して,他の部屋の住人が使っているWindows 9xパソコンの中身が丸見えになってしまうことだった(図1)。家庭内のLANで認証なしのファイル共有ができるように設定していたため,マンションのLANにつないだ時点で他の部屋の住人にも読めるようになってしまったのだ。当たり前のことではあるが,ネットワーク上でファイルやプリンタを共有するときは,何らかのセキュリティ対策が絶対に必要だ。

図1●Windowsパソコンの中身が丸裸になっていませんか?<br>Windows OSのファイル/プリンタ共有機能が有効になっていると,思わぬトラブルを起こすことがある。
図1●Windowsパソコンの中身が丸裸になっていませんか?
Windows OSのファイル/プリンタ共有機能が有効になっていると,思わぬトラブルを起こすことがある。
[画像のクリックで拡大表示]

 Windows 2000/XPには,ファイルやプリンタを共有するために複数のプロトコルが組み込まれている。実は,この構造に起因したセキュリティ上のリスクもある。うっかり対策を怠ると,ネットワーク経由で攻撃してくるコンピュータ・ウイルスやクラッカの犠牲になることもあり得る。

 そこで今回は,Windowsがどのような仕組みでファイルやプリンタを共有しているのか,OS内部やネットワーク上の動作を解説する。さらに,追加された新しい共有サービスが思わぬぜい弱性を生み出す危険性について紹介する。

Windowsのファイル共有は昔からSMBが基本

 他のコンピュータ上にある共有ファイルや共有プリンタにアクセスするとき,最も頻繁に使う方法はやはり[マイネットワーク]や[ネットワークコンピュータ]だ。本連載の「なぜネットワーク上の他のコンピュータを一覧表示できるのか?」で解説した通り,「ブラウジング」によってネットワーク上のWindowsマシンをすべてリストアップしてくれる。

 ここから先がファイル/プリンタ共有機能の出番である。例えば,[マイネットワーク]や[ネットワークコンピュータ]で目的のコンピュータをダブル・クリックすればドライブを表示し,さらにクリックすれば共有フォルダや共有ファイルを表示する。ファイルを開いたり,ドラッグ&ドロップ操作でコピーしたりすることもできる。こうした一連の操作は,「SMB(サーバー・メッセージ・ブロック)」と呼ばれるプロトコルや,SMBを改良した「Direct Hosting of SMB」というプロトコルで実現されている。

 Windows 2000/XPがデフォルトで使うファイル共有プロトコルはDirect Hosting of SMBだ。しかし,Windows 9x系OSやWindows NTはSMBしか使えないため,それらのOSが混在する環境ではWindows 2000/XPもSMBを使う。そのため,現在でもSMBはファイル/プリンタ共有プロトコルとして広く利用されている。

 SMBはマイクロソフトが独自に開発したプロトコルで,NetBIOSをベースにしている。その歴史は古く,起源はMS-DOSの時代にまでさかのぼる。まさにWindowsのファイル/プリンタ共有では,元祖のプロトコルといえるだろう。SMBは機能が豊富なので,ファイル/プリンタ共有以外にも,ブラウジング,プロセス間通信などにも利用されている。

 SMBを使って他のコンピュータ上の共有ファイルにアクセスするときは,最初にNetBIOS名を使って通信を開始する。SMBはNetBIOSをベースにしているので,相手のコンピュータを特定する名前,つまりNetBIOS名が必要なのだ。このNetBIOS名は,ブラウジングで収集した[マイネットワーク]や[ネットワークコンピュータ]の一覧から取得できる。