Nmap によるステルスネットワークスキャンの実施

NmapBeginner
オンラインで実践に進む

はじめに

この実験では、ネットワークの発見とセキュリティ監査のための強力なオープンソースツールである Nmap を使用したステルスネットワークスキャンを実行する方法を学習します。ステルススキャンはサイバーセキュリティにおいて非常に重要であり、セキュリティ専門家はネットワークの脆弱性を特定しながら、検出のリスクを軽減できます。

基本的なステルススキャンからより高度な非公開方法へと、さまざまな Nmap スキャン手法を探求します。これらのスキルは、既存のセキュリティシステムをトリガーしたり、ネットワーク上の潜在的な脅威を警告したりすることなく、ネットワーク監査を行うセキュリティ専門家にとって不可欠です。この実験の終わりまでに、Nmap のステルススキャンに関する実践的な経験を習得し、これらの技術を実際のセキュリティ評価に適用する方法を理解するでしょう。

テスト環境の設定

このステップでは、ステルスネットワーク監査のための環境を準備します。スキャン対象として、シンプルなウェブサーバーを設定します。このような制御されたターゲットを持つことは非常に重要です。なぜなら、実際のシステムに影響を与えることなく、ステルススキャン技術を実践できるからです。

まず、ターミナルを開きます。ターミナルは、コンピュータと対話するためにコマンドを入力できるコマンドラインインターフェースのようなものです。ターミナルを開いたら、作業ディレクトリに移動します。作業ディレクトリは、プロジェクト関連のすべてのファイルを保存する特定のディレクトリです。これを行うには、次のコマンドを使用します。

cd /home/labex/project

cd コマンドは「ディレクトリ変更」を意味します。これは、システムに現在の場所から指定されたディレクトリ(この場合は /home/labex/project)に移動するように指示します。

作業ディレクトリに移動したら、stealth という新しいディレクトリを作成します。ディレクトリはコンピュータ上のフォルダのようなもので、専用のディレクトリを作成すると作業を整理できます。次のコマンドを使用してディレクトリを作成します。

mkdir -p /home/labex/project/stealth

mkdir コマンドは新しいディレクトリを作成するために使用されます。-p オプションは、パスにある中間ディレクトリが存在しない場合でも、それらも作成するようにします。

ディレクトリを作成したら、その中に移動する必要があります。これにより、作成するファイルは stealth ディレクトリ内に保存されます。cd コマンドをもう一度使用します。

cd /home/labex/project/stealth

次に、シンプルな HTML ファイルを作成します。HTML(Hypertext Markup Language)は、ウェブページを作成するための標準言語です。このファイルは、実際のウェブサービスをシミュレートするウェブサーバーによって提供されます。次のコマンドを使用してファイルを作成します。

echo "Robotics server running..." > index.html

echo コマンドは、テキスト「Robotics server running...」をターミナルに表示します。> 記号は、その出力をリダイレクトして、index.html という新しいファイルに書き込みます。

次に、DNS レゾルバーを設定する必要があります。DNS(Domain Name System)はインターネットの電話帳のようなものです。ドメイン名(例:google.com)を IP アドレスに変換します。DNS レゾルバーを設定することで、システムが他のネットワークに適切に接続できるようになります。次のコマンドを使用します。

sudo sh -c 'echo "nameserver 8.8.8.8" > /etc/resolv.conf'

sudo コマンドは、特別な権限が必要な操作を実行するための管理者権限を与えます。sh -c はシェルコマンドを実行するために使用されます。ここでは、システムが DNS 設定を保存する /etc/resolv.conf ファイルに「nameserver 8.8.8.8」という行を書き込んでいます。

最後に、nc(netcat)コマンドを使用してシンプルなウェブサーバーを起動します。Netcat は、シンプルなサーバーの設定など、さまざまなタスクに使用できる汎用的なネットワークユーティリティです。このサーバーはポート 8080 でリスニングし、先に作成した HTML ファイルを提供します。次のコマンドを使用します。

nc -lvp 8080 < index.html &

