“おしゃべり”なポート137と138

表3●ポート137から取得できる主な情報

 表3を見てほしい。これらの情報が何かわかるだろうか。この表は,ポート137から取得できる主な情報を列記したものである。Windowsの137番ポートに対して,接続の状態を問い合わせるパケットを一つ投げただけで,このような情報が取得できてしまう。返ってきたパケットが,これらの情報を含んでいるのだ。

 具体的には,そのパソコンのコンピュータ名やログオン・ユーザ名に加えて,そのパソコンがドメイン・コントローラやマスタ・ブラウザになっているか,ファイル・サーバとして機能しているか,Internet Information Server/Services(IIS)やSambaが動作しているか,さらにLotus Notesが動いているかなどの情報が取れる。SecurityFriday.comのMichiharu Arimoto氏によると,「コンピュータ名のほか,IISやドメイン・コントローラ,マスタ・ブラウザ,ファイル・サーバ関連の情報は確実にわかる。これら以外の情報も,100%ではないが取得できる場合がある」と語る。

 繰り返すが,これらの情報を取得したい場合は,そのパソコンの137番ポートに対して問い合わせのパケットを一つ送るだけでよい。IPアドレスさえ判明すれば,実に手軽に実行できてしまう。イントラネット環境だけでなく,インターネットを経由しても,情報は取れる。

 これらは,攻撃者にとって格好の情報だ。そのパソコンの役割や,ネットワークの構成を容易に把握することができる。このような情報をむやみに流すのは,そのパソコンをどのように攻撃したらよいかを親切に攻撃者に知らせているようなものだ。例えば,IISが動いていることがわかれば,そのパソコンで立ち上がっているサービスは簡単にわかる。わざわざポート・スキャンなどで侵入口を見つける必要はない。

 また137番ポートで通信しているパケットをキャプチャすると,標的ホストの起動やシャットダウンのタイミングをつかめる可能性もある。Windowsは起動したり,シャットダウンする際,137番ポートから特有のパケットを送出するのだ。標的ホストの起動のタイミングがわかれば,前述のIE'enなどを使って135番ポート経由で相手のDCOMを操作しやすくなる。

137番を使って名前解決

 137番ポートは,なぜこのようなパケットをネットワーク上に流すのだろうか。それは,137番ポートがWindowsネットワークの通信プロトコルである「NetBIOS over TCP/IP(NBT)」の名前解決という機能で使われているからだ。

 名前解決とは,Windowsネットワークに参加するパソコンがそれぞれを識別するための名前であるNetBIOS名から,実際のIPアドレスを取得するための仕組みである。二つの方法で137番ポートが使われる。

 その一つが,同一セグメント内に存在するパソコン同士がブロードキャストによって名前解決をする方法である。パソコンは起動時またはネットワーク接続時に,自分と同じNetBIOS名を使っているパソコンがほかにないかを,セグメント内に存在するすべてのパソコンに対して問い合わせる。それを受信した各パソコンは,もし自分が同じNetBIOS名を使っていたら,その旨を知らせるパケットを送る。これらの通信が137番ポートで行われる。

 もう一つは,WINS(Windows Internet Name Service)による名前解決である。WINSサーバと呼ばれるパソコンが,IPアドレスとNetBIOS名の対応表を持っている。WINSクライアントは,システム起動時またはネットワーク接続時に自分のNetBIOS名とIPアドレスをWINSサーバに送信する。他のパソコンと通信する際は,WINSサーバに対してNetBIOS名を送り,IPアドレスを問い合わせる。ここでも,137番ポートが使われる。

 以上のように,通信したい相手のIPアドレスを取得するために,137番は多くのパケットをやり取りする。そのパケットの中に,表3のような多くの情報が含まれているのである。ブロードキャストで名前解決をする場合は,すべてのパソコンに対してこれらを知らせていることになる。NBTを使っていれば,ユーザが気づかないうちに,パソコン自身が自分の詳しい情報を周囲にばらまいているのである。

138番はブラウジングで使う

 一方,138番ポートも137と同じく自分の情報を外部に送信する。情報量は137ほど多くはないが,Windowsのバージョン情報が取れてしまうのが特徴的だ。例えば,Windows 2000 Serverであることを漏らす。

 138番ポートは,NetBIOSのブラウジングという機能を提供している。これは,ネットワークに接続するパソコンの一覧を表示する機能である。例えばWindows 2000で「マイネットワーク」から「ネットワーク全体」を選ぶと,ネットワークに接続しているパソコンが一覧表示される。

 この機能は,前述の名前解決とは違う仕組みを使っている。ブラウジングでは,マスタ・ブラウザと呼ばれるパソコンが,ネットワークに接続しているパソコンの一覧表であるブラウズ・リストを管理している。各パソコンは,起動時またはネットワーク接続時に,自分のNetBIOS名を138番ポートでブロードキャストする。これを受け取ったマスタ・ブラウザは,そのパソコンをブラウズ・リストに追加する。一覧表示したい時は,一覧表示要求をブロードキャストする。要求を受け取ったマスタ・ブラウザはブラウズ・リストを送る。パソコンをシャットダウンする際には,その旨をマスタ・ブラウザに通知し,リストから自分のNetBIOS名を削除させる。これらの情報のやり取りに,138番ポートが使われている。ここでもブロードキャストが行われているため,自分のパソコンの情報を,同じセグメント内のすべてのパソコンに送っていることになる。

公開サーバはNetBIOSを停止

 137や138番ポートを使って自分の情報を外部に送信する機能は,NetBIOSサービスで使われる。これは一般に,インターネットに接続する公開サーバでは不要なサービスである。NetBIOSは,Windowsネットワークで使われるものだからだ。公開サーバでは,このサービスを停止しておくべきだ。

 これに対して,イントラネット環境でMicrosoftネットワークを構築しているパソコンにとって,NetBIOSは必要なサービスである。NetBIOSを停止したいのなら,その代わりにMicrosoftネットワークの利便性をあきらめなければならない。

図4●NBTのサービスを停止する方法。
「NetBIOS over TCP/IPを無効にする」を選択する

 ただ,Windows 2000以降であればNetBIOSを使わずに名前解決ができる(詳しくは後述)。このため,Windows 2000以降のパソコンだけで構成されたネットワークであれば,NBTを停止してもよい。とはいえ,この場合もファイル共有する相手を探すためのブラウジングができなくなるなど,利便性は下がる。

 NetBIOSサービスを停止するには,コントロールパネルから現在使用中のネットワーク接続を選び,プロパティから「インターネット プロトコル(TCP/IP)」のプロパティを見る。その「全般」タブに表示される「詳細設定」ボタンを押し,「WINS」タブで,「NetBIOS over TCP/IPを無効にする」を選べばよい(図4[拡大表示])。これで,137と138番,そして後述の139番ポートが閉じられる。

 ここで一つ注意が必要である。NetBEUIというプロトコルが有効になっていれば,NetBIOSサービスは稼働し続ける。Windows 95では,NetBEUIがデフォルトでインストールされる。それ以降のWindowsでも,選択すればインストールできる。NBTを停止させるだけでなく,NetBEUIが稼働していないかどうかも確認すべきだ。NetBEUIが動いていれば,137番ポートを防いでも,表3に示した情報が吐き出される可能性はある。

(八木 玲子)