Nmap でのスキャン結果の比較

NmapNmapBeginner
今すぐ練習

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

はじめに

この実験では、Nmap のスキャン結果を比較する方法を学びます。この実験では、対象の IP アドレスに対して SYN スキャンと TCP スキャンを行い、出力を別々のファイルに保存し、その後 diff コマンドを使用してこれらのファイルを比較します。また、冗長なスキャンを行い、Xfce 端末で観察された違いを分析します。

まず、nmap -sS -oN syn.txt 192.168.1.1 を使用して SYN スキャンを実行し、nmap -sT -oN tcp.txt 192.168.1.1 を使用して TCP スキャンを実行し、結果をそれぞれ syn.txttcp.txt に保存します。次に、diff syn.txt tcp.txt を使用してこれらのファイルを比較します。さらに、nmap -v -sS 127.0.0.1nmap -v -sT 127.0.0.1 を使用して冗長なスキャンを行い、比較結果を Xfce テキストエディタに保存して Xfce 端末で分析します。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL nmap(("Nmap")) -.-> nmap/NmapGroup(["Nmap"]) nmap/NmapGroup -.-> nmap/tcp_connect_scan("Basic TCP Connect Scan") nmap/NmapGroup -.-> nmap/save_output("Save Output to File") nmap/NmapGroup -.-> nmap/timing_performance("Timing and Performance") nmap/NmapGroup -.-> nmap/verbosity("Verbosity Levels") nmap/NmapGroup -.-> nmap/syn_scan("SYN Scan") subgraph Lab Skills nmap/tcp_connect_scan -.-> lab-547091{{"Nmap でのスキャン結果の比較"}} nmap/save_output -.-> lab-547091{{"Nmap でのスキャン結果の比較"}} nmap/timing_performance -.-> lab-547091{{"Nmap でのスキャン結果の比較"}} nmap/verbosity -.-> lab-547091{{"Nmap でのスキャン結果の比較"}} nmap/syn_scan -.-> lab-547091{{"Nmap でのスキャン結果の比較"}} end

nmap -sS -oN syn.txt 192.168.1.1 を使って SYN スキャンを実行して保存する

このステップでは、Nmap を使って SYN スキャンを実行し、出力をファイルに保存します。SYN スキャンは、半開放スキャンとも呼ばれ、対象システム上の TCP ポートの状態を判断するための TCP ポートスキャンの一種です。「半開放」と呼ばれるのは、スキャンホストが TCP 接続ハンドシェイクを完了しないからです。代わりに、SYN パケットを送信して応答を分析します。この手法は、完全な TCP 接続を確立しないため、一部のファイアウォールや侵入検知システムによる検出を回避する可能性があり、完全な TCP 接続スキャンよりも隠密性が高いです。

コマンドの解説は以下の通りです。

  • nmap:Nmap のコマンドラインスキャナー。
  • -sS:SYN スキャン手法を指定します。
  • -oN syn.txt:出力を通常の(人が読みやすい)形式で syn.txt という名前のファイルに保存することを指定します。
  • 192.168.1.1:対象の IP アドレスを指定します。これを、実際にスキャンしたい対象の IP アドレスに置き換えてください。仮想環境でこの実験を行っている場合、127.0.0.1(localhost)を対象として使用することもできます。

コマンドを実行しましょう。まず、~/project ディレクトリにいることを確認してください。

cd ~/project

次に、SYN スキャンを実行します。

sudo nmap -sS -oN syn.txt 192.168.1.1

:SYN スキャンを実行するには、生のパケットを送信する必要があるため、sudo 権限が必要になる場合があります。異なる対象 IP アドレスを使用している場合は、192.168.1.1 を正しい IP に置き換えてください。localhost をスキャンする場合は、127.0.0.1 を使用できます。

スキャンが完了したら、syn.txt ファイルの内容をテキストエディタまたは cat コマンドを使って表示できます。

cat syn.txt

出力には、スキャン中に収集されたオープンポートやその他の情報が表示されます。正確な出力は、対象システムとその設定によって異なります。

出力の例(特定の出力は異なります):

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:00 UTC
Nmap scan report for 192.168.1.1
Host is up (0.00020s latency).
Not shown: 997 filtered ports
PORT    STATE SERVICE
22/tcp  open  ssh
80/tcp  open  http
443/tcp open  https

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

この出力は、対象システム上のポート 22、80、443 がオープンであることを示しています。「フィルタリングされた」ポートは、ファイアウォール規則やネットワーク状況のため、Nmap がそれらのポートがオープンか閉じているかを判断できなかったことを意味します。

