Nmap でのサービスとバージョンの検出

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

はじめに

この実験では、Nmap を使ってサービスとそのバージョンを検出する方法を学びます。この実験では、localhost での基本的なサービス検出、走査の強度を調整、特定のポートでのサービス検出、完全検出の実行、Xfce 端末での出力の分析、および結果をテキストファイルに保存する方法について説明します。nmap -sV 127.0.0.1nmap -sV -oN services.txt 192.168.1.1のようなコマンドを実行して、Nmap のサービスバージョン検出機能を実践的に体験します。

nmap -sV 127.0.0.1 を使ってサービス検出走査を実行する

このステップでは、Nmap を使って基本的なサービス検出走査を行います。サービス検出は、対象システムのオープンポートで実行されているアプリケーションとそのバージョンを特定するのに役立ちます。この情報は、脆弱性評価や浸透テストにとって重要です。

コマンド nmap -sV 127.0.0.1 は、Nmap に対象とするローカルホスト(127.0.0.1)でサービスバージョン検出(-sV)を実行するよう指示します。ローカルホストは自分自身のマシンです。

コマンドを実行しましょう。

  1. Xfce 端末を開きます。
  2. 次のコマンドを入力して Enter キーを押します。
nmap -sV 127.0.0.1

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

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:00 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000073s latency).
Not shown: 997 closed ports
PORT     STATE SERVICE VERSION
22/tcp   open  ssh     OpenSSH 8.9p1 Ubuntu 3ubuntu0.4 (Ubuntu Linux; protocol 2.0)
80/tcp   open  http    Apache httpd 2.4.52 ((Ubuntu))
111/tcp  open  rpcbind 2-4 (RPC #100000)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 5.28 seconds

解説

  • Starting Nmap...:使用している Nmap のバージョンを示します。
  • Nmap scan report for localhost (127.0.0.1):走査の対象を示します。
  • Host is up:対象が到達可能であることを確認します。
  • Not shown: 997 closed ports:997 個のポートがクローズされて表示されなかったことを示します。Nmap はデフォルトでオープン、フィルタリングされた、またはフィルタリングされていないポートのみを表示します。
  • PORT STATE SERVICE VERSION:このセクションは、オープンポート、その状態(open)、ポートで実行されているサービス、およびサービスのバージョンを表示します。たとえば、ポート 22 はオープンで OpenSSH バージョン 8.9p1 が実行されています。ポート 80 はオープンで Apache httpd バージョン 2.4.52 が実行されています。
  • Service Info:オペレーティングシステムに関する追加情報を提供します。
  • Nmap done:走査が完了し、かかった時間を示します。

この単純な走査は、あなたのマシンで実行されているサービスに関する貴重な情報を提供します。次のステップでは、サービス検出のより高度なオプションを探ります。

nmap -sV --version-intensity 7 192.168.1.1 を使って強度を調整する

このステップでは、Nmap のサービスバージョン検出の強度を調整する方法を学びます。--version-intensity オプションを使うと、Nmap がサービス情報を探す際の積極性を制御できます。強度レベルが高いほど、Nmap はより多くのプローブを試み、結果がより正確になる可能性がありますが、時間もかかります。

--version-intensity オプションには 0 から 9 までの値を指定します。0 が最も軽く、9 が最も積極的です。デフォルトの強度は 7 です。

重要: 進める前に、LabEx VM 環境では 192.168.1.1 を走査すると直接動作しない場合があります。これはおそらく内部ネットワークアドレスだからです。実演用に代わりに 127.0.0.1(ローカルホスト)を使います。実際のシナリオでは、これを実際の対象 IP アドレスに置き換えます。

強度レベル 7 でコマンドを実行しましょう。

  1. Xfce 端末を開きます。
  2. 次のコマンドを入力して Enter キーを押します。
nmap -sV --version-intensity 7 127.0.0.1

次のような出力が表示されるはずです(表示内容はマシンに実行されているサービスによって異なります)。

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:05 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000073s latency).
Not shown: 997 closed ports
PORT     STATE SERVICE VERSION
22/tcp   open  ssh     OpenSSH 8.9p1 Ubuntu 3ubuntu0.4 (Ubuntu Linux; protocol 2.0)
80/tcp   open  http    Apache httpd 2.4.52 ((Ubuntu))
111/tcp  open  rpcbind 2-4 (RPC #100000)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 5.28 seconds

次に、より低い強度レベル、たとえば 2 を試してみましょう。

nmap -sV --version-intensity 2 127.0.0.1

出力を見てください。走査がより早く完了することがわかるかもしれませんが、バージョン情報は詳細が足りないか、正確性が低い場合があります。

解説:

  • nmap -sV --version-intensity 7 127.0.0.1: ローカルホストで強度レベル 7 でサービスバージョン検出を実行します。
  • nmap -sV --version-intensity 2 127.0.0.1: ローカルホストで強度レベル 2 でサービスバージョン検出を実行します。

--version-intensity オプションを調整することで、走査速度と正確性のバランスを微調整できます。時間が重要な場合、低い強度レベルが好ましい場合があります。より包括的な評価の場合は、高い強度レベルが推奨されます。

nmap -sV -p 80 192.168.1.1 を使って特定のポートで検出する

このステップでは、特定のポートに対するサービス検出走査に焦点を当てます。既に興味のあるポートを知っている場合、または特定のサービスのみを対象にして走査時間を短縮したい場合に役立ちます。

Nmap の -p オプションを使うと、走査するポートを指定できます。この場合、HTTP(ウェブ)サービスで一般的に使用されるポート 80 を走査します。

重要: 前のステップと同様、LabEx VM 環境では 192.168.1.1 を走査すると直接動作しない場合があります。代わりに 127.0.0.1(ローカルホスト)を使います。実際のシナリオでは、これを実際の対象 IP アドレスに置き換えてください。

コマンドを実行しましょう。

  1. Xfce 端末を開きます。
  2. 次のコマンドを入力して Enter キーを押します。
nmap -sV -p 80 127.0.0.1

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

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:10 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000073s latency).

