はじめに
この実験では、ネットワークセキュリティにおける重要な技術である、隠密なポート調査手法である Nmap SYN スキャンについて学びます。SYN スキャンは、TCP 接続を完全に確立することなくターゲットシステム上の開いているポートを効率的に特定します。このため、従来の方法よりも検知されにくくなっています。これは、セキュリティ担当者がネットワークの脆弱性を評価し、防御を強化するために重要です。
この実験の終了時には、SYN スキャンを実行する方法、その結果を解釈する方法、およびネットワークセキュリティ評価におけるその重要性を理解するようになります。
スキャン用のターゲットサービスを作成する
このステップでは、Nmap SYN スキャンを練習できる制御された環境を作成します。ネットワークやシステムをスキャンする前に、倫理的なスキャンには適切な許可が必要であることを理解することが重要です。法的な問題を避けるために、安全にスキャンできる独自のサービスを設定します。
まず、ターミナルを開く必要があります。ターミナルは、コマンドを入力することでコンピュータのオペレーティングシステムと対話できるテキストベースのインターフェイスです。ターミナルを開いたら、プロジェクトディレクトリに移動します。プロジェクトディレクトリは、この実験に関連するすべてのファイルが保存される場所です。現在のディレクトリをプロジェクトディレクトリに変更するには、次のコマンドを使用します。
cd /home/labex/project次に、人気のあるプログラミング言語である Python を使用して、簡単な HTTP サーバを作成します。HTTP サーバは、ウェブブラウザなどのクライアントにウェブページを提供できるソフトウェアです。Python には、このようなサーバを簡単に設定できる組み込み機能があります。このサーバを Nmap SYN スキャンの対象として使用します。ターミナルで次のコマンドを実行します。
python -m http.server --bind localhost 8080 &このコマンドは、ポート 8080 で簡単なウェブサーバを起動します。ポートは、コンピュータのネットワークにおける通信エンドポイントです。異なるサービスは、通信に異なるポートを使用します。コマンドの最後の
&は、サーバをバックグラウンドで実行します。これは、サーバが実行され続け、同じターミナルウィンドウを使用して他のコマンドを実行できることを意味します。サーバを起動した後、実際に動作していることを確認する必要があります。これは、システム上の開いているネットワーク接続を確認することで行えます。
ssコマンドは、ソケット統計情報(開いているネットワーク接続に関する情報を含む)を表示できるツールです。これを使用して、サーバがポート 8080 で待機しているかどうかを確認します。次のコマンドを実行します。ss -tulwn | grep 8080|はパイプ演算子で、ssコマンドの出力を取得し、それをgrepコマンドの入力として使用します。grepコマンドは、ssコマンドの出力から文字列8080を検索します。サーバが実行されている場合、次のような出力が表示されるはずです。tcp LISTEN 0 1 0.0.0.0:8080 0.0.0.0:*この出力は、サーバがポート 8080 で待機していることを示しており、つまり、サーバが正常に実行されており、スキャンの準備ができています。
Nmap SYN スキャンの理解と実行
これで対象サービスが起動して動作しているので、SYN スキャンに取り組みましょう。SYN スキャンはネットワークセキュリティテストの重要な部分であり、対象システム上の開いているポートを発見することができます。このセクションでは、SYN スキャンの仕組みについて学び、次に強力なネットワークスキャンツールである Nmap を使用して、HTTP サーバに対して SYN スキャンを実行します。
SYN スキャンとは何か?
実際のスキャンを開始する前に、SYN スキャンの基本的な仕組みを理解することが重要です。そのために、まず通常の TCP 接続が確立される方法を見てみましょう。
通常の TCP 接続
通常の TCP 接続では、3 ウェイハンドシェイクが行われます。これは、クライアントとサーバの間で信頼性の高い接続を確立するための基本的なプロセスです。
- ステップ 1: クライアントからの SYN パケット クライアントは、SYN(同期)パケットをサーバに送信することで接続を開始します。このパケットは、会話を開始するリクエストのようなもので、サーバに通信の準備ができているかを尋ねます。
- ステップ 2: サーバからの SYN - ACK パケット SYN パケットを受信すると、サーバが利用可能で通信を許可する場合、SYN - ACK(同期 - 確認)パケットで応答します。このパケットは、クライアントのリクエストを確認し、サーバが接続を開始する準備ができていることを示します。
- ステップ 3: クライアントからの ACK パケット 最後に、クライアントは ACK(確認)パケットを送信して 3 ウェイハンドシェイクを完了します。このステップの後、TCP 接続が完全に確立され、クライアントとサーバの間でデータを交換できるようになります。
SYN スキャンのプロセス
一方、SYN スキャンは異なるアプローチを取ります。
- ステップ 1: Nmap からの SYN パケット スキャンツールである Nmap が、最初の SYN パケットを対象ポートに送信します。これは通常の TCP 接続の最初のステップと似ています。
- ステップ 2: 対象からの SYN - ACK 応答 対象ポートが開いている場合、通常の TCP 接続と同じように SYN - ACK パケットで応答します。
- ステップ 3: Nmap による接続の終了 ハンドシェイクを完了するための最後の ACK パケットを送信する代わりに、Nmap は接続を終了します。これにより、完全な接続が確立されないため、スキャンが検知されにくくなります。さらに、スキャン対象の各ポートに対して完全な 3 ウェイハンドシェイクを完了する完全コネクトスキャンよりも高速です。
SYN スキャンの実行
ステップ 1: プロジェクトディレクトリに移動する
まず、正しいプロジェクトディレクトリにいることを確認する必要があります。これは、スキャン結果をこのディレクトリ内のファイルに保存するため重要です。プロジェクトディレクトリに移動するには、ターミナルで次のコマンドを実行します。
cd /home/labex/project
ステップ 2: SYN スキャンを実行する
これで、Nmap を使用して SYN スキャンを実行する準備ができました。ターミナルで次のコマンドを実行します。
sudo nmap -sS localhost -p 8080 > /home/labex/project/nmap-syn-scan-results.txt
このコマンドを分解して、各部分が何をするかを理解しましょう。
sudo: このコマンドは、後続のコマンドを管理者権限で実行するために使用されます。SYN スキャンは生のネットワークパケットを送信するため、root 権限が必要です。したがって、nmapコマンドを実行するにはsudoを使用する必要があります。nmap: これは使用しているネットワークスキャンツールです。Nmap は、ネットワーク探索やセキュリティ監査に広く使用されています。-sS: このオプションは、SYN スキャンを実行することを指定します。localhost: これはスキャンの対象です。この場合、自分自身のマシンをスキャンしています。-p 8080: このオプションは、Nmap にポート 8080 のみをスキャンするよう指示します。ローカルマシン上のこの特定のポートが開いているかどうかを確認することに興味があります。> /home/labex/project/nmap-syn-scan-results.txt: このコマンドの部分は、nmapスキャンの出力をプロジェクトディレクトリ内のnmap - syn - scan - results.txtという名前のファイルにリダイレクトします。これにより、後で結果を確認することができます。
ステップ 3: スキャン結果を表示する
スキャンが完了した後、結果を表示することができます。ターミナルで次のコマンドを実行します。
cat /home/labex/project/nmap-syn-scan-results.txt
次のような出力が表示されるはずです。
Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-18 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.03 seconds
この出力は貴重な情報を提供します。ローカルマシン上のポート 8080 が開いており、HTTP サービスが実行されていることが確認されます。この情報は、さらなるセキュリティ分析やネットワークのトラブルシューティングに使用できます。
スキャン結果とセキュリティへの影響の分析
SYN スキャンを実行した後、結果をどのように解釈するか、およびそれがセキュリティに与える影響を理解することが重要です。このステップは、ネットワーク内の潜在的なリスクを特定するのに役立つため、不可欠です。詳細を見ていきましょう。
スキャン結果の解釈
まず、スキャン結果を詳しく見てみましょう。Nmap SYN スキャン結果を保存したファイルの内容を表示するには、
catコマンドを使用します。catコマンドは、ファイルの内容をターミナルに表示する簡単な方法です。cat /home/labex/project/nmap-syn-scan-results.txtこのコマンドを実行すると、出力が表示されます。出力の各部分の意味は次のとおりです。
Host is up: このメッセージは、対象ホストがネットワークを介して到達可能であることを示します。ホストがアップしている場合、スキャンが対象と通信できたことを意味します。- レイテンシ値:これは、対象がスキャンにどれだけ迅速に応答したかを示します。レイテンシが低いほど、対象の応答が速いことを意味します。
8080/tcp open: これは、対象ホストのポート 8080 が開いており、着信接続を受け入れる準備ができていることを示します。開いているポートは、攻撃者の潜在的な侵入ポイントになります。http-proxy: これは、Nmap がポート 8080 で実行されているサービスを推測した結果です。Nmap は、スキャン中に受け取った応答に基づいてサービスを識別しようとします。
実際のセキュリティ評価では、対象ホスト上の各開いているポートはいくつかのことを表しています。
- 攻撃者の潜在的な侵入ポイント:攻撃者は、開いているポートを利用して対象システムにアクセスすることができます。たとえば、ウェブサーバが開いているポートで実行されている場合、攻撃者はウェブアプリケーションの脆弱性を悪用しようとするかもしれません。
- 脆弱性を持つ可能性のあるサービス:開いているポートで実行されているすべてのサービスには、セキュリティ上の欠陥が存在する可能性があります。これらの脆弱性は、攻撃者によってシステムを侵害するために悪用される可能性があります。
- セキュリティ対策が必要な攻撃サーフェイスの一部:攻撃サーフェイスは、攻撃者がシステムに侵入しようとするすべてのポイントの合計です。開いているポートはこの攻撃サーフェイスの一部であり、適切にセキュリティ対策を施す必要があります。
セキュリティのベストプラクティス
ネットワークをセキュアにするには、次のベストプラクティスに従う必要があります。
- 必要なポートのみを開く:不要なポートを開くと、ネットワークの攻撃サーフェイスが増えます。使用していないポートを閉じることで、攻撃者の潜在的な侵入ポイントの数を減らすことができます。
- 各開いているポートは正当なビジネス目的を持つべきである:ポートが開いている場合、それはウェブサーバやデータベースサービスを実行するなど、正当な理由があるはずです。これにより、ネットワークが効率的かつ安全に使用されることが保証されます。
- すべてのサービスを最新の状態に保ち、悪用を防ぐ:ソフトウェアベンダーは定期的にセキュリティ脆弱性を修正するための更新をリリースしています。サービスを最新の状態に保つことで、既知の脅威からネットワークを保護することができます。
- ファイアウォールルールで敏感なポートへのアクセスを制限する:ファイアウォールを使用して、ネットワーク上の特定のポートにアクセスできるユーザーを制御することができます。適切なファイアウォールルールを設定することで、敏感なポートへのアクセスを承認されたユーザーまたはシステムのみに制限することができます。
環境のクリーンアップ
次に、前に起動した HTTP サーバを停止して環境をクリーンアップする必要があります。まず、HTTP サーバのプロセス ID (PID) を特定する必要があります。PID は、システム上で実行中の各プロセスに割り当てられる一意の番号です。
ps auxコマンドを使用してすべての実行中のプロセスをリストし、結果をフィルタリングして HTTP サーバのプロセスを見つけます。ps aux | grep "http.server" | grep -v grepこのコマンドを実行すると、次のような出力が表示されます。
labex 1234 0.0 0.1 31116 3164 pts/0 S 12:00 0:00 python -m http.server 8080出力の 2 列目には、HTTP サーバプロセスの PID が表示されます。
次に、PID を使用してサーバを停止します。
killコマンドを使用して、プロセスに終了信号を送信します。次のコマンドは、自動的に HTTP サーバプロセスを見つけて終了させます。kill $(ps aux | grep "http.server" | grep -v grep | awk '{print $2}')このコマンドは、まず前と同じフィルタリング方法を使用して HTTP サーバプロセスの PID を見つけ、その後 PID を
killコマンドに渡します。最後に、サーバが停止したことを確認する必要があります。ソケット統計情報を表示するために使用される
ssコマンドを使用します。出力をフィルタリングしてポート 8080 に関する情報のみを表示することで、サーバがまだ実行中かどうかを確認できます。ss -tulwn | grep 8080サーバが正常に停止した場合、このコマンドからは出力がなく、サーバがポート 8080 で待機していないことを示します。
まとめ
この実験では、ネットワークセキュリティの調査における重要な技術である Nmap SYN スキャンの実行方法と理解方法を学びました。Python HTTP サーバを使用して制御された環境を設定し、SYN スキャンを実行して開いているポートを見つけ、結果を分析し、テスト環境をクリーンアップしました。これらのスキルは、エシカルなネットワークスキャンと脆弱性評価に不可欠です。
SYN スキャンを理解することで、セキュリティ専門家は潜在的なネットワークの脆弱性を効率的に検出することができ、検知されるリスクを低減することができます。サイバーセキュリティの旅を進めるにあたっては、これらの技術を適用する前に常にネットワークをスキャンする許可を取得するようにしてください。



