更なる機能向上を果たした最新版Nmap

 ポートスキャニングツールとして広範に使用されているNmapは、昨年12月におけるバージョン4.50のリリースをもって、その誕生から10周年を迎えた。今回の4.50リリースでは、Nmap用の最新版クロスプラットフォーム対応型GUIフロントエンドであるZenmapを始め、コマンド作成ウィザードやスクリプティングエンジンなど各種の機能改善が施されている。この中でも特筆すべきはZenmapであり、同フロントエンドの採用によりNmapの操作性は格段に向上してくれたのである。

 ポートスキャナとは、LANやインターネット上に存在するホストの検出およびそこで使用されているポートを確認するためのセキュリティ監査ツールの一種である。この種のツールの存在については、インターネット上のサイトを攻撃する不心得者がセキュリティホールの探索に利用しているという批判があるものの、その正しい用途はまったく逆で、ネットワークセキュリティのプロフェッショナルおよび個人レベルでのユーザがコンピュータやネットワークのセキュリティ態勢を自力で確認できるようにすることを本来の目的としている。その他にも専門家以外のユーザが、ネットワーキングの仕組みやネットワークセキュリティに関する知識を深めるためのツールとしても役立つはずだ。

 今回のレビューを行うにあたっては、本稿執筆時点でUbuntu 7.10リポジトリに収録されているNmapが最新の4.53ではなく4.20-2リリースであったので、Nmapのソースコードをダウンロードしたものをコンパイルしてからインストールすることにした。こうしたソースコードからのビルド時にはコンパイル処理や依存性関係の問題に遭遇するかもしれないが、その場合はNmapプロジェクトが用意している詳細な解説が参考になるだろう。いずれにせよ通常のビルド手順に従えば、コマンドライン形式の実行ファイルであるnmapと、その新型GUIフロントエンドであるZenmapが作成されるはずである。

ポートスキャニングについての基礎知識
 基本的にポートスキャニングとは“ポートXはホストYにより開かれているか?”という疑問に答えるための処理である。ここで言う“ポートが開いている”とは、当該ポートに送信されてくるトラフィックを何らかのアプリケーションがリスニング(受信)している状態を示す用語であり、通常はこのポートに関連付けられた特定サービスがアクティブにされていることを意味する。例えばスキャンの検索対象がHTTPサーバであれば、ポート80をスキャンするのが常套手段である。もっともポート80はWebサーバ専用で固定されている訳ではなく、HTTP以外のアプリケーションがポート80を使用することもあり得るため、ポートスキャニングの結果だけで具体的な使用サービスまでを見極めることはできない。

 ポートスキャニングは、システムへの不正侵入を目論むクラッカー連中が、サービスやアプリケーションのセキュリティホールを探す目的で使う場合もある。例えばMicrosoft SQL Serverの使用するTCP/UDPポート1433が、中国に置かれたサイト群から絶え間なくスキャンされ続けているのは、その好例と言えるだろう。これと対照的にネットワーク管理者やセキュリティ担当者がポートスキャニングを使用する場合は、各自のネットワークで許可されるホストとサービス以外が使用されていないかの確認を目的としているケースが多い。

 通常ポートスキャニングは、ホストを検出してから実際のポート探査を行うという2段階のステップで実行される。このうちホスト検出は、未使用分のIPアドレスをスキャン対象から除外して処理効率を高めるという意味を有している。つまり特定アドレスでのスキャン対象となるポート数は数千単位に上ることも珍しくはないため、反応のあったアドレスのみにスキャニング対象を絞り込むことで多量の不要トラフィックの発生を回避させるのである。実際のホスト検出法としては、ごく単純にpingを打つという簡易的な方法が一般に使われている。

 基本的なポートスキャンで行われる処理の後半部は、対象ホストにおいて探査対象となる各ポートへの接続確立である。ホスト間のTCP接続が確立されるには、3ウェイハンドシェイクというプロセスを経なくてはならない。こうしたハンドシェイクは、まず接続する側のホストがSYNパケットを送信し、このSYNを受信した相手側ホストがその応答としてSYN/ACKを送り返し、接続する側のホストが最後にACKパケットを送るという流れで進行する。この3段階の処理が正常に終了した時点で、両ホスト間の接続が確立されたことになる。確立後の接続を解除するには、一方のノードがFINあるいはRSTパケット(それぞれFINishおよびReSeTの略)を相手に送信する必要があるが、あるいは単純にタイムアウトした段階でも接続は解除される。

 この種の処理の中でも接続スキャンは、多数のネットワーク処理を必要とする分だけ効率が悪くなっている。また処理の方式自身が目立つ部類に属すため、スキャンが行われていることが第三者に察知されやすい。TCP接続を必要としないタイプのスキャンとしては、SYN、FIN、XMASなどが存在し、これらの方が処理としても目立ちにくい上に、少ないトラフィック量でターゲットに関する同等の情報を取得できる。ただしこれらのスキャンを実行するには、スキャニングするマシンでのroot権限が必要となる。

