Szarny.io

There should be one-- and preferably only one --obvious way to do it.

高性能ポートスキャナ「Nmap」を使ってポートスキャン - 通信方式・オプション・実行例ほか

ポートスキャンとは

ターゲットのコンピュータ上でどのようなサービスが稼働しているのか,つまりどのポートが開放されているのかを調査する手法です.
開放されているポートだけでなく,サービスを提供しているソフトウェアのバージョンOSのフィンガプリントを取得することもあります.

一般的には,まずターゲットに対して,宛先ポート番号を一定の範囲内で増分させたパケットを送信します.
そして,それに適切な応答があればポートが開放されていると判断します.加えて,返信内容からフィンガプリント等の各種情報を取得します.

例えば,宛先ポート番号を22番に設定したパケットに対する応答があった場合には,ターゲット上でSSHサービスが稼働していると分かります.また,80番に設定したパケットに対する応答があった場合には,HTTPサービスが稼働していると分かります.

逆に,応答がなかった場合には,当該サービスが稼働していない応答する設定がされていない,若しくはファイアウォール等によってパケットが遮断されていると判断できます.

f:id:Szarny:20170911011357p:plain


Nmap

Nmapとは

nmapはGordon Lyonによって書かれた、非常によく知られたセキュリティスキャナである。名前は、ネットワーク上にどのような機器やサービスが動いているかという、ネットワークの地図を作成すること (Network Mapper) に由来する。


nmap - Wikipedia より

いわゆる,高性能ポートスキャナです.
ペネトレーションテストIntelligence Gathering(情報収集)の段階において利用されるツールです.

通信の流れ

Nmapはポートスキャンに先立って,ターゲットとなるホストの発見を行います.
そして,発見したホストに対して,ポートスキャンを仕掛けていきます.
上記のホストの発見方法や,ポートスキャンの方法は,下記のオプションにて適宜設定可能です.

フォーマット

nmap [Scan Type(s)] [Options] {target specification}

Nmapのオプション

オプション(詳細表示編)

-A OSのフィンガプリント等の詳細情報を表示
-O OS名を表示
-sV ソフトウェア・サービスのバージョンを詳細表示
-v ホストスキャン情報を詳細表示
--packet-trace 通信の内容をダンプ

オプション(ホスト発見編)

-P0 ホスト発見を省略
-sP Pingを利用してホストを一覧表示
-PS TCP SYNを利用
-PA TCP ACKを利用
-PU UDPを利用
-PE Pingを利用

オプション(スキャン方法編)

-sS TCP SYNスキャン
-sT TCP Connectスキャン
-sN TCP Null(フラグなし)スキャン
-sF TCP FINスキャン
-sU UDPスキャン
-sX Xmaxスキャン(FIN+PSH+URG)

オプション(ポート指定編)

-p [X] 宛先ポート番号を X に設定
-p [X-Y] 宛先ポート番号を X ~ Y に範囲指定
-F 特定のポートに絞ってファストスキャン
-r ポート指定の順番をランダム化

オプション(スプーフィング編)

-S [IPaddr] IPアドレスを偽装
-e [iface] ネットワークインターフェースを指定
-g [port] 送信元ポート番号を指定
--data-length [num] num分のランダムなデータを付加
--spoof-mac [MACaddr] MACアドレスを偽装

オプション(ファイル出力編)

-oN [filename] Nmap標準形式で出力
-oX [filename] XML形式で出力
-oG [filename] Grepable(grepコマンドで抽出可能)形式で出力
-oA [filename] 上記3つ全部(オススメ)
-oS [filename] スクリプトキディ形式で出力

よく用いる実行例

外部に対して行うとマズいので,以下ではターゲットを自身(127.0.0.1)に設定して行います.

普通にポートスキャン

# nmap 127.0.0.1

ホスト発見を省略してスキャン

# nmap -P0 127.0.0.1

詳細表示設定でポートスキャン

# nmap -A -v -sV 127.0.0.1

宛先ポートを指定してスキャン

# nmap -p 8080 localhost

宛先ポートを絞って高速スキャン

# nmap -F 127.0.0.1

ウェルノウンポートのみスキャン

# nmap -p 0-1023 127.0.0.1

全てTCP SYNを用いてスキャン

# nmap -PS -sS 127.0.0.1

全出力形式を指定して詳細スキャン(特にオススメ)

output.nmap, output.gnmap, output.xmlが生成されます.

# nmap -A -v -sV -oA output 127.0.0.1

CIDRでIPアドレスを範囲指定してスキャン(例)

# nmap 127.0.0.0/24

スキャン結果の意味(STATE)

open 到達可能で,ポートが開放されていて,サービスが稼働している
closed 到達可能だが,ポートが閉じており,サービスは稼働していない
filtered FW等によりパケットフィルタリングが実施されている
unfiltered 到達可能だが,ポートの状態は不明である
open│filtered open状態か,filtered状態である
closed│filtered closed状態か,filtered状態である

スキャン結果の例

以下の例では,ホスト127.0.0.1において,ポート111,3306,5432,8080にてSERVICE欄で示されたサービスが検出され,それらはSTATE欄からopen状態であると分かります.

# nmap 127.0.0.1

Starting Nmap 7.12 ( https://nmap.org ) at 2017-09-11 02:17 JST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0000020s latency).
Not shown: 996 closed ports
PORT     STATE SERVICE
111/tcp  open  rpcbind
3306/tcp open  mysql
5432/tcp open  postgresql
8080/tcp open  http-proxy

Nmap done: 1 IP address (1 host up) scanned in 0.10 seconds

おわりに

以上より,ポートスキャンについて,また,ポートスキャナであるNmapについてまとめました.
自身のサービスに対して,もしくは,自組織のネットワークに対して行う分には問題ありませんが,外部のサーバ等に対して無許可で本手法を実施した場合,法律に抵触するおそれがありますので注意してください.