特集
» 2002年06月29日 00時00分 公開

インターネット・サービス向けIIS設定ガイド:IIS安全対策ガイド・インターネット編 (3/9)

[井上孝司,著]

パケット・フィルタリングが必要とされる理由

 一般的に、インターネットからの不正侵入者はリッスン状態(待ち受け状態)にあるポート番号を調べて、動作しているサービスの種類など調べる。そのために使用されるのがポート・スキャン・ツールである。これは、ある特定のホスト・マシンに対して、ポート番号を次々と変えながらスキャン(操作)して、通信ができるかどうかを調べるツールである。具体的には、TCPの通信開始要求(SYN要求という。SYNはsynchronizeの略)を特定のポートに対して送り、正しくそれが受け付けられるか(受信確認のACK=acknowledgeが返ってくる)、それとも否定応答(RST=Reset。該当するリッスン・ポートがないので通信を拒否するという応答)が返ってくるかどうか、あるいは何も返ってこないかなどを調べることにより、そのポートで待ち受けしているサービスがあるかどうかを調べている。

 ポート・スキャン・ツールというと「攻撃者の不正侵入用ツール」というイメージがあるが、防衛側にとっても、どのポートが開いているのかを確認するためにポート・スキャン・ツールを利用できるから、持っていると便利だ。筆者はWindowsのコマンドラインで動作する「spp」を使用しているが(sppについては「超高速TCP/IPポートスキャナSPP.EXE」を参照)、一般的にはLinux上で動作する「nmap」や(nmapについては「Linux Square連載「ゼロから始めるLinuxセキュリティ―第6回ファイアウォールの設定・動作チェック方法」や、「Linux Tips―開いているポートを調べるには」などを参照)、GUIベースのツールも多く使われているようだ。

 また、ポート・スキャン・ツールはちょっと……という人でも、Windows 2000が標準装備しているnetstatコマンドを使用すれば、同様にリッスン状態にあるポートを確認できるので、こちらを使う方法もある。

 それでは、前回までの設定で、IIS Lockdown Toolの実行を終えた状態のWindows 2000 Serverを対象にして、netstatコマンドとポート・スキャン・ツールsppの両方を動作させて、その結果を見てみよう。まずはnetstatの結果である。

※netstat -a -n で調べた結果

C:\>netstat -a -n…リッスン状態のポートもすべて(数値で)表示

Active Connections

  Proto  Local Address          Foreign Address        State
  TCP    0.0.0.0:21             0.0.0.0:0              LISTENING…以下TCP
  TCP    0.0.0.0:80             0.0.0.0:0              LISTENING
  TCP    0.0.0.0:135            0.0.0.0:0              LISTENING
  TCP    0.0.0.0:443            0.0.0.0:0              LISTENING
  TCP    0.0.0.0:445            0.0.0.0:0              LISTENING
  TCP    0.0.0.0:1025           0.0.0.0:0              LISTENING
  TCP    0.0.0.0:1026           0.0.0.0:0              LISTENING
  TCP    0.0.0.0:1027           0.0.0.0:0              LISTENING
  TCP    0.0.0.0:1029           0.0.0.0:0              LISTENING
  TCP    0.0.0.0:3372           0.0.0.0:0              LISTENING
  TCP    192.168.0.3:139        0.0.0.0:0              LISTENING
  UDP    0.0.0.0:135            *:*…以下UDP
  UDP    0.0.0.0:445            *:*
  UDP    0.0.0.0:1028           *:*
  UDP    0.0.0.0:3456           *:*
  UDP    192.168.0.3:137        *:*
  UDP    192.168.0.3:138        *:*
  UDP    192.168.0.3:500        *:*

 「State」欄が「LISTENING」となっているのが、待ち受け状態にあるTCPのサービスである。UDPの場合は、「Foreign Address」が「*:*」となっているのが、待ち受けしているポートである(TCPとUDPは通信方式が異なるので、このように表示方法も異なっている)。

 それでは次にポート・スキャン・ツール「spp」でスキャンしてみよう。

※ポート・スキャン・ツールsppで調べた結果

