Nmap で脆弱性をスキャンする

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

はじめに

この実験では、Nmap のvulnスクリプトを使用して脆弱性をスキャンする方法を学びます。このスクリプトは、デフォルトの認証情報、古いソフトウェア、設定誤りなどの一般的な問題をチェックすることで、潜在的なセキュリティ弱点を特定するのに役立ちます。

あなたは、ターゲット IP アドレスに対してvulnスクリプトを実行します(LabEx VM 環境内でのデモ目的で127.0.0.1を使用)、特定のポートをスキャンし、より詳細な出力のために冗長性を追加し、結果をファイルに保存し、その後、Xfce 端末で特定された脆弱性を確認し、サービス検出結果と比較します。

nmap --script vuln 192.168.1.1 で vuln スクリプトを実行する

このステップでは、Nmap のvulnスクリプトを使用して、既知の脆弱性についてターゲット IP アドレスをスキャンします。vulnスクリプトは、システム内の潜在的なセキュリティ弱点を特定するのに役立つ強力なツールです。

始める前に、Nmap スクリプトについて簡単に説明しましょう。Nmap スクリプトは Lua プログラミング言語で書かれており、Nmap の機能を拡張することができます。脆弱性検出、サービス検出、ネットワーク調査など、さまざまなタスクに使用できます。

vulnスクリプトは、一般的な脆弱性を特定するために設計されたスクリプトのコレクションです。デフォルトの認証情報、古いソフトウェアバージョン、設定誤りなど、幅広い問題をチェックします。

まずは、vulnスクリプトを使用してターゲット IP アドレス192.168.1.1をスキャンしましょう。192.168.1.1はプライベート IP アドレスであるため、LabEx VM 環境から直接アクセスできる可能性は低いです。デモ目的で、ターゲットとして127.0.0.1(localhost)を使用します。これは、LabEx VM 上にスキャンできるサービスが実行されていることを前提としています。

Xfce 端末を開き、次のコマンドを実行します。

sudo nmap --script vuln 127.0.0.1

特定のスキャンを実行するには Nmap には多くの場合、昇格された権限が必要になるため、sudoを使用する必要がある場合があります。

このコマンドは、Nmap に対して IP アドレス127.0.0.1に対してvulnスクリプトを実行するように指示します。その後、Nmap はターゲットシステム上の脆弱性を特定しようとします。

出力には、スキャンの結果が表示されます。見つかった脆弱性と、問題の説明と潜在的な対策手順が一覧表示されます。

出力例(実際の出力は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).
Other addresses for localhost (alias(es)): localhost

PORT   STATE SERVICE
22/tcp open  ssh
|_ vulners: Could not find vulnerability results.

80/tcp open  http
|_http-server-header: Apache/2.4.29 (Ubuntu)
|_ vulners: Could not find vulnerability results.

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

この例では、Nmap は127.0.0.1のポート 22 と 80 をスキャンしました。vulnスクリプトセットの一部であるvulnersスクリプトは、それらのポートで実行されているサービスに対して既知の脆弱性を見つけることができませんでした。これは必ずしもシステムが完全に安全であることを意味するわけではありませんが、すぐに明らかな脆弱性がないことを示しています。

nmap --script vuln -p 80 127.0.0.1 で特定のポートをスキャンする

前のステップでは、vulnスクリプトを使用して127.0.0.1のすべてのポートをスキャンしました。このステップでは、特定のポート:ポート 80 に焦点を当ててスキャンします。これは、システム全体をスキャンすることなく、特定のサービスの脆弱性を迅速に確認したい場合に便利です。ポート 80 は一般的に HTTP(ウェブ)トラフィックに使用されます。

Nmap の-pオプションを使用すると、スキャンするポートを指定できます。単一のポート、ポートの範囲、またはコンマ区切りのポートのリストを指定できます。

vulnスクリプトを使用して127.0.0.1のポート 80 のみをスキャンするには、Xfce 端末で次のコマンドを実行します。

sudo nmap --script vuln -p 80 127.0.0.1

このコマンドは、Nmap に対して IP アドレス127.0.0.1のポート 80 に対してvulnスクリプトを実行するように指示します。その後、Nmap はそのポートで実行されているサービスに関連する脆弱性を特定しようとします。

出力は前のステップと同様になりますが、ポート 80 の結果のみが表示されます。

出力例(実際の出力は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).
Other addresses for localhost (alias(es)): localhost

PORT   STATE SERVICE
80/tcp open  http
|_http-server-header: Apache/2.4.29 (Ubuntu)
|_ vulners: Could not find vulnerability results.

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

ご覧の通り、出力はポート 80 にのみ焦点が当てられています。vulnersスクリプトは再び既知の脆弱性を見つけることができませんでした。

特定のポートをスキャンすることで、脆弱性スキャンにかかる時間を大幅に短縮できます。特に、特定のサービスにのみ興味がある場合に役立ちます。

nmap -v --script vuln 192.168.1.1 で冗長モードを追加する