Zenmap:新規に装備されたフロントエンド

nmap1_thumb.png
図1

 現行のNmapリリースでは、新規に構築されたZenmapというGUI形式のフロントエンドが装備されている。そのベースとなっているのは、2005年および2006年に開催されたNmap Summers of CodeにてAdriano Monteiro Marques氏の作成したUmitである。このフロントエンドからでも高度なスキャンニングテクニックを実行できるようになっているが、root権限を取得していないとその大部分は使用できない。図1は起動直後のZenmap画面であり、ターゲットを指定してScanボタンをクリックするだけで、Intense Scanプロファイルに基づいたデフォルトスキャンが実行できる状態になっている。

 当然ながらこうしたスキャンは、デフォルト以外の設定で実行させることも可能である。その他のスキャンプロファイルを使用するには、Profileドロップダウンの右端にある矢印をクリックして呼び出せばいい。あるいはTargetおよびProfileコントロールの下部にあるCommandフィールドにて、nmapに実行させるスキャン用引数をテキスト形式で直接入力することもできる。

 基本的なスキャンを実行させてその結果を確認するだけであれば、ターゲットを指定した上でScanボタンを押せばいい。こうしたデフォルト設定下のNmapによるポートスキャニングは、ホストの検出およびその後のポート探査という2段階のステップで進行する。ターゲットの指定方式は単一のIPアドレスやホスト名だけでなく、CIDR表記やオクテット表記によるIPアドレスの範囲指定も使用可能で、スキャン対象に含めるまたは除外するIPアドレスの範囲や複数のサブネットを指定することができる。

nmap2_thumb.png
図2

 今現在自分が使用中のシステムをスキャンするという場合は、ターゲットとして127.0.0.1あるいはlocalhostを指定すればいい。その際にターゲット指定用のテキストを入力していくと、自動的にこの指定がコマンドテキストの対応部に反映されていく様子に気づくだろう。このCommandテキストボックスに表示される文字列は、その後ユーザがScanボタンをクリックした段階でNmapに送信されることになる。

 図2は実際に私が手元のデスクトップマシンを用いて、デフォルト設定下のIntense Scanを実行させた結果の画面である。右側ペインにある、Hosts/Services、Host Details、Scan Detailsタブを選択すると、その他の各種情報を確認することができる。これらの結果はメニューバーにあるSave Scanのクリックによって保存させておくことも可能であり、保存データを後日吟味するには、Open Scanダイアログから呼び出せばいい。

 Zenmapの真の実力を体感するには、メニューバーにあるCommand Wizardをクリックする必要がある。このCommand Wizardの機能設計は、これからNmapを初めて扱う初心者だけでなくベテランユーザまでをカバーした構成になっている。例えばこのウィザード画面では、上級レベルのスキャンコマンド作成を始め、Profileメニューに登録するプロファイルの作成と保存、あるいは既存プロファイルに対する編集も行えるのである。

 ここでは具体的な操作例として、256個のホストをランダムに探査してMicrosoft SQL Serverが実行されていないかを検証するというプロファイルを作成してみよう。この作業ではCommand WizardダイアログのProfile Editorに用意されている上級機能を使用するため、NoviceではなくExpertを選択しておく必要がある。

 実際の設定操作であるが、まずはウィザードページの次画面に進み、プロファイル名としてMS-SQL Scanを、説明用テキストとして“Random check for MS-SQL”と入力しておく。ただしこの段階でOKをクリックしてはいけない。この場合OKのクリックはプロファイル設定の終了を意味するが、現状ではプロファイルの名前しか設定していないからだ。ここでの設定としてはまずPingタブに切り替えて“Don’t ping before scanning”をオンにし、次にTargetタブに移動して“Scan random hosts”をオンにしてからその横にある設定ボックスに256という値を入力しておく。引き続きこのタブにある“Ports to Scan”をオンにするが、こちらの設定ボックス値は1434にしておく。以上の設定が終わったらOKをクリックすればいい。これによりProfile Editorが終了してZenmapの画面に戻るはずだ。

 こうして登録されたプロファイルを実行するには、ターゲット指定用テキストボックスが空であることを確認した上で、ProfileメニューからMS-SQLを選択する。この操作によって実行されるコマンドは下記の様に指定されているはずである。

