ポート139と445は危険の代名詞

 Microsoftネットワークに接続しているパソコン同士は,137番や138番ポートを使ってIPアドレスを取得する。その後,ファイル共有やプリンタ共有などの実際の通信をする。これは,SMB(Server Message Block)というプロトコルで実現している。ここで使われるのが,139番と445番ポートである。

図5●SMBとCIFSの違い。
Windows 2000より前のWindowsは,名前解決にNetBIOSを使う。WINSサーバに通信相手のNetBIOS名を送り,IPアドレスを取得する。これに対してWindows 2000以降が採用したCIFSでは,DNSで名前解決をする。DNSサーバが持つテーブル情報を参照して,通信すべき相手を探す。無事に相手のIPアドレスがわかったら,その共有リソースにアクセスする

 SMB通信ではまず,前述の名前解決の仕組みを使って相手のIPアドレスを取得し,それに対して通信の開始を要求する。相手がそれを許可したら,セッションが確立する。これを使って,ユーザ名やパスワードの情報を相手先に送り,認証する。認証が成功すれば,相手の共有ファイルにアクセスできる。これらの一連の通信に,139番ポートを使う。

 Windows 2000やXPは,それ以外に445番も使っている。ファイル共有という機能自体は139番と同じだが,SMBとは違うプロトコルを使う。Windows 2000で新しく導入したCIFS(Common Internet File System)である。

 CIFSとSMBは,名前解決の方法が違う。SMBが利用していたNetBIOS名のブロードキャストやWINSによる名前解決の代わりに,CIFSはDNSを利用する(図5[拡大表示])。

 このため,Windowsをファイル・サーバやプリント・サーバとして利用しているイントラネット環境では,139と445番ポートを閉じることはできない。ファイル共有やプリンタ共有は,普段の業務において欠かせない機能となっている場合は多いだろう。クライアントの場合は,自分でファイルを公開しないなら,閉じることができる。

 例えば,2000以降のWindowsだけで構成されたネットワークなら,ポート139は閉じることができる。前述の通り,445番ポートだけでファイル共有が可能だからだ。名前解決にDNSを使うため,137や138も閉じることができる。ただし現状では,2000より前のWindowsも混在して使っているシステムがほとんどだろう。混在環境では,139番ポートを使ってSMBで通信する必要があり,139番ポートを閉じることはできない。また,ブラウジングをする場合は,137~139番ポートが必要だ。

公開サーバは絶対閉じるべき

 インターネットに公開しているサーバは話が別だ。公開サーバで139と445番ポートを開けておくのは非常に危険である。冒頭に記したように,Guestのアカウントが用意され,しかも何もパスワードを設定していなかった場合などは,インターネット経由で簡単にファイルを盗み見られてしまう。書き込み権限も与えていたら,改ざんもされかねない。つまり外部に公開するサーバで,これらのポートを開けておくべきではない。ファイル・サーバをインターネット経由で利用するのは自殺行為に等しく,139と445番ポートは必ずふさいでおくべきだ。同じことは,ADSLで常時インターネットに接続しているクライアントにも言える。

 139番を閉じるには,137,138番と同様に「NetBIOS over TCP/IPを無効にする」を選べばよい。445番を閉じるには別の作業が必要だ。レジストリエディタで「HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NetBT\Parameters」に「SMBDeviceEnabled」というDWORDの値を追加し,0を設定して再起動する。

.NETでポリシは変わるか

 これまで見てきたように,現在のWindowsをデフォルトの設定のまま使用するのにはさまざまな危険が伴う。これはWindowsが,初心者ユーザでも複雑な設定をすることなく利用できるように作られているためだ。

 例えばWindows 2000 Serverでは,インストール時に,自動的にIISがインストールされる。しかも,パソコンを起動しただけでIISのサービスが立ち上がる。Windows NT 4.0 Serverでは,IISをインストールするかどうかを選択できるが,デフォルトでチェック・ボックスは有効になっている。パソコンの起動と同時にIISのサービスが自動的に立ち上がるのは2000と同じだ。

 これに対して,Linuxはまったく違う考え方に立っているものが多い。例えばRedHat Linux 7.3では,インストールの段階で必ずユーザにファイアウォールの設定をさせる。「高」「中」「なし」の3段階のレベルがあり,それぞれブロックするパケットが変わる。「高」では,53番(DNS)と67,68番(DHCP)以外のすべてのポートを閉じる。「中」を選ぶと1024番以上が開くが,ウェルノウン・ポートで開いているのは53,67,68の三つだけだ。

 アプリケーションのインストールに対する考え方も違う。RedHat Linux 7.3はインストール時に,「ワークステーション」「サーバ」「ラップトップ」の3種類のタイプを選択する。これで「サーバ」を選んでも,Windows互換のファイル・サーバを構築する「Samba」や,Webサーバ「Apache」などはユーザが選択しなければインストールされない。また,たとえインストールしても,そのままでは起動しない。ユーザが明示的に必要なサービスを立ち上げ,フィルタリング・ソフトでパケットを通過させるように設定しなければ,ポートはオープンしない。

 利便性だけを考えれば,Windowsの方がよいだろう。面倒な設定をしなくても,自動的にさまざまなサービスを起動してくれるからだ。しかしこれでは,ユーザが意図しないサービスまで起動してしまう可能性は高く,しかもユーザがそれに気づかないことが多くなる。サーバを安全に運用したり,自分のクライアント・パソコンを危険から守りたいなら,安易なインストールや設定は決して好ましいとは言えない。

 米Microsoft社も「Trustworthy Comuputing」の方針を打ち出し,2003年初めに出荷開始予定の「Windows .NET Server」では「デフォルト・セキュア」を実現する予定だ。Windows 2000と異なり,標準でIISはインストールされない。IISのコンポーネントを追加しても,OSの起動時にそれが自動的に実行されることはない。

 ただしβ版を使用した限りでは,135,137,138,139,445の各ポートはデフォルト状態でオープンしている。また,Windows XPから導入された「インターネット接続ファイアウォール(ICF)」の使用も,デフォルトでは無効になっている。Linuxと同じレベルの高いセキュリティをデフォルト設定で実現しようとするならば,ICFを有効にしておき,その後はユーザが自分の目的に応じて,起動するサービスを選択していく方法が最も妥当だと言えるだろう。

(八木 玲子)