このステップでは、Nmap スキャンに詳細表示を追加します。詳細表示とは、Nmap がスキャンプロセスに関するより詳細な情報を提供することを意味します。これは、Nmap が何をしているかを理解するのに役立ち、発生する可能性のある問題のトラブルシューティングにも役立ちます。

Nmap の-vオプションは詳細度を上げます。さらに詳細度を上げるには、-vを複数回使用できます(たとえば、-vvまたは-vvv)。

詳細表示付きで127.0.0.1に対してvulnスクリプトを実行するには、Xfce 端末で次のコマンドを実行します。

sudo nmap -v --script vuln 127.0.0.1

このコマンドは、Nmap に対して IP アドレス127.0.0.1に対してvulnスクリプトを実行し、詳細な出力を提供するように指示します。

出力には、スキャンプロセスに関するより多くの情報が含まれるようになります。たとえば、実行されているスクリプト、スキャンされているポート、各ステップを完了するのにかかる時間などです。

出力例(実際の出力は127.0.0.1で実行されているサービスに依存し、非詳細な出力よりもはるかに長くなります):

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:10 UTC
NSE: Loaded 151 scripts for scanning.
Initiating Ping Scan at 10:10
Scanning 127.0.0.1 [4 ports]
Completed Ping Scan at 10:10, 0.00s elapsed (1 total hosts)
Initiating Parallel DNS resolution of 1 host. at 10:10
Completed Parallel DNS resolution of 1 host. at 10:10, 0.00s elapsed
Initiating SYN Stealth Scan at 10:10
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
Completed SYN Stealth Scan at 10:10, 0.06s elapsed (1000 total ports)
Initiating Service scan at 10:10
Scanning 2 services on localhost (127.0.0.1)
Completed Service scan at 10:10, 6.41s elapsed (2 services total)
NSE: Script scanning 127.0.0.1.
NSE: Starting runlevel 1 (of 1) scan.
Initiating NSE at 10:10
Completed NSE at 10:10, 1.13s elapsed.
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000073s latency).
Other addresses for localhost (alias(es)): localhost

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 7.6p0 Ubuntu 7ubuntu2.4 (protocol 2.0)
|_ vulners: Could not find vulnerability results.
80/tcp open  http    Apache httpd 2.4.29 ((Ubuntu))
|_http-server-header: Apache/2.4.29 (Ubuntu)
|_ vulners: Could not find vulnerability results.
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

NSE: Script Post-scanning.
Initiating NSE at 10:10
Completed NSE at 10:10, 0.00s elapsed.
Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 7.70 seconds

詳細な出力は、スキャンプロセスのはるかに詳細なビューを提供します。スキャンのさまざまな段階、実行されているスクリプト、および発生する可能性のあるエラーや警告を確認できます。

nmap --script vuln -oN vuln.txt 127.0.0.1 で脆弱性結果を保存する

このステップでは、Nmap の脆弱性スキャンの結果をファイルに保存する方法を学びます。これは、後の分析、レポート作成、または時間の経過に伴う結果の比較に役立ちます。

Nmap は、さまざまな形式でスキャン結果を保存するためのいくつかのオプションを提供しています。-oNオプションは、「通常の」人が読みやすい形式で結果を保存します。他のオプションには、XML 形式用の-oXや Grep 可能な形式用の-oGがあります。

vulnスクリプトのスキャン結果を通常の形式でvuln.txtという名前のファイルに保存するには、Xfce 端末で次のコマンドを実行します。

sudo nmap --script vuln -oN vuln.txt 127.0.0.1

このコマンドは、Nmap に対して IP アドレス127.0.0.1に対してvulnスクリプトを実行し、通常の出力形式を使用して結果をvuln.txtファイルに保存するように指示します。vuln.txtファイルは、現在のディレクトリ(~/project)に作成されます。

スキャンが完了した後、nanoのようなテキストエディタを使用してvuln.txtファイルの内容を表示できます。

nano vuln.txt

これにより、nanoエディタでvuln.txtファイルが開き、スキャン結果を確認できます。出力は、-oNオプションなしで Nmap を実行したときに画面に表示されるものと同じになります。

vuln.txtの例の内容(実際の内容は127.0.0.1で実行されているサービスに依存します):

## Nmap 7.80 scan initiated Tue Oct 27 10:15:00 2023
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000073s latency).
Other addresses for localhost (alias(es)): localhost

PORT   STATE SERVICE
22/tcp open  ssh
|_ vulners: Could not find vulnerability results.
80/tcp open  http
|_http-server-header: Apache/2.4.29 (Ubuntu)
|_ vulners: Could not find vulnerability results.

## Nmap done at Tue Oct 27 10:15:07 2023 -- 1 IP address (1 host up) scanned in 7.00 seconds

また、catなどの他の Linux コマンドを使用してファイルを表示することもできます。

cat vuln.txt

