パケットフラグメンテーションによる高度なファイアウォール回避
このステップでは、パケットフラグメンテーションと呼ばれる、より高度なファイアウォール回避技術を探索します。取り組む前に、パケットフラグメンテーションが何かを理解しましょう。ネットワークを介してデータを送信する際、データはパケットと呼ばれる小さな単位に分割されます。一部のファイアウォールや侵入検知システム(Intrusion Detection Systems, IDS)は、これらのパケットを検査して悪意のある活動の兆候を探すように設計されています。しかし、これらのセキュリティシステムは、さらに小さな断片に分割されたフラグメント化されたパケットの処理に苦労することがあります。この困難性が、スキャン中に特定のセキュリティ対策を回避する機会を生み出すことがあります。
スキャンのターゲットとして、引き続きローカルの HTTP サーバを使用します。まず、前回のスキャンを行ったターミナルで適切なディレクトリに移動する必要があります。このディレクトリにはプロジェクトファイルが格納されており、コマンドが正しく動作するためにはこのディレクトリにいることが重要です。これを行うには、次のコマンドを実行します。
cd /home/labex/project
適切なディレクトリに移動したので、Nmap のフラグメンテーションオプションを使用してスキャンを実行する準備ができました。このオプションは、IP パケットをより小さな断片に分割し、パケットフィルタがスキャンを検出しにくくします。使用するコマンドは次の通りです。
sudo nmap -f -Pn --reason -p 8000 localhost
このコマンドの追加オプション -f を分解してみましょう。-f オプションは、Nmap に IP パケットをフラグメント化するように指示します。これにより、パケットフィルタがパケットを分析し、スキャンを検出することがより困難になります。
コマンドを実行した後、次のような出力が表示されるはずです。
Starting Nmap 7.80 ( https://nmap.org ) at 2025-03-18 16:46 CST
Nmap scan report for localhost (127.0.0.1)
Host is up, received user-set (0.000062s latency).
Other addresses for localhost (not scanned): ::1
PORT STATE SERVICE REASON
8000/tcp open http-alt syn-ack ttl 64
Nmap done: 1 IP address (1 host up) scanned in 0.08 seconds
この出力は、スキャンの結果を示しています。ホスト(localhost)が稼働しており、ポート 8000 が開いていることを教えてくれます。
次に、これらの結果を別のファイルに保存します。こうすることで、後で結果を参照し、他のスキャン結果と比較することができます。結果を保存するには、次のコマンドを実行します。
sudo nmap -f -Pn --reason -p 8000 localhost > /home/labex/project/nmap_frag_scan.txt
このコマンドの > 記号は、Nmap スキャンの出力を指定されたファイルにリダイレクトします。
ここで、このファイルの内容を確認して、結果が正しく保存されたことを確認しましょう。ファイルの内容を表示するために使用される cat コマンドを使用します。
cat /home/labex/project/nmap_frag_scan.txt
スキャン結果は前回のスキャンと似ているかもしれませんが、根底にある技術は異なります。この場合、Nmap は IP パケットを小さな断片に分割しているため、ステートレスなパケットフィルタがスキャンを検出することが難しくなります。
これまでに使用した 2 つのスキャン方法、通常のスキャンとフラグメント化されたスキャンを比較しましょう。この比較を保存するための新しいファイルを作成します。そのためのコマンドは次の通りです。
echo "Comparing regular scan vs. fragmented scan:" > /home/labex/project/scan_comparison.txt
echo "---------------------------------------------" >> /home/labex/project/scan_comparison.txt
echo "" >> /home/labex/project/scan_comparison.txt
echo "1. Regular scan with -Pn:" >> /home/labex/project/scan_comparison.txt
cat /home/labex/project/nmap_scan.txt >> /home/labex/project/scan_comparison.txt
echo "" >> /home/labex/project/scan_comparison.txt
echo "2. Fragmented scan with -f -Pn:" >> /home/labex/project/scan_comparison.txt
cat /home/labex/project/nmap_frag_scan.txt >> /home/labex/project/scan_comparison.txt
これらのコマンドは、まず比較ファイルにヘッダーを書き込み、次に通常のスキャンとフラグメント化されたスキャンの結果をファイルに追加します。
では、比較ファイルの内容を表示して、比較を確認しましょう。
cat /home/labex/project/scan_comparison.txt
制御された環境では、2 つのスキャンの結果は似ているかもしれません。しかし、実際のシナリオでは、これらの異なる技術は、異なるファイアウォール構成に対してさまざまなレベルの成功を収めることができます。パケットフラグメンテーション(-f)は、ステートレスなパケットフィルタに対して特に有効です。ステートレスなパケットフィルタは各パケットを独立して検査し、多くの場合、断片を再組み立てて完全なパケットを検査することができません。これにより、フラグメント化されたスキャンがこれらのフィルタを回避する可能性が高くなります。
さらに高度なフラグメンテーションを行うために、Nmap では複数の -f フラグ(例:-ff)を使用するか、--mtu オプションでカスタムの最大転送単位(Maximum Transmission Unit, MTU)サイズを指定することで、フラグメンテーションのレベルを上げることができます。MTU は、ネットワークを介して送信できるパケットの最大サイズです。カスタムの MTU を指定することで、パケットがどのようにフラグメント化されるかを制御することができます。
この技術は、セキュリティ評価を行う際に、パケットフラグメンテーションがファイアウォール検出を回避する追加の方法としてどのように使用できるかを示しています。