PORT   STATE SERVICE VERSION
80/tcp open  http    Apache httpd 2.4.52 ((Ubuntu))

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 1.28 seconds

解説:

  • nmap -sV -p 80 127.0.0.1: ローカルホスト(127.0.0.1)のポート 80(-p 80)でサービスバージョン検出(-sV)を実行します。
  • 出力は、ポート 80 がオープンで Apache httpd バージョン 2.4.52 が実行されていることを示しています。
  • 前の走査と比較すると、走査時間が大幅に短くなっていることに注意してください。なぜなら、単一のポートのみを走査しているからです。

-p オプションを使ってポートの範囲を指定することもできます。たとえば、ポート 80、443、および 8080 を走査するには、次のコマンドを使用します。

nmap -sV -p 80,443,8080 127.0.0.1

これにより、1 回の走査で複数の特定のポートを対象にすることができます。

nmap -sV --version-all 127.0.0.1 を使って完全検出を行う

このステップでは、Nmap の --version-all オプションを利用して、可能な限り包括的なサービスバージョン検出を行います。このオプションは、Nmap に対して各オープンポートに対してすべてのバージョン検出プローブを試すように指示します。これは最も積極的な設定であり、最も正確な結果を得ることができますが、完了までに最も時間がかかります。

コマンドを実行しましょう。

  1. Xfce 端末を開きます。
  2. 次のコマンドを入力して Enter キーを押します。
nmap -sV --version-all 127.0.0.1

