はじめに
この実験では、Nmap を使って TCP FIN スキャンを行う方法を学びます。まず、対象の IP に対して基本的な FIN スキャンを行い、次に特定のポートをスキャンし、スキャンに詳細度を追加して結果を保存します。さらに、FIN スキャンと TCP スキャンを比較し、Xfce 端末で開いているポートを分析します。FIN スキャンは、対象ホストに FIN パケットを送信します。これにより、特定のファイアウォールや侵入検知システムを迂回することができます。
この実験では、Nmap を使って TCP FIN スキャンを行う方法を学びます。まず、対象の IP に対して基本的な FIN スキャンを行い、次に特定のポートをスキャンし、スキャンに詳細度を追加して結果を保存します。さらに、FIN スキャンと TCP スキャンを比較し、Xfce 端末で開いているポートを分析します。FIN スキャンは、対象ホストに FIN パケットを送信します。これにより、特定のファイアウォールや侵入検知システムを迂回することができます。
このステップでは、Nmap を使って FIN スキャンを行う方法を学びます。FIN スキャンは、TCP スキャンの一種で、対象ホストに FIN(終了)パケットを送信します。接続を確立しようとする SYN スキャンとは異なり、FIN スキャンは単に FIN パケットを送信して応答を観察します。これは、特定のファイアウォールや侵入検知システムを迂回する際に役立つ場合があります。
始める前に、FIN パケットが何かを明確にしましょう。TCP 通信において、FIN フラグは接続の終了を示します。ホストが FIN パケットを送信するとき、それは基本的に「データの送信が終了しました」と言っていることになります。
では、FIN スキャンを実行しましょう。Xfce 端末を開きます。
次のコマンドを実行します:
sudo nmap -sF 192.168.1.1
-sF
:このオプションは Nmap に FIN スキャンを実行させるように指示します。192.168.1.1
:これは対象の IP アドレスです。異なる場合は、スキャンしたいマシンの実際の IP アドレスに置き換えてください。LabEx VM からアクセス可能な対象マシンの IP アドレスに合わせて、IP アドレス 192.168.1.1
を調整する必要がある場合があります。特定の対象がない場合は、ゲートウェイの IP アドレスやローカルネットワーク内の別のデバイスを使用できます。分からない場合は、127.0.0.1
(localhost)を使って自分自身のマシンをスキャンしてみることができます。
出力には、対象マシンの各ポートの状態が表示されます。開いているポートは通常、FIN パケットに応答しませんが、閉じているポートは RST(リセット)パケットで応答します。フィルタリングされたポートはまったく応答しない場合があり、その状態を判断するのが難しくなります。
出力の例(実際の出力は対象によって異なります):
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.00043s latency).
Not shown: 999 closed ports
PORT STATE SERVICE
22/tcp filtered ssh
Nmap done: 1 IP address (1 host up) scanned in 2.18 seconds
この例では、ポート 22(SSH)はフィルタリングされていると表示されています。これは、ファイアウォールルールやその他のネットワーク条件のため、Nmap がそのポートが開いているか閉じているかを判断できなかったことを意味します。「Not shown: 999 closed ports」の行は、出力を簡潔に保つために、Nmap が 999 個の閉じているポートを表示しなかったことを示しています。
前のステップでは、基本的な FIN スキャンを行う方法を学びました。ここでは、FIN スキャン中に特定のポートを対象にする方法を学びます。これは、特定のポート(たとえば SSH(ポート 22)や HTTP(ポート 80))で実行される可能性のあるサービスに焦点を当てたい場合に役立ちます。
ポートを指定することで、スキャン時間を大幅に短縮し、結果をより関連性の高いものにすることができます。65535 個のすべてのポートをスキャンする代わりに、最も関心がありそうなポートに集中することができます。
Xfce 端末を開きます。
次のコマンドを実行します:
sudo nmap -sF -p 22,80 127.0.0.1
-sF
:このオプションは Nmap に FIN スキャンを実行させるように指示します。-p 22,80
:このオプションは、ポート 22 と 80 をスキャンしたいことを指定します。単一のポート、ポートの範囲(たとえば 1-100
)、またはコンマ区切りのポートのリストを指定できます。127.0.0.1
:これは対象の IP アドレスで、この場合は自分自身のマシン(localhost)です。出力には、マシンのポート 22 と 80 の状態が表示されます。
出力の例:
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.000027s latency).
PORT STATE SERVICE
22/tcp filtered ssh
80/tcp filtered http
Nmap done: 1 IP address (1 host up) scanned in 0.12 seconds
この例では、ポート 22 と 80 の両方がフィルタリングされていると表示されています。これは、Nmap がこれらのポートが開いているか閉じているかを判断できなかったことを意味します。これは FIN スキャンで一般的な結果であり、特にファイアウォールが設置されている場合になります。
このステップでは、Nmap の FIN スキャンの詳細情報を増やす方法を学びます。詳細情報は、スキャンプロセスに関するより詳細な情報を提供し、トラブルシューティングや結果の理解に役立ちます。
Nmap の -v
オプションは、詳細レベルを増やします。さらに詳細な出力を得るには、これを複数回使用できます(たとえば -vv
)。
Xfce 端末を開きます。
次のコマンドを実行します:
sudo nmap -v -sF 192.168.1.1
-v
:このオプションは詳細レベルを増やします。-sF
:このオプションは Nmap に FIN スキャンを実行させるように指示します。192.168.1.1
:これは対象の IP アドレスです。必要に応じて、これを有効な IP アドレスに置き換えてください。出力には、スキャンに関するより多くの情報が含まれます。たとえば、送信および受信されるパケット、特定の決定の理由、全体的な進捗状況などです。
出力の例(実際の出力は対象とネットワーク条件によって異なります):
Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:10 UTC
NSE: Loaded 0 scripts for scanning.
Initiating Ping Scan at 10:10
Scanning 192.168.1.1 [2 ports]
Completed Ping Scan at 10:10, 0.00s elapsed (1 total hosts)
Initiating FIN Scan at 10:10
Scanning 192.168.1.1 [1000 ports]
Completed FIN Scan at 10:10, 2.12s elapsed (1000 total ports)
Nmap scan report for 192.168.1.1
Host is up (0.00038s latency).
Not shown: 999 closed ports
PORT STATE SERVICE
22/tcp filtered ssh
Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 2.18 seconds
Raw packets sent: 1001 (44.044KB) | Rcvd: 1 (44B)
NSE スクリプトの読み込み、ピングと FIN スキャンの開始と完了時間、送信および受信されたパケット数など、提供される追加情報に注目してください。この詳細レベルは、ネットワークのトラブルシューティングやスキャン結果の分析において非常に貴重です。
このステップでは、Nmap の FIN スキャン結果をファイルに保存する方法を学びます。これは、後での分析、レポート作成、または他のスキャンとの比較に役立ちます。
Nmap は、さまざまな形式でスキャン結果を保存するためのいくつかのオプションを提供しています。-oN
オプションは、結果を「通常の」人が読みやすい形式で保存します。
Xfce 端末を開きます。
次のコマンドを実行します:
sudo nmap -sF -oN fin.txt 127.0.0.1
-sF
:このオプションは Nmap に FIN スキャンを実行させるように指示します。-oN fin.txt
:このオプションは、結果を通常の形式で fin.txt
という名前のファイルに保存したいことを指定します。ファイルは現在のディレクトリ(~/project
)に保存されます。127.0.0.1
:これは対象の IP アドレスで、この場合は自分自身のマシン(localhost)です。スキャンが完了すると、nano
のようなテキストエディタで fin.txt
ファイルを開くことで、保存された結果を表示できます。
nano fin.txt
ファイルには、スキャン中に画面に表示されたのと同じ情報が構造化された形式で含まれています。
fin.txt
の例の内容:
## 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.000027s latency).
Not shown: 999 closed ports
PORT STATE SERVICE
22/tcp filtered ssh
## Nmap done at Tue Oct 27 10:15:02 2023 -- 1 IP address (1 host up) scanned in 1.89 seconds
このファイルを使って、さらなる分析やレポート作成を行うことができます。
このステップでは、FIN スキャンの結果と TCP 接続スキャンの結果を比較します。この比較により、これらのスキャンがオープンポートを識別する方法の違いや、ファイアウォールがそれらを異なる方法で扱うかどうかが明らかになります。
TCP 接続スキャン(-sT
)は、対象との完全な TCP 接続を確立します。これにより、より信頼性が高くなりますが、検出されやすくなります。一方、FIN スキャン(-sF
)は、FIN パケットを送信します。これは、ファイアウォールによるログ記録の可能性が低くなりますが、必ずしも正確な結果を提供するとは限りません。
Xfce 端末を開きます。
まず、localhost(127.0.0.1)に対して TCP 接続スキャンを実行します:
sudo nmap -sT 127.0.0.1
このコマンドは、ローカルマシンの各ポートとの完全な TCP 接続を確立しようとします。
次に、同じ対象に対して FIN スキャンを実行します:
sudo nmap -sF 127.0.0.1
ここで、2 つのスキャンの結果を比較します。TCP 接続スキャンが FIN スキャンよりも多くのオープンポートを識別することに気付くかもしれません。これは、一部のファイアウォールやシステムが FIN パケットをブロックまたは無視する可能性があるため、結果が不正確になるからです。
TCP 接続スキャンの出力例:
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.000026s latency).
Not shown: 997 closed ports
PORT STATE SERVICE
22/tcp open ssh
631/tcp open ipp
3306/tcp open mysql
Nmap done: 1 IP address (1 host up) scanned in 0.12 seconds
FIN スキャンの出力例:
Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:21 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000026s latency).
Not shown: 999 closed ports
PORT STATE SERVICE
22/tcp filtered ssh
Nmap done: 1 IP address (1 host up) scanned in 1.89 seconds
この例では、TCP 接続スキャンではポート 22、631、3306 がオープンと表示されていますが、FIN スキャンではポート 22 のみがフィルタリングされていると表示されています。これは、異なるスキャンタイプが異なる結果を生成する方法を示しており、ネットワーク調査を行う際にさまざまな手法を使用することが重要である理由を示しています。filtered
状態は、ファイアウォール、フィルタ、またはその他のネットワーク障害がポートをブロックしており、Nmap がそれがオープンか閉じているかを判断できないことを意味します。
このステップでは、前回のスキャンで特定されたオープンポートを分析して、対象システム上で実行されているサービスを理解します。これには、Nmap の出力を解釈して、各オープンポートの目的を調べる作業が必要です。
Xfce 端末を開きます。
前のステップで TCP 接続スキャン(sudo nmap -sT 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.000026s latency).
Not shown: 997 closed ports
PORT STATE SERVICE
22/tcp open ssh
631/tcp open ipp
3306/tcp open mysql
Nmap done: 1 IP address (1 host up) scanned in 0.12 seconds
この出力は、ローカルマシン上のポート 22、631、3306 がオープンであることを示しています。では、これらの各ポートを分析してみましょう。
これらのサービスをさらに調査するには、netstat
やss
などの他のツールを使用して、これらのポートをリッスンしているプロセスを確認できます。たとえば、ポート 22 をリッスンしているプロセスを確認するには、次のコマンドを使用できます。
sudo netstat -tulnp | grep :22
このコマンドは、ポート 22 をリッスンしているプロセス ID(PID)とプロセス名を表示します。
出力例:
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1234/sshd
この出力は、sshd
プロセス(SSH デーモン)がポート 22 をリッスンしていることを示しています。
オープンポートとそれらを介して実行されているサービスを分析することで、対象システムのセキュリティ状況を把握し、潜在的な脆弱性を特定することができます。
この実験では、Nmap を使って TCP FIN スキャンを行う方法を学びました。まず、コマンド nmap -sF
に続けて対象の IP アドレスを指定して基本的な FIN スキャンを行いました。また、特定のポートをスキャンしたり、スキャンの詳細度を高めたり、結果をファイルに保存する方法も学びました。さらに、FIN スキャンと TCP スキャンを比較し、Xfce 端末でオープンポートを分析しました。FIN スキャンは、対象ホストに FIN パケットを送信し、特定のファイアウォールや侵入検知システムを迂回するのに役立ちます。