Nmapのポート判断分類

	Nmapが認識するポートの状態は

		「open」, 「closed」, 「filtered」, 「unfiltered」, 「open|filtered」, 「closed|filtered」

	の6つの分類に分けられ、それぞれの説明は以下。

		「open」  ・・・ アプリケーションがTCPコネクションやUDPパケットを受け入れているという状態。
		「closed」 ・・・ アクセスはできるが、受信待機しているアプリケーションはないという状態。
		「filtered」・・・ ポートが開いているかどうか判断できなかったという状態。
				  発生要因としてはIDSやファイアウォールが働いていたり、セグメント障害が起こったりなど。
				  基本的に攻撃は難しい。
		「unfiltered」・・・ ポートまでアクセスできましたがポートの開閉状態はわからなかったという状態。
				   しかしこれはACKスキャンをした場合に判断される状態なので、ウィンドウスキャン、
				   SYNスキャン、FINスキャンなどでポートの開いているかどうかを調べ直せる。
		「open|filtered」・・・ ポートがopen状態なのか、filtered状態なのか判断できない状態。
					例えばopenしているはずがパケットフィルタなどがプローブを破棄してしまい、
					応答がないなど。
		「closed|filtered」・・・ ポートがclosed状態なのか、filtered状態なのか判断できない状態。
						Idleスキャンをした時に、この状態と判断される。

	使用方法

		#  nmap  <オプション>  <ターゲットのホスト名またはIPアドレス>

	オプション

		「-v」 ・・・ verbose
		「-sL」・・・ リストスキャン。ネットワーク全体のホストを一覧するだけでパケットは送らない。
		「-sP」・・・ Pingスキャン。リストスキャンよりも一歩立ち入った調査。
		「-Pn」・・・ Pingを送信しない。
		「-P0」・・・ ホストの生存は調べない。※オーではなくゼロ
		「-iL」・・・ リストスキャンを行う。ファイルを使ってもいいが、
		「-sS」・・・ TCP SYNスキャン(デフォルト)。TCPコネクションを確立しないため、足がつきづらい。
			   SYNパケットを送りSYN/ACKの応答があればopenと判断し、RSTの応答があれば待ち受け
			   していないと判断する。一応何度か再送信をするがそれでも応答がなければfilteredと見なす。
			   IDSを備えているターゲットなら、たいてい見つかる。
		「-sT」・・・ TCP connectスキャン。-sSが使用できなかった場合に利用(-sSには高い権限が必要)。
			   このオプションはTCPコネクションを確立してしまうためパフォーマンスは落ちる上に、
			   足がつく可能性は高まる。もちろんIDSには見つかる。
		「-sA」・・・ TCP ACKスキャン。いきなりACKフラグを送るため、ポートの開閉状態は調べない。
			   というよりRSTが送られてくるので判断ができない。
			   使い道としては、ターゲットのファイアウォールが稼働しているか否かを調査する場合に利用。
		「-sN,-sF,-sX,-sM」・・・ それぞれ順にNullスキャン、TCP FINスキャン、Xmasスキャン、Maimonスキャンを行う。
				     これらの4つはSYNスキャンに対抗するために作られたIDSをさらに上回るために
				     作られたスキャンタイプである。TCP RFCに従ったシステムではSYN,RST,ACKを
				     含まないパケットに対しては、ポートが閉じている時はRSTを返し、ポートが
				     開いている場合は何も応答をしない仕組みになっている。(Maimonスキャンだけは
				     FIN/ACKを利用)ということは、悪知恵を働かせると、
								「じゃあ、SYN,RST,ACK以外つまりFIN,PSH,URGをフラグとして送れば、
				     スキャンができてしまうじゃんよ!」という考えが浮かんでできたものっぽい。
				     これらのスキャンは秘匿性は高いが弱点もある。
				     それは今のIDSはこれらを検知できる上に、すべてのシステムがTCP RFC通りでは
				     ないということが挙げられる。ポートの開閉状態問わず、プローブに対してRSTを
				     返すというシステムは多い。世界No.1OSシェアを誇るマイクロソフトのWindowsOS、
				     シスコ製デバイスなどはこれにあたるみたい。しかしUNIXベースのシステム
				     には有効な場合が多いので使えるが、IDSを設置されていたら基本的にアウト。
		「-sU」・・・ UDPスキャン。 UDP通信の仕組み上Nmapがタイムアウトを引き起こし、再試行を行う可能性が高い。
			   そのためUDPスキャンの速度は、どうしても遅くなりがち。
			   パフォーマンスを上げる方法は以下に記載。TCPスキャンタイプと組み合わせることもできる。


	(プロトコルスキャン)
		「-sO」・・・  ターゲットマシン上でどのIPプロトコル(TCP,UDP,ICMPなど)がサポートされているか特定できる。
					ポートスキャンとは異なるが便利。


	(サービスとバージョンスキャン)
		「-sV」・・・ サービスとバージョンを検出する。このオプションで手に入れられる情報はexploitに大いに役立つ。


	(OSスキャン)
		「-O」・・・ Nmapはnmap-os-fingerprintsと応答結果を比較して応答結果を比較してスキャンを行う。
			   合致するものが見つかった場合に詳細情報を出力する。
		「--osscan-guessまたは--fuzzy」・・・ OSの予測検出を行う。

		
	(サービスとバージョンスキャン + OSスキャン)
		「-A」・・・ 上記通り。


	(スピードパフォーマンス)
		「-F」・・・ nmap-servicesファイルに列挙されているポートだけをスキャンする。
			   全ポート数は65535。デフォルトのTCPスキャンは1650ポート。
			  nmap-servicesファイルには1200程度がリスト化されている。
			  このファイルをカスタムすれば、もっとスピードを上げられる。
		「-p」・・・ スキャンするポートを指定する。UDPを使うなら「U:ポート番号」TCPを使うなら「T:ポート番号」
			  としてもいいし、単にポート番号だけを指定してもよい。デフォルトでは1-1024(ウェルノウンポート)にしかスキャンしないので
					1025-65535(エフェメラルポート)をスキャンする場合に利用。
		「--max-hostgroup, --min-hostgroup」・・・ Nmapは複数のホストを並行してポートやOSのスキャンを行う。
					その際NmapはターゲットのIP空間をいくつかのグループに分割してグループごとに
					並行処理を行う。このことからグループの数が少なければ少ないほど、また
					グループ1つあたりの規模が大きければ大きいほどポフォーマンスは上がる。
					しかしデメリットもある。というのはそのグループ内全てのスキャンを
					終えないと結果が得られないということ。これらの理由からNmapはデフォルトとして
					グループを徐々に大きくしていくスタイルをとるようにされている。
					これらのオプションは1つのグループのサイズの範囲を決められる。
					スキャンのスピードアップを狙うなら、--min-hostgroupの値を大きくしておくなど
					あなたの好きなように。
		「--scan-delay」・・・ プローブの送信間隔をミリ秒単位で調節する。IDSの仕組みによっては回避することができる。


	(検知回避パフォーマンス)
		「-T」・・・ プローブ送信のタイミングをよりわかりやすく決められる。
			  そこでこのオプションを用いて、ある程度のレベルだけ設定して、あとは君(Nmap)に任せるよ。
			  とすることができる。そのレベルとしては「Paranoid, Sneaky, Polite, Normal, Aggressive, Insane」
			  がある。英辞書で各々の意味を調べると「疑り深い, こそこそ, わきまえた, 正常の, 積極的な, 狂気の」
			  となっており、これらを覚えておくと使いやすい。一応「0,1,2,3,4,5」という番号でも利用できるが、
			  私は英単語を覚えるのことが好きなので単語を使ってます。それぞれの詳しい説明は
					ここを読んでください。
			  簡単な例はParanoidとSneakyは標的型向き。など
		「-f」・・・ パケットをフラグメント化(分割)する。こうすることで検知を回避する。しかし
			  その仕組み上、セグメント障害を引き起こす恐れがあるので注意。
		「-D」・・・  囮(Decoy)作戦です。
			   囮の数は1つでも複数でもいけますが、もちろん多いに越したことはないがスキャンの速度と精度が落ちる。
			   また、バージョンスキャン(-sV)とTCPconnectスキャン(-sT)と併用はできない。
					囮に使うIPアドレスは「,」で区切ります。この区切りの中にMEという文字列を
						を入れると、そこが自身IPの位置になります。参照元によるとMEを6番目以降に置くと足が
			   付きづらくなるみたいです。そして最後の注意点として、囮として使用するホストが稼働中でないと、
			   ターゲットにSYNflood攻撃をしてしまうということが挙げられる。
		「-S」・・・ IPスプーフィングを行う。-eと-P0を組み合わせると良い。
		「-e」・・・ パケットを送信する際に、どのインターフェースを使用するかNmapに伝える。
		「--source-portまたは-g」・・・ 1023番以下の特権ポートであれば、特に80番や53番であれば、
									使った内向きパケットは無条件に通そう。という状態のシステムに
					    使えるオプション。例えばWindowsXPなどは88番ポートTCPとUDPのトラフィックを全て受け入れるようになっている。
		「--spoof-mac」・・・ MACスプーフィングを行う。--send-ethを伴う必要がある。
				   0とするとNmapがランダムにMACアドレスを作ってくれる。
		「--send-eth」・・・ イーサネット層つまり、データリンク層で送信を行う。
		「--send-ip」・・・ IP層でつまり、ネットワーク層で送信を行う。UNIX系のシステムにIP層は最適。
				  WindowsOSはrawソケット通信は無効化しているのでイーサネットが必要。


	(達人を目指すなら)
		「--scanflags」・・・ TCPスキャンをカスタムするオプション。URG、ACK、PSH、RST、SYN、FINフラグを
						自分でカスタマイズします。Nmapの達人を目指す方はぜひ


	使用例

		
		#  nmap  -sP  192.168.2.*  |  grep  -v "down"
		
		#  nmap  -sO  192.168.2.100  -vv
		
		#  nmap  -sS  -sV  -p  22,53,80  192.168.0-100.50-100  -vv
		
		#  nmap  -sV  -O  --fuzzy  -p  0-65535  sample.com  -vv(or -Aのみ)
		
		#  nmap  -F  --min-hostgroup  200  192.168.*.*
		
		#  nmap  -sS  -O  -f  -T  Paranoid  Sample.com  &
		
		#  nmap  -sS  192.168.2.100  -D  192.168.2.101,192.168.2.102,192.168.2.103,192.168.2.104,192.168.2.105,ME  --spoof-mac  0  -F  -v
		
		#  host  sample.com  |  cut  -d  " "  -f  4  |  nmap  -iL  -  -v

		#  nmap  -p  443  --script  ssl-heartbleed  192.168.2.100  //HeartBleedスキャン

		#  nmap  -sS  -sV  -p  80  -Pn  --script  banner  192.168.2.100  -v  //バナーグラビング


トップへ