Nmap スキャンフラグの使い方

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

はじめに

Nmap (Network Mapper) は、ネットワークセキュリティと管理における基本的なツールです。この実験(Lab)では、効果的なネットワーク偵察と脆弱性評価を可能にする Nmap スキャンフラグを紹介します。実践を通して、さまざまな Nmap コマンドを使用して、ネットワーク上のホストの発見、ポートのスキャン、サービスの特定を行う方法を学びます。これらのスキルは、ネットワーク管理者が安全なネットワーク環境を維持するために不可欠です。また、セキュリティ専門家にとっても同様に重要です。

Nmap のインストールと基本的なスキャン

Nmap のインストール

ほとんどのシステムでは Nmap はプリインストールされていません。したがって、最初のステップはインストールです。LabEx 環境でターミナルを開き、次のコマンドを実行します。

sudo apt update
sudo apt install nmap -y

インストールが完了したら、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 libpcap-1.9.1 nmap-libdnet-1.12 ipv6
Compiled without:
Available nsock engines: epoll poll select

Nmap の基本を理解する

Nmap は、特別に作成されたパケットをターゲットホストに送信し、その応答を分析することによって機能します。これにより、以下を判断できます。

  • ネットワーク上で利用可能なホスト
  • 提供しているサービス(ポート)
  • 実行しているオペレーティングシステム
  • 使用されているパケットフィルタ/ファイアウォールの種類

Nmap コマンドの基本的な構文は次のとおりです。

nmap [scan type] [options] target

ここで、

  • [scan type] は、実行するスキャンの種類を指定します
  • [options] は、スキャンをカスタマイズするための追加のパラメータです
  • target は、スキャンする IP アドレス、ホスト名、または IP 範囲です

最初のスキャン:ローカルホストのスキャン

自分のマシン(ローカルホスト)の簡単なスキャンから始めましょう。以下を実行します。

nmap localhost

このコマンドは、ローカルマシン上の最も一般的な 1000 個の TCP ポートをスキャンします。出力は次のようになります。

