Nmap でファイアウォールを回避する

Beginner
今すぐ練習

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

はじめに

この実験では、実際のサイバーセキュリティシナリオにおいて、ファイアウォールの保護を回避するための高度な Nmap 技術を学びます。iptables で設定されたファイアウォールを対象に、断片化スキャンやデコイ IP 偽装などの回避手法を実践します。

実践的な演習を通じて、Nmap のインストール、ファイアウォールルールの設定、結果の分析を学びます。制御されたスキャン実験を通じて、ネットワークセキュリティ対策の評価と回避に関する実践的な経験を積むことができます。


Skills Graph

Nmap のインストール

このステップでは、セキュリティ監査やネットワーク探索に使用される強力なネットワークスキャンツールである Nmap をインストールします。Nmap は、パケットを送信して応答を分析することで、ネットワーク上のホストとサービスを特定します。ネットワークに接続されているデバイスとそれらが実行しているサービスを発見するデジタル地図作成者のようなものです。

LabEx の仮想マシン (VM) 環境にはすでに必要な依存関係がインストールされているため、インストールプロセスは簡単です。以下の手順に従って Nmap をインストールします。

  1. LabEx VM のターミナルを開きます (Xfce ターミナルを使用するか、デスクトップを右クリックして「ターミナルを開く」を選択します)。この実験でのすべてのコマンドはこのターミナルで入力します。

  2. まず、最新バージョンを取得するためにパッケージリストを更新します。これは、新しいソフトウェアをダウンロードする前にアプリストアを更新するのと同じです。

    sudo apt update
  3. 次のコマンドを使用して Nmap をインストールします。-y フラグは、インストール中のすべてのプロンプトを自動的に承認します。

    sudo apt install -y nmap
  4. インストールが完了したら、バージョンを確認することで Nmap が正しくインストールされたことを検証します。これにより、インストールが成功したことが確認できます。

    nmap --version

    次のような出力が表示されるはずです。

    Nmap version 7.92 ( https://nmap.org )
  5. さらに検証するために、ローカルホスト (自分のマシン) に対して簡単なスキャンを実行します。これにより、他のターゲットをスキャンする前に Nmap の動作を理解することができます。

    nmap -sV 127.0.0.1

    このコマンドは、ローカルマシン (127.0.0.1) をスキャンし、開いているポートを表示します (-sV フラグはサービスのバージョンを検出します)。マシン上で実行されているサービスのリストが表示され、Nmap の出力形式を理解するのに役立ちます。

ファイアウォールで保護されたターゲットの準備

このステップでは、iptables を使用して簡単なファイアウォールを設定し、Nmap スキャンテスト用の保護されたターゲット環境を作成します。ファイアウォールはネットワークトラフィックを制御するセキュリティバリアとして機能し、ファイアウォールを通過してスキャンする方法を理解することは、ネットワークセキュリティの専門家にとって不可欠です。この設定は、ネットワークスキャンがファイアウォールの保護を回避する必要がある実際のシナリオをシミュレートします。

  1. まず、システムに iptables がインストールされていることを確認しましょう。iptables は、Linux でファイアウォールルールを設定するためのユーザー空間のユーティリティプログラムです。LabEx VM には事前にインストールされているはずです。

    sudo iptables --version
  2. 新しいルールを作成する前に、既存のファイアウォールルールをクリアすることが良い習慣です。これにより、クリーンな状態から始めることができ、以前の設定との競合を避けることができます。

    sudo iptables -F
    sudo iptables -X
  3. 次に、デフォルトポリシーを設定します。デフォルトポリシーは、特定のルールに一致しないパケットに対する処理を決定します。すべての入力トラフィックと転送トラフィックを破棄 (DROP) し、出力接続を許可 (ACCEPT) します。

    sudo iptables -P INPUT DROP
    sudo iptables -P FORWARD DROP
    sudo iptables -P OUTPUT ACCEPT
  4. 厳格なファイアウォールルールがあっても、ローカルホスト (lo) の通信を許可する必要があります。多くのシステムサービスは内部通信に依存しているため、この例外は必要です。

    sudo iptables -A INPUT -i lo -j ACCEPT
  5. 保護された Web サーバーをシミュレートするための特定のルールを作成しましょう。これらのルールは、SSH (22)、HTTP (80)、HTTPS (443) の標準ポートでの入力トラフィックのみを許可し、典型的な本番サーバーの設定を模倣します。

    sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT  ## SSH
    sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT  ## HTTP
    sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT ## HTTPS
  6. ルールを設定した後、それらを検証することが重要です。-L フラグはすべてのルールをリストし、-n は数値出力を表示し (高速で DNS ルックアップを回避します)、-v は詳細情報を提供します。

    sudo iptables -L -n -v

    一致しないトラフィックに対するデフォルトの DROP ポリシーとともに、設定したルールが表示されるはずです。

  7. 最後に、ルールを永続化するために保存します。このステップは、Docker 内では systemctl を使用して再起動後もルールを維持できないため、LabEx 環境では特に重要です。

    sudo sh -c "iptables-save > /etc/iptables.rules"

断片化スキャンの実行

このステップでは、Nmap を使用して断片化スキャンを実行し、基本的なファイアウォールの保護を回避する方法を学びます。ファイアウォールは通常、完全なネットワークパケットを検査しますが、断片化によってパケットが小さな断片に分割されると、断片を再組み立てしない単純なファイアウォールルールでは検出が困難になります。

  1. まず、前のステップで設定したファイアウォールルールがまだ有効であることを確認します。これにより、回避技術をテストする前のベースラインを確立することができます。

    sudo iptables -L -n -v
  2. 回避技術を使用せずに、ローカルホストに対して標準的な Nmap SYN スキャンを実行し、ファイアウォールがどのように応答するかを確認します。これにより、どのポートがアクティブにブロックされているかがわかります。

    nmap -sS 127.0.0.1

    フィルタリングされているまたは閉じていると表示されるポートをメモしておきましょう。これらはファイアウォールが保護しているポートです。

  3. 次に、-f オプションを使用して断片化スキャンを実行します。これにより、Nmap は TCP ヘッダを複数の小さなパケット (8 バイトの断片) に分割します。

    nmap -f -sS 127.0.0.1

    一部のファイアウォールでは、これらの断片を適切に再組み立てできないため、スキャンが通過する可能性があります。

  4. より積極的な断片化を行うには、--mtu オプションを使用してパケットサイズを小さくします。これにより、最大転送単位 (Maximum Transmission Unit) が 16 バイトに設定され、さらに小さな断片が作成されます。

    nmap --mtu 16 -sS 127.0.0.1

    小さな断片は、より単純なファイアウォールの実装を回避する可能性があります。

  5. 断片化とタイミング制御を組み合わせて、さらに隠密性を高めます。-T2 オプションを使用すると、スキャンが遅くなり、侵入検知システムをトリガーする可能性が低くなります。

    nmap -f -T2 -sS 127.0.0.1

    このアプローは、より通常のネットワークトラフィックパターンを模倣します。

  6. 異なるスキャンタイプの結果を比較して、断片化の有効性を評価します。

    nmap -sS 127.0.0.1 | grep filtered
    nmap -f -sS 127.0.0.1 | grep filtered

    フィルタリングされたポートの数に違いがあるか注意してください。フィルタリングされたポートが少ないほど、ファイアウォールの回避が成功していることを示します。

デコイ IP の追加

このステップでは、Nmap のデコイスキャン技術を使用して、複数の偽の送信元アドレスの中に実際の IP アドレスを隠す方法を学びます。これにより、実際のスキャン元のマシンを特定するのが難しくなり、検知を回避することができます。セキュリティシステムが複数の IP からのトラフィックを見ると、どれが実際のスキャナーかを簡単に判断することができません。

  1. まず、現在の IP アドレスを確認して、隠そうとしているものを把握します。これによりベースラインが確立され、デコイ IP が実際のアドレスをどのように隠すかを確認できます。

    ip a

    実際の IP アドレス (通常は 172 または 192 で始まります) をメモしておきましょう。このアドレスをデコイの中に隠すことになります。

  2. -D オプションを使用して、デコイ IP を使った基本的なスキャンを実行します。ここでは 3 つの偽の IP を指定し、ME プレースホルダーで実際の IP を含めます。

    sudo nmap -D 192.168.1.1,192.168.1.2,192.168.1.3,ME 127.0.0.1

    ME プレースホルダーは実際の IP アドレスを表し、デコイと混在します。

  3. より現実的なデコイを使用するには、ランダムな IP アドレスを使います。これは予測可能な IP パターンを使用するよりも良い場合が多いです。

    sudo nmap -D RND:5 127.0.0.1

    これにより、監視システムにとってより自然に見える 5 つのランダムなデコイ IP アドレスが生成されます。

  4. デコイを、断片化 (-f) やタイミング制御 (-T2) などの以前の回避技術と組み合わせます。

    sudo nmap -D 10.0.0.1,10.0.0.2,10.0.0.3 -f -T2 127.0.0.1

    複数の回避方法を組み合わせることで、検知がさらに困難になります。

  5. ファイアウォールログ (シミュレート) を確認して、デコイの効果を検証します。これにより、ファイアウォールが複数の送信元 IP をどのように認識するかがわかります。

    sudo iptables -L -n -v | grep -E "192.168|10.0"

    スキャンで使用したすべてのデコイ IP のエントリが表示されるはずです。

  6. 高度な使用方法として、デコイネットワークを指定します。これにより、同じネットワークからのデコイアドレスの範囲が作成されます。

    sudo nmap -D 192.168.1.1-10 127.0.0.1

    これにより、192.168.1.0 ネットワークから 10 個の連続したデコイ IP が生成されます。

回避の成功を確認する

この最後のステップでは、ファイアウォールのログを分析し、異なる方法でのスキャン結果を比較することで、スキャン回避技術の有効性を評価します。これにより、どの技術がファイアウォールの検知を成功裏に回避し、どの技術が疑わしい活動として検知されたかを理解することができます。

  1. まず、現在のファイアウォールのログを確認して、検知されたスキャン試行を確認します。これにより、回避方法をテストする前の通常のファイアウォールの活動がどのようなものかを把握することができます。

    sudo iptables -L -n -v | grep -E "DROP|REJECT"

    このコマンドは、ファイアウォールのルールによってブロックされたパケットの数を表示し、カウンターは検知試行を示します。

  2. 次に、比較のために 2 つのスキャンレポートを作成します。1 つは基本的なスキャンを使用し、もう 1 つは回避技術を使用します。これらの違いが、回避の有効性を示します。

    nmap -sS 127.0.0.1 -oN basic_scan.txt
    nmap -f -D RND:3 127.0.0.1 -oN evasion_scan.txt

    最初のコマンドは標準的な SYN スキャンを実行し、2 番目のコマンドは断片化 (-f) とデコイ IP (-D RND:3) を使用します。

  3. スキャン結果の違いを分析して、それぞれの場合でどのポートがフィルタリングされたかを確認します。

    diff basic_scan.txt evasion_scan.txt

    各レポートの「フィルタリングされた」ポートの数に特に注意してください。回避スキャンでのフィルタリングされたポートが少ないほど、成功した回避を示します。

  4. 具体的に回避の成功を確認するには、ファイアウォールのカウンターをリセットし、検知を監視しながら回避スキャンを実行します。

    sudo iptables -Z && sudo nmap -f -D RND:3 127.0.0.1 && sudo iptables -L -n -v

    カウンターの値は、回避試行中にファイアウォールによって検知されたパケットの数を示します。

  5. 包括的なテストのために、複数の回避技術を組み合わせて、セキュリティを回避する可能性を最大化します。

    sudo nmap -f -D RND:5 -T2 --data-length 24 127.0.0.1 -oN final_scan.txt

    これは、断片化、5 つのデコイ IP、遅いタイミング (-T2)、およびランダムなデータパディング (--data-length 24) を使用します。

  6. 最後に、基本スキャンと回避スキャンの間のフィルタリングされたポートを比較する要約レポートを生成します。

    echo "Basic scan filtered ports:" && grep filtered basic_scan.txt | wc -l
    echo "Evasion scan filtered ports:" && grep filtered evasion_scan.txt | wc -l

    2 つのスキャン間でフィルタリングされたポートが大幅に減少していることは、ファイアウォールの回避が成功したことを示します。

まとめ

この実験では、サイバーセキュリティ評価における重要な Nmap のファイアウォール回避技術を学びました。演習では、Nmap のインストール、基本的なスキャン、および iptables を使用した保護されたネットワークのシミュレーションによる制御されたテスト環境の作成を行いました。

2 つの主要な回避方法を練習しました。検知システムを回避するためのパケット断片化と、スキャンの起点を隠すためのデコイ IP アドレスです。これらのスキルを使うことで、倫理的なテスト基準を維持しながら、実際の攻撃パターンを再現してネットワーク防御を評価することができます。