高性能 (D)DoS 脆弱性テスト ツールキット。さまざまな L4/7 攻撃ベクトルを実装します。ネットワークへの非同期アプローチは、複雑なネットワーク インタラクションも実行しながら、CPU/RAM 要件を軽減するのに役立ちます。
注記?このツールキットには、ターゲット サーバーまたはネットワークの適切なパフォーマンス テストに必要な機能がありません。目標は、一般的な落とし穴を悪用し、一般的な保護手段をバイパスするように特別に設計された攻撃を実行することによって、保護のレベルを理解することです。
警告❗ 所有者の同意なしにインフラストラクチャ (サーバー、ウェブサイト、ネットワークデバイスなど) をテストしないでください。パッケージのデフォルト設定は、テスト実行時の意図しない大きな影響を避けるために調整されています。
MHDDoS プロジェクトからインスピレーションを受けました。
PyPI から:
$ pip install fiberfox
情報源より:
$ git clone https://github.com/kachayev/fiberfox.git
$ cd fiberfox
$ python setup.py install
Docker イメージをビルドします。
$ git clone https://github.com/kachayev/fiberfox.git
$ cd fiberfox
$ docker build -t fiberfox .
例:
$ fiberfox
--targets tcp://127.0.0.1:8080 http://127.0.0.1:8081
--concurrency 512
--rpc 1024
--strategy STRESS
--duration-seconds 3600
--proxies-config ./proxies.txt
特徴:
--concurrency
(または-c
) は、実行する非同期コルーチンの数を定義します。 Fiber は新しい OS スレッドを作成しないため、わずかなオーバーヘッドで多数のスレッドを実行できます。 TCP 攻撃ベクトルの場合、ファイバーの数はオープンしている TCP 接続の最大数にほぼ対応します。 UDP 攻撃の場合、実行するファイバーが多すぎると通常、パフォーマンスが低下します。SLOW
やCONNECTIONS
などの攻撃ベクトルを使用する場合)、ターゲットよりも多くのファイバーをセットアップしてください。フラグに関するその他のドキュメント:
$ python fiberfox --help
usage: fiberfox [-h] [--targets [TARGETS ...]] [--targets-config TARGETS_CONFIG] [-c CONCURRENCY] [-s {UDP,TCP,STRESS,BYPASS,CONNECTION,SLOW,CFBUAM,AVB,GET}] [--rpc RPC] [--packet-size PACKET_SIZE]
[-d DURATION_SECONDS] [--proxies [PROXIES ...]] [--proxies-config PROXIES_CONFIG] [--proxy-providers-config PROXY_PROVIDERS_CONFIG] [--log-level {DEBUG,INFO,ERROR,WARN}]
[--connection-timeout-seconds CONNECTION_TIMEOUT_SECONDS]
options:
-h, --help show this help message and exit
--targets [TARGETS ...]
List of targets, separated by spaces (if many)
--targets-config TARGETS_CONFIG
File with the list of targets (target per line). Both local and remote files are supported.
-c CONCURRENCY, --concurrency CONCURRENCY
Total number of fibers (for TCP attacks means max number of open connections)
-s {UDP,TCP,STRESS,BYPASS,CONNECTION,SLOW,CFBUAM,AVB,GET}, --strategy {UDP,TCP,STRESS,BYPASS,CONNECTION,SLOW,CFBUAM,AVB,GET}
Flood strategy to utilize
--rpc RPC Number of requests to be sent to each connection
--packet-size PACKET_SIZE
Packet size (in bytes)
-d DURATION_SECONDS, --duration-seconds DURATION_SECONDS
How long to keep sending packets, in seconds
--proxies [PROXIES ...]
List of proxy servers, separated by spaces (if many)
--proxies-config PROXIES_CONFIG
File with a list of proxy servers (newline-delimited). Both local and remote files are supported.
--proxy-providers-config PROXY_PROVIDERS_CONFIG
Configuration file with proxy providers (following MHDDoS configuration file format). Both local and remote files are supported.
--reflectors-config REFLECTORS_CONFIG
File with the list of reflector servers (IP per line). Only required for amplification attacks. Both local and remote files are supported.
--log-level {DEBUG,INFO,ERROR,WARN}
Log level (defaults to INFO)
--connection-timeout-seconds CONNECTION_TIMEOUT_SECONDS
Proxy connection timeout in seconds (default: 10s)
攻撃ベクトルは、スクリプト実行時に--strategy
オプションで定義されます。
注: パッケージは現在開発中です。すぐにさらに多くのメソッドが追加される予定です。
L4 攻撃はトランスポート層をターゲットにするように設計されているため、主にネットワーク容量を過負荷にするために使用されます。ターゲットに関する最低限の知識が必要です。
戦略 | 層 | 輸送 | デザイン | 注意事項 |
---|---|---|---|---|
UDP | L4 | UDP | シンプル フラッド: ランダムに生成された UDP パケットをターゲットに送信します。 | ネットワーク デバイスからNO_BUFFER_AVAILABLE 受信すると、ファイバーが自動的にスロットルされます。これを防ぐには、UDP フラッド攻撃をテストするときに、ターゲットごとに 2 つを超えるファイバーを構成しないでください。 |
TCP | L4 | TCP | シンプル フラッド: RPC でランダムに生成された TCP パケットをオープン TCP 接続に送信します。 | 単一パケットのサイズと、開いている各接続に送信されるパケット数の構成をサポートします。 |
CONNECTION | L4 | TCP | TCP 接続を開き、できるだけ長く接続を維持します。 | このタイプの攻撃を効果的に行うには、通常よりも多くのファイバーが必要です。最新のサーバーは、開いている非アクティブな接続の処理に非常に優れていることに注意してください。 |
L4攻撃の特殊なクラス。
UDP はコネクションレス型プロトコルです。アプリケーション層によって明示的な処理が行われない限り、送信元 IP アドレスは検証されません。これは、攻撃者が任意の送信元 IP アドレスを含むデータグラムを簡単に偽造できることを意味します。多くの場合、アプリケーション プロトコルは、応答で生成されるパケットがはるかに大きくなり、増幅効果が生じるように設計されています (したがって、この名前が付けられています)。このようなデータグラムを多くの異なるサーバー (リフレクター) に送信することにより、攻撃者はターゲット (被害者) デバイスに大量のトラフィックを生成する可能性があります。
実装された増幅攻撃:
戦略 | プロトコル | 増幅率 | 脆弱性 |
---|---|---|---|
RDP | リモート デスクトップ プロトコル (RDP) | ||
CLDAP | コネクションレス型ライトウェイト ディレクトリ アクセス プロトコル (CLDAP) | 56歳70歳 | |
MEM | Memcached | 10,000~50,000 | |
CHAR | 文字生成プロトコル (CHARGEN) | 358.8 | 文字生成リクエスト |
ARD | Apple リモート デスクトップ (ARD) | ||
NTP | ネットワーク タイム プロトコル (NTP) | 556.9 | TA14-013A |
DNS | ドメイン ネーム システム (DNS) | 28~54 | TA13-088A |
すべての増幅攻撃では、リフレクション サーバーのリストが提供される必要があります。
L7 攻撃は、アプリケーション層プロトコルの弱点やアプリケーション (または OS カーネル) の特定の実装の詳細を悪用するように設計されています。一般的にはより強力ですが、対象となるシステムがどのように動作するかについての知識が必要になる場合があります。
戦略 | 層 | 輸送 | デザイン | 注意事項 |
---|---|---|---|---|
GET | L7 | TCP | ランダムに生成された HTTP GET リクエストをオープン TCP 接続経由で送信します。 | 200 OK HTTP 応答コードは必要ありません (応答をまったく消費しないため)。ただし、ロード バランサーや WAF に対して実行される攻撃は効果的ではない可能性があります (L4 TCP フラッドと比較して)。 |
STRESS | L7 | TCP | 単一のオープン TCP 接続を介して、大きな本文を含む一連の HTTP リクエストを送信します。 | パフォーマンスを最大化するには、ターゲット ホストでパイプライン処理 (最初に応答を読み取らずに永続的な接続内で新しい要求を送信すること) が許可されていることを確認してください。 200 OK HTTP 応答コードは必要ありません (応答をまったく消費しないため)。ただし、ロード バランサーや WAF に対して実行される攻撃は効果的ではない可能性があります (L4 TCP フラッドと比較して)。 |
BYPASS | L7 | TCP | オープン TCP 接続を介して HTTP get リクエストを送信し、応答を読み取ります。 | チャンク読み取りは、HTTP 応答への解析を行わずに、接続からのrecv バイトによって実行されます。 |
SLOW | L7 | TCP | STRESS と同様に、HTTP リクエストを発行し、単一バイトを読み戻し、送信操作の間に時間遅延を設けて追加のペイロードを送信することで、接続の利用を維持しようとします。 | 理想的には、読み取りタイムアウトが原因でピアによって接続がリセットされるのを避けるために、遅延時間を適切に設定する必要があります (ピアの設定に応じて異なります)。 |
CFBUAM | L7 | TCP | 単一の HTTP GET を送信し、長い遅延の後、同じ TCP 接続経由でさらにリクエストを発行します。 | |
AVB | L7 | TCP | 送信操作の間に長い遅延を発生させて、オープン接続に HTTP GET パケットを発行します。読み取りタイムアウトにより接続がピアによってリセットされるのを避けるために、最大遅延は 1 秒に設定されます。 |
一連のプロキシ サーバーを構成することにより、ツールキットを 1 台のマシンから実行している場合でも、分散攻撃をシミュレートできます。プロキシが利用可能な場合、 fiberfox
最初にプロキシに接続し、それらのマシンからターゲットへの接続を確立します。そうすることで、システムは最も単純な IP ブロック保護手段をバイパスできます。このツールキットは、HTTP/SOCKS4/SOCS5 プロトコルとユーザー/パスワード認証をサポートしています。また、応答しないプロキシや攻撃要件を満たさないプロキシの使用を避けるために、提供された一連のプロキシを動的に管理します。
プロキシを使用する場合は、留意する必要がある考慮事項がいくつかあります。
現在実行されている攻撃が成功するかどうかは、プロキシ サーバーの能力に部分的に依存しています。たとえば、パブリック プロキシを使用する場合、プロキシが混雑しているため、ネットワーク レートが低下する可能性があります。この場合、プライベート インフラストラクチャまたは専用プロキシ サーバーの有料クラスターの使用を検討してください。
プロキシ サーバー自体は、いくつかの攻撃ベクトルを軽減する可能性があります。たとえば、「低速接続」アプローチを使用する場合、プロキシ サーバーは接続を調整したり切断したりするように構成されている可能性があります。そうすることで、ある意味ターゲットを「守る」ことになります。プロキシの設定が攻撃メカニズム (ネットワーク、プロトコルなど) にどのように介入するかに注意してください。
このツールキットの目標の 1 つは、脆弱性の検索をガイドするための包括的な監視情報を提供することです。
このツールは、各ターゲットごとの統計数 (パケット数、トラフィック、レート) を報告します。 TCP ベースの攻撃 (L4 と L7 の両方) の場合、単一セッション内で送信されたパケットのヒストグラムも報告します (ここでのセッションとは、単一のオープン接続内で送信されたトラフィックを意味します)。理想的には、ヒストグラムは左側に偏っている必要があります。これは、「接続ごとのリクエスト」パケットが送信される前にピアが接続を閉じたことを意味します。主に右側にある場合、ターゲットは「ゴミトラフィック」とみなされるものを受け入れます。
分析には注意してください。ネットワーク速度の低下、接続試行の頻度の高さ、エラー率の高さなど。これらの信号はすべて、ターゲットが攻撃に対して強い状態を維持しているという事実と、ターゲットがすでに死亡しているという事実の両方を示している可能性があります。保護レベルを完全に理解するには、ターゲット側の監視情報 (チャレンジされたときに正しく動作する機能など) を使用する必要があります。
アウトバウンド料金は概算で表示されていることに注意してください。すべてのパケットの送信にかかる時間の測定には、(ファイバーの) スケジューリング遅延と選択/プーリングが含まれます。ほとんどの場合、それらは無視できる程度です。ただし、10,000 を超えるファイバーを実行する場合は分析に注意してください。
feature-*
ブランチにフォークして変更を開始します。 MITライセンスに基づいてリリースされます。完全なライセンスについては、「ライセンス」を参照してください。
████
████▒▒██
████ ▒▒██
██▒▒ ▒▒▒▒▒▒██
██▒▒██ ██
████ ██▒▒██ ██
██▒▒▒▒██████ ██▒▒██ ▒▒ ████
██▒▒▒▒██ ████ ██████▒▒▒▒▒▒██ ▒▒▒▒██████████████
██▒▒ ████▒▒▒▒██████▒▒▒▒▒▒▒▒▒▒▒▒▒▒██▒▒▒▒▒▒██▒▒▒▒▒▒▒▒▒▒▒▒████
██▒▒▒▒ ██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██▒▒██▒▒▒▒▒▒▒▒▒▒▒▒▒▒██
██▒▒ ██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██▒▒██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒████
██ ██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██
██▒▒ ██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██
██▒▒▒▒ ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██
██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ██▒▒▒▒▒▒▒▒▒▒████▒▒▒▒▒▒▒▒██
████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██ ██▒▒▒▒▒▒████▒▒▒▒▒▒▒▒▒▒▒▒██
██▒▒██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██ ██▒▒▒▒██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██
██▒▒██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██ ██████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██
██▒▒██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██ ██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██
████ ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██
██ ▒▒██████▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ██▒▒ ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██
██ ████▒▒▒▒▒▒▒▒▒▒ ██ ▒▒ ▒▒ ▒▒▒▒▒▒▒▒▒▒▒▒██
██ ██ ████ ▒▒ ▒▒▒▒▒▒▒▒▒▒▒▒▒▒██
██ ██▒▒██ ▒▒ ▒▒▒▒▒▒▒▒▒▒██
██████████████████████▒▒▒▒██ ▒▒▒▒▒▒██
██▒▒ ██▒▒▒▒▒▒▒▒██ ▒▒▒▒██
██▒▒▒▒ ██▒▒▒▒▒▒▒▒████ ▒▒▒▒██
██▒▒▒▒▒▒██▒▒▒▒▒▒██ ██ ██
██████▒▒▒▒▒▒██ ██ ████
██████ ██ ██████
██ ████
██████