Windowsで使うポートとセキュリティの落とし穴


目次

はじめに
注意すべき5つのポート
危険なポート135
おしゃべりなポート137と138
危険なポート139と445
おわりに

一つ前へ


はじめに

 インターネット経由で、サーバのハードディスクが丸見えになっている、しかも簡単にデータの改竄、削除ができる−。このようなバカなことがあるとは思わないでしょう! 意図的に外部に公開するような極端な設定でもしない限りこのようなことは起らないように思える。しかしWindowsでは、管理者が意図的に設定などをしなくてもこのようなことが起こり得る。
 例えばWindowsNT4.0Serverをインストールすると、デフォルトでGuestユーザーが作られる。このGuestユーザにパスワードを設定せずにパソコンをインターネットに接続すれば、前述のような攻撃はすぐ受ける。これはWindowsがポート139をデフォルトでオープンしているために起こる。
 セキュリティ対策の基本は、不要なサービスを停止することだ。サービス自体を起動していなければ、外部から接続が要求されても応答しない。これを実施するために、パソコンの管理者は必要なサービスがどれで、実際に今どのサービスを稼働しているのかをきちんと把握する必要がある。
 しかしWindowsでは、さまざまなサービスがデフォルトで起動し、その役割が簡単にはわからない場合が多い。多くの管理者はポートの開いている危険性を実感できず、サービスの役割や必要性を認識しないままインターネットにつないでしまう。

注意すべき5つのポート

 では実際に、Windowsがデフォルトでオープンしているポートを調べてみる。
