Nmap を使用したネットワークスキャン

NmapBeginner
オンラインで実践に進む

はじめに

この実験では、セキュリティの専門家によって広く使用されている強力なオープンソースのネットワークスキャンツールである Nmap の活用方法を学びます。Nmap は、ネットワーク内のアクティブなホスト、オープンポート、および実行中のサービスを特定するのに役立ち、セキュリティ評価に不可欠な可視性を提供します。

基本的な Nmap スキャンの実行、スキャン結果の解釈、およびさまざまなスキャン手法の理解について、実践的な経験を積むことができます。これらのスキルはネットワークセキュリティ分析の基礎となるものですが、許可されたネットワーク上でのみスキャンを行うという倫理的な実践の重要性も強調しています。

Nmap のインストール

ネットワークの探索を始める前に、適切なツールを準備する必要があります。Nmap(Network Mapper)は、ネットワーク管理者がネットワーク上のデバイスを発見し、利用可能なサービスを特定するのに役立つ、無料のオープンソースユーティリティです。このステップでは、システムに Nmap をインストールします。

  1. まず、ターミナルを開きましょう。ターミナルは、すべての Nmap コマンドを実行する場所です。この実験環境のような Linux システムでは、ターミナルがネットワークツールを操作する主な手段となります。デスクトップ上で Xfce Terminal を見つけて開いてください。
Xfce Terminal window open

注意:無料ユーザーはインターネットに接続できないため、実験環境には Nmap があらかじめインストールされています。リストの 4 番目(Nmap がインストールされているか確認する)までスキップしてください。Pro ユーザーにアップグレードすると、自分で Nmap をインストールする練習ができます。

Pro ユーザーのみ
  1. ターミナルが開いたら、パッケージリストを更新する必要があります。これは、システムが最新のソフトウェアバージョンを認識できるようにするための重要な最初のステップです。次のコマンドを入力して Enter キーを押します。
sudo apt-get update

sudo は「superuser do」の略で、ソフトウェアのインストールによく必要となる管理者権限を付与します。

  1. パッケージリストが最新になったので、Nmap をインストールしましょう。次のコマンドは、必要な依存関係とともに Nmap をダウンロードしてインストールします。
sudo apt-get install nmap -y

-y フラグは、インストール時の確認プロンプトに対して自動的に「yes」と回答するもので、スクリプトを実行する場合や、続行することが確実な場合に便利です。

  1. インストールが完了したら、Nmap が正しくインストールされたことを確認する必要があります。バージョンの確認には、インストールが成功したことの確認と、使用しているバージョンの把握という 2 つの目的があります。次のように入力してください。
nmap --version

次のような出力が表示されるはずです。