nmap -p1434 -iR 256 -PN -sS target

 本稿で作成したサンプルコマンドでのスキャン実行に関する手順は以上で終了だが、余裕があるならばProfile Editorの各種設定タブ(Scan、Ping、Target、Source、Other、Advanced)に目を通すことでZenmap Command Wizardで実行可能な機能をより詳しく把握しておけるだろう。なおNmapプロジェクトはZenmapの操作マニュアルを含めた優れたオンラインドキュメントを各種整備している。

Nmapのコマンドラインからの実行

 Nmapの操作については、こうしたGUIではなく伝統的なコマンドライン形式で扱う方が好ましいとするユーザも多数存在することだろうし、実際に現行のNmapも従来どおりのCLI操作が可能となっている。その場その場の状況に合わせて臨機応変的なNmapスキャンをするには、GUI形式のウィザード画面を介するよりも、CLI方式でキーボードから直接コマンドを入力する方が簡単に済む場合が多いからだ。また、Nmapでスクリプト制御式スキャニングを実行するNmap Scripting Engine(NSE)という機能を使いこなすのであれば、いずれにせよCLI方式での操作は必須となる。

 Zenmapと同様、NSEの操作法についても「Nmap Reference Guide」での簡易説明だけでなくその専用マニュアルが用意されている。なおNmapにはLUAスクリプト言語で記述された組み込み型スクリプトが用意されているが、これを理解しておくと各種用途での広範な応用が可能となる。

 具体的な例を用いてCLI操作によるスクリプトの使用法を確認しておこう。ここでは複数のOSが使われている小規模ネットワークを運営している者が、プロプライエタリ系オペレーティングシステムを介したマルウェア感染の危険性を懸念しているため、Nmapで検出可能な全マルウェアに対する定期スキャンを実行するという状況を想定する。実はこうした処理も、スクリプティングエンジンを利用することで、ごく簡単に実行できてしまうのだ。

 個々のNSEスクリプトには、その使用目的に応じて、safe、intrusive、malware、version、discovery、vulnerabilityというカテゴリ付けがされている(複数指定可)。そして例えばNmapコマンドにて-sCというオプションを指定すると、safeおよびintrusiveのいずれかに属するすべてのスクリプトが一括で実行される。

 デフォルト設定で実行されるスキャン処理はここでの操作目的に適していないが、そうした場合はどのカテゴリのスクリプトを実行させるかをNmapに対し明示的に指定しなくてはならない。スキャン対象のLANが192.168.1.1のルータで接続されているとすれば、Nmapに用意されているマルウェア関連のスクリプト群を一括実行させるNmapコマンドは次のようになる。

nmap --script=malware 192.168.1.1/24

 なお独自のNSEスクリプトを構築した、あるいは既存スクリプトを変更したという際には、下記のコマンドを実行してNmapスクリプトの管理用データベースにアップデートを施しておく必要がある。

nmap --script-updatedb

まとめ

 GUIで扱うにせよコマンドラインで操作するにせよ、Nmapには本稿で解説した以上の豊富な機能が実装されている。これから初めてNmapを使用するというユーザであれば、まず最初に付属ドキュメント類に目を通しておくことでより効率的な学習を進められるはずだ。

 その誕生から10周年を迎えたNmapは、現状で最も広範に使用されているネットワークセキュリティツールと言っても過言ではないだろう。何がそうした主張の裏付けとなっているかは、Nmapの充実した機能、優れた操作性、分かりやすくまとめられたドキュメント類を実際に目にすることで理解して頂けると信じる次第である。セキュリティのプロフェッショナルだけでなく、ごく一般的なデスクトップユーザであってもこのツールから得られるものは多いはずであり、仮に私が使用するアプリケーション群の中から“必須ツール”の一覧をリストアップするといった場合、Nmapは最上位にランクインすることになるだろう。これまでNmapに縁のなかったユーザであっても是非とも一度試してみることをお勧めしたい。

Linux.com 原文