How to PortScanning

Date : 2005-03-10
Author : Defolos

CONTENTS

(1.) 手動でのポートスキャン
(2.) ツール利用によるポートスキャン
- Nmap
- 使い方
- Option無しでの実行と結果分析
- オプション
(3.) オプションの詳細

手動でのポートスキャン

 ポートスキャンをするには稼動しているかどうか調べたいポートに向けてTELNET接続することで調べることができます。
 書式は> telent [hostname] [port number]となります。例としてはこんな感じです。

> telnet 192.168.0.1 24

 これは192.168.0.1の24番ポートに接続しようとしているところです。これで接続できたなら24番ポートは開いていると判断できます。接続できなかったら24番ポートは閉じているか、フィルターされていると判断できます。
 このようにして色々なポート番号に接続してみましょう。

 ポートスキャンはこのように、意外と簡単です。しかし、ポートは全部で65535個もあるので全部手動で回っていては大きな負担になります。そこで今まで手動でした所を自動でおこなってくれるポートスキャナツールが役に立ってきます。

○ 注意

 ポートスキャンはできる限り手動でやるべきです。そもそもポートスキャンはハッキングの下調べとしての位置づけが大きく、ツールを使って1秒間に十数回もの接続があったなら、サーバ管理者にとってみればハッキングの下調べに来てると思われても不思議はありません。しかし、手動によるスキャニングならネットワークに繋がってるかどうかの検査のために接続したと思われることもあるかもしれません。
 他にもいくつかの長所があります。

1.) 勉強になる
手動でスキャンすることで、ポートスキャナがどのような動きをするのか体感できます。
2.) 友達を感心させられる
キーを一つ一つタイプしてスキャンしてるのは、一見して頭を使ってるように見えます。
3.) 新しい発見があるかもしれない
まぁ、あるかもしれません。
4.) 適応性の強化になる
何らかの理由で、ツールを使えないときがあるかもしれません。そんなとき、手動スキャンに慣れていれば、とまどうこともないでしょう。

ツール利用によるポートスキャン

● Nmap

 最高の高性能ポートスキャナです。ステルスやフィンガープリンティング機能も併せ持っています。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にスキャンを行います。

● Option無しでの実行と結果分析

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」です。

  1. open: ポートが開いているとき
  2. filtered: 戻り値がICMP Type3 Code13(管理上通信禁止)だったとき。通信途中でパケットが失われたため(*ドロップを含む)結果が不明のとき
  3. unfiltered: ポートが閉じているとき

(※)ドロップ
 パケットフィルタリング時の反応形式のひとつ。パケットフィルタリングを実施しているホストが通過を禁止している(フィルタしている)パケットを受け取った場合、送信元のIPアドレスに対し、RST/ACKパケットかICMP Type3 Code13を返します。
 あるいはフィルタしているパケットを受け取ると、そのパケットを破棄し、RST/ACKパケットもICMP Type3 Code13も送信しません。これをドロップと言います。

● オプション

オプションの詳細は次のチャプターである「オプションの詳細」で詳しく解説します。


オプションの詳細

-b [ftp_relay_host]

 FTPバウンス(FTPサーバを経由させることでスキャン元を撹乱する技術)でスキャンします。[ftp_relay_host]は直接読み書き可能なディレクトリを持ち、なおかつPORTコマンドで偽ポート情報を伝えることができるFTPサーバでないといけません。

-d

 スキャンの詳細を表示します。スキャンのやり取りを簡単に表示したい場合は-dの代わりに-vを使用します。

-D [decoy1][,decoy2][,…][,ME]

 デコイを利用してスキャンします。[decoy1][,decoy2][,…]の所に「おとり」となるデコイホストを指定します(5基まで可能)。6番目か最後に[,ME]と指定します。[,ME]を指定しない場合はランダムにIPアドレスを配置します。デコイを利用するとログからの追跡を撹乱することができます。ただし、「おとり」となるデコイホストが稼動していないホストだったとしたら、スキャン対象にSYN floodを引き起こしてしまい、追跡が厳しくなることでしょう。

-e [interface]

 インターフェイス(eth0などのLANカードの名)を指定します。このオプションはLANカードを複数装備したPCでのスキャンで効果を発揮します。

-f

 スキャン中、パケットをフラグメント(断片化)して送信します。 つまりTCPヘッダーを分割して送信するのでIDSのスキャン検出をすり抜けやすくなります。SYN、FIN、Xmas、Nullスキャンと合わせて使用します。