スキャン結果をファイルに保存することは、脆弱性評価と浸透テストにおける重要なステップです。これにより、調査結果を文書化し、時間の経過に伴う変化を追跡することができます。

Xfce 端末での脆弱性を確認する

このステップでは、Xfce 端末で直接脆弱性スキャン結果を確認します。これには、対象システム上の潜在的な脆弱性を特定するために、nmap --script vulnコマンドの出力を調べることが含まれます。

まず、もう一度127.0.0.1に対して脆弱性スキャンを実行しましょう。これにより、確認する最新の結果が得られます。Xfce 端末で次のコマンドを実行します。

sudo nmap --script vuln 127.0.0.1

出力を注意深く調べます。vulnスクリプトは、サービスのバージョンと設定を確認することで既知の脆弱性を特定しようとします。潜在的な脆弱性を示す行を探します。

出力には、開いているポートとそれらのポートで実行されているサービスが表示されます。vulnスクリプトセットの一部であるvulnersスクリプトは、サービスのバージョンを既知の脆弱性と照合しようとします。

出力例(実際の出力は127.0.0.1で実行されているサービスに依存します):

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

PORT   STATE SERVICE
22/tcp open  ssh
|_ vulners: Could not find vulnerability results.
80/tcp open  http
|_http-server-header: Apache/2.4.29 (Ubuntu)
|_ vulners: Could not find vulnerability results.

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

この例では、vulnersスクリプトは SSH と HTTP サービスに関して脆弱性結果を見つけることができませんでした。ただし、脆弱性が見つかった場合、出力には特定の脆弱性の詳細と関連するリソースへのリンクが含まれます。

潜在的な脆弱性を示す出力が見られた場合、それらの脆弱性についてさらに調査して、リスクとそれらを軽減する方法を理解します。サービスのバージョン情報(たとえば、「Apache/2.4.29 (Ubuntu)」)を使用して、その特定のソフトウェアバージョンにおける既知の脆弱性を検索することができます。

このステップは、対象システムのセキュリティ状況を理解し、懸念すべき潜在的な領域を特定するために重要です。

Xfce 端末におけるサービス検出と比較する

このステップでは、脆弱性スキャンの結果と Nmap による標準的なサービス検出結果を比較します。これにより、vulnスクリプトが Nmap が通常検出するもの以外の追加情報を提供しているかどうかを理解するのに役立ちます。

まず、127.0.0.1に対して標準的な Nmap サービス検出スキャンを実行します。Xfce 端末で次のコマンドを実行します。

sudo nmap -sV 127.0.0.1

-sVオプションは、Nmap に対してサービスバージョン検出を実行するように指示します。これは、開いているポートで実行されているサービスの特定のバージョンを特定しようとします。

出力例(実際の出力は127.0.0.1で実行されているサービスに依存します):

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

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 7.6p0 Ubuntu 7ubuntu2.4 (protocol 2.0)
80/tcp open  http    Apache httpd 2.4.29 ((Ubuntu))

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

次に、前のステップで実行したnmap --script vuln 127.0.0.1コマンドの出力とこの出力を比較します。

具体的には、以下を探します。

  • サービスバージョン-sVスキャンはvulnスクリプトと同じサービスバージョンを特定しますか?vulnスクリプトは、一般に潜在的な脆弱性を特定するためにサービスバージョン情報に依存します。
  • 脆弱性情報vulnスクリプトは-sVスキャン出力には含まれていない脆弱性に関する追加情報を提供しますか?vulnスクリプトは、サービスバージョンに基づいて既知の脆弱性をチェックするためにvulnersライブラリを使用します。

2 つの出力を比較することで、vulnスクリプトが提供する値をより良く理解することができます。多くの場合、vulnスクリプトは標準的なサービス検出スキャンからは直ちに明らかにならない潜在的な脆弱性を特定します。これは、vulnスクリプトが特定の既知の脆弱性を探すように特別に設計されている一方で、-sVスクリプトは主にサービスとそのバージョンを特定することに焦点を当てているためです。

この比較は、Nmap から得ることができる情報の異なるレベルと、最も包括的なセキュリティ評価を得るために異なるスクリプトとオプションをどのように使用するかを理解するのに役立ちます。

まとめ

この実験では、Nmap のvulnスクリプトを使用して対象システム上の脆弱性をスキャンする方法を検討しました。実験環境のため、127.0.0.1を実際の例として使用して、コマンドnmap --script vuln 127.0.0.1を使用して特定の IP アドレスに対してスクリプトを実行する方法を学びました。この場合、必要な特権のためにsudoが必要なことが多いです。

この実験では、nmap --script vuln -p 80 127.0.0.1を使用して特定のポートをスキャンする方法、nmap -v --script vuln 192.168.1.1を使用して冗長性を増やす方法、およびnmap --script vuln -oN vuln.txt 127.0.0.1を使用してスキャン結果をファイルに保存する方法も示されました。最後に、この実験では、脆弱性スキャン結果を確認し、Xfce 端末内のサービス情報と比較する作業が行われました。