調べるにはフリーのポート・スキャン・ツール「Nmap」
(http://www.insecure.org/nmap/)で調べられる。
 結果は表1、2である。

表1 サーバ系Windowsがオープンしている代表的なポート
ポート番号NT4.0(USなし)NT4.0(USあり)2000Server.NET Server(β版)
21/tcp (ftp)
25/tcp (smtp)
70/tcp (gopher)
80/tcp (http)
123/udp (ntp)
135/tcp (rpc)
135/udp (rpc)
137/udp (netbios名前解決)
138/udp (netbiosブラウジング)
139/tcp (ファイル/プリンタ共有)
443/tcp (https)
445/tcp (ファイル/プリンタ共有)
445/udp (ファイル/プリンタ共有)
500/udp (IPsecの鍵交換)



表2 クライアント系Windowsがオープンしている代表的なポート
ポート番号98Me2000ProfessionalXP Professional
123/udp (ntp)
135/tcp (rpc)
135/udp (rpc)
137/udp (netbios名前解決)
138/udp (netbiosブラウジング)
139/tcp (ファイル/プリンタ共有)
139/udp (ファイル/プリンタ共有)
445/tcp (ファイル/プリンタ共有)
445/udp (ファイル/プリンタ共有)
500/udp (IPsecの鍵交換)


 以上のように、ほとんどのWindowsでデフォルトでオープンしているのは、135と137,138,139,445の5種類のポートである。以下にこれらのポートの役割を整理してみる。これを把握すれば、ポートを開けておくことでどのような危険があるのかが推測でき、対策を立てやすくなるだろう。


危険なポート135
 危険だと言われながらも用途がわかりにくく、脅威を実感しにくいポートの代表が135番だ。しかし2002年7月に、その危険性を実証するようなツールが登場した。「IE’en(アイーン)」だ。
 IE'enはInternet Explorer(IE)を遠隔操作するツールである。ネットワークでつながった他のパソコン上で起動しているIEから情報を取得したり、そのIE自体を操作できる。具体的には
◆起動しているIEのウィンドウの一覧
◆各ウィンドウが表示するWebサイトのURLやCookie
◆検索サイトで入力した検索語
◆SSLで暗号化前、暗号化後のデータ(ネットショッピング等でのクレジット番号)
などが取れてしまう。
 IE'enは、WindowsNT4.0/2000/XPが標準で搭載する分散オブジェクト技術 DCOM(Distributed Component Object Model)を利用している。DCOMを使えば、他のパソコン上のDCOMアプリケーションを遠隔操作できる。他のパソコンが持つ関数を呼び出す仕組みRPC(Remote Procedure Call)を利用する。このRPCが、ポート135を使っている。
 RPCを利用して通信する場合、相手のパソコンの135番ポートに対して、何番のポートを使って通信すればよいかを問い合わせる。すると相手のパソコンから、ポート番号が通知される。実際の通信はこのポート番号で実行する。ポート135は実際のRPC通信で使うポートを動的に決めるポートマッピングの役割を果たす。
 DCOMで作られたアプリケーションなら、どれもIEと同じように操作できる可能性がある。
 RPCのサービス自体を停止するには、「コントロールパネル」の「管理ツール」から「サービス」を選び、「Remote Procedure Call」のプロパティを開く。ここで「スタートアップの種類」を「無効」にすれば、次回起動時からRPCは立ち上がらない(有効にするには、レジストリ・エディタで「HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RpcSs」の「Start」の値を0x04から0x02に変更して再起動する)。しかしこの設定をするとログインに非常に時間がかかるなどWindowsの動作に大きな影響が出る。WindowsのサービスはRPCに依存するものが多く、これらが正常に起動しなくなるのだ。これでは弊害が大きいため、RPCのサービスは基本的には止められない
 次に考えられる対策はパケット・フィルタリングがある。しかし、これもWindowsの動作に大きな影響が出る。例えば、クライアントで135番ポートをブロックすると、Outlookを使ってExchangeServerに接続できなくなる。分散トランザクションを管理するMSDTC、アプリケーション間のメッセージのやりとりを司るMSMQ、動的にIPアドレスを割り当てるDHCPなどのサービス、ActiveDirectoryやドメインが同期をとるためにも、このポートを利用している。
 Windowsのネットワークは、クライアントとサーバの間にファイアウォールが存在する状況を想定して作られていない。つまり社内環境では、クライアントだけでなく、サーバでも135番ポートをブロックするのは難しい。インターネットに公開しているサーバで、RPCが使われることはない場合(Webサーバやメール、DNSサーバだけとして機能させる場合)は135番ポートをブロックしても問題ない。
 次に考えられる方法は、DCOMだけを無効にする方法だ。WindowsNT/2000/XPが標準で備える「dcomcnfg.exe」というツールを利用するのだ。コマンド・プロンプトからこのツールを実行し、表示されたウィンドウの「規定のプロパティ」タブを開いて「このコンピュータ上で分散COMを使う」というチェックを外すだけだ。社内でDCOMを利用しておらず、かつ別のコンピュータから自分のパソコンのCOMを操られたくない場合は、この設定をしておくべきだろう
 クライアントなら、リモートからのパソコンへのログオンを禁止する方法もある。「コントロールパネル」→「管理ツール」→「ローカルセキュリティーポリシー」→「ネットワーク経由でコンピュータにアクセスを拒否する」で、アクセスを拒否する相手を指定する。すべてのアクセスを拒否したければ「Everyone」と指定すればよい。



おしゃべりなポート137と138
 表3にポート137から取得できる主な情報を示している。Windowsの137番ポートに対して、接続の状態を問い合わせるパケットを一つ投げただけで、このような情報が取得できてしまう。


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

 ・コンピュータ名
 ・ドメイン名
 ・ローカル・ログオン名
 ・MACアドレス
 ・ドメイン・コントローラかどうか
 ・マスタ・ブラウザかどうか
 ・ファイル・サーバかどうか
 ・IISの稼働
 ・Sambaの稼働
 ・Microsoft Exchange Directoryの稼働
 ・SMS Clients Remote Controlの稼働
 ・NetDDE Serviceの稼働
 ・RAS Client Serviceの稼働
 ・Louts Notes Server Serviceの稼働
 ・Louts Notesの稼働



 IPアドレスさえ判明すれば、実に手軽にできてしまう。イントラネット環境だけでなく、インターネットを経由しても情報はとれる。
 これらは、攻撃者にとって格好の情報だ。そのパソコンの役割や、ネットワークの構成を容易に把握することができる。このような情報をむやみに流すのは、そのパソコンをどのように攻撃したらよいかを親切に攻撃者に知らせているようなものだ。
 137番ポートは、なぜこのようなパケットをネットワーク上に流すのだろうか。それは、137番ポートがWindowsネットワークの通信プロトコルである「NetBIOS over TCP/IP(NBT)」の名前解決という機能で使われているからだ。名前解決は二つの方法で行なわれている。
 一つの方法は、同一セグメント内に存在するパソコン同士がブロードキャストによって名前解決をする方法である。パソコンは起動時に、自分と同じNetBIOS名を使っているパソコンがほかにないかを、セグメント内に存在するすべてのパソコンに対して問い合わせる。それを受信した各パソコンは、もし自分が同じNetBIOS名を使っていたら、その旨を知らせるパケットを送る。これらの通信が137番ポートで行なわれる。
 もう一つは、WINS(Windows Internet Name Service)による名前解決である。WINSサーバと呼ばれるパソコンが、IPアドレスとNetBIOS名の対応表を持っている。WINSクライアントは、システム起動時に自分のNetBIOS名とIPアドレスをWINSサーバに送信する。他のパソコンと通信するときは、WINSサーバに対してNetBIOS名を送り、IPアドレスを問い合わせる。ここでも137番ポートが使われる。
 以上のように、NBTを使っていればユーザは気づかないうちに、パソコン自身が自分の詳しい情報を周囲にばらまいているのである。

 一方、138番ポートも137と同じく自分の情報を外部に送信する。情報量は137ほど多くはないが、Windowsのバージョン情報が取れてしまうのが特徴だ。
 138番ポートは、NetBIOSのブラウジングという機能を提供している。これは、ネットワークに接続するパソコンの一覧を表示する機能である。例えばWindows98では「ネットワークコンピュータ」から「ネットワーク全体」を選ぶと、ネットワークに接続しているパソコンが一覧表示される。
 ブラウジングでは、マスタ・ブラウザと呼ばれるパソコンがネットワークに接続しているパソコンの一覧表であるブラウズ・リストを管理している。各パソコンは、起動時またはネットワーク接続時に、自分のNetBIOS名を138番ポートでブロードキャストする。これを受け取ったマスタ・ブラウザは、そのパソコンをブラウザ・リストに追加する。一覧表示したいときは、一覧表示要求をブロードキャストする。要求を受け取ったマスタ・ブラウザはブラウズ・リストを送る。パソコンをシャットダウンする際には、その旨をマスタ・ブラウザに通知し、リストから削除させる。これらの情報のやり取りに138番ポートが使われている。

 137や138番ポートを使って自分の情報を外部に送信する機能は、NetBIOSサービスで使われる。これは一般的にインターネットに接続する公開サーバでは不要なサービスである。NetBIOSは、Windowsネットワークで使われるものだからだ。公開サーバでは、このサービスを停止しておくべきだ
 これに対して、イントラネット環境でMicrosoftネットワークを構築しているパソコンにとって、NetBIOSは必要なサービスである。NetBIOSを停止したいのならMicrosoftネットワークの利便性をあきらめなければならない。
 NetBIOSサービスを停止すにはTCP/IPのプロパティの「全般」タブに表示される「詳細設定」ボタンを押し、「WINS」タブで、「NetBIOS over TCP/IPを無効にする」を選べばよい。これで137,138,139番ポートが閉じられる。
 ここで注意すべき点は、NetBEUIというプロトコルが有効になっていれば、NEtBIOSサービスは稼働し続ける。Windows95ではNetBEUIはデフォルトでインストールされる。NBTを停止させるだけでなく、NetBEUIが稼働していないかも確認すべきだ。NetBEUIが動いていれば、137番ポートを防いでも、表3に示した情報が吐き出される可能性がある。


危険なポート139と445
 Microsoftネットワークに接続しているパソコン同士は、137番や138番ポートを使ってIPアドレスを取得する。その後、ファイル共有やプリンタ共有などの実際の通信をする。これはSMB(Server Massage Block)というプロトコルで実現している。ここで使われるのが、139番と445番ポートである。
 SMB通信ではまず、前述の名前解決の仕組みを使って相手のIPアドレスを取得し、それに対して通信の開始を要求する。相手がそれを許可したらセッションが確立する。これを使ってユーザ名やパスワードの情報を相手先に送り、認証する。認証が成功すれば相手の共有ファイルにアクセスできる。これら一連の通信に139番ポートを使う。
 Windows2000やXPは、それ以外に445番も使っている。ファイル共有という機能自体は139番と同じだが、SMBとは違うCIFS(Common Internet Fil Sysytem)というプロトコルを使う(Windows2000で新しく導入された)。
 CIFSとSMBは、名前解決方法が違う。SMBが利用していたNetBIOS名のブロードキャストやWINSによる名前解決の代わりに、CIFSはDNSを利用する。
 このため、Windowsをファイル・サーバやプリント・サーバとして利用しているイントラネット環境では、139と445番ポートを閉じることはできない
 Windows2000以降だけで構成されたネットワークなら、139番ポートは閉じることができる。445番ポートだけでファイル共有が可能だからだ。名前解決にDNSを使うので137や138番ポートも閉められる。混在環境では139番ポートを使ってSMBで通信する必要があり、139番ポートは閉められない。また、ブラウジングをする場合は、137〜139番ポートが必要だ。
 インターネットに公開しているサーバは話が別だ。公開サーバで139と445番ポートを開けておくのは非常に危険である。外部に公開するサーバでは、これらのポートを開けておくべきではない。ファイル・サーバをインターネット経由で利用するのは自殺行為に等しく、139と445番ポートは必ずふさいでおくべきだ。同じことはADSLで常時インターネットに接続しているクライアントにもいえる。
 139番を閉じるには、137,138番と同様に「NetBIOS over TCP/IPを無効にする」を選べばよい。445番を閉じるには「コントロールパネル」→「システム」→「ハードウェア」→「デバイスマネージャ」の「表示」メニューから「非表示のデバイスドライバの表示」を選ぶと「プラグアンドプレイではないドライバ」という項目が一覧に加わる。このツリーを展開して「NetBIOS over TCP/IP」のプロパティを開く。ここで「ドライバ」タグを選択し、「スタートアップ」の種類を「無効」にする。



おわりに
 これまで見てきたように、現在のWindowsをデフォルトの設定のまま使用するのにはさまざまな危険が伴う。これれはWindowsが、初心者ユーザでも複雑な設定をすることなく利用できるように作られているためだ。
 例えばWindows2000Serverでは、インストール時に自動的にIISがインストールされ、パソコンを起動しただけでIISサービスが立ち上がる。2003年初めに出荷開始予定の「Windows .NET Server」では「デフォルト・セキュア」を実現する予定だ。Windows2000とは異なり、標準ではIISはインストールされない。IISのコンポーネントを追加しても、OSの起動時にそれが自動的に実行されることはない。ただし、135,137,138,139,445の各ポートはデフォルトでオープンしているようだ。また、WindowsXPから導入された「インターネット接続ファイアオール(ICF)」の使用も、デフォルトでは無効になっている。高いレベルのセキュリティーを実現しようとするなら、ICFを有効にしておき、その後はユーザが自分の目的に応じて、起動するサービスを選択していく方法が最も妥当だと言えるだろう。

一つ前へ