Masscan でポートスキャンを行う

Beginner
今すぐ練習

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

はじめに

この実験では、サイバーセキュリティにおける効率的なネットワーク調査のために、高性能 TCP ポートスキャナである Masscan を使用する方法を学びます。ソースから Masscan をインストールし、スキャンパラメータを設定し、プライベートネットワーク範囲での結果を分析する練習を行います。

演習では、ターゲットの定義、スキャンの実行、結果の解釈の手順を案内します。この実験を完了することで、倫理的なスキャン手法を維持しながら、Masscan の高速スキャン機能を実践的に体験することができます。


Skills Graph

Masscan のインストール

このステップでは、高性能 TCP ポートスキャナである Masscan を LabEx の仮想マシン (VM) 環境にインストールします。Masscan は、非同期伝送と独自のカスタム TCP/IP スタックを利用することで、数分でインターネット全体をスキャンできることで知られています。従来のスキャナとは異なり、Masscan はオペレーティングシステムのネットワークスタックに依存しないため、驚くほどのスキャン速度を達成できます。

作業を進める前に、正しい作業ディレクトリにいることを確認しましょう。~/project ディレクトリは、すべてのスキャン関連ファイルを整理する場所です。

cd ~/project

Masscan をインストールするには、いくつかの依存関係を事前にインストールする必要があります。これには、ソースコードをコンパイルするために必要な開発ツールとライブラリが含まれます。次のコマンドを実行すると、パッケージリストが更新され、必要なコンポーネントがインストールされます。

sudo apt-get update && sudo apt-get install -y git make gcc libpcap-dev

次に、公式の GitHub リポジトリから Masscan のソースコードをダウンロードします。リポジトリをクローンすることで、最新バージョンのコードを入手できます。

git clone https://github.com/robertdavidgraham/masscan

ダウンロードが完了したら、ソースコードをコンパイルして実行可能プログラムを作成する必要があります。make コマンドは、ディレクトリ内の Makefile を読み取り、ソフトウェアをビルドします。

cd masscan && make

コンパイルが正常に完了したら、インストールされたバージョンを確認することで、すべてが正常に動作することを検証できます。これは、インストールが成功したことを確認するための良い方法です。

./bin/masscan --version

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

Masscan version 1.3.2

最後に、どのディレクトリからでも Masscan を簡単にアクセスできるように、/usr/local/bin/ にコピーします。このディレクトリは通常、システムの PATH 環境変数に含まれています。

sudo cp bin/masscan /usr/local/bin/

以上でインストールプロセスは完了です。これで、この実験の次のステップで高速ポートスキャンを行うために Masscan を使用できるようになりました。

ターゲット範囲の定義

このステップでは、ポートスキャン操作のターゲット IP 範囲を定義します。ターゲット範囲を理解することは、ネットワークスキャンにおいて基本的なことです。これにより、スキャナにどのネットワークアドレスを調査するかを指示することができます。Masscan は大規模ネットワークを高速で操作するように設計されているため、効率的なスキャンを行うには特定のターゲット範囲が必要です。

学習目的で、RFC 1918 で定義されたプライベート IP 範囲を使用します。これらは安全な非ルーティング可能なアドレスで、ローカルネットワークで一般的に使用されているため、誤って実際のインターネットホストをスキャンすることを避けることができます。使用する主な 3 つのプライベート範囲は次の通りです。

  1. 10.0.0.0/8 - 最も大きなプライベートブロックで、企業でよく使用されます。
  2. 172.16.0.0/12 - 中規模の範囲で、エンタープライズネットワークで頻繁に見られます。
  3. 192.168.0.0/16 - 家庭や小規模オフィスのネットワークで最も一般的な範囲です。

まず、ターゲットリストを保存する作業ディレクトリに移動しましょう。

cd ~/project

次に、ターゲット範囲を保存するテキストファイルを作成します。テキストエディタとして nano を使用します。これはシンプルで、ほとんどの Linux 環境で利用できるためです。

nano targets.txt

エディタで、これらの 3 つの標準的なプライベート範囲を追加します(変更を保存するには Ctrl+O を押し、nano を終了するには Ctrl+X を押します)。

