トップページ > nmap関連 > ポートスキャンツールnmapのインストール・使用方法
カテゴリー
オラクルエンジニア通信
サポートページ
マニュアルページ
ソフトウェアダウンロード
中古UNIXマシン購入
blogs.sun.com
お勧めサイト
プライベートリンク

ポートスキャンツールnmapのインストール・使用方法

ポートスキャンツールの定番であるnmapをSolarisにインストールしよう。
あくまでも自分の管理するマシンのポートチェックに使用しましょう。
外部のマシンへのポートスキャンは犯罪です。タイーホされても知りません。

まずは以下のサイトで必要なパッケージをダウンロードします。
http://sunfreeware.com

[nmap本体]
nmap-3.55-sol9-sparc-local.gz

[必要もしくはnmapの全機能を使用するためにインストールすべきパッケージ]
glib-1.2.10-sol9-sparc-local.gz
gtk+-1.2.10-sol9-sparc-local.gz
openssl-0.9.7d-sol9-sparc-local.gz
pcre-4.5-sol9-sparc-local.gz
libgcc-3.3-sol9-sparc-local.gz
gcc-3.3.2-sol9-sparc-local.gz

[インストール方法]

とりあえず上記パッケージをpkgaddでモリモリインストールしま
す。
順番はエラーにならない程度に適当でOK。最後にnmapをインストールします。

[実行方法]

/usr/local/binディレクトリにnmapコマンドがインストールされるのでPATHを通しておくと便利でしょう。また、manコマンドでマ
ニュアルを参照する場合はMANPATH変数に/usr/local/manを登録するか、man -M /usr/local/man nmap
と指定します。

以下が実行形式です。


# nmap [Scan Type(s)] [Options] <host or net [#1] ... [#N]>


シンプルな実行例

# nmap -sT 192.18.1.3

■ スキャンタイプ

-sT TCP connect() scanTCP scanningの一番基礎的な形態。connect() 関数を使ってすべてのポートに対してスキャンを行う。もしポートがlistening 状態ならconnect()は成功し、そうでなければ reachable にならない。つまり、相手コンピュータに SYN パケット(通信開始要求)を送り、相手サーバから許可(SYN/ACKパケット)が送られてきたら実際にコネクションを張り(ACKパケットを送信)、ポートが開いていると判断する。もし拒否(RST/ACKパケット)されたら、ポートが閉じていると判断する。この流れは、普通 TCP/IP で通信を開始するときの正規の手順であり、正規の流れでサービスが動いているかどうかを確認するので、正確にサービスを特定することができる。ただし、サービスは(当然)全てのログを残す。
-sUUDP scansホストのどんな UDPポートが open になっているかを確かめるために使われる。この技術はシステムの各ポートに 0 バイトの udp パッケージを送り、返事が来なかったならばポートが開いていると判断し、「ICMP-port-unreachable」が返ってきたならばポートが閉じている、と判断することでスキャンを行う。ただし、UDP はもともと信頼性のない通信なのでスキャン結果も基本的に信頼性に欠ける。(こちらの空パケットが届いていない場合等考えることができる)
(注)ルート権限が必要。
-sSTCP SYN scanfull TCP接続をしないので "half-open" スキャニングと呼ばれている。一つの SYN パケットを送って SYN/ACK 回答が来れば、そのポートは listening 状態であることを現わし、RST/ACK 回答が来れば "non-listener" であることを現わす。この技術は、一つのパケットを送って SYN/ACK 回答を受けた即時に RST パケットを送って接続を切断する。このようにすれば、接続が成り立たない状態で接続を切ることになりログを残さない場合が大部分である。
(注)custom SYN packet を作るためにはルート権限が必要。
-sPPing scanningネットワークのどのホストが生きているかを調べたい時に使う。明示したネットワークのすべてのIPアドレスに「ICMP echo request packet」を送り、ホストが生きていたら回答を送る。しかし、「microsoft.com」のような一部サイトでは「echo requst packet」を邪魔するので、ポート番号80で「TCP ack packet」を送り、もし「RST back」を受けたならばこのホストは生きていると判断する。
-sFStealth FIN異常な通信を送信し、相手の反応からサービスが動いているかどうか確認するスキャン方法。FIN スキャンはいきなり通信終了要求(FINパケット)を送信し、Xmasスキャンは FIN、URG、PUSH の3種のフラグ付きパケットを送信し、Nullスキャンは何もフラグの立っていないパケットを送信し、それぞれ様子を見る方法である。ちなみに、これらのスキャンにWindows系OSは反応しない。逆に言えば、この方法でWindowsか否かを判別できる。
(注)ルート権限が必要。
-sXXmas Scan
-sNNull scan
-sAACK scanポートのスキャンというよりも、ファイアウォールのフィルタリング状況を確認するのに役立つ。ファイアウォールの中には、通信開始要求についてフィルタする事で、通信できなくしているものがあるが、そういったファイアウォールを使っているのか、それとももっと高度なファイアウォールを使っているのかという事を確認することができる。また、前述のファイアウォールの場合、どんなフィルタルールになっているかを確認することができる。手法は、いきなり ACK パケットを送り、RST パケットが返ってきたらフィルタされていない事になり、何も返ってこないか、「ICMP-unreachable」が返ってきたらフィルタされている、と言うことになる。
-sRRPC scanRPCスキャンはRPCを用いたサービスをスキャンする。まずすべてのTCP/UDPポートをスキャンし、その後 RPC に空のコマンドを送信する。もし RPC のポートが開いていたら、相手はバージョンナンバーを返してくる、という方法である。rpcinfo コマンドを試すのとほぼ同じ。
-sWWindow scanWindowスキャンは、いくつかのOSでは TCP の Window サイズを見ればポートが開いているか閉じているか判別できる、と言う特徴を利用して調査する方法。
-sIIdle scanアイドルスキャンというステルススキャンのオプション。代理のスキャン用ホストを利用することでターゲットホストのポートの開放状況を判断する。IPヘッダ内の識別子フィールドは、1つのデータグラムの全てのフラグメントを子喜悦するためのユニークな一意的な値が格納されている。ただし、ユニークな値といっても、単に値をインクリメントするだけの実装であることが多い。多くの OS で TCP/IP スタックの実装として IP ヘッダの識別子を+1だけ増加していくことを利用する。しかし、アイドルスキャンは非常に時間がかかり、さらにターゲットが、識別子が1ずつ増加するOSであるホストでなければならない。そして、ポートスキャン中に他のホストとの通信が代理ホストとの間で行われてしまうと、識別子の値に狂いが生じる。そのアイドルスキャンの結果、開いているポートと誤認することもある。


