Nmap での OS 検出とサービス検出の組み合わせ

NmapNmapBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、Nmap を使ってオペレーティングシステムとサービスの検出を組み合わせて、対象マシンに関する包括的な情報を収集する方法を学びます。192.168.1.1 のような対象の IP アドレスで実行されている OS とサービスのバージョンを特定するために、Nmap の -O オプションと -sV オプションを使用します。

この実験には、組み合わせたスキャンを実行し、対象ポートを指定し、冗長性を追加し、結果をファイルに保存し、Xfce 端末で出力を分析する手順が含まれています。また、このアプローチの利点を理解するために、組み合わせたスキャン結果と個別のスキャン結果を比較します。自分が所有しているか、スキャンする許可を得ているネットワークのみをスキャンすることを忘れないでください。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL nmap(("Nmap")) -.-> nmap/NmapGroup(["Nmap"]) nmap/NmapGroup -.-> nmap/output_formats("Output Formats") nmap/NmapGroup -.-> nmap/save_output("Save Output to File") nmap/NmapGroup -.-> nmap/port_scanning("Port Scanning Methods") nmap/NmapGroup -.-> nmap/host_discovery("Host Discovery Techniques") nmap/NmapGroup -.-> nmap/target_specification("Target Specification") nmap/NmapGroup -.-> nmap/verbosity("Verbosity Levels") nmap/NmapGroup -.-> nmap/os_version_detection("OS and Version Detection") nmap/NmapGroup -.-> nmap/service_detection("Service Detection") subgraph Lab Skills nmap/output_formats -.-> lab-547089{{"Nmap での OS 検出とサービス検出の組み合わせ"}} nmap/save_output -.-> lab-547089{{"Nmap での OS 検出とサービス検出の組み合わせ"}} nmap/port_scanning -.-> lab-547089{{"Nmap での OS 検出とサービス検出の組み合わせ"}} nmap/host_discovery -.-> lab-547089{{"Nmap での OS 検出とサービス検出の組み合わせ"}} nmap/target_specification -.-> lab-547089{{"Nmap での OS 検出とサービス検出の組み合わせ"}} nmap/verbosity -.-> lab-547089{{"Nmap での OS 検出とサービス検出の組み合わせ"}} nmap/os_version_detection -.-> lab-547089{{"Nmap での OS 検出とサービス検出の組み合わせ"}} nmap/service_detection -.-> lab-547089{{"Nmap での OS 検出とサービス検出の組み合わせ"}} end

nmap -O -sV 192.168.1.1 を使った組み合わせたスキャンを実行する

このステップでは、Nmap を使って対象マシンで実行されているオペレーティングシステムとサービスのバージョンを特定するための組み合わせたスキャンを行います。これは、ネットワークとそのデバイスに関する情報を収集するための強力な手法です。

Nmap は多用途のネットワークスキャニングツールです。このステップで使用するオプションは以下の通りです。

  • -O:オペレーティングシステムの検出を有効にします。Nmap は対象マシンのネットワーク応答を分析することで、その OS を特定しようとします。
  • -sV:サービスバージョンの検出を有効にします。Nmap は開いているポートを調査して、アプリケーション名とバージョン番号を特定します。
  • 192.168.1.1:これは対象の IP アドレスです。これを、スキャンしたいマシンの実際の IP アドレスに置き換えてください。特定の対象がない場合は、自分のマシンの IP アドレスや scanme.nmap.org のようなテスト用の IP を使用できます。ただし、この実験では、192.168.1.1 があなたのネットワーク上の有効な対象であると仮定します。そうでない場合は、有効な IP アドレスに置き換える必要があります。

スキャンを実行する前に、許可なくネットワークをスキャンすることは違法であることを理解することが重要です。自分が所有しているか、明示的な許可を得ているネットワークのみをスキャンしてください。

では、組み合わせたスキャンを実行しましょう。Xfce 端末を開きます。

  1. 次のコマンドを実行します。
sudo nmap -O -sV 192.168.1.1

パスワードの入力を求められることがあります。labex ユーザーはパスワードなしで sudo 特権を持っているため、Enter キーを押してください。

出力には、対象マシンを調査する際の Nmap の進捗状況が表示されます。開いているポートで実行されているオペレーティングシステムとサービスのバージョンを特定しようとします。

出力の例(実際の出力は対象マシンによって異なります):