このコマンドを分解してみましょう。

  • nc はネットワーク接続のための netcat ユーティリティです。異なるネットワークエンドポイント間で接続を作成できます。
  • -l は netcat に着信接続をリスニングするように指示します。別のサーバーに接続しようとせず、他のサーバーからの接続を待ちます。
  • -v は詳細な出力(verbose output)を有効にします。これにより、netcat は実行していることの詳細な情報を提供します。
  • -p 8080 はリスニングするポートを指定します。ポートはコンピュータ上のドアのようなもので、この場合は着信接続のためにポート 8080 を開きます。
  • < index.htmlindex.html の内容を接続に供給します。クライアントがサーバーに接続すると、index.html ファイルの内容を受け取ります。
  • & はプロセスをバックグラウンドで実行します。これにより、サーバーが実行されている間も、ターミナルを使用して他のコマンドを実行できます。

コマンドを実行すると、サーバーがポート 8080 でリスニングしていることを示す出力が表示されます。

Listening on 0.0.0.0 8080

これで、ステルススキャン演習のターゲットとして機能する、ポート 8080 で動作するウェブサーバーができました。

Nmap による基本ステルススキャンの実行

このステップでは、Nmap を使用した基本的なステルススキャンを実行する方法を学びます。しかし、まずステルススキャンとは何かを理解しましょう。ステルススキャン(SYN スキャンとも呼ばれます)は、ネットワークセキュリティの世界で非常に便利な技術です。ターゲットシステムのどのポートが開いているかを調べる際に、ステルススキャンはターゲットによって検出される可能性を減らしながら、その情報を取得するのに役立ちます。これは、ターゲットシステムがスキャンを検知した場合、防御措置を取ったり、アクティビティをログに記録する可能性があるため重要です。

それでは、スキャンを開始する前に、正しい場所に移動していることを確認する必要があります。プロジェクト関連のすべてのファイルが保存されている、メインの作業スペースに戻ります。これを行うには、次のコマンドを使用します。

cd /home/labex/project

ステルススキャンについて

ステルススキャンがどのように機能するかを完全に理解するために、まず従来の TCP 接続について説明する必要があります。従来の TCP 接続は、クライアントとサーバーが接続を確立するために実行する 3 ウェイハンドシェイクプロセスに従います。

  1. クライアントは、サーバーに SYN(同期)パケットを送信します。これは、クライアントが「会話を開始したい」と言っているようなものです。
  2. サーバーが会話する準備ができている場合、SYN-ACK(同期 - 確認応答)パケットで応答します。これは、サーバーが「会話する準備はできている」と言っているようなものです。
  3. 最後に、クライアントは ACK(確認応答)パケットを送信して接続を完了します。これは、クライアントが「会話を始めましょう」と言っているようなものです。

ただし、ステルススキャンは、この完全なプロセスに従いません。代わりに:

  1. クライアントは、通常の接続と同様に、サーバーに SYN パケットを送信します。
  2. サーバーのポートが開いている場合、サーバーは SYN-ACK パケットで応答します。
  3. しかし、ここで違いがあります。接続を完了するために ACK パケットを送信する代わりに、クライアントは RST(リセット)パケットを送信します。これにより、接続が完全に確立されるのを防ぎます。

この方法が有効な理由は、接続が完全に確立されないため、ターゲットシステムがこの種のやり取りをログに記録する可能性が低いことです。したがって、大きな痕跡を残さずに、どのポートが開いているかを調べるための巧妙な方法です。

ステルススキャンの実行

ステルススキャンがどのように機能するかを理解したので、ローカルのウェブサーバーに対してステルススキャンを実行してみましょう。次の Nmap コマンドを使用します。

sudo nmap -sS -p 8080 localhost > /home/labex/project/stealth_scan.txt

このコマンドを分解して、各部分が何をするのかを正確に理解しましょう。

  • sudo は、ステルススキャンには生のソケットアクセスが必要であるため使用されます。生のソケットアクセスは、ネットワークと対話するための低レベルの方法であり、特別な権限が必要です。したがって、sudo を使用して、管理者権限でコマンドを実行します。
  • nmap は使用しているスキャンツールです。ネットワークの探索とセキュリティ監査に非常に人気があり、強力なツールです。
  • -sS は、SYN ステルススキャンを実行することを指定します。これにより、Nmap に、先ほど学んだステルススキャン技術を使用するように指示します。
  • -p 8080 は、Nmap にポート 8080 だけをスキャンするように指示します。場合によっては、複数のポートをスキャンしたい場合がありますが、この場合はポート 8080 だけに関心があります。
  • localhost はスキャンのターゲットです。ローカルマシン上で実行しているため、localhost は自分のコンピュータを指します。
  • > /home/labex/project/stealth_scan.txt は、スキャン結果の出力をテキストファイルにリダイレクトします。これにより、結果を保存して後で確認できます。

