ネットワークスキャンツールとして世界中で広く利用されているNmap (Network Mapper)。その強力な機能は多くのセキュリティ専門家やネットワーク管理者に支持されています。しかし、Nmapの核となる実行ファイル nmap だけでは、その真価を発揮することはできません。Nmapが多彩なスキャンを実行できる背景には、nmap-common というパッケージの存在が不可欠です。 
nmap-common は、Nmapの操作に直接使うコマンドではありません。むしろ、Nmapが動作するために必要な「部品」や「データ」が詰まった、縁の下の力持ちのような存在です。このパッケージには、Nmap Scripting Engine (NSE) スクリプト、サービス検出用のプローブ、OSフィンガープリントデータベースなど、アーキテクチャに依存しない重要なファイル群が含まれています。 
 この記事では、Nmapユーザーであっても普段あまり意識することのない nmap-common パッケージに焦点を当て、その役割、含まれるファイルの内容、そしてNmap本体との連携について詳しく解説していきます。このパッケージの理解を深めることで、Nmapの動作原理やカスタマイズへの理解が一層深まるでしょう。 
nmap-common は直接実行するツールではなく、Nmap (nmap コマンド) が機能するために必要なデータファイルやスクリプトを提供する依存パッケージです。 nmap-common の役割
nmap-common パッケージの主な役割は、Nmapの実行ファイル (nmap) が様々なプラットフォームやアーキテクチャ(例:x86_64, ARM)で共通して利用できるデータファイルやスクリプトを提供することです。これにより、Nmap本体のパッケージサイズを抑えつつ、機能ごとに必要なデータを分離・管理することが可能になります。 
パッケージの重要性
 もし nmap-common がなければ、Nmapは以下のような主要な機能の多くを実行できなくなります。 
- スクリプトスキャン (NSE): 脆弱性診断、詳細な情報収集、サービスの発見など、多岐にわたるタスクを実行するNSEスクリプトが利用できなくなります (
-sCや--scriptオプション)。 - サービス・バージョン検出: 開いているポートで稼働しているサービスの正確な名前やバージョンを特定できなくなります (
-sVオプション)。 - OS検出: ターゲットホストのオペレーティングシステムを推測できなくなります (
-Oオプション)。 
 このように、nmap-common はNmapの多機能性を支える上で極めて重要なコンポーネントと言えます。通常、Linuxディストリビューション(Kali Linux、Ubuntu、Debianなど)で nmap パッケージをインストールすると、依存関係により nmap-common も自動的にインストールされます。 
nmap-common に含まれる主要なファイル
nmap-common パッケージには、Nmapの機能を拡張するための様々なファイルが含まれています。ここでは、その中でも特に重要なファイル群について解説します。これらのファイルの多くは、標準的なLinuxシステムでは /usr/share/nmap/ ディレクトリ以下に配置されます。 
Nmap Scripting Engine (NSE) スクリプト (*.nse) 
 NSEはNmapの最も強力な機能の一つであり、Lua言語で書かれたスクリプトを用いて様々なネットワークタスクを自動化します。これらのスクリプトは nmap-common パッケージに含まれ、通常 /usr/share/nmap/scripts/ ディレクトリに格納されています。 
NSEスクリプトは以下のようなカテゴリに分類され、多様な目的に利用されます。
- auth: 認証情報の迂回や取得を試みるスクリプト。
 - broadcast: ブロードキャストに応答するホストやサービスを発見するスクリプト。
 - brute: サービスへのブルートフォース攻撃(パスワード推測)を行うスクリプト。
 - default: 
-sCオプションや-Aオプションでデフォルトで実行される、安全かつ有用なスクリプト群。 - discovery: ネットワーク上のホストやサービスに関する詳細情報を発見するスクリプト。
 - dos: サービス妨害(Denial of Service)を引き起こす可能性のあるスクリプト(注意して使用する必要があります)。
 - exploit: 既知の脆弱性を利用しようと試みるスクリプト。
 - external: 外部のデータベースやリソースを利用して情報を収集するスクリプト。
 - fuzzer: 予期せぬ入力を送信してサービスの脆弱性を探るファジングスクリプト。
 - intrusive: ターゲットシステムに負荷をかけたり、望ましくない影響を与えたりする可能性のあるスクリプト(
defaultやsafeには含まれません)。 - malware: ターゲットシステムがマルウェアに感染しているかどうかを検出するスクリプト。
 - safe: ターゲットシステムに大きな影響を与えずに情報収集を行う、比較的安全なスクリプト。
 - version: 