Starting Nmap 7.80 ( https://nmap.org ) at 2023-09-14 15:30 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00010s latency).
Not shown: 996 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
80/tcp   open  http
631/tcp  open  ipp
3306/tcp open  mysql

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

出力は以下を示しています。

  • スキャンの開始時間
  • スキャン対象のホスト(localhost/127.0.0.1)
  • 開いているポートとそれに関連するサービス
  • スキャンの完了時間と統計

スキャン結果の理解

出力を分析してみましょう。

  • PORT: ポート番号とプロトコル(例:22/tcp)を表示します
  • STATE: ポートが開いているか、閉じているか、またはフィルタリングされているかを示します
  • SERVICE: そのポートに関連付けられているサービスを表示します

最も一般的なポートの状態は次のとおりです。

  • open: ポートは接続を受け入れています
  • closed: ポートはアクセス可能ですが、アプリケーションはリッスンしていません
  • filtered: パケットフィルタリングがプローブをブロックしているため、Nmap はポートが開いているかどうかを判断できません

特定のポートのスキャン

特定のポートをスキャンするには、-p フラグの後にポート番号を続けます。

nmap -p 22 localhost

出力はポート 22 にのみ焦点を当てます。

Starting Nmap 7.80 ( https://nmap.org ) at 2023-09-14 15:35 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00013s latency).

PORT   STATE SERVICE
22/tcp open  ssh

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

ポート範囲のスキャン

ハイフンを使用して、ポートの範囲をスキャンできます。

nmap -p 20-25 localhost

これは、ポート 20 から 25 をスキャンします。

Starting Nmap 7.80 ( https://nmap.org ) at 2023-09-14 15:40 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00012s latency).

PORT   STATE  SERVICE
20/tcp closed ftp-data
21/tcp closed ftp
22/tcp open   ssh
23/tcp closed telnet
24/tcp closed priv-mail
25/tcp closed smtp

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

これで、Nmap のインストールと基本的なポートスキャンの実行方法を学びました。次のステップでは、さまざまな Nmap フラグを使用した、より高度なスキャン技術を探求します。

重要な Nmap スキャンフラグの探求

Nmap の基本を理解したところで、スキャンからより多くの制御と情報を提供する、いくつかの重要なスキャンフラグを見ていきましょう。

TCP SYN スキャン (-sS)

TCP SYN スキャンは、root として実行した場合のデフォルトのスキャンタイプです。TCP 接続を完了しないため、「ハーフオープン」スキャンと呼ばれることがよくあります。比較的ステルス性が高く、高速です。

localhost で SYN スキャンを実行してみましょう。

sudo nmap -sS localhost

出力は次のようになります。

Starting Nmap 7.80 ( https://nmap.org ) at 2023-09-14 16:00 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00011s latency).
Not shown: 996 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
80/tcp   open  http
631/tcp  open  ipp
3306/tcp open  mysql

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

TCP Connect スキャン (-sT)

TCP Connect スキャンは、Nmap が root 権限で実行されていない場合のデフォルトのスキャンです。完全な TCP ハンドシェイクを完了するため、より検出されやすくなりますが、場合によってはより信頼性が高くなります。

nmap -sT localhost

出力:

Starting Nmap 7.80 ( https://nmap.org ) at 2023-09-14 16:05 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00014s latency).
Not shown: 996 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
80/tcp   open  http
631/tcp  open  ipp
3306/tcp open  mysql

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

サービスバージョン検出 (-sV)

バージョン検出フラグは、Nmap に開いているポートで実行されているサービスのバージョンを特定するように指示します。

nmap -sV localhost

出力:

Starting Nmap 7.80 ( https://nmap.org ) at 2023-09-14 16:10 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00012s latency).
Not shown: 996 closed ports
PORT     STATE SERVICE  VERSION
22/tcp   open  ssh      OpenSSH 8.2p1 Ubuntu 4ubuntu0.5 (Ubuntu Linux; protocol 2.0)
80/tcp   open  http     Apache httpd 2.4.41 ((Ubuntu))
631/tcp  open  ipp      CUPS 2.3
3306/tcp open  mysql    MySQL 8.0.30-0ubuntu0.20.04.2
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

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

出力に、各サービスの詳細なバージョン情報が含まれるようになったことに注目してください。これは、特定のバージョンに既知の脆弱性が存在する可能性があるため、セキュリティ評価にとって非常に貴重です。

OS 検出 (-O)

OS 検出フラグは、ターゲットのオペレーティングシステムを特定しようとします。

sudo nmap -O localhost

出力:

Starting Nmap 7.80 ( https://nmap.org ) at 2023-09-14 16:15 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00011s latency).
Not shown: 996 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
80/tcp   open  http
631/tcp  open  ipp
3306/tcp open  mysql
Device type: general purpose
Running: Linux 4.X|5.X
OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5
OS details: Linux 4.15 - 5.6
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.57 seconds

Nmap がシステムが Linux カーネルバージョン 4.X または 5.X を実行していることを検出したことに注目してください。

包括的なスキャンのためのフラグの組み合わせ

複数のフラグを組み合わせて、より包括的な結果を得ることができます。たとえば、サービスバージョン検出と OS 検出を組み合わせましょう。

sudo nmap -sV -O localhost

出力:

Starting Nmap 7.80 ( https://nmap.org ) at 2023-09-14 16:20 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00015s latency).
Not shown: 996 closed ports
PORT     STATE SERVICE  VERSION
22/tcp   open  ssh      OpenSSH 8.2p1 Ubuntu 4ubuntu0.5 (Ubuntu Linux; protocol 2.0)
80/tcp   open  http     Apache httpd 2.4.41 ((Ubuntu))
631/tcp  open  ipp      CUPS 2.3
3306/tcp open  mysql    MySQL 8.0.30-0ubuntu0.20.04.2
Device type: general purpose
Running: Linux 4.X|5.X
OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5
OS details: Linux 4.15 - 5.6
Network Distance: 0 hops
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

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

アグレッシブスキャン (-A)

アグレッシブスキャンフラグは、OS 検出、バージョン検出、スクリプトスキャン、およびトレースルートを含むいくつかのスキャンオプションを組み合わせます。

sudo nmap -A localhost

出力(簡潔にするために切り捨てられています):

Starting Nmap 7.80 ( https://nmap.org ) at 2023-09-14 16:25 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00014s latency).
Not shown: 996 closed ports
PORT     STATE SERVICE  VERSION
22/tcp   open  ssh      OpenSSH 8.2p1 Ubuntu 4ubuntu0.5 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
|   3072 e2:5d:9c:5c:62:42:44:cd:fc:31:e0:a6:18:11:69:1c (RSA)
|   256 7d:95:f0:2f:7a:95:3a:4d:f3:52:ef:6f:6b:af:01:71 (ECDSA)
|_  256 90:12:20:de:cb:c0:76:3a:fb:15:db:75:4e:78:fc:d7 (ED25519)
80/tcp   open  http     Apache httpd 2.4.41 ((Ubuntu))
|_http-server-header: Apache/2.4.41 (Ubuntu)
|_http-title: Apache2 Ubuntu Default Page: It works
631/tcp  open  ipp      CUPS 2.3
|_http-server-header: CUPS/2.3 IPP/2.1
|_http-title: Home - CUPS 2.3.1
3306/tcp open  mysql    MySQL 8.0.30-0ubuntu0.20.04.2
| mysql-info:
|   Protocol: 10
|   Version: 8.0.30-0ubuntu0.20.04.2
|   Thread ID: 11
|   Capabilities flags: 65535
|   Some Capabilities: SupportsLoadDataLocal, Support41Auth, Speaks41ProtocolOld, IgnoreSigpipes, DontAllowDatabaseTableColumn, FoundRows, SupportsCompression, ConnectWithDatabase, LongPassword, InteractiveClient, SwitchToSSLAfterHandshake, ODBCClient, Speaks41ProtocolNew, IgnoreSpaceBeforeParenthesis, LongColumnFlag, SupportsTransactions, SupportsMultipleResults, SupportsAuthPlugins, SupportsMultipleStatments
|   Status: Autocommit
|   Salt: \x14\x12\x1Fjw\x182\x15\x0D\x12\x13C\x1F\x14\x0D\x07
|_  Auth Plugin Name: caching_sha2_password
Device type: general purpose
Running: Linux 4.X|5.X
OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5
OS details: Linux 4.15 - 5.6
Network Distance: 0 hops

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

アグレッシブスキャンによって提供される、SSH キー情報、HTTP サーバーの詳細、より詳細な MySQL サービス情報など、追加情報の量が大幅に増えていることに注目してください。

このステップでは、いくつかの重要な Nmap スキャンフラグと、それらを組み合わせてより包括的な結果を得る方法について学びました。次のステップでは、さまざまなシナリオでの実用的なスキャン戦略を探求します。

ネットワークスキャン戦略とタイミング制御

このステップでは、ネットワークスキャン戦略と、Nmap スキャンのタイミングとパフォーマンスを制御する方法について学びます。これは、より大きなネットワークをスキャンする場合や、より慎重に行う必要がある場合に不可欠です。

複数のホストのスキャン

Nmap は、さまざまな方法で複数のホストをスキャンできます。

IP アドレスのリストをスキャンする

スペースで区切られた複数の IP アドレスを指定できます。

nmap 127.0.0.1 127.0.0.2

IP 範囲をスキャンする

CIDR 表記を使用して、IP アドレスの範囲をスキャンできます。

nmap 127.0.0.1/30

このコマンドは、127.0.0.0 から 127.0.0.3 までをスキャンします。出力は次のようになります。

Starting Nmap 7.80 ( https://nmap.org ) at 2023-09-14 16:35 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00013s latency).
Not shown: 996 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
80/tcp   open  http
631/tcp  open  ipp
3306/tcp open  mysql

Nmap scan report for 127.0.0.2
Host is up (0.00015s latency).
All 1000 scanned ports on 127.0.0.2 are closed

Nmap scan report for 127.0.0.3
Host is up (0.00013s latency).
All 1000 scanned ports on 127.0.0.3 are closed

Nmap done: 4 IP addresses (3 hosts up) scanned in 0.92 seconds

ホスト検出オプション

Ping スキャン (-sn)

ポートをスキャンせずに、オンラインになっているホストを知りたいだけの場合があります。Ping スキャンは、これに最適です。

nmap -sn 127.0.0.1/24

このコマンドは、127.0.0.1/24 サブネット全体をスキャンしますが、ポートスキャンなしでホスト検出のみを実行します。出力が長いため、一部のみを表示します。

Starting Nmap 7.80 ( https://nmap.org ) at 2023-09-14 16:40 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00011s latency).
Nmap scan report for 127.0.0.2
Host is up (0.00013s latency).
Nmap scan report for 127.0.0.3
Host is up (0.00014s latency).
...
Nmap done: 256 IP addresses (256 hosts up) scanned in 2.34 seconds

ホスト検出のスキップ (-Pn)

ファイアウォールが ping リクエストをブロックすることがあります。これをバイパスし、ping 応答に関係なくすべてのホストをスキャンするには、-Pn フラグを使用します。

nmap -Pn localhost

出力:

Starting Nmap 7.80 ( https://nmap.org ) at 2023-09-14 16:45 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00012s latency).
Not shown: 996 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
80/tcp   open  http
631/tcp  open  ipp
3306/tcp open  mysql

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

タイミングとパフォーマンス制御

Nmap は、さまざまなスキャンパラメータを調整するいくつかのタイミングテンプレートを提供します。

  • -T0: Paranoid - 非常に遅く、IDS 回避に使用
  • -T1: Sneaky - 遅い、IDS 回避に使用
  • -T2: Polite - 帯域幅の消費を減らすために速度を落とす
  • -T3: Normal - デフォルト、速度と信頼性のバランスをとる
  • -T4: Aggressive - より高速で、ある程度高速で信頼性の高いネットワークを想定
  • -T5: Insane - 非常に高速で、非常に高速なネットワークを想定

アグレッシブスキャンを試してみましょう。

nmap -T4 localhost

出力:

Starting Nmap 7.80 ( https://nmap.org ) at 2023-09-14 16:50 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00011s latency).
Not shown: 996 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
80/tcp   open  http
631/tcp  open  ipp
3306/tcp open  mysql

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

スキャンがデフォルトのスキャンよりもわずかに速く完了したことに注目してください。

出力形式

Nmap は、後で分析やレポート作成のために、さまざまな形式でスキャン結果を保存できます。

通常の出力 (-oN)

スキャン結果を通常の形式でファイルに保存します。

nmap -oN scan_results.txt localhost

このコマンドは、スキャン出力を現在のディレクトリの scan_results.txt に保存します。

XML 出力 (-oX)

スキャン結果を XML 形式で保存します。これは、他のツールで解析するのに役立ちます。

nmap -oX scan_results.xml localhost

すべての形式 (-oA)

スキャン結果をすべての形式(通常、XML、grep 可能)で保存します。

nmap -oA scan_results localhost

これにより、scan_results.nmapscan_results.xml、および scan_results.gnmap の 3 つのファイルが作成されます。

通常の出力ファイルの内容を調べてみましょう。

cat scan_results.txt

出力:

## Nmap 7.80 scan initiated Thu Sep 14 16:55:23 2023 as: nmap -oN scan_results.txt localhost
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00013s latency).
Not shown: 996 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
80/tcp   open  http
631/tcp  open  ipp
3306/tcp open  mysql

## Nmap done at Thu Sep 14 16:55:23 2023 -- 1 IP address (1 host up) scanned in 0.12 seconds

実用的なスキャン戦略

これまで学習したことを組み合わせて、包括的なスキャンのための実用的なスキャン戦略を作成しましょう。

sudo nmap -sS -sV -O -T4 -oA comprehensive_scan localhost

このコマンドは、次のことを行います。

  • SYN ステルススキャンを使用 (-sS)
  • サービスバージョンを検出 (-sV)
  • OS 検出を試行 (-O)
  • アグレッシブなタイミングを使用 (-T4)
  • 結果をすべての形式で保存 (-oA)

出力:

Starting Nmap 7.80 ( https://nmap.org ) at 2023-09-14 17:00 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00012s latency).
Not shown: 996 closed ports
PORT     STATE SERVICE  VERSION
22/tcp   open  ssh      OpenSSH 8.2p1 Ubuntu 4ubuntu0.5 (Ubuntu Linux; protocol 2.0)
80/tcp   open  http     Apache httpd 2.4.41 ((Ubuntu))
631/tcp  open  ipp      CUPS 2.3
3306/tcp open  mysql    MySQL 8.0.30-0ubuntu0.20.04.2
Device type: general purpose
Running: Linux 4.X|5.X
OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5
OS details: Linux 4.15 - 5.6
Network Distance: 0 hops
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

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

これで、包括的なスキャン結果を任意の出力ファイルで表示できます。

ls comprehensive_scan.*

出力:

comprehensive_scan.gnmap  comprehensive_scan.nmap  comprehensive_scan.xml

倫理的な考慮事項

ネットワークスキャンは、所有しているネットワークまたはスキャンする明示的な許可を得ているネットワークでのみ実行する必要があることを忘れないでください。許可されていないスキャンは、次のようになります。

  1. 多くの管轄区域で違法
  2. ネットワーク管理者による敵対行為と見なされる
  3. ネットワークサービスを中断する可能性

この実験環境では、常に許可されている localhost のみをスキャンしました。

これで、さまざまなネットワークスキャン戦略、タイミング制御、および出力形式について学びました。Nmap を使用して効果的なネットワーク偵察を実行するために必要なすべての基礎知識が得られました。

スクリプトスキャンとターゲットサービス分析

このステップでは、Nmap の強力なスクリプトエンジン (NSE) について学び、ターゲットサービス分析を実行する方法を学びます。NSE スクリプトは、特定のサービスと脆弱性に対するより詳細なスキャンを可能にすることで、Nmap の機能を拡張します。

Nmap Scripting Engine (NSE) の紹介

Nmap Scripting Engine を使用すると、ユーザーはさまざまなネットワークタスクを自動化するためのスクリプトを記述して共有できます。Nmap には、さまざまなグループに分類された数百の事前記述スクリプトが付属しています。

  • auth: 認証関連のスクリプト
  • default: -sC でデフォルトで実行されるスクリプト
  • discovery: ホストとサービスの検出
  • exploit: 脆弱性の悪用を試みる
  • malware: マルウェアとバックドアを検出
  • safe: 安全で非侵入型のスクリプト
  • vuln: 脆弱性検出スクリプト

デフォルトスクリプトの実行 (-sC)

-sC フラグは、一般的に安全で有用な情報を提供するデフォルトのスクリプトセットを実行します。

nmap -sC localhost

出力:

Starting Nmap 7.80 ( https://nmap.org ) at 2023-09-14 17:10 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00012s latency).
Not shown: 996 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
| ssh-hostkey:
|   3072 e2:5d:9c:5c:62:42:44:cd:fc:31:e0:a6:18:11:69:1c (RSA)
|   256 7d:95:f0:2f:7a:95:3a:4d:f3:52:ef:6f:6b:af:01:71 (ECDSA)
|_  256 90:12:20:de:cb:c0:76:3a:fb:15:db:75:4e:78:fc:d7 (ED25519)
80/tcp   open  http
|_http-title: Apache2 Ubuntu Default Page: It works
631/tcp  open  ipp
|_http-server-header: CUPS/2.3 IPP/2.1
|_http-title: Home - CUPS 2.3.1
3306/tcp open  mysql
|_mysql-info: ERROR: Script execution failed (use -d to debug)

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

スクリプトが、SSH ホストキーや HTTP ページタイトルなど、各サービスに関する追加情報を提供していることに注目してください。

特定のスクリプトの実行

--script フラグの後にスクリプト名またはカテゴリを指定して、特定のスクリプトを実行できます。

nmap --script=http-title localhost

これは、HTTP ページのタイトルを取得する http-title スクリプトのみを実行します。

Starting Nmap 7.80 ( https://nmap.org ) at 2023-09-14 17:15 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00013s latency).
Not shown: 996 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
80/tcp   open  http
|_http-title: Apache2 Ubuntu Default Page: It works
631/tcp  open  ipp
|_http-title: Home - CUPS 2.3.1
3306/tcp open  mysql

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

カテゴリ別のスクリプトの実行

特定のカテゴリのすべてのスクリプトを実行できます。

nmap --script=discovery localhost

これは、すべての検出スクリプトを実行します。これにより、ネットワークサービスに関する豊富な情報が得られます(出力を簡潔にするために切り捨てています)。

Starting Nmap 7.80 ( https://nmap.org ) at 2023-09-14 17:20 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00014s latency).
Not shown: 996 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
| ssh-hostkey:
|   3072 e2:5d:9c:5c:62:42:44:cd:fc:31:e0:a6:18:11:69:1c (RSA)
|   256 7d:95:f0:2f:7a:95:3a:4d:f3:52:ef:6f:6b:af:01:71 (ECDSA)
|_  256 90:12:20:de:cb:c0:76:3a:fb:15:db:75:4e:78:fc:d7 (ED25519)
80/tcp   open  http
|_http-favicon: Unknown favicon MD5: 6D33949773573A11BEBE0D20AC1B7967
| http-methods:
|_  Supported Methods: GET POST OPTIONS HEAD
|_http-title: Apache2 Ubuntu Default Page: It works
631/tcp  open  ipp
| cups-info:
|   CUPS Server:
|     Server: CUPS/2.3 IPP/2.1
|_    Authentication-Method: Basic
| http-methods:
|_  Supported Methods: GET HEAD OPTIONS POST
|_http-server-header: CUPS/2.3 IPP/2.1
|_http-title: Home - CUPS 2.3.1
3306/tcp open  mysql
| mysql-info:
|   Protocol: 10
|   Version: 8.0.30-0ubuntu0.20.04.2
|   Thread ID: 15
|   Capabilities flags: 65535
|   Some Capabilities: ConnectWithDatabase, SupportsLoadDataLocal, SupportsTransactions, DontAllowDatabaseTableColumn, Support41Auth, InteractiveClient, Speaks41ProtocolOld, FoundRows, IgnoreSigpipes, ODBCClient, SwitchToSSLAfterHandshake, IgnoreSpaceBeforeParenthesis, LongColumnFlag, Speaks41ProtocolNew, SupportsMultipleStatments, LongPassword, SupportsCompression, SupportsMultipleResults, SupportsAuthPlugins
|   Status: Autocommit
|   Salt: \x7FeL)\x0C\x5C#S\x06N%\x1E\x7EYaC
|_  Auth Plugin Name: caching_sha2_password

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

スクリプトスキャンとサービス検出の組み合わせ

最も包括的な結果を得るには、スクリプトスキャンとサービス検出を組み合わせます。

nmap -sV -sC localhost

出力:

Starting Nmap 7.80 ( https://nmap.org ) at 2023-09-14 17:25 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00012s latency).
Not shown: 996 closed ports
PORT     STATE SERVICE VERSION
22/tcp   open  ssh     OpenSSH 8.2p1 Ubuntu 4ubuntu0.5 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
|   3072 e2:5d:9c:5c:62:42:44:cd:fc:31:e0:a6:18:11:69:1c (RSA)
|   256 7d:95:f0:2f:7a:95:3a:4d:f3:52:ef:6f:6b:af:01:71 (ECDSA)
|_  256 90:12:20:de:cb:c0:76:3a:fb:15:db:75:4e:78:fc:d7 (ED25519)
80/tcp   open  http    Apache httpd 2.4.41 ((Ubuntu))
|_http-server-header: Apache/2.4.41 (Ubuntu)
|_http-title: Apache2 Ubuntu Default Page: It works
631/tcp  open  ipp     CUPS 2.3
|_http-server-header: CUPS/2.3 IPP/2.1
|_http-title: Home - CUPS 2.3.1
3306/tcp open  mysql   MySQL 8.0.30-0ubuntu0.20.04.2
|_mysql-info: ERROR: Script execution failed (use -d to debug)
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 9.03 seconds

ターゲットサービス分析

特定のサービスをより詳細に分析することに焦点を当てましょう。

HTTP サービスの分析

HTTP サービスを詳細に分析するには、http-* スクリプトを使用できます。

nmap --script="http-*" -p 80 localhost

これは、ポート 80 に対してすべての HTTP 関連スクリプトを実行します。

Starting Nmap 7.80 ( https://nmap.org ) at 2023-09-14 17:30 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00012s latency).

PORT   STATE SERVICE
80/tcp open  http
|_http-chrono: Request times for /; avg: 32.68ms; min: 32.68ms; max: 32.68ms
|_http-comments-displayer: Couldn't find any comments.
|_http-date: Thu, 14 Sep 2023 17:30:24 GMT; +6s from local time.
|_http-devframework: Couldn't determine the underlying framework or CMS. Try increasing 'httpspider.maxpagecount' value to spider more pages.
|_http-dombased-xss: Couldn't find any DOM based XSS.
|_http-favicon: Unknown favicon MD5: 6D33949773573A11BEBE0D20AC1B7967
|_http-feed: Couldn't find any feeds.
|_http-fetch: Please enter the complete path of the directory to save data in.
|_http-generator: Couldn't find any generator in the HTML headers and body
| http-methods:
|_  Supported Methods: GET POST OPTIONS HEAD
|_http-mobileversion-checker: No mobile version detected.
|_http-referer-checker: Couldn't find any cross-domain scripts.
|_http-security-headers:
| http-server-header:
|   Apache/2.4.41
|_  Apache/2.4.41 (Ubuntu)
|_http-title: Apache2 Ubuntu Default Page: It works
|_http-traceroute: ERROR: Script execution failed (use -d to debug)
|_http-useragent-tester:
|_http-xssed: No previously reported XSS vuln.

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

SSH サービスの分析

同様に、SSH サービスを分析できます。

nmap --script="ssh-*" -p 22 localhost

出力:

Starting Nmap 7.80 ( https://nmap.org ) at 2023-09-14 17:35 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00013s latency).

PORT   STATE SERVICE
22/tcp open  ssh
| ssh-hostkey:
|   3072 e2:5d:9c:5c:62:42:44:cd:fc:31:e0:a6:18:11:69:1c (RSA)
|   256 7d:95:f0:2f:7a:95:3a:4d:f3:52:ef:6f:6b:af:01:71 (ECDSA)
|_  256 90:12:20:de:cb:c0:76:3a:fb:15:db:75:4e:78:fc:d7 (ED25519)
|_ssh-run: ERROR: Script execution failed (use -d to debug)

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

脆弱性スキャン

Nmap には、潜在的な脆弱性を検出できるスクリプトが含まれています。vuln カテゴリを使用すると、セキュリティの問題を特定するのに役立ちます。

nmap --script=vuln localhost

これは、さまざまな脆弱性チェックを実行するため、ある程度の時間がかかる場合があります。出力は次のようになります。

Starting Nmap 7.80 ( https://nmap.org ) at 2023-09-14 17:40 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00012s latency).
Not shown: 996 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
80/tcp   open  http
|_http-csrf: Couldn't find any CSRF vulnerabilities.
|_http-dombased-xss: Couldn't find any DOM based XSS.
| http-slowloris-check:
|   VULNERABLE:
|   Slowloris DOS attack
|     State: LIKELY VULNERABLE
|     IDs:  CVE:CVE-2007-6750
|       Slowloris tries to keep many connections to the target web server open and hold
|       them open as long as possible.  It accomplishes this by opening connections to
|       the target web server and sending a partial request. By doing so, it starves
|       the http server's resources causing Denial Of Service.
|
|     Disclosure date: 2009-09-17
|     References:
|       https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2007-6750
|_      http://ha.ckers.org/slowloris/
|_http-stored-xss: Couldn't find any stored XSS vulnerabilities.
631/tcp  open  ipp
3306/tcp open  mysql

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

この場合、Nmap は、Apache Web サーバーが Slowloris DoS 攻撃に対して脆弱である可能性があることを特定しました。この情報は、システムのセキュリティを確保するのに役立ちます。

包括的なスキャンレポートの作成

次に、これまで学習したすべてを組み合わせて、包括的なセキュリティレポートを作成しましょう。

sudo nmap -sS -sV -O -sC --script=vuln -T4 -oA comprehensive_security_report localhost

このコマンドは、次のことを行います。

  • SYN ステルススキャンを使用 (-sS)
  • サービスバージョンを検出 (-sV)
  • OS 検出を試行 (-O)
  • デフォルトスクリプトを実行 (-sC)
  • 脆弱性検出スクリプトを実行 (--script=vuln)
  • アグレッシブなタイミングを使用 (-T4)
  • 結果をすべての形式で保存 (-oA)

出力は包括的であり、完了までに時間がかかる場合があります。完了すると、セキュリティ分析のために参照できる、さまざまな形式(通常、XML、grep 可能)の詳細なセキュリティレポートが作成されます。

このステップでは、Nmap のスクリプトエンジンを使用して、サービスに関する詳細な情報を収集し、潜在的な脆弱性を検出する方法を学びました。これらの高度な手法は、包括的なネットワークセキュリティ評価に不可欠です。

まとめ

この実験では、ネットワーク偵察とセキュリティ評価に Nmap を使用するための基本を学びました。これで、以下のことを理解できるようになりました。

  1. Nmap のインストール方法と、ホストとポートの基本的なスキャンを実行する方法
  2. さまざまな種類のスキャンのための、Nmap の重要なスキャンフラグの使用方法
  3. 効果的なスキャン戦略を実装し、タイミングパラメータを制御する方法
  4. 詳細なサービス分析と脆弱性検出のために、Nmap Scripting Engine を活用する方法

これらのスキルは、ネットワークセキュリティ評価の基礎を形成し、サイバーセキュリティ専門家にとって不可欠です。これらのテクニックは常に責任を持って使用し、スキャンする許可を得ているネットワークでのみ使用するようにしてください。

サイバーセキュリティの旅を続ける中で、カスタム NSE スクリプトの開発、ファイアウォール回避技術、および他のセキュリティツールとの統合など、より高度な Nmap の機能を検討してください。Nmap を定期的に練習することで、ネットワーク環境における潜在的なセキュリティ問題を特定する能力を向上させることができます。