I. Masscanの紹介Masscanは、優れたスキャン効率と大規模なスキャン機能を備えた高速ポートスキャンツールです。TCPおよびUDPプロトコルスキャンをサポートし、ユーザーはニーズに応じて複数のターゲットとポートを指定できます。さらに、Masscanはネットワークパフォーマンス最適化技術を採用し、オペレーティングシステムのリソースとマルチコアプロセッサの能力を最大限に活用することで、優れたスキャン効率とスループットを実現します。Masscanを使用すると、ユーザーはターゲットホストのサービスと脆弱性を迅速に把握し、柔軟な出力形式とレポートを提供することで、さらなる分析と処理を容易に行うことができます。 Masscan の特徴: 1) 高速スキャン: Masscan は高速スキャン機能で知られており、5 分でインターネット全体をスキャンし、1 台のマシンから 1 秒あたり 1,000 万のデータ パケットを送信できると主張しています。 2) 制限の回避: Masscan はオペレーティング システムのネットワーク スタック制限を回避し、生のデータ パケットを直接送信することで、スキャン効率を向上させ、より多くのカスタム スキャン オプションを可能にします。 3) 非同期送信:データ パケットを非同期に送信することで、Masscan は複数のデータ パケットを同時に送信し、同時スキャンを実現してスキャン プロセスをさらに高速化できます。 4) 柔軟な出力形式: Masscan は、テキスト、XML、JSON などの複数の出力形式をサポートしており、結果の分析とその後の処理が容易になります。 II. Masscanの技術原理Masscanは、Robert David Graham氏によって開発されたネットワークポートスキャンツールです。その技術は、非同期伝送とカスタムTCP/IPプロトコルスタックに基づいています。従来のポートスキャンツールと比較して、Masscanは並列非同期伝送を採用しており、最新のコンピュータのマルチコア処理能力と高速ネットワークインターフェースを最大限に活用することで、スキャン速度を大幅に向上させます。 2.1 カスタムTCP/IPプロトコルスタックMasscanは、より高いスキャン性能を実現するために、カスタムTCP/IPプロトコルスタックを採用しています。オペレーティングシステムが提供する標準ソケットインターフェースを使用する場合と比較して、カスタムプロトコルスタックは、より直接的なパケット処理とより柔軟な設定を可能にします。Masscanは、オペレーティングシステムの制限や欠点を回避し、基盤となるネットワーク層を直接操作できるため、システムコールのオーバーヘッドを大幅に削減し、スキャン効率を向上させます。 これをよりよく理解するために、まず接続を確立するための通常の TCP 3 ウェイ ハンドシェイク プロセスを確認しましょう。 図1. TCP 3ウェイハンドシェイク 1) クライアントは、SYNフラグを1に設定し、シーケンス番号をxに設定したパケットをサーバーに送信します。パケット送信後、クライアントはSYN_SEND状態になります。 2) サーバーはACK応答パケットをSYN (seq=y) ACK (ack=x+1) メッセージで返します。送信後、サーバーはSYN_RCVD状態になります。 3)クライアントはサーバーからSYNパケットを受信すると、ACK(ack=y+1)パケットで応答します。パケット送信後、クライアントはESTABLISHED状態に移行します。サーバーはこのパケットを受信すると、ESTABLISHED状態に移行し、データ送信を開始します。 従来のTCP 3ウェイハンドシェイクと比較して、MasscanのカスタムTCPハンドシェイクプロセスでは2つのデータパケットのみが必要です。完全なTCP接続を確立する代わりに、まずSYNパケットをターゲットポートに送信し、それを受信するまで待機します。SYN-ACKパケットを受信した場合、ポートが開いていることを示し、RSTパケットを送信して接続確立プロセスを終了します。そうでない場合、ターゲットがRSTパケットを返した場合、ポートは開いていません。下の図を参照してください。 図2 MasscanハーフオープンTCPスキャンプロセス 一方、Masscanのカスタムプロトコルスタックは、特定のパケット形式を採用しています。高速スキャンを実現するために、Masscanは非常にコンパクトなパケット形式を採用し、パケットのサイズと数を削減することでネットワーク伝送のオーバーヘッドを削減します。これにより、単位時間あたりに送信されるパケット数が増加し、スキャン速度が向上します。 2.2 非同期伝送Masscanは非同期転送技術を採用しており、前のパケットへの応答を待たずに複数のデータパケットを同時に送信できます。この同時転送方式によりスキャン効率が大幅に向上し、Masscanは多数のターゲットホストを驚異的な速度で処理できます。 一般的に、ポートスキャンは従来のTCPハンドシェイクプロセスを採用しており、接続を確立するために3ウェイハンドシェイクが必要です。クライアントがSYNパケットを送信し、サーバーがSYN+ACKパケットを返し、最後にクライアントがACKパケットを送信します。このハンドシェイクプロセスは比較的遅く、マシンが65,536個のポートすべてをスキャンに使用したとしても、速度は依然として十分ではなく、高速スキャンには適していません。 Masscanのセミオープンスキャン方式は、接続確立を待つ必要がありません。ドライバーを介してターゲットにパケットを継続的に送信します。サーバーからの返信パケットはドライバーによって受信されます。Masscanは返信パケットに含まれる情報に基づいて送信元IPとポートを特定します。完全なポート間接続を確立する必要はありません。これにより、リクエスト送信後にブロックして待機する必要がなくなります。代わりに、パケット受信後、別のプログラムにソースを特定するよう通知することで、コンピューターのマルチコア処理能力と高速ネットワークインターフェースを最大限に活用します。 一方、Masscanのカスタムプロトコルスタックは、複数のデータパケットからの応答を並列処理できます。非同期スキャンを実現するためにマルチスレッドを採用しています。スキャンタスクを複数のサブタスクに分割し、複数のスレッドによって並列に実行します。各スレッドは、データパケットの送受信と、返されたパケットの処理を担当します。マルチスレッド化により、Masscanは多数のデータパケットを同時に送信・処理できるため、スキャン効率が大幅に向上します。 III. Masscanの使用3.1 高速スキャンMasscanは驚異的な速度でスキャンを実行し、多数のIPアドレスとポートを数分以内にスキャンできます。そのため、Masscanは大規模ネットワークのスキャンと脆弱性の検出に最適です。ただし、パケットレートが200,000パケット/秒を超える場合は、10Gbpsの速度を持つネットワークカードが必要であることにご注意ください。さらに、PF_RING ZCドライバも必要です。 `--rate` オプションを使用してスキャン速度を設定できます。帯域幅が 1Gbps 未満の仮想マシン上のテスト環境では、スキャン速度は 160,000 パケット/秒でした。 3.2 複数のプロトコルをサポートMasscanは、TCPおよびUDPポートスキャン、SCTPおよびICMPスキャンなど、複数のスキャンモードをサポートしています。ユーザーは必要に応じて適切なスキャンモードを選択し、対象ホストをスキャンできます。 1) TCPポートをスキャンします。 スキャンする TCP ポートの範囲を指定するには、-p パラメータを使用します。例: Masscan -p1-65535 192.168.0.0/16 # 192.168.0.0/16 ネットワークセグメント内のすべての TCP ポートをスキャンします。 2) UDPポートをスキャンします。 スキャンする UDP ポートの範囲を指定するには、-pU パラメータを使用します。例: Masscan -pU:1-65535 192.168.0.0/16 # 192.168.0.0/16 ネットワークセグメント内のすべての UDP ポートをスキャンします。 3) SCTPポートをスキャンします。 スキャンする SCTP ポートの範囲を指定するには、-pS パラメータを使用します。例: Masscan -pS:1-65535 192.168.0.0/16 # 192.168.0.0/16 ネットワークセグメント内のすべての SCTP ポートをスキャンします。 4) ICMPをスキャンする: スキャンする ICMP タイプの範囲を指定するには、-pI パラメータを使用します。例: Masscan -pI:8-0 192.168.0.0/16 # 192.168.0.0/16 ネットワークセグメント内のすべての ICMP タイプをスキャンします。 5) ACK、SYN、FIN、その他のフラグビットをスキャンします。 スキャンするフラグ タイプの範囲を指定するには、-pA パラメータを使用します。次に例を示します。 Masscan -pA:SAF 192.168.0.0/16 # 192.168.0.0/16 ネットワーク セグメント内の SYN、ACK、FIN フラグを持つすべてのデータ パケットをスキャンします。 6) 指定されたポートとプロトコルをスキャンします。 複数のプロトコルとポートを同時に指定できます。例: Masscan -p80,443,8080 -pU:53 192.168.0.0/16 # TCP ポート 80、443、8080 と UDP ポート 53 を同時にスキャンします。 Masscan はデフォルトでは TCP ポートのみをスキャンします。他のプロトコルのポートをスキャンする必要がある場合は、適切なパラメータを指定する必要があります。また、Masscan をポートスキャンに使用すると、ネットワークに負荷がかかる場合があります。 3.3 柔軟な構成Masscan を使用すると、ユーザーはターゲット ポート範囲、スキャン レート、パケット サイズなどのスキャン パラメータを柔軟に設定できます。ユーザーは特定のニーズに応じてこれらのパラメータを最適化し、最高のスキャン パフォーマンスと結果を実現できます。 一般的なスキャンパラメータ構成: 1) スキャン対象の設定: -iL <ファイル>: スキャンするターゲットのリストをファイルから読み取ります。 <IP 範囲>: スキャンする IP アドレスの範囲を直接指定します。 2) レートとタイムアウトの設定: --rate <パケット/秒>: スキャン レート (1 秒あたりに送信されるデータ パケットの数) を設定します。 --timeout <time>: 各ポートのスキャンタイムアウトを設定します。 3) IPおよびポートフィルタリング: --exclude <IP 範囲>: 特定の範囲の IP アドレスをスキャン対象から除外します。 --excludefile <file>: 除外する IP アドレスのリストをファイルから読み取ります。 --banners: 開いているポートのサービス バナー情報を取得します。 4) 出力形式 -oX ファイル名: XML をファイル名に出力します。 -oG ファイル名: grep 可能な形式でファイル名に出力します。 -oJ ファイル名: JSON 形式でファイル名に出力します。 5) その他の設定: randomize-hosts: スキャン対象の IP をランダム化し、スキャンのランダム性を高めます。 --nmap: Nmap に似た出力形式を生成します。 --rotate: スキャンに複数の送信元 IP アドレスを使用します。 --shard <合計シャード数>/<このシャード>: スキャン タスクを複数のセグメントに分割し、複数の Masscan インスタンスを同時に実行します。 コマンドを入力したくない場合は、設定ファイルを作成し、その設定ファイルをロードしてプログラムを実行することもできます。設定ファイルの内容は次のとおりです。 レート = 100000 出力形式 = xml 出力ステータス = すべて 出力ファイル名 = scan.xml ポート = 0-65535 範囲 = 0.0.0.0-255.255.255.255 除外ファイル = exclude.txt スキャン中に、-c オプションを使用して構成ファイルをロードし、スキャンを完了できます。 3.4 クロスプラットフォームサポートMasscanは、Linux、Windows、macOSを含む複数のオペレーティングシステムプラットフォームでの動作をサポートしています。これにより、ユーザーはMasscanを柔軟に活用し、さまざまな環境でポートスキャンを行うことができます。 IV. よく使われるポートスキャンツールの比較ネットワークポートスキャンは、ネットワークセキュリティ評価と脆弱性検出において重要な役割を果たします。現在、一般的に使用されているスキャンツールには、Masscan、Nmap、Zmapなどがあり、それぞれ独自の特徴と利点があります。
上記の3つのスキャンツールにはそれぞれ長所と短所があります。ツールの選択は具体的な状況に基づいて決定する必要があります。一般的には、複数のツールを組み合わせて使用する必要があります。 ZmapとMasscanはステートレススキャン技術を採用しており、非常に高速なスキャン速度を実現します。情報収集の初期段階では、ZmapまたはMasscanを使用してターゲットの状況を把握することができます。 単一のポートをスキャンする場合は Zmap の使用を検討してください。一方、複数のポートをスキャンする場合は Masscan の方が高速です。 最初の理解を得た後は、より機能豊富な Nmap を使用して、より詳細なスキャンを実行する必要があります。 V. 要約Masscanは、大規模ポートスキャンにおいて独自の利点を持つツールです。そのスピードと柔軟性は、ネットワークセキュリティ評価と脆弱性検出に欠かせないツールとなっています。しかし、Masscanを使用する際には、ネットワークセキュリティを維持しながらインターネットに悪影響を与えないよう、法的認可とコンプライアンスを常に念頭に置く必要があります。 |