スキャンを実行したら、結果を確認したいです。これを行うには、次のコマンドを使用します。

cat /home/labex/project/stealth_scan.txt

このコマンドを実行すると、次の様な出力が表示されます。

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-25 12:00 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000097s latency).

PORT     STATE SERVICE
8080/tcp open  http-proxy

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

Nmap がポート 8080 が開いていることを正しく特定していることに注目してください。これは、ステルススキャンがステップ 1 で設定したウェブサーバーを検出することに成功したことを意味します。

ポートの状態について

スキャン結果を分析すると、Nmap がさまざまな状態のポートを報告していることに気付くでしょう。

  1. open - サービスがこのポートで接続を積極的に受け入れています
  2. closed - ポートはアクセス可能ですが、サービスはリスニングしていません
  3. filtered - ファイアウォールまたはネットワーク障害によってポートがブロックされています
  4. unfiltered - ポートはアクセス可能ですが、Nmap はそれが開いているか閉じているかを判断できません
  5. open|filtered - Nmap はポートが開いているかフィルタリングされているかを判断できません

今回のスキャンでは、ポート 8080 は open と報告されており、ウェブサーバーが接続を積極的に受け入れていることを示しています。

ステルススキャンを使用する利点は、完全な TCP コネクトスキャンよりも侵襲性が低く、正確な結果が得られることです。完全な TCP コネクトスキャンは、3 ウェイハンドシェイク全体を実行するため、ターゲットシステムによってより認識されやすく、監視されているシステムでアラートが発生する可能性が高くなります。

高度なステルススキャン技術

このステップでは、さらに高度なステルス性を備えたスキャン技術を探ります。これらの技術は、サイバーセキュリティにおいて、ターゲットネットワークに関する情報を容易に検出されることなく収集できるため、非常に重要です。その強力な技術の 1 つがアイドルスキャン(ゾンビースキャンとも呼ばれます)。この方法は、別のホストの背後に身分を隠すことで、ターゲットをスキャンできます。

始める前に、作業スペースにいることを確認してください。これは、プロジェクト関連のファイルやコマンドが実行される場所です。作業スペースに移動するには、ターミナルで次のコマンドを実行します。

cd /home/labex/project

アイドルスキャンについて

アイドルスキャンは、Nmap で利用可能な最もステルス性の高いスキャン技術の 1 つです。では、どのように機能するのでしょうか?それは、第三者のホスト(「ゾンビ」と呼びます)を使用してスキャンを実行します。これにより、スキャンはあなたからのものではなく、ゾンビホストからのもののように見えます。

アイドルスキャンプロセスを段階的に見てみましょう。

  1. まず、スキャナーはゾンビホストにプローブを送信します。このプローブは、スキャナーがゾンビの現在の IP ID シーケンスを特定するのに役立ちます。IP ID シーケンスは、ホストが送信する各 IP パケットに割り当てる一意の番号です。
  2. 次に、スキャナーはターゲットに SYN パケットを送信します。ただし、このパケットの送信元 IP アドレスをゾンビの IP アドレスに設定します。SYN パケットは TCP 接続を開始するために使用されます。
  3. ターゲットのポートが開いている場合、ターゲットは SYN-ACK パケットで応答します。このパケットはゾンビに送信されます。なぜなら、それが SYN パケットで見た送信元 IP アドレスだからです。
  4. この SYN-ACK パケットを予想していなかったゾンビは、ターゲットに RST パケットを返します。RST パケットは TCP 接続をリセットするために使用されます。
  5. スキャナーはその後、再びゾンビにプローブを送信します。ゾンビの IP ID シーケンスが増加したかどうかを確認します。
  6. IP ID シーケンスが増加している場合、ターゲットのポートが開いていることを示します。これは、ゾンビがターゲットからの SYN-ACK に応答して RST パケットを送信したためです。