nmap -sT -oN tcp.txt 192.168.1.1 を使って TCP スキャンを実行して保存する

このステップでは、Nmap を使って TCP 接続スキャンを実行し、出力をファイルに保存します。-sT オプションで指定される TCP 接続スキャンは、Nmap が各ポートで対象ホストと完全な TCP 接続を確立しようとする基本的な TCP スキャンの形式です。これには、3 手のハンドシェイク(SYN、SYN-ACK、ACK)を完了する必要があります。信頼性は高いですが、対象システムが接続をログに残すため、この方法は簡単に検出されやすいです。

コマンドの解説は以下の通りです。

  • nmap:Nmap のコマンドラインスキャナー。
  • -sT:TCP 接続スキャン手法を指定します。
  • -oN tcp.txt:出力を通常の(人が読みやすい)形式で tcp.txt という名前のファイルに保存することを指定します。
  • 192.168.1.1:対象の IP アドレスを指定します。これを、実際にスキャンしたい対象の IP アドレスに置き換えてください。仮想環境でこの実験を行っている場合、127.0.0.1(localhost)を対象として使用することもできます。

コマンドを実行しましょう。まず、~/project ディレクトリにいることを確認してください。

cd ~/project

次に、TCP 接続スキャンを実行します。

sudo nmap -sT -oN tcp.txt 192.168.1.1

:TCP 接続スキャンには sudo が必ずしも必要ではありませんが、一貫性のために使用することや、潜在的な許可問題を回避するために使用するのは良い慣例です。異なる対象 IP アドレスを使用している場合は、192.168.1.1 を正しい IP に置き換えてください。localhost をスキャンする場合は、127.0.0.1 を使用できます。

スキャンが完了したら、tcp.txt ファイルの内容をテキストエディタまたは cat コマンドを使って表示できます。

cat tcp.txt

出力には、スキャン中に収集されたオープンポートやその他の情報が表示されます。正確な出力は、対象システムとその設定によって異なります。

出力の例(特定の出力は異なります):

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:05 UTC
Nmap scan report for 192.168.1.1
Host is up (0.00020s latency).
Not shown: 997 closed ports
PORT    STATE SERVICE
22/tcp  open  ssh
80/tcp  open  http
443/tcp open  https

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

この出力は、対象システム上のポート 22、80、443 がオープンであることを示しています。「閉じている」ポートは、Nmap が SYN パケットに対する応答として RST(リセット)パケットを受信したことを意味し、そのポートが閉じていることを示しています。

diff syn.txt tcp.txt を使ってファイルを比較する

このステップでは、前のステップで作成した syn.txttcp.txt の 2 つのファイルを diff コマンドを使って比較します。diff コマンドは、2 つのファイル間の違いを特定するための強力なツールです。このコマンドは、ファイルを 1 行ずつ比較し、追加、削除、または修正箇所を強調表示します。

diff コマンドを実行する前に、SYN スキャン (-sS) と TCP 接続スキャン (-sT) の出力が異なる理由を理解することが重要です。SYN スキャンは「半開放」スキャンであり、完全な TCP ハンドシェイクを完了しません。これにより、隠密性が高まりますが、ファイアウォールやネットワークデバイスが最初の SYN パケットや応答をブロックする場合があるため、ある場合には信頼性が低くなります。一方、TCP 接続スキャンは完全な TCP ハンドシェイクを完了するため、信頼性が高くなりますが、検出されやすくなります。

ファイルを比較するには、次のコマンドを使用します。

diff syn.txt tcp.txt

このコマンドは、syn.txttcp.txt の 2 つのファイルを比較し、端末に違いを表示します。

出力の例(特定の出力は対象システムとネットワーク状況によって異なります):

2,4c2,4
< Nmap scan report for 192.168.1.1
< Host is up (0.00020s latency).
< Not shown: 997 filtered ports
---
> Nmap scan report for 192.168.1.1
> Host is up (0.00020s latency).
> Not shown: 997 closed ports
5c5
< 22/tcp  open  ssh
---
> 22/tcp  open  ssh
6c6
< 80/tcp  open  http
---
> 80/tcp  open  http
7c7
< 443/tcp open  https
---
> 443/tcp open  https
10c10
< Nmap done: 1 IP address (1 host up) scanned in 2.50 seconds
---
> Nmap done: 1 IP address (1 host up) scanned in 2.50 seconds

