Nmap を使用したステルスネットワークスキャン

NmapNmapBeginner
今すぐ練習

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

はじめに

この実験では、ネットワーク探索とセキュリティ監査に強力なオープンソースツールである Nmap を使用して、ステルスネットワークスキャンを行う方法を学びます。ステルススキャンはサイバーセキュリティにおいて重要であり、セキュリティ専門家が検知されるリスクを減らしながらネットワークの脆弱性を特定することを可能にします。

基本的なステルススキャンから始めて、より高度な隠密手法に移行して、さまざまな Nmap スキャン技術を探索します。これらのスキルは、既存のセキュリティシステムをトリガーせず、ネットワーク上の潜在的な脅威に気付かれることなくネットワーク監査を行うセキュリティ専門家にとって不可欠です。実験の終了時には、Nmap のステルススキャンに関する実践的な経験を積み、これらの技術を実際のセキュリティ評価にどのように適用するかを知ることができます。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL nmap(("Nmap")) -.-> nmap/NmapGroup(["Nmap"]) nmap/NmapGroup -.-> nmap/installation("Installation and Setup") nmap/NmapGroup -.-> nmap/port_scanning("Port Scanning Methods") nmap/NmapGroup -.-> nmap/scan_types("Scan Types and Techniques") nmap/NmapGroup -.-> nmap/target_specification("Target Specification") nmap/NmapGroup -.-> nmap/syn_scan("SYN Scan") nmap/NmapGroup -.-> nmap/stealth_scanning("Stealth and Covert Scanning") subgraph Lab Skills nmap/installation -.-> lab-415933{{"Nmap を使用したステルスネットワークスキャン"}} nmap/port_scanning -.-> lab-415933{{"Nmap を使用したステルスネットワークスキャン"}} nmap/scan_types -.-> lab-415933{{"Nmap を使用したステルスネットワークスキャン"}} nmap/target_specification -.-> lab-415933{{"Nmap を使用したステルスネットワークスキャン"}} nmap/syn_scan -.-> lab-415933{{"Nmap を使用したステルスネットワークスキャン"}} nmap/stealth_scanning -.-> lab-415933{{"Nmap を使用したステルスネットワークスキャン"}} end

テスト環境のセットアップ

このステップでは、ステルスネットワーク監査のための環境を準備します。スキャンの対象となるシンプルなウェブサーバーをセットアップします。このような制御された対象を用意することは、実際のシステムに影響を与えることなくステルススキャン技術を練習できるため、非常に重要です。

まず、ターミナルを開く必要があります。ターミナルはコマンドラインインターフェースで、コマンドを入力してコンピューターとやり取りすることができます。ターミナルを開いたら、ワークスペースに移動します。ワークスペースは、プロジェクト関連のすべてのファイルを保管する特定のディレクトリです。これを行うには、次のコマンドを使用します。

cd /home/labex/project