-sVオプションによるバージョン検出を補助・拡張するスクリプト。 - vuln: 特定の脆弱性を検出するためのスクリプト。
 
 Nmapコマンドで -sC や --script <script-name or category> のようにオプションを指定すると、Nmapは nmap-common が提供するこれらのスクリプトファイルを実行します。 
サービス/バージョン検出データ (nmap-service-probes, nmap-services) 
 Nmapが -sV オプションでサービスとそのバージョンを特定するためには、膨大なシグネチャデータベースが必要です。 
nmap-service-probes: このファイルには、様々なサービスに対して送信する「プローブ」(探りを入れるためのデータパケット)と、その応答を解析してサービスやバージョンを特定するための正規表現パターンが定義されています。Nmapはオープンポートに対してこれらのプローブを送信し、返ってきた応答をこのファイルのパターンと照合します。nmap-services: このファイルは、ポート番号と一般的なサービス名の対応リストです。TCP/UDPのポート番号、サービス名、そしてそのポートが開いている確率(Nmapがスキャン順序を決める際に参考にする)が含まれています。基本的なポートスキャン(-sVなし)で表示されるサービス名はこのファイルに基づいています。
 これらのファイルは通常 /usr/share/nmap/ に配置され、-sV オプションが指定された際にNmapによって参照されます。 
OS検出データ (nmap-os-db) 
 Nmapの -O オプションによるOS検出機能も、nmap-common パッケージ内のデータベースに依存しています。 
nmap-os-db: このファイルには、様々なOSやデバイスが特定のTCP/IPプローブに対してどのように応答するかの「フィンガープリント」(特徴的な応答パターン)が大量に集積されています。Nmapはターゲットホストに複数の巧妙なプローブを送信し、その応答をこのデータベースのフィンガープリントと比較することで、OSの種類やバージョンを推測します。
 このファイルも通常 /usr/share/nmap/ に配置されています。Nmapコミュニティからの貢献により、このデータベースは常に更新され、新しいOSやデバイスへの対応が進められています。 
その他のデータファイルとドキュメント
 上記以外にも、nmap-common には以下のようなファイルが含まれることがあります。 
- Nmapのマニュアルページ(manページ)
 - 特定のNSEスクリプトが必要とするデータファイル
 - 出力フォーマット(例:HTML)のスタイルシート
 
これらのファイル群全体が、Nmapの強力で柔軟なスキャン能力を支えています。
nmap-common と Nmap の連携
 これまで見てきたように、nmap-common はNmapの実行に不可欠なデータとスクリプトを提供します。では、実際にNmapコマンドを実行した際、どのようにこれらのファイルが利用されるのでしょうか。 
Nmap実行時の舞台裏
 ユーザーがターミナルで nmap コマンドにオプションを付けて実行すると、Nmapプログラムは指定されたオプションに応じて必要な処理を開始します。この過程で、nmap-common パッケージによってインストールされたファイル群が参照されます。 
- 基本スキャン時: ポート番号に対応するサービス名を 
nmap-servicesファイルから参照します。また、スキャン対象ポートの選定や順序決定にもnmap-services内の利用頻度情報が参考にされます。 -sV(バージョン検出) 指定時:nmap-service-probesファイルを読み込み、定義されたプローブをターゲットのオープンポートに送信します。返ってきた応答を同ファイル内のパターンと比較し、サービスとバージョンを特定します。関連するNSEスクリプト (versionカテゴリ) も実行されることがあります。-O(OS検出) 指定時: ターゲットに特殊なTCP/IPプローブを送信し、その応答をnmap-os-dbファイルのフィンガープリントと比較してOSを推測します。-sCまたは--script指定時:/usr/share/nmap/scripts/ディレクトリから指定されたスクリプト(またはdefaultカテゴリのスクリプト)を読み込み、Luaインタープリタを通じて実行します。-A(アグレッシブスキャン) 指定時:-sV,-O,-sC,--tracerouteをまとめて実行するオプションであり、上記で説明した複数のデータファイルやスクリプトが複合的に利用されます。
Nmapはこれらのファイルを効率的に読み込み、解析することで、高速かつ高機能なスキャンを実現しています。
具体的なNmapコマンド例
 いくつかのNmapコマンド例を挙げ、nmap-common 内のどのリソースが主に関連しているかを見てみましょう。 