-F

 簡易スキャンモードです。

-g [prot number]

 スキャンするソースポートを指定します。一般的に20と53を指定します。ターゲットがファイアウォールの後ろ側にいる場合、ポート80を指定するとスキャンできる可能性があります。管理者側の対策としてはファイアウォールをステートフルパケットインスペクション(SPI)機能付きの物に変更するのが良いでしょう。

(※)SPI
 ファイアウォールを通過するパケットのデータを読み取り、内容を判断して動的にポートを開放/閉鎖する機能。たとえばLAN側から送信したデータをセッションログとして保管しておき、WAN側から到着したパケットがセッションログと矛盾しないか確認する。

-h

 ヘルプを表示します。

-i [file name]

 スキャン対象を[file name]で指定したファイルから読み込みます。

-I

 対象ホストにidentdデータがある場合、ident(113/tcp)サービスを受けそのデータを取得します。うまくいけば、サービスを動作させている所有者(owner)を知ることできます。プログラムの権限を知ることで、どの程度の影響を与えることができるかも推測できます。

-m [file name]

 スキャンのログを[file name]で指定したファイルにマシンが解析可能な形式で出力します。ファイル名に「-」を指定すると標準出力において省略される部分も出力します。これを利用してエラーメッセージの監視も可能です。

-n

 DNS検索をしません。これによりPingスキャンが高速になります。

-o [file name]

 スキャン結果を[file name]に出力します。

-O

 フィンガープリンティング(OSの判別)を合わせて行います。

-p [range] ports

 ポートを指定する場合に使用します。

  1. 範囲で指定する場合「-p 1-1024:ポート1番〜1024番までを」
  2. 列記して指定する場合「-p 1,7,24,80:ポート1番、7番、24番、80番を」
  3. 列記および範囲で指定する場合「-p 1-3,24,80-1024:ポート1番〜3番および24番および80番〜1024番を」
-P0

 Ping(ICMP echo riquest)を送信せずにスキャンを行います。nmapは通常、裏でスキャン対象ホストにPingを行ってホストが存在するかどうかを確かめてからスキャンを行っています。しかし、このPingが無駄な痕跡を残してしまう可能性があります。また、ファイアウォールやルータなどでPingをドロップするシステムだとnmapがPingを送った際にPongが返ってこないのでホストが存在しないと誤認する場合があります。これらを避けるためのオプションがこれです。

-PB

 TCPスキャンとICMPスキャンを同時に行います。

-Pl

 Ping(ICMP echo riquest)を実行します。指定されたサブネットにブロードキャストをかけ、稼動中のホストを探し出します。

-PS

 ACKスイープの代わりに、TCP SYNスイープを利用します。

-PT [port]

 TCP pingを実行します。ポートの指定もできます。

-q

 argvを無視します。

-sF

 FIN Stelth スキャンを実行します。ファイアウォールの内側のホストもスキャンできますが、対象ホストがUNIXの場合に限られます。

-sN

 Null Stelth スキャンを実行します。対象ホストがUNIXのときのみ有効です。

-sI

 アイドルスキャンを行います。アイドルスキャンの詳細は「ポートスキャンの種類」を参照してください。

-sP

 Ping(ICMP ech riquest)を送信し、反応の有無でホストの稼動状況を判別します。パケットフィルタリングをしているホストには-PTと以下のポート番号を組み合わせてスキャンすると検出できるかもしれません。25(SMTP)、80(HTTP)、110(POP3)、143(IMP)

-sS

 TCP SYN(Half Open)スキャンを行います。

-sT

 TCP Connectスキャンを行います。一般的なスキャン方法であり、3ウェイハンドシェークを確立するのでログにスキャンの痕が残ってしまいます。

-sU

 対象ホストの全てのポートに0バイトのUDPパケットを送信します。ICMP未到達エラーがnmapに届くとポートが閉じていると判断し、それ以外は開いていると判断します。あまり信頼できる結果は得られません。

-sX

 Stealth Xmasスキャンを行います。対象ホストがUNIXの場合のみ効果があります。

-S [your IP]

 SYNやFINスキャンをするときのソースアドレスを指定します。大体は自分のPCなので、-sSや-sFと合わせて使います。

-v

 簡易出力モードです。詳しく出力したい場合には-vの代わりに-dをつけます。


■参考文献


go back to the TOP page of Glazheim Lykeion.