cd コマンドは "change directory" の略で、現在の場所から指定されたディレクトリ(この場合は /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 はシェルコマンドを実行するために使用されます。"nameserver 8.8.8.8" という行を /etc/resolv.conf ファイルに書き込んでいます。このファイルはシステムが DNS 設定を保存する場所です。

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

nc -lvp 8080 < index.html &

このコマンドを分解して説明します。

  • nc はネットワーク接続用の netcat ユーティリティで、異なるネットワークエンドポイント間の接続を作成することができます。
  • -l は netcat に着信接続を待機するよう指示します。他のサーバーに接続しようとするのではなく、他のサーバーからの接続を待ちます。
  • -v は詳細出力を有効にします。これは、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 (synchronize) パケットをサーバーに送信します。これは、クライアントが「こんにちは、会話を始めたいです」と言っているようなものです。
  2. サーバーが会話を開始する準備ができている場合、SYN - ACK (synchronize - acknowledge) パケットで応答します。これは、サーバーが「もちろん、会話を始めましょう」と言っているようなものです。
  3. 最後に、クライアントが ACK (acknowledge) パケットを送信して接続を完了します。これは、クライアントが「素晴らしい、会話を始めましょう」と言っているようなものです。

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

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

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

ステルススキャンの実行

ステルススキャンがどのように機能するかを理解したので、ローカルのウェブサーバーに対してステルススキャンを実行しましょう。次の 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 でセットアップしたウェブサーバーを正常に検出したことを意味します。

このスキャン技術を使用する利点は、正確な結果が得られることです。同時に、完全な TCP コネクトスキャンよりも侵入性が低いです。完全な TCP コネクトスキャンは 3 ウェイハンドシェイクの全体を経るため、ターゲットシステムに検知されやすく、監視システムでアラートがトリガーされる可能性が高くなります。したがって、より目立たなくする必要がある場合、ステルススキャンは優れた選択肢です。

高度な隠蔽スキャン技術

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

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

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 は、スキャンしたいターゲットです。
  • -p 8080 は、Nmap にターゲットのポート 8080 のみをスキャンするよう指示します。
  • > /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 がアイドルスキャンをスキップしていると報告していることに注意してください。これは、自分のマシンをゾンビとターゲットの両方として使用しようとしているためです。別々のホストを持つ実際のシナリオでは、この技術は隠蔽スキャンに非常に有効です。

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

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

スキャン出力の理解と実用的なアプリケーション

この最後のステップでは、取得したスキャン結果を解釈する方法を学び、これらの結果が実際のサイバーセキュリティシナリオでどのように適用されるかを理解することに焦点を当てます。この知識は、実際のセキュリティ上のチャレンジに対処する際にステルススキャン技術を効果的に使用できるようにするために重要です。

まず、ワークスペースに移動する必要があります。ワークスペースは、プロジェクト関連のすべてのファイルが保存されている専用の領域のようなものです。そこに移動するには、cd コマンドを使用します。cd コマンドは「change directory」の略で、ファイルシステム内であるディレクトリから別のディレクトリに移動するために使用されます。ターミナルで次のコマンドを実行します。

cd /home/labex/project

異なるスキャンタイプの比較

では、実行した異なるスキャンタイプの出力を比較しましょう。これらの出力を比較することで、各スキャンタイプがターゲットネットワークに関する情報をどのように明らかにするかの違いを確認できます。

次のコマンドは、ステルススキャンの結果を表示します。echo コマンドはテキストをターミナルに出力するために使用され、cat コマンドはファイルの内容を表示するために使用されます。ここでは、まずこれがステルススキャンの結果であることを示すヘッダーを出力し、次に stealth_scan.txt ファイルの実際の内容を表示します。

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

同様に、このコマンドはアイドルスキャンの結果を表示します。

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

ポートの状態の解釈

スキャン結果を分析すると、Nmap がポートを異なる状態で報告していることに気付くでしょう。これらの状態を理解することは、スキャンデータを理解するための鍵です。

  1. open - これは、サービスがこのポートで接続を積極的に受け入れていることを意味します。たとえば、特定のポートでウェブサーバーが実行されている場合、そのポートは open として報告されます。
  2. closed - ポートはアクセス可能ですが、そこにはサービスが待機していません。鍵がかかっていないドアのようなものですが、中に誰もいません。
  3. filtered - ファイアウォールまたはその他のネットワーク障害物がポートをブロックしています。そのポートへのアクセスを阻止する警備員がいるようなものです。
  4. unfiltered - ポートはアクセス可能ですが、Nmap はそれが開いているか閉じているかを判断できません。ドアを見て、中に誰かがいるかどうかを判断できないようなものです。
  5. open|filtered - Nmap はポートが開いているかフィルタリングされているかを判断できません。ポートの状態にはいくつかの不確定性があります。
  6. closed|filtered - Nmap はポートが閉じているかフィルタリングされているかを判断できません。

ステルススキャンでは、ポート 8080 が open として報告されました。これは、ウェブサーバーがそのポートで接続を積極的に受け入れていることを示しており、クライアントにウェブページやその他のサービスを提供する準備ができていることを意味します。

実用的なアプリケーション

これらの結果を解釈する方法を理解することには、サイバーセキュリティにおいていくつかの実用的なアプリケーションがあります。

  1. セキュリティのギャップを特定する:開いているポートは攻撃者の潜在的な侵入ポイントを表す可能性があります。不要な開いているポートがある場合、攻撃者はそれを利用してシステムに不正アクセスする可能性があります。
  2. ファイアウォールの設定を検証する:フィルタリングされたポートは、ファイアウォールルールがアクセスを適切にブロックしていることを示しています。これにより、ネットワークが不要なトラフィックから保護されていることを確認できます。
  3. セキュリティ監査を実施する:定期的なスキャンにより、必要なポートのみが開いていることを確認できます。定期的にネットワークをスキャンすることで、セキュリティリスクをもたらす可能性のある新しい開いているポートを検出できます。
  4. 修復計画を作成する:スキャン結果に基づいて、セキュリティ問題に対処する計画を策定できます。たとえば、不要な開いているポートを見つけた場合は、それを閉じることができます。

では、調査結果と推奨事項をまとめた簡単なレポートを作成しましょう。レポートは、発見したことと取るべき行動を文書化する便利な方法です。

cat << EOF > /home/labex/project/scan_report.txt
## Network Scan Report

### Findings:
- Port 8080 is open and running an HTTP proxy service
- This port was successfully detected using stealth scanning techniques

### Recommendations:
- Ensure this port is intended to be open
- Implement proper access controls if this service is necessary
- Close the port if the service is not required
- Regularly scan the network to detect changes in the network footprint
EOF

レポートを表示するには、再び cat コマンドを使用します。

cat /home/labex/project/scan_report.txt

このレポート形式は、調査結果を文書化し、スキャン結果に基づいて実行可能な推奨事項を提供するのに役立ちます。ネットワークのセキュリティ状況を他の人に伝え、適切な行動を起こすのに役立ちます。

クリーンアップ

終了する前に、環境をクリーンアップする必要があります。ステップ 1 でウェブサーバーを起動したので、今度はそれを停止する必要があります。pkill コマンドを使用します。このコマンドは、プロセスの名前やその他の基準に基づいてプロセスを終了するために使用されます。-f オプションは、pkill にプロセスの完全なコマンドラインを検索させます。

pkill -f "nc -lvp 8080"

このコマンドは、ポート 8080 でウェブサーバーを実行していた netcat プロセスを終了します。

これで、Nmap を使用したステルススキャン技術の包括的な探索を、基本的なセットアップから高度な方法、そして結果の実用的なアプリケーションまで完了しました。

まとめ

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

次に、アイドルスキャン(Idle Scan)などのより高度な隠蔽スキャン方法について学びました。この方法はスキャンの起点を隠すことができます。実験での適用は制限されていましたが、実際のシナリオでの動作原理を理解することができました。最後に、スキャン結果を解釈し、実行可能なレポートを作成する方法を学びました。これにより、セキュリティのギャップを特定し、修復計画を策定することができます。これらの隠蔽スキャン技術を習得することで、網羅的なネットワーク評価を行い、潜在的な脅威に積極的に対処することができるようになります。