■ スキャンオプション

-p
port番号指定ポート番号を指定できる。つまり、どんなサービスを調査するかを指定するオプション。

"# nmap -p 120-130,139,1000-"

と指定した場合、ポート番号 120~130と139、それと 1000 以上のポートをスキャンする。
-g
source port番号指定こちらが使うポート番号を指定できる。つまり、簡易ファイアウォールをすり抜けるのに使用したり、ファイアウォールの中から外のサイトにポートスキャンするのに使用したりすることができる。一般的に 20 と 53 を指定するとよい。ターゲットがファイアウォールで守られている場合、次のようにソースポートを80にセットすればスキャンできる可能性がある。
"# nmap -g 80 xxx.xxx.xxx.xxx"
管理者側は対策として、ファイアウォールをステートフルインスペクション機能を持ったものに変更することが挙げられる。ステートフルインスペクションとは、セッションの状態やアプリケーション層レベルの情報をステートテーブルとして動的に保持し、それを通信の許可・拒否の判断基準として利用する機構。
-v
verbose mode冗長モード。nmap が出す様々なメッセージを出力する。常につけておいた方がよい。ただしクイックリファレンスであるので、さらに詳しく知りたい場合は -d をつけるとよい。
-d

nmapのやり取りを詳細に確認できる。やり取りを簡易的に知りたい場合は -v を利用するとよい。
-D
decoy利用デコイ(囮)を利用してスキャンする。decoy1、decoy2、…に囮となるホストを指定し、6番目または最後に「ME」と書くと、ポートスキャン検出ツールは IP アドレスを特定しにくくなる。また「ME」を使わなければ IP アドレスをランダムに配置する。ただし、デコイに指定するホストは稼動しているものでなければならない。IDSが導入されたシステムは、複数から同時にスキャンが実行された場合、管理者に警告するように設定をしていることがある。そんな場合、アタッカーがデコイオプションで偽の複数のホストからの通信を織り交ぜることで、検知を混乱させ、ログを見づらくさせることができる。
-p0ホストping実行無しスキャンするときに ping を発信して相手サーバが動いているかどうか調査しない、と言うもの。nmap はスキャン対象のホストの生存確認を行うために、ping をポートスキャン開始時に実行する。この ping がターゲットに無駄な痕跡を残してしまうことがあるので、ステルススキャンやアイドルスキャンと併用されることがある。また、一部のサイトはファイアウォールで ping に応答しないように設定してあるので、ping に応答しないからサーバはダウンしている、と言う様に nmap が誤認し、スキャンが実行されない事を防ぐために使うこともある。
-pT(N)
pingによるサーバ動作確認をせず、いきなりTCP ACKパケット(またはSYNパケット)を送ってサーバが生きているかどうか確認する手法。オプションにある数字の部分をポート番号として指定する。
-PSTCP SYNACKパケットによる動作チェックを行わず、SYN パケットによるチェックを行う。
-OOS特定400種類に及ぶ OS やそのバージョンを特定する。ただし、オープンしたポートが全くないと失敗する場合が多い。
-fTCP connect() scan送信するパケットをわざとフラグメント化して送信する。SYN、FIN、Xmas、Null スキャンと組み合わせて使用される。このオプションを利用すると TCP ヘッダーを分割するので、IDS によるスキャン検知にひっかかりにくくなる。
-o[NMS]outfile
出力結果を outfile に保存する。
-F簡易スキャンオープンポートのリストアップをしたいだけの場合、早くスキャンしてくれる。
-T
スキャンの速度を指定できる。
-S
SYNスキャンまたはFYNスキャンのために使うソースアドレスを指定する。
-e
どのインターフェイスでnmapを実行するかを指定する。
-IIdented scan対象ホストに identd データがある場合、ident(113/tcp)サービスを受けそのデータを取得する。うまくいけば、サービスを動作させている所有者を知ることできる。プログラムの権限を知ることで、どの程度の影響を与えることができるか推測できる。ただし、相手サーバで identd が動作していなかったら意味がない。
-bFTPバウンスサーバーを踏み台にしてスキャンを行うただし、サーバーは直接読み書き可能なディレクトリを持ち、PORT コマンドで偽ポート情報を伝えることができるFTPサーバーでなければならない。(FTPバウンスとはFTPサーバーを経由して接続先を誤魔化す方法)
-hヘルプ簡単なヘルプの表示

オラクルユニバーシティSolaris系技術トレーニング一覧

Solarisお勧め書籍

Solaris 11.2 システムハンドブック
Oracle Solaris 11 試験対策本(OCA)