C:\>spp artemis…引数はターゲットのホスト

Target 'artemis' port scan 0 to 1000 start. …ポート0から1000までスキャン
  Proto  Remote Address         State
  TCP    192.168.0.3:21         LISTENING…FTP
  TCP    192.168.0.3:80         LISTENING…http
  TCP    192.168.0.3:139        LISTENING…NETBIOS Session Service
  TCP    192.168.0.3:135        LISTENING…DCE endpoint resolution
  TCP    192.168.0.3:443        LISTENING…https
  TCP    192.168.0.3:445        LISTENING…CIFS
Completed

 こちらの例では、LISTENING状態にあるTCPポートは全部で6つ表示されている(UDPはスキャンされない)。それに対して先のnetstatの例では、全部で11ものポートがLISTENING状態であると表示されている。さてどちらが正しいのであろうか?

 結論からいうと、後者のsppツールによる調査結果が正しいようである。実はコマンドラインで利用できるnetstat.exeコマンドは、TCP/IPのSocket(いわゆるWinSock)レベルでのLISTENING状態を表示しているのではなく、より低位のTDI(Transport Driver Interface)レベルでのリッスン状態を表示しているので、このような違いが起こるようである。詳しくは「JP418762 - LISTEN していないポートが netstat で LISTENING と表示される」や「JP307175 - Windows 2000 と Windows NT 4.0 におけるリスニング ソケット再使用時の動作の違い」などを参照していただきたいが、簡単にいうと、使用済みのポート(すでにクローズしてしまっているポート)までもLISTENINGと表示されることがあるので、実際のリッスン状態のポートよりもいくらか多く表示されることがある、ということである(これは「仕様」だそうだ)。よって、正確にリッスン状態のポートだけを知りたければ、ポート・スキャン・ツールなどを使う必要がある。

 いずれにしろ、厳格なセキュリティ対策を施すには、Webサーバの利用に必要なTCPのポート80番と、後述する、FTPによるコンテンツ更新に必要なTCPのポート20番と21番以外はすべて閉じてしまいたいところだ。だがWindows 2000の持つ標準的なTCP/IPの機能だけではこれは難しい。外部のDNSを参照するためにはいくつかのUDPパケットのやりとりができなければならないが、このようなDNS要求とその応答だけを許可して、それ以外をすべてブロックするというのが困難だからである。外部DNSが参照できなくなると、Windows Updateなどが実行できなくなってしまう。

 このように、ポートの閉鎖と各種機能の利用には二律背反が生じることが多いので、単純なポートの開け閉めだけでは、さまざまな要求に対処できないことが多い。ポート番号の情報だけでなく、さらに詳細な条件設定が可能なファイアウォールを介してDMZ(非武装セグメント)をLANとは別に設置し、そこにWebサーバを設置するのが好ましいとされるのは、こうした事情による。可能なら、IDS(侵入検知システム:Intrusion Detection Systems)もある方が望ましい。

 なお、Windows 2000 Serverが持っている機能を利用してパケット・フィルタリングを実現するには、以下の2種類の方法がある。

  • TCP/IPプロトコル・スタックが装備しているパケット・フィルタの機能を利用する
  • RRAS(Routing and Remote Access Service)が持っているパケット・フィルタの機能を利用する

 しかし、前者は機能的に不満足な点が多く(ソース・ポート番号やIPアドレスでフィルタリングすることができない)、特にUDPポートの閉鎖が事実上は困難である点から、防御壁としてこの機能に頼るには無理がある。また、後者については詳細なフィルタリングの設定が可能だが(ただしポート番号に範囲型などを指定することはできない)、(前者と同様に)ログを残すことができないという難点がある。ログを記録できないと、不正侵入が試みられた場合や、あるいは実際に侵入された場合でも、その原因を究明するのが難しくなる。

 そのため、Windows 2000 Serverが持つ機能だけで不必要なポートなどを完全封鎖するのは難しく、専用のファイアウォールを用意せざるを得ない。なお、これらのパケット・フィルタ機能の詳細については、以下に示す別掲記事を参照されたい。

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。