この例では、出力によると、2 つのファイル間の主な違いは「Not shown」の行です。SYN スキャン (syn.txt) では「997 filtered ports」が表示され、TCP 接続スキャン (tcp.txt) では「997 closed ports」が表示されています。これは、SYN スキャンではフィルタリングのため一部のポートの状態を判断できなかったのに対し、TCP 接続スキャンではそれらのポートが閉じていることがわかったことを示しています。

diff の出力では、次の記号が使用されます。

  • <:最初のファイル (syn.txt) にのみ存在する行を示します。
  • >:2 番目のファイル (tcp.txt) にのみ存在する行を示します。
  • c:行が異なり、ファイルを同一にするために変更する必要があることを示します。

diff の出力を分析することで、2 つのスキャンタイプの違いや、それらが対象システムをどのように認識するかを知ることができます。

nmap -v -sS 127.0.0.1 と nmap -v -sT 127.0.0.1 を使って詳細なスキャンを実行する

このステップでは、詳細モードを有効にして、localhost(127.0.0.1)に対して SYN スキャンと TCP 接続スキャンの両方を実行します。Nmap の -v オプションは、詳細レベルを上げ、スキャンプロセスに関するより詳細な情報を提供します。これは、Nmap の動作方法を理解したり、問題のトラブルシューティングに役立ちます。

まず、詳細な SYN スキャンを実行しましょう。

sudo nmap -v -sS 127.0.0.1

このコマンドは、localhost に対して SYN スキャンを実行し、端末に詳細な出力を表示します。スキャンの進行状況に関するより多くの情報が表示され、スキャン対象のポート、スキャンのタイミング、発生したエラーや警告などがわかります。

出力の例(特定の出力は異なります):

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:15 UTC
NSE: Loaded 0 scripts for scanning.
Initiating SYN Stealth Scan
Scanning 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
Discovered open port 443/tcp on 127.0.0.1
Completed SYN Stealth Scan at 10:15, 2.50s elapsed (1000 total ports)
Nmap scan report for 127.0.0.1
Host is up (0.000020s latency).
Not shown: 997 filtered ports
PORT    STATE SERVICE
22/tcp  open  ssh
80/tcp  open  http
443/tcp open  https

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

次に、詳細な TCP 接続スキャンを実行します。

sudo nmap -v -sT 127.0.0.1

このコマンドは、localhost に対して TCP 接続スキャンを実行し、詳細な出力を表示します。

出力の例(特定の出力は異なります):

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:16 UTC
NSE: Loaded 0 scripts for scanning.
Initiating Connect Scan
Scanning 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
Discovered open port 443/tcp on 127.0.0.1
Completed Connect Scan at 10:16, 3.00s elapsed (1000 total ports)
Nmap scan report for 127.0.0.1
Host is up (0.000020s latency).
Not shown: 997 closed ports
PORT    STATE SERVICE
22/tcp  open  ssh
80/tcp  open  http
443/tcp open  https

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

出力の違いを観察してください。詳細な出力は、実行されているスキャンの種類(「SYN Stealth Scan」または「Connect Scan」)、スキャン対象のポート数、スキャン完了までの時間など、スキャンプロセスに関するより多くの詳細を提供します。また、オープンと判明したポートも見ることができます。

SYN スキャンと TCP 接続スキャンの詳細な出力を比較することで、各スキャンタイプの動作方法と、対象システムとの相互作用をより良く理解することができます。

Xfce のテキストエディタで比較メモを保存する

このステップでは、Xfce のテキストエディタを使って、前のステップでの観察結果と比較内容を保存します。これは、あなたの発見を文書化し、Nmap のスキャンタイプ間の違いを理解するための重要なステップです。

まず、Xfce のテキストエディタを開きます。これは、Xfce のアプリケーションメニューから「テキストエディタ」を検索するか、端末で次のコマンドを実行することで行えます。

mousepad notes.txt

このコマンドは、Xfce のテキストエディタ(Mousepad)を開き、~/project ディレクトリに新しい notes.txt ファイルを作成します。

次に、テキストエディタで、SYN スキャンと TCP 接続スキャンの違いに関するあなたの観察結果を書き留めましょう。以下の点を考えてみてください。

  • 速度:どちらのスキャンタイプが速かったですか?
  • 精度:両方のスキャンタイプが同じオープンポートを特定しましたか?そうでなければ、その理由は何でしょう?
  • 隠密性:どちらのスキャンタイプがより隠密的と考えられ、なぜですか?
  • ファイアウォール回避:ファイアウォールはどのようにして各スキャンタイプを異なる方法で扱うでしょうか?
  • 詳細出力:詳細なスキャンから何か追加情報を得ましたか?