Nmap version 7.80 ( https://nmap.org )
Platform: x86_64-pc-linux-gnu
Compiled with: liblua-5.3.6 openssl-3.0.2 nmap-libssh2-1.8.2 libz-1.2.11 libpcre-8.39 libpcap-1.10.1 nmap-libdnet-1.12 ipv6
Compiled without:
Available nsock engines: epoll poll select

Nmap は新機能や改善のために定期的に更新されるため、バージョン番号は異なる場合があります。

おめでとうございます!これで Nmap がインストールされ、使用する準備が整いました。Nmap は、ネットワークで何が起きているかを確認できる強力な懐中電灯のようなものだと考えてください。どのデバイスが接続されているか、どのようなサービスが実行されているか、さらにはどのようなオペレーティングシステム(OS)が使用されているかまで表示できます。これらの機能により、Nmap はネットワーク管理とセキュリティテストの両方において不可欠なツールとなっています。

Nmap の全機能を調べたい場合は、ターミナルで man nmap と入力してマニュアルページを表示できます。このドキュメントにはすべての高度なオプションと機能が含まれていますが、圧倒される必要はありません。この実験では基礎から始め、段階的に知識を深めていきます。

IP アドレスの理解

ネットワークのスキャンを開始する前に、IP アドレスについて理解しておくことが重要です。IP アドレスは、ネットワーク上のコンピュータにとっての「自宅の住所」のようなものだと考えてください。郵便局が郵便物を届けるために自宅の住所を必要とするのと同様に、ネットワーク上の他のデバイスがあなたのコンピュータと通信するためには、あなたの IP アドレスが必要になります。

  1. IP アドレスは、ネットワーク上のデバイスを一意に識別するものです。通常、192.168.1.1 のように、ドットで区切られた一連の数字として表示されます。これらの数字は 0 から 255 の範囲で、各セグメントはネットワーク階層の一部を表します。最初の部分はネットワーク自体を識別し、後半の部分は特定のデバイスを識別します。
graph LR A[インターネット] --- B[ルーター 192.168.1.1] B --- C[PC 192.168.1.10] B --- D[ノートPC 192.168.1.11] B --- E[スマートフォン 192.168.1.12] B --- F[スマートTV 192.168.1.13] style A fill:#f9f,stroke:#333,stroke-width:4px style B fill:#bbf,stroke:#333,stroke-width:2px style C fill:#dfd,stroke:#333,stroke-width:2px style D fill:#dfd,stroke:#333,stroke-width:2px style E fill:#dfd,stroke:#333,stroke-width:2px style F fill:#dfd,stroke:#333,stroke-width:2px
  1. 自分の IP アドレスを確認するために、ネットワークインターフェース情報を表示するコマンドを使用します。ネットワーク上の他のデバイスをスキャンする前に、自分のアドレスを知っておく必要があるため、これは重要です。次のコマンドを入力してください。
ip addr show | grep inet

このコマンドを分解して説明します。

  • ip addr show は、システム上のすべてのネットワークインターフェースに関する詳細情報を表示します。
  • | 記号(パイプと呼ばれます)は、最初のコマンドの出力を受け取り、次のコマンドに送ります。
  • grep inet は、出力をフィルタリングして「inet」を含む行のみを表示します。これには、読みやすい形式の IP アドレスが含まれています。

次のような出力が表示されます。

inet 127.0.0.1/8 scope host lo
inet 172.19.0.3/16 brd 172.19.255.255 scope global eth1

スラッシュの後の数字(/8/16 など)は、CIDR(Classless Inter-Domain Routing)表記を使用しています。この表記は、IP アドレスの何ビットがネットワーク部分に使用され、何ビットがデバイス部分に使用されるかを示します。たとえば、/16 は最初の 16 ビット(最初の 2 つの数字)がネットワークを識別し、残りのビットが個々のデバイスに割り当てられることを意味します。

  1. この出力には、いくつかの IP アドレスが表示されます。それぞれの実用的な意味は次のとおりです。

    • 127.0.0.1 は「ループバック」または「localhost」アドレスと呼ばれます。この特別なアドレスは常に自分自身のコンピュータを指し、プログラムが自分自身と通信する必要がある場合に使用されます。
    • 172.19.0.3 は、あなたのマシンの実際のネットワークアドレスです。これは、他のデバイスがあなたのコンピュータにデータを送信するために使用するアドレスであり、自宅を特定する住所に似ています。
  2. 127.0.0.1 ではない方の IP アドレス(この例では 172.19.0.3)をメモしておいてください。スキャンの演習では、この実際のネットワークアドレスを使用します。

この CIDR 表記は、どのデバイスがローカルネットワーク上にあり、どのデバイスがリモートネットワーク上にあるかを理解するために重要です。

「fe80::」で始まるアドレスに気づくかもしれません。これは IPv6 アドレスで、IPv4 に代わるものとして設計された新しいバージョンの IP アドレッシングです。IPv6 の重要性は高まっていますが、ほとんどのローカルネットワークでは依然としてここで確認しているような IPv4 アドレスが主に使われています。ネットワークスキャンの目的では、ローカルネットワーク環境でより一般的に使用されている IPv4 アドレスに焦点を当てます。

基本的な Nmap スキャンの実行

IP アドレスを理解し、Nmap をインストールしたので、最初のネットワークスキャンを実行してみましょう。この最初のスキャンでは、自分のマシンをターゲットにします。これは、他のシステムをスキャンする前に Nmap の基本機能を学ぶための最も安全な方法です。

  1. まず、前のステップで確認した IP アドレスを使用します。基本的な Nmap スキャンコマンドには、ターゲットの IP アドレスを指定するだけです。<YOUR_IP> を見つけた IP アドレスに置き換えて、次のコマンドを実行してください。
nmap <YOUR_IP>

たとえば、IP アドレスが 172.19.0.3 の場合は、次のように実行します。

nmap 172.19.0.3

このコマンドは、指定された IP アドレスに対して、最も一般的な 1000 個の TCP ポートをスキャンするように Nmap に指示します。TCP ポートは、ネットワークサービスが通信できるコンピュータ上の番号付きの「ドア」のようなものです。

  1. コマンドを実行すると、Nmap がスキャンを実行し、結果を表示します。以下は、表示される可能性のある一般的な出力例です。
Starting Nmap 7.80 ( https://nmap.org ) at 2024-09-24 10:00 CST
Nmap scan report for 336efdcfb776.external (172.19.0.3)
Host is up (0.00017s latency).
Not shown: 998 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
3001/tcp open  nessus

Nmap done: 1 IP address (1 host up) scanned in 0.19 seconds
  1. Nmap が何を伝えているのかを理解するために、この出力の各部分を確認してみましょう。

    • "Starting Nmap 7.80": 使用されている Nmap のバージョンを示します。バージョンによって、機能や出力形式が若干異なる場合があります。
    • "Host is up (0.00017s latency)": ターゲットマシンがネットワークリクエストに応答したことを確認し、応答時間を秒単位で表示します。
    • "Not shown: 998 closed ports": スキャンされた 1000 個の一般的なポートのうち、998 個が接続を受け入れていなかったことを示します。
    • "PORT STATE SERVICE": スキャン中に見つかったすべてのオープンポートをリストします。
      • 22/tcp open ssh: ポート 22 が開いており、システムの安全なリモート管理に使用される SSH(Secure Shell)が実行されています。
      • 3001/tcp open nessus: ポート 3001 が開いており、Nmap が Nessus(脆弱性スキャナー)であると判断したものが実行されています。
  2. この基本的なスキャンは、マシンで実行されているネットワークサービスに関する貴重な情報を提供します。実用的には、この情報は以下のことに役立ちます。

    • 悪用される可能性のある不要なオープンポートを特定することによるセキュリティ監査
    • 期待されるサービスが利用可能であることを確認することによるネットワークのトラブルシューティング
    • 侵害を示唆する可能性のある予期しないサービスを発見することによるインシデント検知

ネットワークスキャンは、自分が所有しているシステム、またはテストの明示的な許可を得ているシステムに対してのみ実行する必要があることを忘れないでください。許可なくネットワークをスキャンすることは、法律や倫理ガイドラインに違反する可能性があります。自分のものではないシステムをスキャンする前には、必ず適切な許可を得てください。

OS 検出スキャンの実行

Nmap はオープンポートを見つけるだけではありません。ターゲットマシンのオペレーティングシステム(OS)を特定しようとすることもできます。この機能は、OS ごとに脆弱性が異なり、必要なセキュリティ対策も異なるため、ネットワーク管理者やセキュリティの専門家にとって非常に便利です。

始める前に、OS 検出がどのように機能するかを理解することが重要です。Nmap はターゲットに特別に細工されたパケットを送信し、その応答を分析します。各 OS はネットワークリクエストに対してわずかに異なる応答を返し、Nmap がデータベースと照合できる独自の「フィンガープリント(指紋)」を作成します。

  1. OS 検出スキャンを実行するには、-O フラグ(数字のゼロではなく、大文字のアルファベットの 'O' であることに注意)を使用します。このスキャンは、低レベルで生のパケットを送信および分析する必要があるため、ルート(root)権限が必要です。sudo を使用してこのコマンドを実行します。<YOUR_IP> をスキャンしたい実際の IP アドレスに置き換えてください。
sudo nmap -O <YOUR_IP>

たとえば、ターゲット IP が 172.19.0.3 の場合は、次のように実行します。

sudo nmap -O 172.19.0.3
  1. 出力には、基本的なスキャンのようなオープンポートの情報が表示されますが、今回は OS 情報も含まれます。以下は、一般的な結果の例です。
Starting Nmap 7.80 ( https://nmap.org ) at 2024-09-24 10:01 CST
Nmap scan report for 336efdcfb776.external (172.19.0.3)
Host is up (0.000035s latency).
Not shown: 998 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
3001/tcp open  nessus
Device type: general purpose
Running: Linux 2.6.X
OS CPE: cpe:/o:linux:linux_kernel:2.6.32
OS details: Linux 2.6.32
Network Distance: 0 hops

OS detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 1.76 seconds
  1. 新しく追加された OS 関連の情報を詳しく見てみましょう。

    • "Device type: general purpose": デバイスがルーターや IoT デバイスのような専用ハードウェアではなく、標準的なコンピュータシステムであることを示します。
    • "Running: Linux 2.6.X": OS のファミリーとバージョンに関する Nmap の主要な推測です。
    • "OS CPE": OS バージョンの標準化された識別子です。
    • "OS details": フィンガープリントの一致に基づいた、より具体的なバージョンの特定です。
  2. この情報を理解することは、いくつかの実用的なアプリケーションにおいて価値があります。

    • セキュリティの専門家は、パッチを適用する必要がある潜在的に脆弱なシステムを特定するためにこれを使用します。
    • ネットワーク管理者は、ネットワークデバイスの正確なインベントリ(目録)を維持します。
    • システム管理者は、マシンが期待通りの OS を実行していることを確認します。

OS 検出は完璧ではないことに注意してください。いくつかの要因が精度に影響を与える可能性があります。

  • ファイアウォールが、Nmap が検出に使用するプローブをブロックする場合があります。
  • カスタムのカーネル設定が標準のフィンガープリントと一致しない場合があります。
  • 仮想マシンは、ゲスト OS ではなくホスト OS を示すことがあります。

最良の結果を得るには、OS 検出を他の Nmap 手法と組み合わせ、可能な場合は複数の方法で結果を検証してください。

ネットワーク範囲のスキャン

実際のネットワーク環境では、複数の IP アドレスやネットワークセグメント全体をスキャンする必要があることがよくあります。これは、ネットワーク上のすべてのデバイスを発見するのに役立ち、ネットワーク管理者やセキュリティの専門家にとって一般的なタスクです。ネットワーク範囲のスキャンを試してみましょう。

  1. まず、少数の IP アドレス範囲のスキャンから始めます。これは、なじみのないネットワークを探索する際の最初のステップとなることが多いです。以下のコマンドは、172.19.0.1 から始まる連続した 20 個の IP アドレスをスキャンします。
nmap 172.19.0.1-20

このコマンドは、172.19.0.1 から 172.19.0.20 までの各 IP アドレスを順番にチェックし、どのホストがオンラインで、どのポートが開いているかを報告するように Nmap に指示します。

  1. 次に、先ほど学んだ CIDR 表記を使用してサブネット全体をスキャンしてみましょう。/24 サフィックスは、最後のオクテットにある 256 個のアドレスすべてをスキャンすることを意味します。<YOUR_NETWORK> を自分のネットワークアドレスに置き換えて、次のコマンドを実行してください。
nmap YOUR_NETWORK /24

例:

nmap 172.19.0.0/24

このスキャンは、172.19.0.0 から 172.19.0.255 までのすべての IP をチェックします。/24 表記は、サブネットマスク 255.255.255.0 と同等です。

  1. ドキュメント作成や後での分析のためにスキャン結果を保存するには、-oN(通常出力)フラグを使用します。これにより、人間が読める形式のテキストファイルが作成されます。
nmap 172.19.0.0/24 -oN network_scan.txt

このコマンドは同じサブネットスキャンを実行しますが、出力を現在の作業ディレクトリの network_scan.txt に書き込みます。

  1. 出力ファイルの内容を確認してみましょう。
cat network_scan.txt

出力には、応答のあった各ホストに関する詳細情報が表示されます。以下は表示される内容の例です。

## Nmap 7.80 scan initiated Fri Sep 27 15:45:29 2024 as: nmap -oN network_scan.txt 172.19.0.0/24
Nmap scan report for iZrj9gvdh5xn02z8rmsn9mZ (172.19.0.1)
Host is up (0.00045s latency).
Not shown: 997 closed ports
PORT      STATE SERVICE
22/tcp    open  ssh
111/tcp   open  rpcbind
10010/tcp open  rxapi

Nmap scan report for node_openresty.external (172.19.0.2)
Host is up (0.00047s latency).
Not shown: 999 closed ports
PORT   STATE SERVICE
80/tcp open  http

Nmap scan report for 36cff415ddd9.external (172.19.0.3)
Host is up (0.00045s latency).
Not shown: 998 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
3001/tcp open  nessus

Nmap scan report for 041bf22f47a1.external (172.19.0.4)
Host is up (0.00050s latency).
Not shown: 998 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
3001/tcp open  nessus

Nmap scan report for 2299e8eff7e5.external (172.19.0.5)
Host is up (0.00048s latency).
Not shown: 998 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
3001/tcp open  nessus

## Nmap done at Fri Sep 27 15:45:32 2024 -- 256 IP addresses (5 hosts up) scanned in 3.25 seconds
  1. 出力を分解して説明します。

    • スキャンは 172.19.0.0/24 の範囲にある 256 個のすべてのアドレスをカバーしました。
    • スキャンに対して 5 つのホストのみが応答しました(「up」状態でした)。
    • 各ホストのエントリには以下が表示されます。
      • ホスト名(解決可能な場合)と IP アドレス
      • ネットワーク遅延(レイテンシ)の測定値
      • チェックされたポートの数(デフォルトでは閉じているポートは表示されません)
      • オープンポートとそれに関連付けられたサービスのリスト
  2. ネットワークスキャンの実用的な用途には以下のものがあります。

    • ネットワークインベントリ:ネットワーク上のすべてのデバイスの正確なリストを維持する
    • セキュリティ監査:許可されていないデバイスやサービスを特定する
    • トラブルシューティング:ネットワークの接続性とサービスの可用性を検証する
    • 脆弱性評価:潜在的に脆弱なサービスを発見する

ネットワークスキャンは、自分が所有しているネットワーク、またはスキャンの明示的な許可を得ているネットワークに対してのみ実行する必要があることを忘れないでください。許可のないスキャンは、プライバシー法やネットワーク利用規約に違反する可能性があります。

まとめ

この実験では、ネットワークの偵察とセキュリティ評価のための強力なツールである Nmap を使用したネットワークスキャンの基礎を学びました。Nmap のインストール、オープンポートとサービスを特定するための基本的なスキャンの実行、OS の検出、およびスキャン出力を効果的に管理しながらネットワーク範囲を探索する練習を行いました。

これらのスキルは、より高度なネットワークセキュリティの実践のための基礎となります。ネットワークをスキャンする前には必ず適切な許可を得ること、そしてデジタルセキュリティを向上させるためにこの知識を責任を持って使用することを忘れないでください。