次のような出力が表示されるはずです(表示内容はマシンに実行されているサービスによって異なります)。

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:15 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000073s latency).
Not shown: 997 closed ports
PORT     STATE SERVICE VERSION
22/tcp   open  ssh     OpenSSH 8.9p1 Ubuntu 3ubuntu0.4 (Ubuntu Linux; protocol 2.0)
80/tcp   open  http    Apache httpd 2.4.52 ((Ubuntu))
111/tcp  open  rpcbind 2-4 (RPC #100000)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 10.52 seconds

解説:

  • nmap -sV --version-all 127.0.0.1: ローカルホスト(127.0.0.1)で --version-all オプションを使ってサービスバージョン検出(-sV)を行います。
  • 出力はオープンポートと検出されたサービスバージョンを示しています。
  • 前の走査と比較すると、走査時間が長くなっていることに注意してください。なぜなら、Nmap がすべての可能なプローブを試しているからです。

重要な考慮事項:

  • --version-all を使用すると、走査時間が大幅に増加する可能性があります。
  • 場合によっては、デフォルトの強度レベルよりも大幅に正確な結果を提供しない場合があります。
  • この積極的な走査はトラフィックを多く生成する可能性があるため、対象システムへの潜在的な影響にも留意する必要があります。

このオプションは、できる限り正確なサービスバージョン情報が必要で、長い走査時間を受け入れる準備ができている場合に最も役立ちます。

Xfce 端末で出力を分析する

このステップでは、Xfce 端末で直接 Nmap 走査の出力をどのように分析するか学びます。出力を理解することは、潜在的な脆弱性を特定し、対象システムの洞察を得るために重要です。

既に前の Nmap コマンドの 1 つを実行したとしましょう。たとえば:

nmap -sV 127.0.0.1

出力は端末に直接表示されます。出力のキー要素を解説しましょう:

  • **Starting Nmap...**:この行は Nmap のバージョンと走査開始時刻を示します。
  • **Nmap scan report for...**:この行は対象の IP アドレスまたはホスト名を示します。
  • **Host is up...**:これは対象ホストに到達可能かどうかを示します。
  • PORT STATE SERVICE VERSION:これは走査結果を含むメインのテーブルです。
    • PORT:ポート番号。
    • STATE:ポートの状態(たとえば、openclosedfiltered)。
    • SERVICE:ポートで実行されている検出されたサービス(たとえば、httpsshsmtp)。
    • VERSION:検出されたサービスのバージョン(たとえば、Apache httpd 2.4.52OpenSSH 8.9p1)。
  • **Service detection performed...**:この行はサービスバージョン検出が行われたことを示します。
  • **Nmap done...**:この行は走査期間と走査されたホスト数を示します。

出力の分析

  1. オープンポート:オープンポートを特定します。これらは接続を積極的に待ち受けており、攻撃者の潜在的な侵入ポイントです。
  2. サービス:オープンポートで実行されているサービスを特定します。サービスを知ることで、それらのサービスに関連する潜在的な脆弱性を調査できます。
  3. バージョン:サービスのバージョンを特定します。古いバージョンのソフトウェアには、悪用される可能性のある既知の脆弱性が多くあります。

出力がポート 22 がオープンで OpenSSH 7.6p1 が実行されていることを示している場合、その特定の OpenSSH バージョンの既知の脆弱性を調査できます。

grep を使った出力のフィルタリング

grep コマンドを使って Nmap の出力をフィルタリングし、特定の情報に焦点を当てることができます。たとえば、"open" という単語を含むすべての行を見つけるには、Nmap の出力を grep にパイプすることができます:

まず、nmap コマンドを再度実行します:

nmap -sV 127.0.0.1

次に、出力を grep にパイプします。前のコマンドの出力は既に端末にあるため、直接パイプすることはできません。ただし、grep を使って端末の履歴からコマンドの出力を検索することができます。

history | grep "nmap -sV 127.0.0.1" | tail -n 1 | xargs -L 1 bash -c 'eval $(echo $1 | sed "s/^[ ]*[0-9]*[ ]*//")'

このコマンドはまず履歴の中から nmap コマンドを含む行を見つけ、次にコマンド自体を抽出し、最後に実行します。その後、nmap コマンドの出力が端末に表示されます。

今度は、grep を使って出力をフィルタリングしましょう。前のコマンドの出力を直接パイプできないため、nmap コマンドを再度実行してその出力を grep にパイプする必要があります。

nmap -sV 127.0.0.1 | grep "open"

これにより、"open" という単語を含む行のみが表示され、オープンポートを特定するのが容易になります。

端末での出力の分析は、ネットワーク管理者やセキュリティ専門家にとって基本的なスキルです。これにより、システムのセキュリティ状況を迅速に評価し、潜在的な脆弱性を特定することができます。

nmap -sV -oN services.txt 192.168.1.1 で結果を保存する

このステップでは、Nmap 走査の結果を後で分析またはレポートするためにファイルに保存する方法を学びます。Nmap はいくつかの出力形式を提供しており、この例では「通常」の出力形式(-oN)を使用します。

  1. Xfce 端末を開きます。
  2. 次のコマンドを入力して Enter キーを押します。
nmap -sV -oN services.txt 192.168.1.1

このコマンドは、対象の IP アドレス 192.168.1.1 でサービスバージョン検出走査(-sV)を実行し、出力を「通常」の形式(-oN)で現在のディレクトリ(~/project)内の services.txt という名前のファイルに保存します。

解説

  • nmap -sV:サービスバージョン検出を実行します。
  • -oN services.txt:出力を「通常」の形式で services.txt という名前のファイルに保存することを指定します。
  • 192.168.1.1:対象の IP アドレス。注:192.168.1.1 にホストがない場合は、代わりに 127.0.0.1 を使用できます。

走査が完了すると、cat コマンドを使用して services.txt ファイルの内容を表示できます:

cat services.txt

これにより、端末に Nmap 走査結果が表示されます。

あるいは、nano のようなテキストエディタで services.txt ファイルを開くこともできます:

nano services.txt

これにより、結果をより構造化された方法で参照できます。

出力形式の理解

「通常」の出力形式は、人間が読みやすく、走査結果の簡潔な要約を提供するように設計されています。対象ホスト、オープンポート、検出されたサービス、およびそれらのバージョンに関する情報が含まれています。

その他の出力形式

Nmap は、他にもいくつかの出力形式をサポートしており、それには以下が含まれます:

  • -oX:XML 出力形式で、他のツールによる解析に適しています。
  • -oS:スクリプトキッディ用の出力形式(おもしろさのため)。
  • -oGgrep やその他のコマンドラインツールでの簡単な解析に設計された、grep 可能な出力形式。

走査結果を保存することは、調査結果を文書化し、他の人と共有し、時間の経過とともに変化を追跡するために不可欠です。

まとめ

この実験では、参加者は Nmap を使用してサービスとバージョン検出を学びます。彼らは、コマンド nmap -sV 127.0.0.1 を使用してローカルホストで基本的なサービス検出走査を開始します。また、走査の強度を調整し、特定のポートでサービスを検出し、完全検出を行う方法も学びます。さらに、彼らは Xfce 端末での出力を分析し、-oN オプションを使用して結果をテキストファイルに保存します。