
ユーザーランドTCP/IPスタックの使用により、より高速で効率的なステートレスSYNスキャナーおよびバナーグラバー。
概要
polarbearscan は、より高速かつ効率的なバナー取得とポートスキャンを目指したツールです。2 つの異なるアイデアを組み合わせており、皆様の注目と時間に値するものになることを願っています。
1 つ目のアイデアは、暗号学的に保護されたクッキーを使用したステートレス SYN スキャンを用いて、受信した ACK を解析することです。著者の知る限り、この手法は Dan Kaminsky が scanrand で先駆的に導入しました。scanrand 自体は Paketto Keiretsu(スキャンユーティリティ集)の一部であり、2001 年から 2002 年頃にリリースされました。このコードのミラーは Packet Storm [1] にあります。
2 つ目のアイデアは、パッチを当てたユーザーランド TCP/IP スタックを使用し、SYN フラグと ACK フラグの両方が設定された暗号検証済みパケットを受け取った直後にスキャナが状態を復元できるようにすることです。polarbearscan で使用しているユーザーランドスタックは libuinet [2] と呼ばれています。他のユーザーランド TCP/IP スタックとは異なり、これは FreeBSD の TCP/IP スタックを移植したものであり、非常に成熟しています。
libuinet スタックにパッチを当てることで、ソケットを構築し、適切な ACK で応答して標準的な TCP 3 ウェイハンドシェイクを完了できます。この方法により、完全に機能する TCP 接続が即座に確立されます。これは、TCP ポートが開いていることを確認した後、バナー取得やバージョンスキャンなどのために、カーネル経由で新たにフル TCP 接続を実行する必要がある他のスキャナ(nmap など)とは異なります。フル TCP 接続では、新たな TCP 3 ウェイハンドシェイク全体が実行され、ホスト間で最初に交換された 2 つのパケットによって構築された暗黙的な状態が完全に破棄されます。これを回避することで、帯域幅の使用量を削減し、ポートが開いていることを検出してから接続に移行するまでを即座に行えます。この接続は、バナー取得モードでデータを受信するだけで待機することも、HTTP リクエストを送信することもできます。
現在、このスキャナは IPv4 ベースのスキャンのみをサポートし、イーサネットタイプ(有線または無線)のインターフェースでのみ適切に動作することに注意してください。近い将来に IPv6 や異なるインターフェースをサポートする予定はありません。
インストール
コードのコンパイルは非常に簡単です。必要な依存関係をダウンロードするために、ネットへの接続と git がインストールされている必要があります。それに加えて、標準的な開発ユーティリティ(gcc、make、patch)とライブラリの開発版(pthread、pcap、OpenSSL)が必要です。Debian ベースのディストリビューションでは、DEPENDENCIES ファイルにリストされているすべてのパッケージをインストールするだけです。その後、'make' と入力すれば、外部依存関係が git でチェックアウトされ、スキャナ全体がビルドされます。このバイナリは /usr/bin や /usr/local/bin などにコピーできます。
コンパイルに失敗した場合は、著者(連絡先は下記)にエラー出力、カーネルバージョン、libc バージョン、問題の再現と修正に役立つその他の情報を添えてメールしてください。ご協力いただきありがとうございます。
使用方法
ツールの実行は非常に簡単です。root 権限が必要です。-h オプションで簡単な使用方法とオプションの説明が表示されます。ほとんどの場合、実行するスキャンの種類、スキャンするポートリスト、ターゲット IP または IP 範囲を指定するだけで十分です。CIDR 表記は IP 範囲でサポートされています。
-s で指定する 4 種類のスキャンタイプがあります。
-sB: 標準的なバナー取得を行います。スキャナはデータを送信せず、単に受信したデータを待ち、最初の改行または復帰文字までを表示します。
-sH: このモードでは、正常に確立されたすべての接続に対して "GET / HTTP/1.1" リクエストを送信します。HTTP サーバを迅速に識別するのに非常に便利です。
-sT: TLS スキャンモードでは、オプションもアルゴリズムも指定せずに TLS1.0 NULL プローブを送信します。ただし、受信側に有効な TLS サーバがある場合、応答を解析して有効な TLS エラーレスポンスかどうかを判断し、それを表示します。
-sC: カスタムスキャン。ファイル(-d で指定)からペイロードを読み込み、正常に確立されたすべてのソケットにこのペイロードを送信します。特定のプロトコルを迅速にプローブするのに便利です。
-p: スキャンする TCP ポートのリスト。ポートの範囲や単一ポートをカンマで区切って指定します。例: -p22,80,8080-9000,143 はポート 22、80、143、および 8080~9000 の範囲をスキャンします。
-b : 送信プローブに対する帯域幅制限。ソケットで送受信されるデータには適用されず、送信される SYN プローブにのみ適用されます。例: -b300k、-b67m、-b500b はそれぞれ 300kbps、76mbps、500bps の帯域幅制限になります。
-d : カスタムスキャンで使用するペイロードを含むファイルのファイル名。ファイル全体が最大 128kB まで送信されます。これはほとんどの目的に十分です。
-t: スキャナがすべてのプローブを送信した後、接続が維持されているソケットからのデータ受信を待つ秒数を指定します。接続が残っていない場合は、作業がなくなった時点で即座に終了します。
-x: 出力を常に 16 進数でダンプするように強制します。指定しない場合、非印字文字が見つかった場合のみ 16 進数でダンプします。
-v: 冗長出力を指定します。主にデバッグに役立ちます。
-i : 送信元 IP の選択と pcap バックエンドのセットアップに使用するインターフェース。適切に設定された NIC が 1 つだけの標準的なマシンでは不要ですが、複数の NIC がある場合に必要になることがあります。
-r : RNG に使用する乱数シード。主にデバッグや、ツールがまったく同じパケットシーケンスを生成することを確認するために役立ちます。引数は整数で、16 進数と 10 進数の両方で指定できます。
-T : SYN プローブで使用するデフォルトの IP TTL 値を上書きします。特に必要ありませんが、完全性のために含まれています。
-W : SYN プローブで使用するデフォルトの TCP ウィンドウサイズ値を上書きします。特に必要ありませんが、完全性のために含まれています。
-I : SYN プローブで使用するデフォルトの IP ID 値を上書きします。特に必要ありませんが、完全性のために含まれています。
-n: このオプションは、何をしているか理解している場合にのみ使用してください。このオプションを使用すると、ツールは送信 RST パケットをすべてドロップするファイアウォールルールを設定しません。これを使用すると、スキャナはフォークしなくなり、自分でこのルールを設定する責任が生じます。そうしないと、カーネルが受信したすべての SYNACK パケットに対して RST パケットを送り返すため、ツールは機能しません。Linux で設定されるルールは次のとおりです。
$ /sbin/iptables -A OUTPUT -p tcp --tcp-flags RST RST -j DROP
-o: このオプションは I/O リダイレクトを行わないため、uinet 内部の出力が多く表示されます。完全性のため、またはデバッグシナリオのために追加されていますが、それ以外ではあまり有用ではありません。
-h: 使用方法の情報。
ツールの使用例をいくつか示します。/24 範囲のポート 22 のバナー取得を行うには、次のように使用します。
./pbscan -sB -p22 x.x.x.x/24
単一 IP の一般的な HTTP ポート数個に対して HTTP スキャンを 16 進数モードで行うには、次のように使用します。
./pbscan -sH -x -p80,8080-9000 x.x.x.x
スキャン中に標準入力でキーを押すと、いくつかの統計情報が表示されます。例えば、識別された開いているポートの数、受信した有効な TCP ACK の数、現在アクティブな接続数、合計のうちすでに送信された SYN プローブの数などです。次のように表示されます。
sent: 1.97% (of 254), open: 0, active: 2, acks: 2
著者
このツールは Vincent Berg によって作成されました。連絡先は [email protected] へのメール、またはウェブサイト http://santarago.org でこのスキャナの更新版やニュースをご確認ください。
謝辞
テスト、移植、バグ報告に協力してくれた多くの方々に感謝します。Ehab、Joseph、Alejandro、Julian、Diego に感謝します。
参考文献
[1] http://packetstormsecurity.com/files/30489/paketto-1.10.tar.gz.html