はじめに
この実験では、強力なネットワークスキャンツールである Nmap をさまざまな冗長性(Verbosity)レベルで活用する方法を学びます。Nmap は、コンピュータネットワーク上のホストやサービスを発見するために、セキュリティ専門家によく選ばれるツールです。Nmap の冗長性オプションをマスターすることで、スキャン中に表示される情報を調整できるようになり、これは効率的なネットワーク分析やトラブルシューティングに不可欠です。
実験を通して、スキャンの練習用にローカルサーバーをセットアップします。また、異なる冗長性レベルがスキャン結果や表示される情報にどのように影響するかを探求します。
ネットワークスキャンに向けた環境のセットアップ
このステップでは、お使いのマシン上にローカルのウェブサーバーをセットアップします。このサーバーは、Nmap スキャンのターゲットとして機能します。Nmap は、コンピュータネットワーク上のホストやサービスを発見するためにサイバーセキュリティで使用される強力なネットワークスキャンツールです。ローカルサーバーを用意することで、現実世界のネットワークに影響を与えることなく、安全に Nmap の使用を練習することができます。
HTTP サーバーについて
サーバーを作成する前に、HTTP サーバーとは何かを理解しましょう。HTTP は HyperText Transfer Protocol(ハイパーテキスト転送プロトコル)の略です。これは、Web ブラウザがウェブサイトと通信するために使用するプロトコルです。HTTP サーバーは、URL(ウェブアドレス)と HTTP プロトコルを理解できるソフトウェアアプリケーションです。ブラウザにウェブアドレスを入力すると、ブラウザは対応する HTTP サーバーに HTTP リクエストを送信し、サーバーは要求されたウェブページを返します。この実験では、習得が簡単で人気の高いプログラミング言語である Python を使用して、シンプルな HTTP サーバーを作成します。
HTTP サーバーの作成
まず、正しい作業ディレクトリにいることを確認する必要があります。作業ディレクトリとは、コマンドが実行されるフォルダのようなものです。今回は、/home/labex/project ディレクトリに移動する必要があります。このディレクトリに移動するには、次のコマンドを使用します。
cd /home/labex/project
正しい場所に移動したら、Python の組み込み HTTP サーバーモジュールを使用して、シンプルなウェブサーバーを作成します。このサーバーがポート 8080 でリクエストを待ち受けるように設定します。ポートとは、コンピュータ上のドアのようなもので、そこを通ってネットワークトラフィックが出入りします。サービスによって使用するポートは異なります。次のコマンドを入力してください。
python -m http.server --bind 127.0.0.1 8080 &
このコマンドの動作を分解して説明します。
python -m http.server: この部分は Python の組み込み HTTP サーバーモジュールを起動します。Python に HTTP サーバーの機能を実行するように指示します。--bind 127.0.0.1: サーバーが IPv4 ループバックアドレスでリクエストを待ち受けるようにします。この環境では Nmap がlocalhostをスキャンします。8080: サーバーがポート 8080 で待ち受けることを指定します。つまり、このポートに対する着信 HTTP リクエストはすべて私たちのサーバーによって処理されます。&: コマンドの末尾にアンパサンドを付けることで、サーバーをバックグラウンドで実行します。これにより、サーバーの実行中も、他のコマンドのためにターミナルを継続して使用できるため便利です。
コマンドを実行すると、次のような出力が表示されます。
Serving HTTP on 127.0.0.1 port 8080 (http://127.0.0.1:8080/) ...
この出力は、HTTP サーバーが現在実行中で、ポート 8080 で接続を受け付ける準備が整っていることを示しています。このサーバーが稼働していることで、次のステップで Nmap を使用してスキャンできるターゲットが手に入りました。
HTTP サーバーが稼働していることの確認
サーバーが実際に正しく実行されていることを確認することが重要です。これを行うには、次のコマンドを使用します。
ss -tulwn | grep 8080
ss コマンドはソケット統計情報を表示するために使用されます。-tulwn オプションは、TCP、UDP、リスニング、および数値のソケット情報を表示するよう ss に指示します。| はパイプであり、ss コマンドの出力を grep コマンドに渡します。次に、grep コマンドが出力の中から 8080 という文字列を検索します。サーバーが実行されている場合、このコマンドはポート 8080 で何かが待ち受けていることを示す出力を表示するはずです。これにより、HTTP サーバーがアクティブであり、Nmap スキャンの準備ができていることが確認されます。
Nmap の基礎とデフォルトの冗長性レベルの理解
このステップでは、ターゲットサーバーが稼働した状態で、Nmap とその冗長性レベルの探索を開始します。Network Mapper の略である Nmap は、強力なセキュリティスキャナーです。その主な目的は、コンピュータネットワーク上のホストやサービスを発見するのを支援することです。これは、ネットワークのレイアウトを把握し、潜在的なセキュリティリスクを特定できるため、サイバーセキュリティにおいて極めて重要です。
Nmap の冗長性(Verbosity)とは?
Nmap における冗長性とは、スキャン中にどれだけの情報を表示するかを決定するものです。スキャン結果をどれくらい詳細にしたいかに応じて、さまざまな冗長性レベルを選択できます。一般的な冗長性レベルの内訳は以下の通りです。
- レベル 0: これはデフォルトのレベルです。標準的な出力が得られ、スキャンに関する基本的な情報を提供します。
- レベル 1:
-vオプションを使用すると、スキャン出力により詳細な情報を取得できます。 - レベル 2:
-vvオプションを使用すると、さらに詳細な情報を取得できます。
デフォルトの冗長性(レベル 0)スキャンの実行
まずは、Nmap のデフォルトの冗長性レベルを使用して最初のスキャンを実行してみましょう。これにより、冗長性を追加しない場合に得られる情報の種類についての基礎的な理解が得られます。
nmap -p 8080 localhost > /home/labex/project/verbosity-0.txt
このコマンドを分解して説明します。
nmap: これは Nmap スキャンツールを呼び出すコマンドです。ネットワークスキャンに Nmap を使用するようシステムに指示します。-p 8080: このオプションは、ポート 8080 のみにスキャンを集中させるよう Nmap に指示します。ポートはコンピュータ上のドアのようなもので、サービスによって使用するポートは異なります。ポート 8080 を指定することで、その特定のポートで実行されているサービスのみに注目します。localhost: ローカルマシンをスキャンしていることを示しています。言い換えれば、Nmap コマンドを実行しているのと同じコンピュータ上で実行されているサービスを確認しています。> /home/labex/project/verbosity-0.txt: コマンドのこの部分は、スキャンの出力を/home/labex/projectディレクトリにあるverbosity-0.txtという名前のファイルにリダイレクト(保存)します。ファイルに出力を保存することで、後から見返すことができます。
それでは、スキャン結果を表示してみましょう。
cat /home/labex/project/verbosity-0.txt
このコマンドを実行すると、次のような出力が表示されます。
Starting Nmap 7.80 ( https://nmap.org ) at 2023-08-10 15:30 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.05 seconds
この出力が意味する内容を理解しましょう。
- スキャンが開始された時刻: 最初の行は、Nmap スキャンが開始された正確な時刻を示しています。これは、情報がいつ収集されたかを追跡するのに役立ちます。
- スキャンのターゲット: IP アドレス
127.0.0.1を持つlocalhostをスキャンしていたことを示しています。 - ホストのステータス: ホストが起動しており、応答可能であることを示しており、レイテンシは
0.000097秒と非常に低いです。 - ポートの状態: ポート 8080 が
open(オープン)状態であることを示しており、そのポートでリクエストを待ち受けているサービスが存在することを意味します。 - 稼働しているサービス: ポート 8080 で実行されている可能性のあるサービスが
http-proxyであることを示唆しています。 - スキャン完了の統計情報: 最後の行は、スキャンに要した時間に関する情報を提供しており、この場合は
0.05秒でした。
デフォルトレベルは重要な情報を提供してくれますが、詳細なインサイトには欠けています。次のステップでは、より高い冗長性レベルを使用することで、スキャンに関するより詳細な情報をどのように得られるかを探求します。
#-v オプションによる冗長性の向上
ネットワークスキャンの世界では、詳細な情報を取得することが極めて重要です。このステップでは、冗長性レベルを上げることで、Nmap からより詳細な詳細情報を取得する方法を学びます。Nmap における冗長性とは、スキャン中に表示される情報の量を指します。冗長性レベルを 1 に設定する -v オプションを使用すると、ネットワーク分析に非常に役立つ追加情報を得ることができます。
冗長性を高めたスキャンの実行
まずは、冗長性を高めてスキャンを実行してみましょう。次のコマンドを使用します。
nmap -p 8080 localhost -v > /home/labex/project/verbosity-1.txt
このコマンドを分解して説明します。
nmapは Nmap スキャンツールを呼び出すコマンドです。Nmap は、強力で広く使用されているネットワーク探索およびセキュリティ監査ツールです。-p 8080は、ポート 8080 のみスキャンするよう Nmap に指示します。ポートはネットワーク上のドアのようなもので、ポートを指定することで、そのポートで実行されている可能性のある特定のサービスにスキャンを集中させます。localhostは、ローカルマシンをターゲットにしていることを示します。これは、独自のシステム上で Nmap がどのように動作するかをテストし理解するのに便利です。-vは冗長性レベルを 1 に上げます。これは、Nmap がスキャンプロセスに関するより多くの情報を表示することを意味します。> /home/labex/project/verbosity-1.txtは、スキャンの出力を/home/labex/projectディレクトリ内のverbosity-1.txtという名前のファイルにリダイレクトします。ファイルに出力を保存することで、後から見返すことができます。
それでは、スキャンの結果を見てみましょう。
cat /home/labex/project/verbosity-1.txt
このコマンドを実行すると、以下のような、より詳細な出力が表示されるはずです。
Starting Nmap 7.80 ( https://nmap.org ) at 2023-08-10 15:35 UTC
Initiating Ping Scan at 15:35
Scanning localhost (127.0.0.1) [2 ports]
Completed Ping Scan at 15:35, 0.00s elapsed (1 total hosts)
Initiating Connect Scan at 15:35
Scanning localhost (127.0.0.1) [1 port]
Discovered open port 8080/tcp on 127.0.0.1
Completed Connect Scan at 15:35, 0.00s elapsed (1 total ports)
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000089s latency).
PORT STATE SERVICE
8080/tcp open http-proxy
Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 0.07 seconds
追加情報の理解
冗長性レベル 1 では、出力に豊富な追加の詳細情報が含まれます。以下のようなことがわかります。
- スキャンプロセスが複数のステージ(段階)に分解されています。例えば、Ping スキャンや Connect スキャンがあります。Ping スキャンはホストが到達可能かどうかを確認するために使用され、Connect スキャンは特定のポートへの接続を確立しようと試みます。
- 各ステージのタイミング(時間計測)情報が提供されます。これにより、スキャンの各部分にどれくらいの時間がかかったかを理解するのに役立ちます。
- オープンなポートが発見された正確な瞬間を確認できます。これは、スキャンの明確なタイムラインが把握できるため重要です。
- スキャン中に Nmap が使用したデータファイルも表示されます。これらのファイルには、サービス、ポート、および Nmap がスキャンを実行するために使用するその他のネットワーク関連のデータに関する情報が含まれています。
この追加情報は、次のような理由から非常に役立ちます。
- Nmap がどのようにスキャンを実行するかを理解できる。さまざまなステージとその発生順序を確認することで、スキャンプロセスをよりよく把握できます。
- スキャン中のイベントの正確なタイムラインを把握できる。これは、トラブルシューティングやネットワークの動作を理解するのに役立ちます。
- 特定のポートやサービスがいつ発見されたかを特定できる。これは、セキュリティ評価やネットワーク管理において不可欠です。
冗長性レベルの比較
通常のスキャンと冗長性を高めたスキャンの違いをより明確に確認するために、2つの出力ファイルを比較します。次のコマンドを使用してください。
diff /home/labex/project/verbosity-0.txt /home/labex/project/verbosity-1.txt
diff コマンドは、2つのファイルの内容を比較し、それらの違いを表示します。このコマンドの出力により、冗長性レベルを上げることがスキャンプロセスに対するより多くの洞察をどのように提供するかを実証できます。この追加情報は、ネットワークの問題のトラブルシューティングを行ったり、詳細なセキュリティ評価を実施したりする際に特に役立ちます。
さらなる冗長性レベル
Nmap は冗長性レベル 1 で終わりません。さらに高い冗長性レベルもサポートしています。
-vvは冗長性レベルを 2 に設定します。-vvvは冗長性レベルを 3 に設定します。
冗長性レベルを上げるにつれて、Nmap はスキャンプロセスに関するますます詳細な情報を提供します。これは、ネットワークをさらに深く調査し、スキャンのあらゆる側面を理解する必要がある場合に非常に役立ちます。
より高い冗長性レベルの探索と実践的な応用
このステップでは、Nmap の機能をさらに深く掘り下げます。まずは、さらに高い冗長性レベルを使用して、スキャンプロセス中により詳細な情報を取得することから始めます。その後、さまざまな冗長性設定の実践的な応用について学び、実際のシナリオでどのレベルを使用すべきかを把握します。
最大の冗長性を設定したスキャンの実行
冗長性レベル 2 でスキャンを実行してみましょう。Nmap では、-vv オプションを使用して冗長性レベルを設定できます。冗長性レベル 2 は、スキャンに関する膨大な詳細情報を提供します。スキャンを実行するコマンドは次のとおりです。
nmap -p 8080 localhost -vv > /home/labex/project/verbosity-2.txt
このコマンドでは、-p 8080 はポート 8080 をスキャンするよう Nmap に指示しています。localhost はスキャンしているターゲットであり、ローカルマシンを指します。-vv オプションは冗長性をレベル 2 に引き上げます。> 記号はスキャンの出力を /home/labex/project/verbosity-2.txt ファイルにリダイレクトします。
それでは、スキャンの結果を確認してみましょう。cat コマンドを使用してファイルの内容を表示できます。
cat /home/labex/project/verbosity-2.txt
出力を見ると、スキャンプロセスに関するさらに高度な技術的詳細が含まれていることに気づくでしょう。これらの詳細には以下が含まれます。
- より詳細なタイミング情報:スキャンのさまざまな部分にどれくらいの時間がかかったかを理解するのに役立ちます。
- 追加のデバッグ情報:スキャン中に何らかの問題が発生した場合に役立ちます。
- より詳細なプロトコル情報:スキャンに関与するネットワークプロトコルをよりよく理解できるようになります。
さまざまな冗長性レベルの実践的な応用
異なる冗長性レベルは、それぞれ異なるシナリオで役に立ちます。各レベルと、その実践的な応用を見ていきましょう。
デフォルトレベル (0):
- デフォルトの冗長性レベルは、クイック(高速)スキャンに最適です。特定のポートが開いているか閉じているかなど、ターゲットに関する基本的な情報のみが必要な場合、このレベルで十分です。
- また、ルーチンチェックや単純なネットワークマッピングにも役立ちます。例えば、サーバーのポートの基本ステータスを素早く確認したい場合は、デフォルトレベルを使用できます。
- ユースケースの例:サーバー上で特定のポートが開いているかどうかを確認する。細部にこだわることなく、概要を素早く把握できます。
冗長性レベル 1 (-v):
- このレベルは、より詳細な分析に役立ちます。デフォルトレベルよりも多くの情報を提供するため、スキャンのタイムラインをよりよく理解するのに役立ちます。
- 接続性の問題のトラブルシューティングを行っている場合、このレベルの追加情報は非常に役立ちます。スキャンのどの部分に時間がかかっているか、またはエラーが発生しているかどうかを確認できます。
- ユースケースの例:接続性の問題のトラブルシューティング。追加の詳細情報を使用して、問題の原因を突き止めることができます。
より高い冗長性レベル (-vv, -vvv):
- これらのレベルは、詳細な分析やデバッグに最適です。最大限の量のエラー情報や詳細を提供するため、セキュリティ監査に非常に役立ちます。
- 詳細なセキュリティ評価を実施する場合や、スキャンがターゲットとどのように相互作用しているかを正確に把握する必要がある場合は、より高い冗長性レベルを使用するのが最適です。
- ユースケースの例:詳細なセキュリティ評価、またはスキャンがターゲットとどのようにやり取りしているかを正確に把握する必要がある場合。スキャンプロセスの包括的なビューを取得できます。
冗長性と他の Nmap オプションの組み合わせ
冗長性オプションは、他の Nmap オプションと組み合わせて、より強力なスキャンを実行できます。次のコマンドを使用して、より高度なスキャンを試してみましょう。
nmap -p 8080 -sV localhost -v > /home/labex/project/advanced-scan.txt
このコマンドを分解して説明します。
-p 8080はポート 8080 をスキャンすることを指定します。-sVはバージョン検出を有効にします。このオプションは、スキャンされたポートで実行されているサービスのバージョンを特定しようと試みます。-vは冗長性をレベル 1 に引き上げるため、スキャンプロセスに関するより詳細な情報を取得できます。>記号はスキャンの出力を/home/labex/project/advanced-scan.txtファイルにリダイレクトします。
それでは、スキャンの結果を見てみましょう。
cat /home/labex/project/advanced-scan.txt
-sV を追加したことで、ポート 8080 で実行されているサービスのバージョンに関する情報が提供されていることがわかります。同時に、-v オプションにより、スキャンプロセスに関する詳細な情報が確実に得られ、結果の分析が容易になります。
クリーンアップ
この実験を終了する前に、先ほど作成した HTTP サーバーを適切にシャットダウンする必要があります。これを行うには、次のコマンドを使用します。
pkill -f "python -m http.server"
このコマンドは、ポート 8080 で実行されている Python HTTP サーバープロセスを終了します。将来的な競合やリソース使用量の問題を避けるために、適切にクリーンアップを行うことが重要です。
まとめ
この実験では、Nmap の冗長性レベルを効果的に使用して、ネットワークスキャン中に表示される情報を制御する方法を学びました。基本的なローカル HTTP サーバーのセットアップから始めて、さまざまな冗長性レベルが Nmap のスキャン出力にどのように影響するかを探求しました。
デフォルトの冗長性レベル(0)では、オープンなポートやサービスに関する基本的な詳細情報が得られることがわかりました。-v オプションを使用すると冗長性が高まり、スキャンプロセスに関するより多くの洞察が得られます。-vv や -vvv のようなさらに高いレベルでは、詳細な分析のための詳細な技術情報が提供されます。また、冗長性オプションを他の Nmap テクニックと組み合わせて、より強力なネットワーク分析を実行することも可能です。これらのスキルは、ネットワーク管理者やセキュリティ専門家にとって極めて重要であり、ネットワークデータを効率的に収集し、特定のタスクに合わせてスキャンを調整できるようになります。