10.0.0.0/8
172.16.0.0/12
192.168.0.0/16

CIDR 表記 (/8、/12、/16) は、各範囲に含まれる IP アドレスの数を指定します。

  • /8 は最初の 8 ビットが固定されていることを意味します (10.x.x.x)
  • /12 は最初の 12 ビットが固定されていることを意味します (172.16.x.x から 172.31.x.x)
  • /16 は最初の 16 ビットが固定されていることを意味します (192.168.x.x)

ターゲットファイルが正しく作成されたことを、その内容を表示することで確認しましょう。

cat targets.txt

入力した通りに 3 つの CIDR 範囲が表示されるはずです。このファイルは、次のステップで Masscan に入力として使用され、どのネットワークをスキャンするかを指示します。

高速ポートスキャンの実行

このステップでは、前のステップで定義したターゲット範囲に対して、Masscan を使用して高速ポートスキャンを実行します。ポートスキャンは、ターゲットシステム上のアクセス可能なサービスを特定するのに役立つ基本的なネットワーク調査手法です。Masscan の独自のアーキテクチャにより、精度を維持しながら毎秒数千のポートをスキャンできるため、大規模ネットワークを迅速にスキャンするのに最適です。

まず、ターゲットファイルがある正しい作業ディレクトリにいることを確認します。これにより、Masscan が事前定義されたターゲットリストにアクセスできるようになります。

cd ~/project

では、実際のスキャンを実行しましょう。次の Masscan コマンドは、ターゲット範囲の最も一般的なポート (1 - 1000) をスキャンします。これらのポートには、通常、ウェブサーバー (80、443)、メール (25、110) などのよく知られたサービスやその他の頻繁に使用されるプロトコルが含まれます。

sudo masscan -p1-1000 -iL targets.txt --rate 1000 -oG scan_results.gnmap

このコマンドの各部分を分解して、その機能を理解しましょう。

  • -p1-1000: スキャンするポート範囲を指定します (ポート 1 から 1000)
  • -iL targets.txt: 事前定義されたリストファイルからターゲット IP アドレスを読み取ります
  • --rate 1000: スキャン速度を制御します (学習環境では 1 秒あたり 1000 パケットが安全です)
  • -oG scan_results.gnmap: 結果を grep 可能な形式で保存して、簡単に分析できるようにします

スキャン中は、進行状況を示すリアルタイム出力が表示されます。これにより、スキャンの状態と推定完了時間を監視できます。