Starting Nmap 7.80 ( https://nmap.org )
Nmap scan report for 192.168.1.1
Host is up (0.0012s latency).
Not shown: 997 closed ports
PORT    STATE SERVICE  VERSION
22/tcp  open  ssh      OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (protocol 2.0)
80/tcp  open  http     Apache httpd 2.4.29 ((Ubuntu))
443/tcp open  ssl/http Apache httpd 2.4.29 ((Ubuntu) OpenSSL 1.1.1)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

OS details: Linux 3.2 - 4.9
Network Distance: 1 hop

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

この出力は、Nmap が対象を Linux オペレーティングシステムとして特定し、SSH、HTTP、HTTPS サービスのバージョンを検出したことを示しています。

nmap -O -sV -p 22,80 127.0.0.1 を使って特定のポートをスキャンする

このステップでは、Nmap を使って特定のポートをスキャンすることに焦点を当てます。興味深いサービスが実行されている可能性のあるポートに限定してスキャンを絞り込みたい場合に役立ちます。

このステップで使用するオプションは以下の通りです。

  • -O:オペレーティングシステムの検出を有効にします。
  • -sV:サービスバージョンの検出を有効にします。
  • -p 22,80:スキャンするポートを指定します。この場合、ポート 22(SSH)とポート 80(HTTP)をスキャンしています。単一のポート、ポートの範囲(例:1-100)、またはコンマ区切りのポートのリストを指定できます。
  • 127.0.0.1:これはループバックアドレスで、自分自身のマシンを指します。

特定のポートをスキャンすることで、スキャン時間を大幅に短縮し、対象マシンで実行されているサービスを特定しやすくなります。

では、スキャンを実行しましょう。Xfce 端末を開きます。

  1. 次のコマンドを実行します。
sudo nmap -O -sV -p 22,80 127.0.0.1

パスワードの入力を求められることがあります。labex ユーザーはパスワードなしで sudo 特権を持っているため、Enter キーを押してください。

出力には、ローカルマシンのポート 22 と 80 を調査する際の Nmap の進捗状況が表示されます。それらのポートで実行されているオペレーティングシステムとサービスのバージョンを特定しようとします。

出力の例(実際の出力はシステム設定によって異なります):

Starting Nmap 7.80 ( https://nmap.org )
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000047s latency).

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.2p1 Ubuntu 4ubuntu0.4 (protocol 2.0)
80/tcp open  http    Apache httpd 2.4.41 ((Ubuntu))
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

OS details: Linux 3.2 - 4.9
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 5.23 seconds

この出力は、Nmap がポート 22 で OpenSSH とポート 80 で Apache httpd を特定したことを示しています。OS 検出により、Linux カーネルバージョンに関する情報も提供されています。

nmap -v -O -sV 192.168.1.1 を使って詳細表示を追加する

このステップでは、Nmap スキャンに詳細表示を追加します。詳細表示により、スキャンプロセスに関するより詳細な情報が提供され、トラブルシューティングや Nmap の動作方法の理解に役立ちます。

このステップで使用するオプションは以下の通りです。

  • -v:詳細モードを有効にします。このオプションにより、スキャン中に表示される情報量が増えます。さらに詳細な表示には -vv を使用できます。
  • -O:オペレーティングシステムの検出を有効にします。
  • -sV:サービスバージョンの検出を有効にします。
  • 192.168.1.1:これは対象の IP アドレスです。最初のステップと同様に、これをスキャンしたいマシンの実際の IP アドレスに置き換えてください。そうでない場合は、有効な IP アドレスに置き換える必要があります。

詳細モードは、Nmap が実際に何を行っているか、送信しているプローブや受信している応答などを正確に確認するのに役立ちます。

では、詳細表示付きでスキャンを実行しましょう。Xfce 端末を開きます。

  1. 次のコマンドを実行します。
sudo nmap -v -O -sV 192.168.1.1

パスワードの入力を求められることがあります。labex ユーザーはパスワードなしで sudo 特権を持っているため、Enter キーを押してください。

出力は以前のスキャンよりも詳細になります。ホスト探索、ポートスキャン、サービスバージョン検出など、スキャンのさまざまな段階に関する情報が表示されます。

出力の例(実際の出力は対象マシンとネットワーク条件によって異なります):

Starting Nmap 7.80 ( https://nmap.org )
NSE: Loaded 151 scripts for scanning.
Initiating Ping Scan at 14:35
Scanning 192.168.1.1 [4 ports]
Completed Ping Scan at 14:35, 0.00s elapsed (1 total hosts)
Initiating Parallel DNS resolution of 1 host. at 14:35
Completed Parallel DNS resolution of 1 host. at 14:35, 0.00s elapsed
Initiating SYN Stealth Scan at 14:35
Scanning 192.168.1.1 [1000 ports]
Discovered open port 22/tcp on 192.168.1.1
Discovered open port 80/tcp on 192.168.1.1
Discovered open port 443/tcp on 192.168.1.1
Completed SYN Stealth Scan at 14:35, 0.12s elapsed (1000 total ports)
Initiating Service scan at 14:35
Scanning 3 services on 192.168.1.1
Completed Service scan at 14:35, 6.23s elapsed (3 services total)
Initiating OS detection (try #1) against 192.168.1.1
... (more output)...
Nmap scan report for 192.168.1.1
Host is up (0.00088s latency).
Not shown: 997 closed ports
PORT    STATE SERVICE  VERSION
22/tcp  open  ssh      OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (protocol 2.0)
80/tcp  open  http     Apache httpd 2.4.29 ((Ubuntu))
443/tcp open  ssl/http Apache httpd 2.4.29 ((Ubuntu) OpenSSL 1.1.1)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

OS details: Linux 3.2 - 4.9
Network Distance: 1 hop

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

「Initiating Ping Scan」や「Initiating Service scan」など、スキャンフェーズに関する追加情報に注目してください。これは、スキャンプロセスの理解や潜在的な問題の特定に役立ちます。

nmap -O -sV -oN os_service.txt 127.0.0.1 で結果をまとめて保存する

このステップでは、Nmap スキャンの結果をファイルに保存します。これは、後で分析するためや他の人と結果を共有するために便利です。

このステップで使用するオプションは以下の通りです。

  • -O:オペレーティングシステムの検出を有効にします。
  • -sV:サービスバージョンの検出を有効にします。
  • -oN os_service.txt:出力ファイルと形式を指定します。-oN は通常の出力を指定し、人が読みやすい形式になります。出力は現在のディレクトリ(~/project)の os_service.txt ファイルに保存されます。
  • 127.0.0.1:これはループバックアドレスで、自分自身のマシンを指します。

出力をファイルに保存することで、後で結果を確認するためにスキャンを再度実行する必要がなくなります。また、異なるスキャンの結果を比較するのも容易になります。

では、スキャンを実行して結果を保存しましょう。Xfce 端末を開きます。

  1. 次のコマンドを実行します。
sudo nmap -O -sV -oN os_service.txt 127.0.0.1

パスワードの入力を求められることがあります。labex ユーザーはパスワードなしで sudo 特権を持っているため、Enter キーを押してください。

出力は通常通り画面に表示されますが、~/project ディレクトリの os_service.txt ファイルにも保存されます。

  1. ファイルが作成され、スキャン結果が含まれていることを確認するには、cat コマンドを使用します。
cat os_service.txt

これにより、端末に os_service.txt ファイルの内容が表示されます。開いているポート、サービス、オペレーティングシステムの情報など、Nmap スキャン結果が表示されるはずです。

出力の例(実際の出力はシステム設定によって異なります):

## Nmap 7.80 scan initiated Mon Aug  8 14:42:30 2022
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000047s latency).
Not shown: 998 closed ports
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.2p1 Ubuntu 4ubuntu0.4 (protocol 2.0)
80/tcp open  http    Apache httpd 2.4.41 ((Ubuntu))
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

OS details: Linux 3.2 - 4.9
Network Distance: 0 hops

## Nmap done: 1 IP address (1 host up) scanned in 5.23 seconds

また、ls -l コマンドを使用して、ファイルサイズと変更日時を確認することもできます。

ls -l os_service.txt

これにより、ファイルのパーミッション、サイズ、最後の変更日時が表示されます。

Xfce 端末でオペレーティングシステムとサービスの出力を分析する

このステップでは、前のステップで保存した Nmap スキャンの出力(os_service.txt)を分析します。対象のオペレーティングシステムと実行中のサービスに関する Nmap が提供する情報の理解に焦点を当てます。

os_service.txt ファイルには、スキャン結果の人が読みやすいレポートが含まれています。重要なセクションを見てみましょう。

  1. 開いているポート:このセクションには、対象マシンで開いているポートが一覧表示されます。開いているポートは、そのポートで接続を待ち受けているサービスがあることを示しています。
  2. サービス:各開いているポートに対して、Nmap は実行中のサービスを識別しようとします。この情報は「SERVICE」列に表示されます。
  3. バージョン:Nmap はまた、サービスのバージョンを特定しようとします。この情報は「VERSION」列に表示されます。サービスのバージョンを知ることは、潜在的な脆弱性を特定するために重要です。
  4. OS の詳細:Nmap は、対象マシンで実行中のオペレーティングシステムを特定しようとします。この情報は「OS details」セクションに表示されます。

では、Xfce 端末で出力を分析しましょう。

  1. cat コマンドを使用して os_service.txt ファイルを開きます。
cat os_service.txt

出力を見てみましょう。以下に似た内容が表示されるはずです(実際の出力はシステム設定によって異なります)。

## Nmap 7.80 scan initiated Mon Aug  8 14:42:30 2022
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000047s latency).
Not shown: 998 closed ports
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.2p1 Ubuntu 4ubuntu0.4 (protocol 2.0)
80/tcp open  http    Apache httpd 2.4.41 ((Ubuntu))
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

OS details: Linux 3.2 - 4.9
Network Distance: 0 hops

## Nmap done: 1 IP address (1 host up) scanned in 5.23 seconds
  1. 出力の分析
    • ポート 22/tcp:このポートは開いており、SSH サービス(OpenSSH 8.2p1 Ubuntu 4ubuntu0.4)が実行されています。SSH は、マシンへのセキュアなリモートアクセスに使用されます。
    • ポート 80/tcp:このポートは開いており、HTTP サービス(Apache httpd 2.4.41 ((Ubuntu)))が実行されています。HTTP は、ウェブページの提供に使用されます。
    • OS の詳細:Nmap は、オペレーティングシステムを Linux(Linux 3.2 - 4.9)と特定しています。

この出力を分析することで、対象マシンの構成と潜在的な脆弱性に関する貴重な洞察を得ることができます。たとえば、サービスのバージョンを知ることで、それらのバージョンに関連する既知の脆弱性を検索することができます。

このステップでは、Nmap スキャンの出力を解釈して、開いているポート、実行中のサービス、およびオペレーティングシステムを特定する方法を示しています。この情報は、セキュリティ評価と浸透テストに不可欠です。

Xfce 端末で個別のスキャンと比較する

このステップでは、統合スキャン(os_service.txt)の結果を、オペレーティングシステム検出とサービスバージョン検出の個別のスキャンを実行した場合の結果と比較します。これにより、統合スキャンの利点と、それが時間を節約できる方法を理解することができます。

これを効果的に行うために、grep を使用して os_service.txt ファイルから関連情報を抽出することで個別のスキャンをシミュレートします。これにより、スキャンを再度実行する必要がなくなり、時間とリソースを節約できます。

  1. オペレーティングシステム検出スキャンをシミュレートする

    os_service.txt ファイルの「OS details」セクションを検索することで、オペレーティングシステム検出スキャンをシミュレートできます。

    次のコマンドを実行します。

grep "OS details" os_service.txt

これにより、OS の詳細が含まれる行が表示され、以下のようになります。

OS details: Linux 3.2 - 4.9
  1. サービスバージョン検出スキャンをシミュレートする

    サービスとバージョン情報を含む行を検索することで、サービスバージョン検出スキャンをシミュレートできます。

    次のコマンドを実行します。

grep -E "[0-9]+/tcp open" os_service.txt

このコマンドは grep -E を使用して拡張正規表現を有効にしています。パターン [0-9]+/tcp open は、数字(ポート番号を表す)で始まり、その後に "/tcp open" が続く行を検索します。これにより、サービスとバージョン情報を含む行が抽出され、以下のようになります。

22/tcp open  ssh     OpenSSH 8.2p1 Ubuntu 4ubuntu0.4 (protocol 2.0)
80/tcp open  http    Apache httpd 2.4.41 ((Ubuntu))
  1. 結果を比較する

    次に、grep コマンドの出力と os_service.txt の完全な出力を比較します。統合スキャンが単一のスキャンで同じ情報をすべて提供することに気付きます。

    統合スキャン(nmap -O -sV)は、1 回のパスでオペレーティングシステム検出とサービスバージョン検出の両方を行うため、効率的です。これにより、全体的なスキャン時間とネットワークトラフィックが削減されます。

要約すると、このステップでは、統合 Nmap スキャンの結果を個別のスキャンを実行した場合の結果と比較する方法を示しています。統合スキャンを使用することで、時間とリソースを節約しながらも、対象に関する包括的な情報を取得することができます。

まとめ

この実験では、Nmap を使用してオペレーティングシステムとサービスバージョンの統合検出を行いました。重要なポイントは、対象マシンで実行されているオペレーティングシステムとサービスのバージョンを特定するために、-O-sV フラグを一緒に使用することです。これにより、対象の構成をより包括的に理解することができます。

また、対象の IP アドレスを指定する方法、-v フラグを使用して冗長性を追加する方法、および -oN オプションを使用してスキャン結果をファイルに保存する方法を学びました。さらに、Xfce 端末での出力の分析と、個別のスキャンとの結果の比較を行い、統合スキャンの有効性を理解する練習を行いました。