はじめに
この実験では、Nmap で TCP Null スキャンを実行する方法を学びます。この実験では、Null スキャンのさまざまな側面を扱い、特定の IP アドレスに対して基本的な Null スキャンを実行したり、定義されたポート範囲をスキャンしたり、スキャンに冗長性を追加したり、スキャン結果を保存したり、Null スキャンと SYN スキャンを比較したり、Xfce 端末で結果を確認したりします。
すべての TCP フラグがゼロに設定される Null スキャンは、ポートの状態を判断するのに役立ちますが、特定のファイアウォールやパケットをフラグなしでドロップするシステムのため、必ずしも信頼性が高いとは限りません。一連の Nmap コマンドを通じて、さまざまな Null スキャン操作の実践的な経験を得ることができます。
nmap -sN 192.168.1.1 で Null スキャンを実行する
このステップでは、Nmap を使って Null スキャンを実行します。Null スキャンは、すべての TCP フラグがゼロに設定される TCP スキャンの一種です。これは、TCP ヘッダにはフラグ(SYN、ACK、RST、FIN、URG、PSH)が設定されていないことを意味します。Null スキャンへの応答は、ポートの状態を判断するのに役立ちます。
以下は、Null スキャンの動作の概要です。
- Null スキャン:フラグが設定されていない TCP パケットを送信します。
- オープンまたはフィルタリングされたポート:ポートがオープンまたはフィルタリングされている場合、応答はありません。
- クローズドポート:ポートがクローズドの場合、ターゲットホストは RST(リセット)パケットで応答します。
Null スキャンは必ずしも信頼性が高くないことに注意する必要があります。なぜなら、一部のファイアウォールやシステムは、フラグが設定されていないパケットをドロップする場合があるからです。
では、IP アドレス 192.168.1.1 に対して Null スキャンを実行しましょう。Xfce 端末を開き、次のコマンドを実行します。
sudo nmap -sN 192.168.1.1
このコマンドは、Nmap に対象の IP アドレス 192.168.1.1 に対して Null スキャン (-sN) を実行するように指示します。Nmap を実行するには sudo 権限が必要です。
出力には、ターゲットマシン上のポートの状態が表示されます。Null スキャンはしばしば確定的な答えを提供しないため、ポートが open|filtered または closed として表示される場合があります。
出力例(実際の出力はターゲットによって異なります):
Starting Nmap 7.80 ( https://nmap.org )
Nmap scan report for 192.168.1.1
Host is up (0.00028s latency).
All 1000 scanned ports on 192.168.1.1 are filtered
Nmap done: 1 IP address (1 host up) scanned in 3.21 seconds
この例では、1000 個のスキャンされたポートすべてがフィルタリングされていると報告されています。これは、ファイアウォールルールやその他のネットワーク構成のため、Nmap がポートがオープンかクローズドかを判断できなかったことを意味します。
nmap -sN -p 1-100 127.0.0.1 でポート範囲をスキャンする
このステップでは、スキャンするポート範囲を指定することで、Null スキャンの使用方法を拡張します。これにより、すべての 1000 個のデフォルトポートをスキャンするのではなく、関心のある特定のポートに焦点を当ててスキャンすることができます。localhost(127.0.0.1)のポート 1 から 100 までをスキャンします。
Nmap の -p オプションを使うと、ポート範囲を指定できます。構文は -p <開始ポート>-<終了ポート> です。今回の場合、ポート 1 から 100 までをスキャンするために -p 1-100 を使います。
Xfce 端末を開き、次のコマンドを実行します。
sudo nmap -sN -p 1-100 127.0.0.1
このコマンドは、Nmap に対象の localhost(127.0.0.1)のポート 1 から 100(-p 1-100)に対して Null スキャン(-sN)を実行するよう指示します。Nmap を実行するには sudo 権限が必要であることに注意してください。
出力には、ターゲットマシン上のポート 1-100 の状態が表示されます。前回の Null スキャンと同様に、結果は必ずしも確定的ではなく、ポートが open|filtered または closed として表示される場合があります。
出力例(実際の出力は異なります):
Starting Nmap 7.80 ( https://nmap.org )
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0000090s latency).
Not shown: 99 filtered ports
PORT STATE SERVICE
7/tcp closed echo
Nmap done: 1 IP address (1 host up) scanned in 0.12 seconds
この例では、ポート 7(echo)はクローズドと報告され、他の 99 個のポートはフィルタリングされています。これは、ターゲットホストがポート 7 に対して RST パケットで応答した一方、他のポートは応答しなかったか、またはその応答がファイアウォールによってブロックされたことを示しています。
nmap -v -sN 192.168.1.1 で詳細度を追加する
このステップでは、Null スキャンに冗長性を追加します。Nmap の冗長性は、スキャンプロセスに関するより詳細な情報を提供します。これは、Nmap が何をしているかを理解するのに役立ち、問題のトラブルシューティングにも役立ちます。
Nmap の -v オプションは、冗長性レベルを上げます。さらに冗長性を上げるには、-v を複数回使用できます(例えば、-vv)。このステップでは、単一の -v を使用します。
Xfce 端末を開き、次のコマンドを実行します。
sudo nmap -v -sN 192.168.1.1
このコマンドは、Nmap に対象の IP アドレス 192.168.1.1 に対して Null スキャン (-sN) を実行し、冗長性を上げる (-v) よう指示します。Nmap を実行するには sudo 権限が必要です。
出力は、以前の Null スキャンよりも詳細になります。スキャンの進行状況、スキャンされているポート、および発生するエラーや警告に関する情報が表示されます。
出力例(実際の出力はターゲットによって異なります):
Starting Nmap 7.80 ( https://nmap.org )
NSE: Loaded 0 scripts for scanning.
Initiating Null scan for 192.168.1.1
Scanning 192.168.1.1 [1000 ports]
Completed Null scan for 192.168.1.1
Nmap scan report for 192.168.1.1
Host is up (0.00028s latency).
All 1000 scanned ports on 192.168.1.1 are filtered
Nmap done: 1 IP address (1 host up) scanned in 3.21 seconds
出力に追加された行、たとえば "NSE: Loaded 0 scripts for scanning."、"Initiating Null scan for 192.168.1.1"、"Scanning 192.168.1.1 [1000 ports]"、および "Completed Null scan for 192.168.1.1" をご覧ください。これらの行は、スキャンプロセスに関するより深い洞察を提供します。
nmap -sN -oN null.txt 127.0.0.1 で Null スキャン結果を保存する
このステップでは、Null スキャンの結果をファイルに保存します。これは、後での分析や調査結果の文書化に役立ちます。Nmap は、さまざまな形式でスキャン結果を保存するためのいくつかのオプションを提供しています。ここでは、通常の人間が読みやすい形式で結果を保存する -oN オプションを使用します。
-oN オプションは、ファイル名を引数にとります。今回の場合、結果を ~/project ディレクトリ内の null.txt という名前のファイルに保存します。
Xfce 端末を開き、次のコマンドを実行します。
sudo nmap -sN -oN null.txt 127.0.0.1
このコマンドは、Nmap に対象の localhost(127.0.0.1)に対して Null スキャン (-sN) を実行し、結果を通常の形式 (-oN) で null.txt というファイルに保存するよう指示します。Nmap を実行するには sudo 権限が必要です。
スキャンが完了した後、cat コマンドや nano のようなテキストエディタを使って null.txt ファイルの内容を表示できます。
cat null.txt
出力例(実際の出力は異なります):
## Nmap 7.80 scan initiated Mon Oct 26 14:35:00 2020
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0000090s latency).
All 1000 scanned ports on localhost (127.0.0.1) are filtered
## Nmap done at Mon Oct 26 14:35:03 2020 -- 1 IP address (1 host up) scanned in 3.21 seconds
また、nano でファイルを開くこともできます。
nano null.txt
これにより、nano テキストエディタで null.txt ファイルが開き、内容を表示および編集できるようになります。
Xfce 端末で SYN スキャンとの比較による Null スキャン
このステップでは、Null スキャンの結果と SYN スキャンの結果を比較します。これにより、これら 2 つのスキャンタイプの違いと、ターゲットに関するさまざまな情報を収集するための使い方を理解できるようになります。
SYN スキャン(半オープンスキャンとも呼ばれます)は、TCP ハンドシェイクを完了させない、よりステルスなスキャンです。ターゲットに SYN パケットを送信し、ターゲットが SYN/ACK で応答する場合、そのポートが開いていることを示します。その後、Nmap は接続を閉じるために RST パケットを送信します。
一方、Null スキャンでは、フラグが設定されていない TCP パケットを送信します。ターゲットの応答は、ターゲットのオペレーティングシステムとファイアウォールの設定に応じて、ポートが開いているか、閉じているか、フィルタリングされているかを示すことができます。
まず、localhost(127.0.0.1)に対して SYN スキャンを実行し、結果を syn.txt という名前のファイルに保存しましょう。
Xfce 端末を開き、次のコマンドを実行します。
sudo nmap -sS -oN syn.txt 127.0.0.1
このコマンドは、Nmap に対象の localhost(127.0.0.1)に対して SYN スキャン (-sS) を実行し、結果を通常の形式 (-oN) で syn.txt というファイルに保存するよう指示します。Nmap を実行するには sudo 権限が必要です。
次に、前のステップで作成した null.txt の内容と syn.txt の内容を比較しましょう。2 つのファイルを比較するには、diff コマンドを使用できます。
diff null.txt syn.txt
diff コマンドは、2 つのファイルの違いを表示します。また、nano のようなテキストエディタを使って両方のファイルを開き、横並びに比較することもできます。
nano null.txt syn.txt
両方のスキャンの出力を調べてみましょう。特に、ターゲットシステムがフラグが設定されていないパケットをドロップするように構成されている場合、SYN スキャンの方が Null スキャンよりも開いているポートを特定しやすいことに気付くかもしれません。Null スキャンは、ファイアウォールや侵入検知システムを迂回しようとするためによく使われますが、必ずしも信頼性が高いわけではありません。
主な違いは、SYN スキャンが接続を確立しようとするのに対し、Null スキャンはフラグが設定されていないパケットを送信し、ターゲットの応答に基づいてポートの状態を推測する点です。
Xfce 端末で結果を確認する
このステップでは、前のステップで行った Null スキャンと SYN スキャンの結果を確認します。これには、出力ファイル(null.txt と syn.txt)を調べ、それに含まれる情報を解釈することが必要です。
Xfce 端末を開き、cat コマンドまたは nano エディタを使って両方のファイルの内容を表示します。
cat null.txt
cat syn.txt
または、nano を使う場合:
nano null.txt
nano syn.txt
結果を確認する際には、以下の点を考慮してください。
- ホストの状態:ターゲットホストが「起動中」または「停止中」と報告されているかどうかを確認します。ホストが停止している場合、Nmap は多くの情報を収集できない場合があります。
- ポートの状態:各ポートの状態を確認します。一般的なポート状態には、「開いている」、「閉じている」、「フィルタリングされている」などがあります。
- 開いている:ポートが接続を待ち受けていることを示します。
- 閉じている:ポートが接続を待ち受けていないことを示します。
- フィルタリングされている:ファイアウォールやその他のネットワークデバイスがポートへのアクセスをブロックしており、その状態を判断するのが難しいことを示します。
- Null スキャンと SYN スキャンの違い:2 つのスキャンの結果を比較します。一方のスキャンが他方よりも多くの開いているポートを特定しましたか?一方のスキャンでは「フィルタリングされている」と報告されたポートが、他方のスキャンでは「閉じている」と報告されたものはありましたか?
たとえば、null.txt ではすべてのポートがフィルタリングされている場合があります。
## Nmap 7.80 scan initiated Mon Oct 26 14:35:00 2020
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0000090s latency).
All 1000 scanned ports on localhost (127.0.0.1) are filtered
## Nmap done at Mon Oct 26 14:35:03 2020 -- 1 IP address (1 host up) scanned in 3.21 seconds
一方、syn.txt では一部のポートが開いている場合があります。
## Nmap 7.80 scan initiated Mon Oct 26 14:36:00 2020
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0000090s latency).
PORT STATE SERVICE
22/tcp open ssh
25/tcp closed smtp
80/tcp open http
111/tcp open rpcbind
...
## Nmap done at Mon Oct 26 14:36:03 2020 -- 1 IP address (1 host up) scanned in 3.21 seconds
異なるスキャンタイプの結果を比較することで、ターゲットシステムのセキュリティ状況をより包括的に理解することができます。結果の精度は、ファイアウォール、侵入検知システム、ターゲットのオペレーティングシステムの設定など、さまざまな要因に影響を受けることがあることを忘れないでください。
まとめ
この実験では、参加者は Nmap を使って TCP Null スキャンを実行する方法を学びました。まず、コマンド sudo nmap -sN 192.168.1.1 を使って IP アドレス 192.168.1.1 に対して Null スキャンを実行し、Null スキャンはすべての TCP フラグをゼロに設定し、応答を使ってポートの状態を判断できることを理解しました。また、127.0.0.1 の特定のポート範囲(1 - 100)をスキャンし、スキャンに冗長性を追加し、結果をファイルに保存し、Null スキャンと SYN スキャンを比較し、Xfce 端末で結果を確認する方法も学びました。一部のファイアウォールやシステムがフラグが設定されていないパケットをドロップするため、Null スキャンは必ずしも信頼性が高いわけではないことが指摘されました。