この技術の優れた点は、ステルス性です。ターゲットは、実際のスキャナーからの通信ではなく、ゾンビからの通信しか見ません。したがって、ターゲットがスキャンされていることを検出することは非常に困難です。

アイドルスキャンの実行

それでは、Nmap を使用してアイドルスキャンを実行してみましょう。実際の状況では、外部のゾンビホストを使用します。しかし、この実験では、ローカルマシンを使用してプロセスをシミュレートします。

ターミナルで次のコマンドを実行します。

sudo nmap -sI 127.0.0.1 localhost -p 8080 > /home/labex/project/idle_scan.txt

このコマンドの各部分を理解しましょう。

  • sudo は、Nmap がアイドルスキャンを実行するために生のソケットアクセスが必要であるため使用されます。生のソケットアクセスにより、Nmap はこのタイプのスキャンに必要なカスタム IP パケットを作成および送信できます。
  • nmap は、このタスクに使用している有名なスキャンツールです。
  • -sI 127.0.0.1 は、アイドルスキャンを実行し、127.0.0.1(localhost)をゾンビホストとして使用することを指定します。
  • localhost はスキャン対象のターゲットです。
  • -p 8080 は、ターゲットのポート 8080 だけをスキャンするように Nmap に指示します。
  • > /home/labex/project/idle_scan.txt は、スキャン結果の出力をテキストファイルにリダイレクトします。これにより、後で結果を簡単に確認できます。

スキャンを実行したら、結果を確認しましょう。出力ファイルの内容を表示するには、次のコマンドを使用します。

cat /home/labex/project/idle_scan.txt

次の様な出力が表示される場合があります。

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-25 12:10 UTC
Idle scan using zombie 127.0.0.1 (127.0.0.1:80); Class: Incremental
Skipping Idle Scan against localhost (127.0.0.1) -- you can't idle scan your own machine (localhost).
Nmap scan report for localhost (127.0.0.1)
Host is up.

PORT     STATE   SERVICE
8080/tcp unknown http-proxy

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

Nmap がアイドルスキャンをスキップすると報告されていることに注目してください。これは、自分のマシンをゾンビとターゲットの両方として使用しようとしているためです。実際の状況では、別のホストをゾンビとして選択すると、この警告メッセージなしでスキャンが実行されます。

この実験環境ではこの制限がありますが、この演習はアイドルスキャンコマンドの使い方を示しています。実際には、別のホストをゾンビとして選択し、スキャンは警告メッセージなしで実行されます。

この高度な技術は、最大限のステルスが必要な場合に非常に価値があります。ターゲットがスキャンを実際のスキャナーに追跡することは非常に困難になります。

スキャン結果の比較

両方のスキャンタイプの出力の違いを確認するために、比較してみましょう。

echo "=== Stealth Scan Results ===" && cat /home/labex/project/stealth_scan.txt
echo "=== Idle Scan Results ===" && cat /home/labex/project/idle_scan.txt

両方のスキャンでポート 8080 が開いていることが検出されましたが、アイドルスキャンでは使用されているスキャン技術に関する追加情報が表示されます。

クリーンアップ

終了する前に、ウェブサーバーを停止して環境をクリーンアップしましょう。

pkill -f "nc -lvp 8080"

これにより、ポート 8080 で動作しているウェブサーバーを実行している netcat プロセスが終了します。

まとめ

この実験では、Nmap を使用したステルスネットワークスキャンを実行する方法を学びました。これは、サイバーセキュリティ専門家にとって重要なスキルです。まず、制御された環境でスキャンを行う練習のために、シンプルなウェブサーバーを備えたテスト環境を設定しました。次に、SYN スキャンという基本的なステルススキャン技術を学びました。これは、正確な結果を提供し、検出のリスクを軽減するため、監視されているシステムにアラートを出すことなくセキュリティ監査に役立ちます。

最後に、スキャンの起源を隠すことができるアイドルスキャンなどの、より高度なステルススキャン方法を深く探りました。実験環境での適用は限られていましたが、実際の状況での動作方法を学びました。また、さまざまなポートの状態を理解し、さまざまなスキャン技術からの出力を比較することで、スキャン結果の解釈も練習しました。これらのステルススキャン技術を習得することで、サイバーセキュリティの仕事で徹底的なネットワーク評価を行うことができます。