ポートスキャンをするには稼動しているかどうか調べたいポートに向けてTELNET接続することで調べることができます。
書式は> telent [hostname] [port number]となります。例としてはこんな感じです。
> telnet 192.168.0.1 24
これは192.168.0.1の24番ポートに接続しようとしているところです。これで接続できたなら24番ポートは開いていると判断できます。接続できなかったら24番ポートは閉じているか、フィルターされていると判断できます。
このようにして色々なポート番号に接続してみましょう。
ポートスキャンはこのように、意外と簡単です。しかし、ポートは全部で65535個もあるので全部手動で回っていては大きな負担になります。そこで今まで手動でした所を自動でおこなってくれるポートスキャナツールが役に立ってきます。
ポートスキャンはできる限り手動でやるべきです。そもそもポートスキャンはハッキングの下調べとしての位置づけが大きく、ツールを使って1秒間に十数回もの接続があったなら、サーバ管理者にとってみればハッキングの下調べに来てると思われても不思議はありません。しかし、手動によるスキャニングならネットワークに繋がってるかどうかの検査のために接続したと思われることもあるかもしれません。
他にもいくつかの長所があります。
最高の高性能ポートスキャナです。ステルスやフィンガープリンティング機能も併せ持っています。http://www.insecure.org/nmap/からダウンロードしましょう。Unix、Linux、FreeBSDだけでなく、WindowsやMacにも対応しています。
ここではWindows版を使うこととします。ダウンロードしたら解凍し、コマンドプロンプトから実行します。
書式は次の通りです。
> nmap.exe [ScanType][Option] host or net
複数のホストに対してスキャン(広域スキャン)する場合は「-」を使います。例えば192.168.0.1〜255に対して広域スキャンしたい場合は「192.168.0.1-255」と指定します。
また「/(mask)」はサブネットを指定する時に使います。例えば「.com/24」のように指定します。「*」は、その部分全てを表す記号です。例えば「192.168.0.*」とすると192.168.0.1〜255に対してスキャンを行うことができます。
「,」は「〜と〜」を表しています。例えば「192.168.0.1,2,3」とすると、192.168.0.1と192.168.0.2と192.168.0.3にスキャンを行います。
C:Defolos\nmap-3.75>nmap.exe 192.168.0.1 Starting nmap 3.75 ( http://www.insecure.org/nmap) at 2005-02-05 12:48 東京(標準時) Interesting ports on directstar-275466 (192.168.0.1): (The 1655 ports scanned but not shown below are in state: closed) PORT STATE SERVICE 23/tcp open telnet 80/tcp open http 137/tcp filtered netbios-ns 138/tcp filtered netbios-dgm 139/tcp filtered netbios-ssn 5432/tcp open postgres 12345/tcp filtered NetBus 27374/tcp filtered subseven MAC Address: 00:30:13:27:54:66 (NEC) Nmap run completed -- 1 IP address (1 host up) scanned in 2.329 seconds
上はホスト192.168.0.1にオプション無しでスキャンした結果です。大体は見てもらえばわかる通りですが、「STATE」フィールドを補足しておきます。
STATEフィールドはそのポートの状態を表しています。ここに表示されうる状態は全部で3つあり「open」、「filtered」、「unfiltered」です。
(※)ドロップ
パケットフィルタリング時の反応形式のひとつ。パケットフィルタリングを実施しているホストが通過を禁止している(フィルタしている)パケットを受け取った場合、送信元のIPアドレスに対し、RST/ACKパケットかICMP Type3 Code13を返します。
あるいはフィルタしているパケットを受け取ると、そのパケットを破棄し、RST/ACKパケットもICMP Type3 Code13も送信しません。これをドロップと言います。
オプションの詳細は次のチャプターである「オプションの詳細」で詳しく解説します。
FTPバウンス(FTPサーバを経由させることでスキャン元を撹乱する技術)でスキャンします。[ftp_relay_host]は直接読み書き可能なディレクトリを持ち、なおかつPORTコマンドで偽ポート情報を伝えることができるFTPサーバでないといけません。
スキャンの詳細を表示します。スキャンのやり取りを簡単に表示したい場合は-dの代わりに-vを使用します。
デコイを利用してスキャンします。[decoy1][,decoy2][,…]の所に「おとり」となるデコイホストを指定します(5基まで可能)。6番目か最後に[,ME]と指定します。[,ME]を指定しない場合はランダムにIPアドレスを配置します。デコイを利用するとログからの追跡を撹乱することができます。ただし、「おとり」となるデコイホストが稼動していないホストだったとしたら、スキャン対象にSYN floodを引き起こしてしまい、追跡が厳しくなることでしょう。
インターフェイス(eth0などのLANカードの名)を指定します。このオプションはLANカードを複数装備したPCでのスキャンで効果を発揮します。
スキャン中、パケットをフラグメント(断片化)して送信します。 つまりTCPヘッダーを分割して送信するのでIDSのスキャン検出をすり抜けやすくなります。SYN、FIN、Xmas、Nullスキャンと合わせて使用します。
簡易スキャンモードです。
スキャンするソースポートを指定します。一般的に20と53を指定します。ターゲットがファイアウォールの後ろ側にいる場合、ポート80を指定するとスキャンできる可能性があります。管理者側の対策としてはファイアウォールをステートフルパケットインスペクション(SPI)機能付きの物に変更するのが良いでしょう。
(※)SPI
ファイアウォールを通過するパケットのデータを読み取り、内容を判断して動的にポートを開放/閉鎖する機能。たとえばLAN側から送信したデータをセッションログとして保管しておき、WAN側から到着したパケットがセッションログと矛盾しないか確認する。
ヘルプを表示します。
スキャン対象を[file name]で指定したファイルから読み込みます。
対象ホストにidentdデータがある場合、ident(113/tcp)サービスを受けそのデータを取得します。うまくいけば、サービスを動作させている所有者(owner)を知ることできます。プログラムの権限を知ることで、どの程度の影響を与えることができるかも推測できます。
スキャンのログを[file name]で指定したファイルにマシンが解析可能な形式で出力します。ファイル名に「-」を指定すると標準出力において省略される部分も出力します。これを利用してエラーメッセージの監視も可能です。
DNS検索をしません。これによりPingスキャンが高速になります。
スキャン結果を[file name]に出力します。
フィンガープリンティング(OSの判別)を合わせて行います。
ポートを指定する場合に使用します。
Ping(ICMP echo riquest)を送信せずにスキャンを行います。nmapは通常、裏でスキャン対象ホストにPingを行ってホストが存在するかどうかを確かめてからスキャンを行っています。しかし、このPingが無駄な痕跡を残してしまう可能性があります。また、ファイアウォールやルータなどでPingをドロップするシステムだとnmapがPingを送った際にPongが返ってこないのでホストが存在しないと誤認する場合があります。これらを避けるためのオプションがこれです。
TCPスキャンとICMPスキャンを同時に行います。
Ping(ICMP echo riquest)を実行します。指定されたサブネットにブロードキャストをかけ、稼動中のホストを探し出します。
ACKスイープの代わりに、TCP SYNスイープを利用します。
TCP pingを実行します。ポートの指定もできます。
argvを無視します。
FIN Stelth スキャンを実行します。ファイアウォールの内側のホストもスキャンできますが、対象ホストがUNIXの場合に限られます。
Null Stelth スキャンを実行します。対象ホストがUNIXのときのみ有効です。
アイドルスキャンを行います。アイドルスキャンの詳細は「ポートスキャンの種類」を参照してください。
Ping(ICMP ech riquest)を送信し、反応の有無でホストの稼動状況を判別します。パケットフィルタリングをしているホストには-PTと以下のポート番号を組み合わせてスキャンすると検出できるかもしれません。25(SMTP)、80(HTTP)、110(POP3)、143(IMP)
TCP SYN(Half Open)スキャンを行います。
TCP Connectスキャンを行います。一般的なスキャン方法であり、3ウェイハンドシェークを確立するのでログにスキャンの痕が残ってしまいます。
対象ホストの全てのポートに0バイトのUDPパケットを送信します。ICMP未到達エラーがnmapに届くとポートが閉じていると判断し、それ以外は開いていると判断します。あまり信頼できる結果は得られません。
Stealth Xmasスキャンを行います。対象ホストがUNIXの場合のみ効果があります。
SYNやFINスキャンをするときのソースアドレスを指定します。大体は自分のPCなので、-sSや-sFと合わせて使います。
簡易出力モードです。詳しく出力したい場合には-vの代わりに-dをつけます。