Masscanで数百万のIPを一瞬でスキャン:高速・強力、そして運用上の重要な注意点

Network tutorial - IT technology blog
Network tutorial - IT technology blog

Masscan:速度が最優先されるとき

/16(65,000以上のIP)の範囲内にある全デバイスを調査する必要があるが、Nmapの予測では完了まで2日かかると言われたことはありませんか?このようなケースでNmapに無理をさせてはいけません。Masscanは、大規模なスキャンを驚異的なスピードで解決するために誕生しました。

Ubuntuで以下のコマンドをインストールして実行し、その違いを体感してみてください。

sudo apt update && sudo apt install masscan -y
# ローカルネットワークのポート80を毎秒1000パケットの速度でスキャン
sudo masscan 192.168.1.0/24 -p80 --rate 1000

わずか数秒で、ポート80が開放されているIPのリストが表示されます。このスピードこそが、このツールの最大の武器です。

なぜNmapはMasscanより遅いのか?

Nmapは同期(Synchronous)メカニズムで動作します。パケットを送信し、応答を待ってから次の処理に移ります。複数の接続を並行して実行できますが、数百万IPという規模になると、タイムアウトの待ち時間が累積して膨大な時間になります。

一方、Masscanは異なります。非同期(Asynchronous)アーキテクチャを採用し、OSのカーネルをバイパスするために独自のTCP/IPスタックを構築しています。応答を待たずにSYNパケットを連続して射出します。戻ってくるSYN-ACKパケットを記録するために、別の専用モジュールが待機しています。

標準的な1Gbpsのネットワークカードがあれば、Masscanはわずか6分でインターネット全体をスキャンする能力を持っています。しかし、このパワーには大きなリスクが伴います。

あるインターン生が、社内ネットワークで --rate 1000000(毎秒100万パケット)を設定したのを見たことがあります。わずか30秒後、SIEMシステムは何十万もの誤検知アラートで埋め尽くされました。さらに悪いことに、コアスイッチのMACテーブルがオーバーフローし、オフィス全体が通信不能に陥りました。常に控えめな数値から始めるようにしましょう。

パフォーマンスを最大化するためのインストール

リポジトリからも利用可能ですが、ソースコードからビルドすることで、最新かつ最も安定したバージョンを使用できます。

sudo apt-get install git gcc make libpcap-dev
git clone https://github.com/robertdavidgraham/masscan
cd masscan
make -j

完了後、実行ファイルを /usr/local/bin にコピーしておくと便利です。

必ずマスターすべきパラメータ

  • -p: ターゲットポート (例: -p80,443 または -p1-1024)。
  • --range: スキャン対象のIP範囲。
  • --rate: 1秒あたりの送信パケット数。これがスキャンの「アクセル」になります。
  • --exclude: ネットワークダウンを防ぐため、ファイアウォールやゲートウェイなどの機密IPを除外します。
  • --wait: 全パケット送信後の応答待ち時間(通常は5〜10秒に設定)。

実践的なスキャン手法とデータ処理

ターミナル画面で結果を眺めるだけでは、レポート作成や分析には不向きです。データをマシンが読み取り可能な形式に出力する必要があります。

自動処理のために結果をJSONで出力する

データをPythonやELK Stackに連携させたい場合は、-oJ オプションを使用します:

sudo masscan 10.0.0.0/8 -p80,443,8080 --rate 5000 -oJ scan_results.json

主要なポートに焦点を当てる

本当に必要でない限り、全65535ポートをスキャンするのは避けましょう。時間がかかるだけでなく、侵入検知システム(IDS)にブロックされやすくなります。主要なサービスポートに絞ってスキャンを行います:

# 一般的なWeb、SSH、データベースのポートをスキャン
sudo masscan 172.16.0.0/12 -p22,80,443,3306,8080 --rate 2000

実体験から学ぶ教訓:速度が仇とならないために

かつて、ある拠点でパケットロスが発生するトラブルの対応をしたことがあります。2日間調査した結果、原因はMasscanを使用した自動インベントリ・スクリプトでした。そのスクリプトは、帯域幅の狭いVPN回線に対して非常に高い --rate で実行されていました。その結果、ルーターのキューを使い果たし、一般ユーザーのデータがドロップされていたのです。

現場からのアドバイス:

  1. まずは様子見: 常に --rate 100 から始めてください。CPU負荷と帯域幅を観察しながら、徐々に上げていきます。
  2. 帯域幅の計算: --rate 100000 は約50Mbpsを消費します。インフラがこの負荷に耐えられるか確認してください。
  3. 連携の黄金律: Masscanで「荒削りなスキャン」を行い、稼働しているIPを特定します。その後、そのリストをNmapに読み込ませ(-iL を使用)、サービスバージョンの詳細を調査します。これがセキュリティ専門家の標準的なワークフローです。

MasscanとNmapのクイック比較

機能 Nmap Masscan
速度 普通(丁寧) 非常に高速(非同期)
正確性 非常に高い 良好(レートが高すぎると漏れが発生しやすい)
バージョン特定 (Banner Grabbing) 非常に強力 限定的
スクリプト対応 (Scripting) NSEによる強力なサポート 非対応

おわりに

MasscanはNmapに取って代わるものではありません。両者は良き相棒です。Masscanが広範囲をスキャンして道を切り開き、Nmapが特定のターゲットを深く掘り下げます。この組み合わせにより、膨大な数のデバイスを時間をかけずに管理できるようになります。ただし、セキュリティ上の誤解を避けるため、実行前には必ずネットワーク運用チームに通知することを忘れないでください。

Share: