Nmapの

強力なツールを学ぶ第一歩
Nmap の
基本講座
まずはソフトウェアのインストールや基本的な機能に
ついて紹介。さらにNmapのスキャン結果は何を意味す
るのかというネットワークの基本についても解説する。
文●極東パッチマネージャー
Nmap/Zenmap の環境を構築しよう
プロも愛用しているツール
ド。Zenmap については、後述する。
○ nping
Nmapとは、
世界でも最もよく使われているネッ
hping2 のような(でももっと簡易な)パケッ
トワークスキャナーの1つであり、多くのオプショ
ト生成ツール。
ンを備えている。また連携を行える周辺ツールも
多い。
○ ncat
例えば脆弱性調査ツールの Metasploit との連
ネットワークの万能ツール、Netcat の Nmap
携を行い、Nmap の実行結果を Metasploit 側で
版。
管理するデータベースに保存するなどといったこ
とも可能だ(とはいえ、Windows 版 Metasploit
をインストールすると、Metasploit で使うNmap
もいっしょにインストールされるため、個別に最
新版をインストールする必要性に乏しいが)。本
○ ndiff
Nmap の結果を比較するためのツール。
Nmap をインストールしよう
記事執筆時(2012 年 9月)の最新版は 6.01となっ
ている※。
Nmap を構成するツール群
Nmap を利用できる環境は、Windows、Linux
を含めいろいろあるが、本稿では Windows 版を
もとに説明する。
なお、nmap.exe に含まれる nping がウイルス
Nmap をインストールすると、nmap.exe 以外
判定されるという情報もあるため、少し危険では
にも実行可能なツールがインストールされる。以
あるが、筆者はアンチウイルスソフトウェアを含
下に Nmap を導入した際に、一緒にインストール
まない環境でのインストールを実施した。読者の
されるツールを紹介しよう。
みなさんは、アンチウイルスの設定で nping をス
キャン対象から除外したり、機能を一時的に停止
○ Nmap
するなどして、各時環境を整えて行ってほしい。
ご存知 Nmap の本体。
Nmap インストーラーの入手
○ Zenmap
Nmap を動作させるための GUIフロントエン
16
※ 2013 年 5 月時点の最新版は 6.25
本稿では執筆当時のバージョンである 6.01を
ベースに解 説を行う(付 録 DVD-ROM に収 録)。
Nmap をインストールしよう
❶
Nmap のダウンロードページ(http://nmap.org/
download.htm) にアクセスし、 ページ 真 ん 中
の「Microsoft Windows binaries」の項目にある
「nmap-6.01-setup.exe」 をクリック( 付 録 DVD
にも収録している)
❸
WinPcap のインストールをしていない、もしくは
古いバージョンの人は一緒に WinPcap も導入する
❷
ダウンロードをしたファイルを実行し、インストー
ラーの指示に従っていく。途中コンポーネントの
選択画面が出てくるが、すべて選択(デフォルト
のまま)する
❹
インストーラーを利用すれば、問題なく導入でき
るだろう
最新版のインストーラーは公式サイトから入手
環境によって準備が異なる
可能だ。ダウンロードページの真ん中あたりに
インストールに際し、Windows 7 などの新しい
"Microsoft Windows binaries"とあるので、そこ
OS の場合は特に問題にはない。しかし、古い OS
から"Latest release self-installer:"という文言を
を使う場合には少々問題がある。
探せばよい。
具体的には、古すぎる環境に Nmap 6.01をイ
ンストールしようとすると、Nmap 6.01のインス
必要なものはすべて揃う
トーラーに含まれる Microsoft Visual C++ 2010
Nmap のインストーラーには、Nmap 本体以外
再頒布可能パッケージのインストールに失敗して
にも、VC++ランタイムや WinPcap など、必要な
しまう。一見インストールが完了しているように
ものがすべて含まれる。
見えても、DLL がない旨のエラーが出力され、正
このため、すでに WinPcap などをインストール
常に動作しない。
されているような環境では、少々手こずるかもし
今回、Windows XP SP2日本語版のインストー
れない。可能であれば、まっさらな検証環境を準
ル直後の環境に Nmap 6.01をインストールしよう
備の上で Nmap の動作検証などを行うことをお勧
として失敗してしまった。Windows Installer が古
めする。
すぎるためにこの事象が発生している。解決方法
は、Windows Installer 3.1をインストールしてか
17
らNmap 6.01をインストールすること
だ。
なお、Windows Installer 3.1は、公
式サイトからダウンロードしよう。
「Windows Installer 3.1 Redistributable (v2)」
(http://www.microsoft.com/ja-jp/download/
details.aspx?id=25)ここから Windows Installer
3.1 をダウンロードしよう
Zenmap を使いこなそう
Zenmap 概要
あえずポートスキャンをやってみたい!」場合にも
有用なツールといえる。
Nmap を イ ンスト ー ル す る と、 特 に 指 定し
Zenmap のスキャンモード
な い か ぎり、Zenmap も インストール さ れ る。
Zenmap が Nmap の GUIフロントエンドというの
は、すでに述べたとおりだが、それだけでなく、簡
以下に、Zenmap が 保 持している Nmap のス
易な分析ツールとしての側面も持っている。また、
キャンパラメーターを 挙 げる。もちろんこれ 以
事前に定義された Nmap のスキャンパラメーター
外に、自身で定義したスキャンパラメーターを
を保持しているため、
「よくわからないけど、取り
Zenmap に追加することも可能である。
名 称
18
スキャンパラメーター
解 説
Intense Scan
nmap -T4 -A -v
ス キ ャン タイミン グ を 早 め に
(-T4)、OS 検出、バージョン検出、
スクリプトスキャン、traceroute
を有効にして( -A)、詳細な情報
の表示をさせる(-v)
Intense scan plus UDP
nmap -sS -sU -T4 -A -v
Intense scanに加え、SYNスキャン
(-sS)とUDPスキャン(-sU)を行う
Intense scan, all TCP
ports
nmap -p 1-65535 -T4 -A
-v
Intense scan を実施するが、1 〜
65535 のすべての TCP ポート( -p
1-65535)に対するスキャンを行う
Intense scan, no ping
nmap -T4 -A -v -Pn
ping 抜き( -Pn)の Intense scan
を行う
名 称
スキャンパラメーター
解 説
Ping scan
nmap -sn
ping スキャン
(ICMP によるスキャ
ン)を行う( -sn)。ポートスキャン
は実施しない
Quick scan
nmap -T4 -F
通常よりも対象ポートを減らして
高速スキャンを行う(-F)
Quick scan plus
nmap -sV -T4 -O -F
--version-light
高 速 スキャンを行うが、その際
にOS の検出を行い( -O)、オープ
ンされてるポートについて、サー
ビスのバージョンもちょっと見る
(-sV , --version-light)
Quick traceroute
nmap -sn --traceroute
traceroute 込 み( --traceroute)
で ping スキャン(-sn)を行う(通
常の pingスキャンは、traceroute
は行わない)
Regular scan
nmap
(オプションなし)
通常の Nmap スキャン。 普 通 に
Nmap をターゲットに対して実行
する
nmap -sS -sU -T4 -A
-v -PE -PP -PS80,443
-PA3389 -PU40125 -PY
-g 53 --script "default or
(discovery and safe)"
低速だが広範囲のスキャンを実
施する。具体的には、以下の内
容を指定する
Slow comprehensive
scan
SYN スキャン(-sS)および UDPスキャン(-sU)を行う
スキャンタイミングを早めにする(-T4)
OS 検出、バージョン検出、スクリプトスキャン、traceroute を有効にする(-A)
詳細な情報の表示を向上させる(-v)
ICMP Echo request を用いた検出を行う(-PE)
ICMP timestamp request を用いた検出を行う(-PP)
SYN スキャンのポートを指定する(-PS80、443)
ACK スキャンのポートを指定する(-PA3389)
UDPスキャンのポートを指定する(-PU40125)
SCTPスキャンを行う(-PY)
ソースポートの指定を行う(-g 53)
default カテゴリーもしくは、discovery カテゴリーと safe カテゴリーに属す
るスクリプトを実行する(--script default or (discovery and safe))
19
Zenmap のユーザーインターフェイスを解説
Zenmap を起 動すると、以下のような画面が
歴が残り、" ▼ " をクリックすると履歴を呼び出
現れる。ここでは各部分について説明する。特
せる。どのようなスキャンを実施するかを決める
徴は Nmap のコマンドオプションを知らなくても
のが "Profile" である。また、選ぶ Profile によっ
Profile からスキャンタイプを選ぶだけで簡単にス
て、"Command" の内容が変わるが、ここが Nmap
キャンできる点にある。
のコマンドラインになる。また、Command には
過去にスキャンを実 施したターゲットは、履
Target の内容も反映される。
スキャン結果の保存や呼び出し、そして新たなスキャン
を別のウインドウで行う場合などもここを使う。余談だ
が、"Target" への入力を受け付けない時によく使うのが、
"Scan" → "New Window" の順のコマンド実行である
結果から文字列を探
したり、ホストのフィ
ルタリングを行ったり
する
Nmap 動 作 時 の
情報を確認できる
(図 1 参照)
スキャンを行ったり、保存されて
いるスキャン結果を読み込んだ
際に、
「Hosts」ボタンを押せば「ど
のような Host が見つかったか?」
、
「Services」ボタンを押 せば「ど
のようなサービス(プロトコル)
が見つかったか?」というデータ
が判明する
発見されたホストや
ポートを確認できる
スキャンの方法を新規に追加したり、
既存のスキャン方法の内容を変更
したりする
このボタンを押せば
スキャンがスタートする
Nmap の 動 作 状
況を表示する
OS スキャンの結果や開いてるポート数を
はじめとして、各ホストの詳細情報を表
示する(図 2 参照)
発見されたホストについて、ネット
ワーク構成を見せることが可能な
場合にそれを図示する(図 3 参照)
Profile 選択画面 ▼からどのような
タイプのスキャンを行うか設定する
ターゲットとなる
ホストを入力する
Hosts の結果画面
20
Services の結果画面
図 1 Zenmap を使ったポースキャン結果。
「ports/
Hosts」タブを選ぶと、ターゲットサーバーで動い
ているサービスが一発でチェックできる
図 2 検索結果を「Host Details」のページで見ると、ホストの
状態や開いているポート、最後の起動時間や OS の種類など
がわかる
図 3 ネットワークの全体像を手軽に
表示してくれる地図機能
Command はユーザーが変更可能なので、Target
とProfile によって、おおまかにコマンド実行時の
オプションを決めた上で、さらに詳細にオプション
を付加することも可能である。
Zenmap の分析機能
行う際にも、もちろん重要なものだ。
注意!
仮想マシンのスキャンは鬼門
Windowsマシンにインストールした Nmap から、
当該 Windowsマシン上で稼働する仮想マシン環
境へのスキャンは行えない。実施しようとすると、
スキャンの方法にもよるが、Zenmap はスキャ
"dnet: Failed to open device 〜 "というメッセー
ンの結果取得された情報をわかりやすく表示し
ジが出力される。インターフェイスをどのように指
(図 1、2)
、探索したアドレスに関わる情報を記録
定しようとも、ソースアドレスをどのように指定し
し、論理トポロジーを作成してマップするという
ようとも、同様のメッセージが出てきてスキャン
機能を持っている(図 3)。
が行えないという状態だ。
ネットワークの論理構成図を作成しなければな
詳しく原因解明は行っていないが、Nmap が
らないが、手がかりがまるでない/物理的な設置
raw packet を操作することと無関係ではないと
場所に入れない/ログインや管理情報を保持して
推測できる。筆者は Nmap のインストールと検証
いない… などという場合は大変有用な機能とい
は、VMware Workstation 上の Windows XPと実
える。これらの情報は、ペネトレーションテストを
マシン上の Windows 7 環境で実施している。
21
Nmap 理論編〜「なぜ」の概要を知っておこう
プロトコルを知ろう
目的とするアドレスに到達するまでに TTL が 0
にならなければよいのだが、たまにループしてい
概要で 述べたとおり、Nmap はさまざまなス
るなどの原因で、目的とするアドレスにたどりつ
キャンモードを持っており、ネットワークトポロ
けない現象が発生することがある。このような場
ジーを描き出すことができる。
合に TTL がないと、ループ内を IPパケットが永遠
しかしそれらは別 に不思 議 で もなんで もな
にさまよい続ける(=無限ループする)ことになる。
く、日常的に使っているTCP/IP の基本的なプロト
しかし、TTL があるおかげで無限ループせず、TTL
コル仕様や実装に則った動作や結果をきちんと
が 0 になったら送信元にその旨を通知することが
解釈しているにすぎない。極論を言ってしまえば、
可能になる。
Nmap がなくてもNmap が持っている機能をユー
TTL が 0 に なっても 到 達 で きな い 場 合 には、
ザープログラムで実現することは可能である。
ルーターは "Time-to-live exceeded" を意味する
しかし、それらを理解してスキャンツールを作っ
ICMPメッセージを送信元に送る。
たりスキャンを手動で実施するのは、正直バカら
Zenmap はこの仕組を利用して、TTLを小さく
しいというか労力の無駄だ。使えるものがあるな
設定したTCPパケットを複数送信し、戻ってくる
らば使うにこしたことはない。しかし、単に「使う」
ICMPパケットの中身(到達できなかったパケッ
だけで「なぜそうなるのか」ということを理解して
トが送り返されてくる)を見て、送ったパケットの
おかないと、なかなか「使いこなす」というところ
TTL と対応付け、トポロジーを作成していく。
まで到達することができない。
よりNmap を使いこなすために、ここでは「ス
Ping スキャン
キャンとプロトコル仕様/実装」にフォーカスをあ
てて、何を使うとこういう結果が出てくるのか?
Ping スキャンは、普通に Windows や Linux な
ということを説明していく。
どで使われる pingコマンドと同じ仕組みで相手
本稿ですべてを説明してるわけではないが、プ
の稼働を判断している。お手軽な手段である反面、
ロトコルとツールの間をつなぐ「何か」を感じ取っ
詳細な情報を得るのには向いていない。
ていただければ幸いだ。
なぜトポロジーがわかるのか〜
TTL とICMP の関係
SYN スキャン
SYN スキャンは、TCPポートがサービスを提供し
Nmap が動作するコンピューターは、ターゲット
ている/サービスを提供していないが開いている
までの間に何がどれだけあるのか? という情報
/何らかの手段で閉じられているというステータ
を全く知らない。しかし、気がついたらおおよそ
スを判断するのに有用だ。
のトポロジーは明らかになっている。
これは、TCP の3-wayハンドシェイクを理解し
これは、IP ヘッダーに含まれる「 TTL( Time to
ていれば一発でわかるのだが、SYN を送った後
Live)
」フィールドの値と密接に関係している。
に「何らかのサービスが接 続待ちをしていれば
TTL とは、IPパケット生成時に、IP ヘッダー内で
ACK+SYN が戻ってくる」という仕様を利用して、
指定される「経由可能なルーターの数」と考えて
TCPポートが Openしているということを認知する
もらえればよいだろう。パケットがルーターを通
過するごとに、IP ヘッダー内のTTL の数は1ずつ減
らされていく。
22
・サービスを提供している=ポートは接続待ち
状態。
・接続待ち状態のポートに対して SYN パケッ
トが送出される。
場合、挙動はサービス依存になるが、何らかの反
応が戻ってくることを期待できる。とはいえ、UDP
→送出元は、SYN を送った後に、ACK+SYN
を待ち受ける。
で外部にサービス提供されるものといえば、よく
知られているものとしては DNS による名前解決
送出先は、送出元に対してACK( SYN に対
サービスがメイン。そのため、それ以外のサービス
応した応答)+SYN(送出元に対するもの)パ
を提供しているものがどれだけあるかは少し疑問
ケットを送出し、その後に、SYN
(送出元に対
だ。
するもの)に対応した ACK パケットを待つ。
最近だとmosh のような UDP ベースのリモート
・送出元は ACK+SYN を受け取った後に、ACK
シェルサービスもあるため、少しおもしろいかも
を送出先に対して送信する。
しれないが…
送出先は、送出元から送信された ACK を受
け取り、接続が確立される。
ACK スキャン
OS スキャン/
バージョンスキャン
これは、OS や OS のバージョンによって、TCP/
IPスタックの挙動が異なることに着目していえる。
ACK スキャンは少し特殊だが、ステートフルイン
仕様ではなく実装にきわめて強く依存したスキャ
スペクションを行っていない(単に SYN パケットを
ンだと考えてほしい。
通さないような設定の)ルーターやファイアウォー
例えば、かなり古い調査記録ではあるが、TCP
ルなどで保護されたホストのサービス状態を知る
パケットに設定したフラグの組み合わせにより得
ために有効である。
られるレスポンスをまとめた表が、
「 penetration
というのも、TCP 接続を行った後は、基本的に
technique research site」というサイトで公開さ
は ACK パケットのみによるデータのやりとりが行
れている。
われるからであり、前述のような感じで保護され
たホストであっても、ACK パケッ
トは受けられる、ということにな
る。
TCP の状態遷移上、いきなり
サービスポートに対してACK パ
ケットが飛んでくることは想定し
ていない。このような場合の挙
動は TCPスタックの実装依存に
なるが、実装によっては ACK ス
キャンが有効なこともある。
UDP スキャン
UDPスキャンは、UDP 経由で
提供されているサービス状態を
知るために行うスキャンだ。
サービス提供されているポー
トに対してパケットを送出した
・penetration technique research site(Eiji James Yoshida 氏による)
http://www.geocities.co.jp/siliconvalley/1667/index.htm
23