はじめに
サイバーセキュリティの分野において、ネットワークインフラストラクチャを理解することは、セキュリティを維持するために不可欠です。Nmap (Network Mapper) は、セキュリティ専門家がコンピュータネットワーク上のホストとサービスを発見するために広く使用されているオープンソースツールです。このチュートリアルでは、Nmap を使用して複数の IP アドレスを同時にスキャンし、ネットワークを効率的にマッピングし、潜在的なセキュリティ問題を特定する方法を説明します。
この実験(Lab)の終わりには、Nmap のインストール方法、基本的なスキャンの実行方法、さまざまなテクニックを使用して複数の IP アドレスをターゲットにする方法、および結果の解釈方法を理解できるようになります。これらのスキルは、サイバーセキュリティ評価におけるネットワーク偵察の基本的な部分を形成し、防御的および攻撃的なセキュリティ運用にとって貴重です。
Nmap のインストールと最初のスキャンの実行
この最初のステップでは、Ubuntu システムに Nmap をインストールし、正しく動作することを確認するために基本的なスキャンを実行します。
Nmap のインストール
Nmap は Ubuntu のリポジトリで利用できるため、簡単にインストールできます。ターミナルを開き、次のコマンドを実行します。
## パッケージリストを更新します
sudo apt update
## Nmap をインストールします
sudo apt install nmap -y
このコマンドは、Nmap と必要な依存関係をダウンロードしてインストールします。インストールが成功したことを確認するために、Nmap のバージョンを確認しましょう。
nmap --version
次のような出力が表示されるはずです。
Nmap version 7.80 ( https://nmap.org )
Platform: x86_64-pc-linux-gnu
Compiled with: liblua-5.3.3 openssl-1.1.1f libssh2-1.8.0 libz-1.2.11 libpcre-8.39
Compiled without: nmap-update npcap ipv6
Available nsock engines: epoll poll select
Nmap の基本構文の理解
Nmap の基本構文は次のとおりです。
nmap [scan type] [options] [target]
ここで、
[scan type]は、実行するスキャンの種類を指定します (例:TCP SYN スキャン)[options]は、スキャンをカスタマイズするための追加のパラメータです[target]は、スキャンするホストまたはネットワークです
最初のスキャン:ローカルマシンのスキャン
ローカルマシンの簡単なスキャンから始めましょう。これは、外部ネットワークをスキャンせずに Nmap をテストする安全な方法です。
nmap localhost
このコマンドは、ローカルマシン上の最も一般的な 1000 個の TCP ポートをスキャンします。次のような出力が表示されるはずです。
Starting Nmap 7.80 ( https://nmap.org ) at 2023-09-23 10:00 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000097s latency).
Not shown: 997 closed ports
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
443/tcp open https
Nmap done: 1 IP address (1 host up) scanned in 0.07 seconds
出力には以下が表示されます。
- スキャンの開始時間
- スキャン対象
- ホストの状態 (up または down)
- サービス名付きのオープンポート
- スキャン統計
表示される正確なオープンポートは、システム構成によって異なる場合があります。
ポート状態の理解
Nmap は、ポートをさまざまな状態に分類します。
open: アプリケーションがこのポートで積極的に接続を受け入れていますclosed: ポートはアクセス可能ですが、アプリケーションはリッスンしていませんfiltered: ファイアウォールがアクセスをブロックしているため、Nmap はポートが開いているかどうかを判断できませんunfiltered: ポートはアクセス可能ですが、Nmap はポートが開いているか閉じているかを判断できませんopen|filtered: Nmap はポートが開いているかフィルタリングされているかを判断できませんclosed|filtered: Nmap はポートが閉じているかフィルタリングされているかを判断できません
スキャン結果では、ほとんどのポートは「closed」としてリストされ、システムで実行されているサービスに対していくつかの「open」ポートが表示されます。
さまざまな方法を使用した複数の IP アドレスのスキャン
Nmap をインストールし、最初のスキャンを実行したので、複数の IP アドレスを同時にスキャンするさまざまな方法を調べてみましょう。これは、複数のシステムを効率的に評価する必要があるネットワーク管理者やセキュリティ専門家にとって特に役立ちます。
方法 1: IP 範囲の使用
複数の IP アドレスをスキャンする最も簡単な方法の 1 つは、IP 範囲を指定することです。安全にスキャンするために、小さな仮想ネットワークを作成しましょう。
まず、現在のネットワークインターフェースを確認しましょう。
ip addr show
次に、ローカルネットワーク上の IP アドレスの範囲をスキャンします。デモンストレーションのために、小さな範囲を使用します。
nmap 127.0.0.1-5
このコマンドは、127.0.0.1、127.0.0.2、127.0.0.3、127.0.0.4、および 127.0.0.5 の 5 つの IP アドレスをスキャンします。スキャンに応答する各ホストの出力が表示されます。通常、127.0.0.1 (localhost) のみが応答します。
方法 2: CIDR 表記の使用
複数のターゲットを指定するもう 1 つの一般的な方法は、CIDR (Classless Inter-Domain Routing) 表記を使用することです。これは、IP アドレス範囲を簡潔に指定する方法です。
ローカルループバック範囲をスキャンしてみましょう。
nmap 127.0.0.0/24
このコマンドは、127.0.0.0 から 127.0.0.255 までの 256 個の IP アドレスをスキャンします。/24 は、IP アドレスの最初の 24 ビットが固定され、最後の 8 ビットが可変であることを示します。
スキャンを高速化し、ポートスキャンなしでアクティブなホストを見つけることに集中するために、-sn オプションを使用できます。
nmap -sn 127.0.0.0/24
これは、ポートをスキャンせずに、ホストがオンラインかどうかだけを判断する ping スキャンを実行します。次のような出力が表示されるはずです。
Starting Nmap 7.80 ( https://nmap.org ) at 2023-09-23 10:15 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000097s latency).
Nmap done: 256 IP addresses (1 host up) scanned in 2.66 seconds
方法 3: IP アドレスのリストの使用
特定の非連続 IP アドレスについては、ターゲットを含むファイルを作成し、-iL オプションを使用できます。
いくつかの IP アドレスを含むファイルを作成しましょう。
echo "127.0.0.1
127.0.0.2
127.0.0.5" > targets.txt
次に、これらの特定のターゲットをスキャンします。
nmap -iL targets.txt
このコマンドは、targets.txt ファイルから IP アドレスを読み取り、それぞれをスキャンします。
方法 4: 複数のターゲット指定の組み合わせ
Nmap では、1 つのコマンドでさまざまなターゲティング方法を組み合わせることができます。例:
nmap 127.0.0.1 127.0.0.5-10 127.0.0.0/29
このコマンドは以下をスキャンします。
- 単一の IP アドレス 127.0.0.1
- IP 範囲 127.0.0.5 から 127.0.0.10
- CIDR 範囲 127.0.0.0/29 (127.0.0.0 から 127.0.0.7 を含む)
スキャン速度の最適化
複数のターゲットをスキャンする場合、スキャン時間は大幅に増加する可能性があります。Nmap は、スキャンタイミングを制御し、効率を向上させるオプションを提供します。
nmap -T4 127.0.0.0/24
-T4 オプションは、「アグレッシブ」なタイミングテンプレートを設定し、スキャンを高速化します。タイミングテンプレートは 0 (paranoid) から 5 (insane) まであり、値が大きいほどスキャンは高速になりますが、信頼性が低くなる可能性があります。ルーチンスキャンでは、-T4 は速度と信頼性のバランスが取れています。
Nmap 出力の理解と結果の保存
ネットワークスキャンを実行する際には、結果を解釈し、さらなる分析やレポートのために保存する方法を理解することが重要です。このステップでは、さまざまな Nmap 出力形式と、スキャン結果を保存する方法について説明します。
詳細な Nmap 出力の理解
Nmap の出力をよりよく理解するために、localhost のより詳細なスキャンを実行しましょう。
nmap -v localhost
-v オプションは詳細出力を有効にし、スキャンに関するより多くの情報を提供します。次のような出力が表示されるはずです。
Starting Nmap 7.80 ( https://nmap.org ) at 2023-09-23 10:30 UTC
Initiating Ping Scan at 10:30
Scanning localhost (127.0.0.1) [2 ports]
Completed Ping Scan at 10:30, 0.00s elapsed (1 total hosts)
Initiating Connect Scan at 10:30
Scanning localhost (127.0.0.1) [1000 ports]
Discovered open port 22/tcp on 127.0.0.1
Discovered open port 80/tcp on 127.0.0.1
Discovered open port 443/tcp on 127.0.0.1
Completed Connect Scan at 10:30, 0.02s elapsed (1000 total ports)
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000097s latency).
Not shown: 997 closed ports
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
443/tcp open https
Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 0.07 seconds
この出力は以下を提供します。
- スキャンの進行状況
- 発見された各オープンポートをリアルタイムで表示
- オープンポートとサービスを含む最終的なスキャンレポート
- タイミング統計
スキャン結果をファイルに保存する
Nmap は、ドキュメント化、さらなる分析、またはチームメンバーとの共有に役立つ、いくつかの形式で結果を保存できます。
通常の出力形式
スキャン結果を Nmap の標準出力形式で保存するには、次のようにします。
nmap localhost -oN normal_output.txt
これにより、ターミナルに表示されるのと同じ形式でスキャン結果を含む normal_output.txt という名前のファイルが作成されます。
XML 出力形式
XML 出力は、スキャン結果をプログラムで処理するのに役立ちます。
nmap localhost -oX xml_output.xml
これにより、他のツールやスクリプトで解析できる XML ファイルが作成されます。
Grepable 出力形式
grep などのコマンドラインツールで簡単に解析できるようにするには、次のようにします。
nmap localhost -oG grep_output.txt
この形式は、grep などのツールを使用して特定の情報をすばやく抽出するのに特に役立ちます。
すべての形式を一度に
出力を 3 つのすべての形式で同時に保存するには、次のようにします。
nmap localhost -oA scan_results
これにより、scan_results.nmap、scan_results.xml、および scan_results.gnmap の 3 つのファイルが作成されます。
保存された結果の表示
保存された出力ファイルの 1 つを調べてみましょう。
cat normal_output.txt
以前にこのファイルに保存された Nmap スキャン結果が表示されるはずです。
複数の IP スキャンと出力オプションの組み合わせ
次に、複数の IP をスキャンし、結果を保存することで、これまで学習したことを組み合わせてみましょう。
nmap 127.0.0.1-5 -oN multiple_hosts.txt
このコマンドは、5 つの IP アドレスをスキャンし、結果を multiple_hosts.txt に保存します。
これらの結果を調べてみましょう。
cat multiple_hosts.txt
指定されたすべての IP アドレスのスキャン結果が表示されます。通常、この例では、127.0.0.1 のみが「up」と表示され、オープンポートが表示されます。
サービスバージョン検出の追加
オープンポートで実行されているサービスに関する詳細情報を収集するには、-sV オプションを使用できます。
nmap -sV localhost -oN service_scan.txt
これにより、サービスバージョン検出が実行され、結果が service_scan.txt に保存されます。
これがどのような追加情報を提供するのか見てみましょう。
cat service_scan.txt
出力には、検出されたサービスのバージョン情報が含まれるようになり、特定のバージョンに既知の脆弱性がある可能性があるため、セキュリティ評価に役立ちます。
ネットワーク評価のための高度なスキャンオプション
Nmap の基本と複数のターゲットをスキャンする方法を理解したので、サイバーセキュリティ評価に特に役立つ高度なスキャンオプションをいくつか見てみましょう。
ポート選択とスキャンタイプ
デフォルトでは、Nmap は最も一般的な 1000 個の TCP ポートをスキャンします。ただし、スキャンするポートをカスタマイズできます。
特定のポートのスキャン
特定のポートをスキャンするには、次のようにします。
nmap -p 22,80,443 localhost
このコマンドは、ポート 22、80、および 443 のみをスキャンします。
ポートの範囲をスキャンするには、次のようにします。
nmap -p 20-25 localhost
これは、ポート 20 から 25 をスキャンします。
すべての 65535 個の TCP ポートをスキャンするには、次のようにします。
nmap -p- localhost
すべてのポートをスキャンすると、大幅に時間がかかることに注意してください。
さまざまなスキャンタイプの使用
Nmap はさまざまなスキャン手法をサポートしています。デフォルトは TCP SYN スキャン (-sS) ですが、これには root 権限が必要です。root 権限がない場合、Nmap は TCP connect スキャン (-sT) を使用します。
TCP connect スキャンを明示的に試してみましょう。
nmap -sT localhost
よりステルス性の高いスキャンを行うには (root 権限が必要):
sudo nmap -sS localhost
UDP ポートをスキャンするには (見落とされがちですが、セキュリティにとって重要です):
sudo nmap -sU -p 53,161,162 localhost
これは、UDP ポート 53 (DNS)、161、および 162 (SNMP) をスキャンします。
OS 検出とバージョンスキャン
より包括的な情報については、OS 検出とサービスバージョンスキャンを組み合わせてみましょう。
sudo nmap -sS -O -sV localhost
-O オプションは、ターゲットのオペレーティングシステムを識別しようとします。これは、さまざまなオペレーティングシステムが異なる脆弱性を持っている可能性があるため、セキュリティ評価に貴重な情報を提供します。
各オプションが何を行うかを見てみましょう。
-sS: SYN スキャンを実行します (root が必要)-O: ターゲットのオペレーティングシステムを識別しようとします-sV: オープンポートをプローブして、サービス/バージョン情報を決定します
出力には、ターゲットで実行されているオペレーティングシステムとサービスバージョンの詳細な情報が含まれます。
Nmap スクリプトの使用
Nmap には、高度なサービス検出から脆弱性スキャンまで、幅広いタスクを実行できる強力な Nmap Scripting Engine (NSE) が含まれています。
一般的に公開されているサービスをチェックする基本的なスクリプトを実行してみましょう。
nmap --script=default localhost
よりセキュリティに重点を置いたスキャンを行うには、次のようにします。
nmap --script=vuln localhost
これにより、ターゲットに対して脆弱性検出スクリプトが実行され、一般的なセキュリティ問題が特定されます。
タイミングとパフォーマンスオプション
複数のターゲットをスキャンする場合、スキャンパフォーマンスの最適化が重要になります。すでに -T オプションを見てきましたが、よりきめ細かい制御が可能です。
nmap -T4 --max-rtt-timeout 200ms --min-rate 1000 127.0.0.1/24
このコマンドは、次のことを行います。
- 「アグレッシブ」なタイミングテンプレートを使用します (
-T4) - 最大ラウンドトリップタイムアウトを 200ms に設定します
- 最小レートを 1000 パケット/秒に設定します
これらの設定により、複数のホストのスキャンを大幅に高速化できますが、混雑したネットワークや高遅延のネットワークでは信頼性が低くなる可能性があります。
包括的なスキャンのためのすべてを組み合わせる
ローカルネットワークの包括的なスキャンを行うために、複数の手法を組み合わせてみましょう。
sudo nmap -sS -sV -O -p 1-1000 --script=default -T4 -oA comprehensive_scan 127.0.0.1
このコマンドは、次のことを実行します。
- SYN スキャン
- サービスバージョン検出
- OS 検出
- ポート 1 ~ 1000 をスキャン
- デフォルトスクリプトを実行
- アグレッシブなタイミングを使用
- 結果をプレフィックス「comprehensive_scan」で、すべての形式で保存します
結果を調べてみましょう。
cat comprehensive_scan.nmap
この包括的なスキャンは、オープンポート、実行中のサービス、サービスバージョン、潜在的な脆弱性など、ターゲットシステムに関する豊富な情報を提供します。
倫理的配慮とベストプラクティス
結論を出す前に、Nmap はスキャンする明示的な許可があるネットワークでのみ使用する必要があることを強調することが重要です。許可なくスキャンすることは違法であり、敵対的な行為と見なされる可能性があります。
従うべきベストプラクティスをいくつか示します。
- ネットワークまたはシステムをスキャンする前に、必ず許可を得てください
- ネットワークへの影響を最小限に抑えるために、可能な限り、それほどアグレッシブでないスキャンを使用してください
- 誤検出と誤検出の可能性に注意してください
- 参照と説明責任のために、スキャン活動を文書化してください
- 発見された情報のプライバシーと機密性を尊重してください
まとめ
この実験では、Nmap を使用して複数の IP アドレスを効率的に同時にスキャンする方法を学びました。これは、ネットワーク管理者やサイバーセキュリティ専門家にとって不可欠なスキルです。以下をカバーしました。
- Nmap のインストールと基本的なスキャンの実行により、そのコア機能を理解する
- IP 範囲、CIDR 表記、ターゲットリストなど、複数のターゲットを指定するさまざまな方法
- さらなる分析のために、さまざまな形式でスキャン結果を解釈し、保存する方法
- ネットワークサービスと潜在的な脆弱性に関するより深い洞察を提供する高度なスキャン技術
これらのスキルは、ネットワーク偵察とセキュリティ評価の基礎を形成します。複数の IP アドレスを効率的にスキャンすることにより、ネットワークをすばやくマッピングし、実行中のサービスを特定し、潜在的なセキュリティ上の弱点を発見できます。
Nmap のスキルをさらに発展させるには、以下を検討してください。
- 重点的なセキュリティ評価のための、より専門的な NSE スクリプト
- Nmap と他のセキュリティツールとの統合
- 定期的なセキュリティ監視のためのスクリプトによるスキャンの自動化
- 特定のスキャンニーズに対応するカスタム NSE スクリプトの開発
Nmap のようなネットワークスキャンツールは、常に責任を持って倫理的に使用し、ターゲットシステムをスキャンするための適切な許可を得る必要があることを忘れないでください。