Starting masscan 1.3.2 (http://bit.ly/14GZzcT) at 2023-01-01 00:00:00 GMT
Initiating SYN Stealth Scan
Scanning 3 hosts [1000 ports/host]

完了後 (小規模ネットワークでは通常 1 分以内)、スキャン結果を表示できます。grep 可能な形式で保存されているため、開いているポートとサービスを簡単に特定できます。

cat scan_results.gnmap

出力は、見つかった開いているポートを明確な形式で表示し、各行はホストとその開いているポートを表します。

Host: 10.0.0.1 ()   Ports: 80/open/tcp//http///, 443/open/tcp//https///

開いているポートのレビュー

このステップでは、前のポートスキャンの結果を分析して、開いているポートとそれに関連するサービスを特定します。開いているポートは、ネットワーク上のドアのようなもので、開いているとデバイス間の通信が可能になります。どのポートが開いているかを理解することは、ネットワークセキュリティにとって不可欠です。なぜなら、各開いているポートは、合法的なトラフィックとセキュリティ脅威の両方の侵入経路になり得るからです。

まず、スキャン結果が保存されているディレクトリに移動しましょう。これにより、正しいデータファイルを操作することができます。

cd ~/project

スキャン結果を生データ形式で完全に表示するには、cat コマンドを使用します。これにより、Masscan が記録したすべての情報、閉じているポートやスキャンのメタデータを含めて表示されます。

cat scan_results.gnmap

主に開いているポートに関心があるので、grep を使用して結果をフィルタリングすることができます。このコマンドは、「open」という単語を含む行のみを表示し、アクティブなサービスを見つけやすくします。

grep "open" scan_results.gnmap

より整理された表示をするために、IP アドレスとそれに関連する開いているポートを明確に表示することができます。awk コマンドは、出力を再構成して、どのホストでどのポートが開いているかを表示するのに役立ちます。

awk '/Host:/ {ip=$2} /open/ {print ip,$0}' scan_results.gnmap

特定のポート(例えば、一般的なウェブポート 80)が開いているホストの数を確認したい場合は、-c フラグを使用した grep コマンドでカウントを取得できます。

grep -c "80/open" scan_results.gnmap

最後に、スキャンしたネットワーク範囲全体で開いているすべてのポートの包括的な概要を取得するには、このパイプラインを使用して各開いているポートの出現回数をカウントします。このコマンドはポートをソートし、各ポートが何回出現するかを表示します。

grep -oP '\d+/open' scan_results.gnmap | sort | uniq -c

例としての出力は次のようになり、SSH(ポート 22)が開いているホストが 3 つ、HTTP(ポート 80)が開いているホストが 5 つ、HTTPS(ポート 443)が開いているホストが 2 つあることを示しています。

   3 22/open
   5 80/open
   2 443/open

スキャン結果のエクスポート

このステップでは、Masscan のスキャン結果をさまざまなファイル形式にエクスポートする方法を学びます。スキャンデータを適切にエクスポートすることは、調査結果を分析したり、チームメンバーとレポートを共有したり、データを他のセキュリティツールに入力したりするために重要です。ここでは、スプレッドシート分析用の CSV 形式、簡単なレビュー用のプレーンテキスト形式、自動処理用の JSON 形式という 3 つの一般的な形式を作成します。

まず、スキャン結果が保存されているプロジェクトディレクトリに移動します。これにより、すべてのエクスポートされたファイルが正しい場所に保存されます。

cd ~/project

最初の変換では、CSV(Comma-Separated Values、カンマ区切り値)ファイルを作成します。CSV は、Excel などのスプレッドシートソフトウェアにインポートするのに最適です。awk コマンドは、grep 可能な形式のファイルから IP アドレス、ポート番号、サービス名を抽出します。

awk -F'[ /]' '/Host:/ {ip=$2} /open/ {print ip","$4","$7}' scan_results.gnmap > scan_results.csv

次に、ターミナルやテキストエディタで簡単に読めるシンプルなテキストレポートを生成します。この形式は、スプレッドシートを開かずにどのホストが開いているポートを持っているかをすぐに確認する必要がある場合に便利です。

grep "open" scan_results.gnmap | awk '{print "Host:", $2, "Port:", $4}' > scan_report.txt

他のツールやスクリプトとの統合のために、JSON ファイルを作成します。JSON は、ほとんどのプログラミング言語が簡単に解析できる構造化された形式です。以下のコマンドは、すべてのスキャン結果を含む適切な JSON 配列を作成します。

echo '[' > scan_results.json
grep "open" scan_results.gnmap | awk '{print "{\"host\":\""$2"\",\"port\":\""$4"\",\"service\":\""$7"\"},"}' >> scan_results.json
sed -i '$ s/,$//' scan_results.json
echo ']' >> scan_results.json

最後に、すべてのエクスポートされたファイルが正常に作成されたことを確認します。このコマンドは、ファイルのサイズとともにファイルを一覧表示するので、エクスポートが期待どおりに機能したことを確認できます。

ls -l scan_results.* scan_report.txt

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

-rw-r--r-- 1 labex labex 1234 scan_results.csv
-rw-r--r-- 1 labex labex 5678 scan_results.json
-rw-r--r-- 1 labex labex 9012 scan_report.txt

まとめ

この実験では、Masscan を使用して高速ポートスキャンを行う方法を、インストールからターゲットの準備まで学びました。そのプロセスには、依存関係のセットアップ、ソースコードのコンパイル、安全な練習のためのプライベート IP 範囲の設定が含まれていました。

Masscan の非同期スキャン機能と CIDR 表記の使い方に関する実践的な知識を獲得しました。この実験では、ルーティング不可能なアドレスに焦点を当てることで、倫理的なスキャン手法を強調し、実際のネットワーク分析シナリオに備えることができました。