以下は、あなたのメモの例です。

Nmap スキャン比較メモ:

SYN スキャン (-sS):
- TCP 接続スキャンより速い。
- フィルタリングされたポートのため、精度が低い場合がある。
- 完全な TCP ハンドシェイクを完了しないため、より隠密的と考えられる。
- ファイアウォールが SYN パケットをブロックする可能性があり、結果が不正確になる。

TCP 接続スキャン (-sT):
- SYN スキャンより遅い。
- 完全な TCP ハンドシェイクを完了するため、より信頼性が高い。
- 容易に検出されるため、隠密性が低い。
- ファイアウォールにブロックされる可能性が低く、より正確な結果を提供する。

詳細出力 (-v):
- スキャンプロセスに関するより詳細な情報を提供する。
- Nmap の動作方法を理解したり、問題のトラブルシューティングに役立つ。
- 実行されているスキャンの種類とスキャン対象のポート数を表示する。

観察された違い:
- SYN スキャンでは「フィルタリングされた」ポートが報告され、TCP 接続スキャンでは「閉じている」ポートが報告された。
- これは、一部のポートがフィルタリングされており、SYN スキャンがそれらの状態を判断できなかったことを示している。

メモを書き終えたら、テキストエディタの「ファイル」→「保存」をクリックするか、Ctrl+S を押してファイルを保存します。

この notes.txt ファイルは、次のステップで Xfce 端末での違いを分析する際に使用されます。

Xfce 端末での違いを分析する

このステップでは、前のステップで保存したメモを基に、Xfce 端末を使って SYN スキャンと TCP 接続スキャンの違いをさらに分析します。コマンドラインツールを使って特定のパターンを検索し、スキャン結果を比較します。

まず、Xfce 端末を開きます。

次に、最初の 2 つのステップの Nmap スキャン結果が格納されている syn.txttcp.txt ファイルの内容を表示するために cat コマンドを使いましょう。

cat syn.txt
cat tcp.txt

両方のコマンドの出力を調べます。報告されたポート状態(オープン、クローズド、フィルタリングされた)やスキャン完了にかかった時間など、スキャン結果の違いに注目します。

次に、grep コマンドを使ってスキャン結果の中から特定のキーワードを検索します。たとえば、両方のファイルから "open" という単語を検索できます。

grep "open" syn.txt
grep "open" tcp.txt

これらのコマンドの出力を比較します。両方のスキャンが同じオープンポートを報告していますか?そうでなければ、どのような違いがありますか?

また、"closed" や "filtered" などの他のキーワードを検索して、スキャン結果をさらに分析することもできます。

次に、diff コマンドを再度使って syn.txttcp.txt ファイルを比較します。

diff syn.txt tcp.txt

diff コマンドの出力を見直します。これは、2 つのファイルの違いを示す行を強調表示します。報告されたポート状態の違いを示す行に注目します。

最後に、前のステップの観察結果が記載されている notes.txt ファイルの内容を表示するために cat コマンドを使います。

cat notes.txt

自分の観察結果を振り返り、スキャン結果と diff コマンドの出力と比較します。自分の観察結果はスキャン結果と一致していますか?不一致の説明ができますか?

Xfce 端末とコマンドラインツールを使って Nmap スキャン結果を分析することで、SYN スキャンと TCP 接続スキャンの違いと、対象システムとの相互作用をより深く理解することができます。この分析は、さまざまな状況でどのスキャンタイプを使用するかを判断する際に役立ちます。

まとめ

この実験では、まずコマンド nmap -sS -oN syn.txt 192.168.1.1 を使って Nmap を用いて対象の IP アドレス(192.168.1.1 または localhost)に対して SYN スキャンを行いました。これには、完全な接続を確立することなく、より隠密性の高い「半開」TCP ポートスキャンとしての SYN スキャンの目的を理解することが含まれていました。スキャンの出力は通常の形式で syn.txt という名前のファイルに保存されました。

重要な学びは、Nmap を使って SYN スキャンを実行する方法、コマンドのパラメータ(SYN スキャン用の -sS、ファイルへの通常の出力用の -oN)を解釈すること、および生のパケットの使用による sudo 特権の潜在的な必要性を理解することでした。また、cat syn.txt を使ってスキャン結果を表示する方法も学びました。