例1: デフォルトスクリプトスキャン
nmap -sC scanme.nmap.orgこのコマンドは、ターゲット scanme.nmap.org に対して、default カテゴリに属するNSEスクリプトを実行します。Nmapは /usr/share/nmap/scripts/ 内の該当する *.nse ファイル群を使用します。また、基本的なポートスキャンのために nmap-services も参照されます。
例2: バージョン検出
nmap -sV -p 80,443 192.168.1.1このコマンドは、IPアドレス 192.168.1.1 のTCPポート80と443で稼働しているサービスのバージョンを検出しようとします。Nmapは主に nmap-service-probes を使用してプローブを送信し、応答を解析します。必要に応じて version カテゴリのNSEスクリプトも利用されます。
例3: 特定の脆弱性スキャン (http-vuln-cve2017-5638: Apache Struts2 の脆弱性)
nmap -p 80 --script http-vuln-cve2017-5638 <target>このコマンドは、ターゲットのポート80に対して、特定の脆弱性 (CVE-2017-5638) をチェックするNSEスクリプト http-vuln-cve2017-5638.nse を実行します。Nmapは /usr/share/nmap/scripts/ からこのスクリプトファイルを探して実行します。
nmap-common の管理
nmap-common はNmap本体の依存パッケージであるため、通常はNmapをインストール・アンインストール・更新する際に、パッケージマネージャーによって自動的に管理されます。 
パッケージのインストールと更新
 Debian系のLinuxディストリビューション(Kali Linux, Ubuntuなど)では、apt コマンドを使用してNmapをインストールします。 
sudo apt update
sudo apt install nmap 上記のコマンドを実行すると、nmap パッケージとその依存関係にある nmap-common パッケージが一緒にインストールされます。 
Nmapやそのデータファイル(スクリプト、データベースなど)は継続的に更新されているため、定期的にパッケージを最新の状態に保つことが推奨されます。
sudo apt update
sudo apt upgrade nmap nmap-common インストールされている nmap-common のバージョンや詳細情報を確認するには、以下のコマンドが使用できます。 
# バージョンのみ表示
dpkg -l | grep nmap-common
# 詳細情報を表示
apt show nmap-commonファイルの場所の確認
nmap-common パッケージによってシステムにインストールされたファイルのリストとその場所を確認したい場合は、dpkg コマンドの -L オプションが便利です。 
dpkg -L nmap-common これにより、/usr/share/nmap/scripts/ や /usr/share/nmap/nmap-os-db などの重要なファイルがどこにインストールされているかを確認できます。これは、自作のNSEスクリプトを追加したい場合や、データファイルの内容を確認したい場合に役立ちます。 
まとめ
 本記事では、Nmapの強力な機能を支える重要な要素でありながら、普段あまり注目されることのない nmap-common パッケージについて解説しました。 
nmap-common は、Nmapがスクリプトスキャン、バージョン検出、OS検出といった高度な機能を実現するために不可欠な、アーキテクチャ非依存のデータファイルとスクリプト群を提供します。NSEスクリプト (*.nse)、サービスプローブ (nmap-service-probes)、サービス定義 (nmap-services)、OSフィンガープリントデータベース (nmap-os-db) などがその代表例です。 
 ユーザーがNmapコマンドを実行すると、指定されたオプションに応じて、Nmapプログラムは nmap-common パッケージによって提供されたこれらのリソースを内部的に参照・利用します。この連携により、Nmapはその多機能性を発揮できるのです。 
nmap-common は直接操作するものではありませんが、その存在と役割を理解することは、Nmapの動作原理を深く知る上で非常に有益です。Nmapを使いこなす上で、その「心臓部」とも言えるこのパッケージの重要性を認識しておきましょう。 
参考情報
より詳しい情報については、以下の公式リソースをご参照ください。
- Nmap Official Website – Nmapプロジェクトの公式サイト。ドキュメント、ダウンロード、関連ツールなどの情報があります。
 - Nmap Reference Guide – Nmapのコマンドオプションや機能に関する公式リファレンスガイド。
 - Nmap Scripting Engine (NSE) – NSEの仕組み、スクリプトの書き方、利用可能なスクリプトに関する詳細情報。
 - Kali Tools – Nmap – Kali LinuxにおけるNmapツールの概要ページ。nmap-commonパッケージについても言及されています。