ShadowV2 キャンペーン:AWS Docker と DevOps を悪用する DDoS-as-a-Service

ShadowV2 Botnet Infects AWS Docker Containers to Launch DDoS Campaign

2025/09/24 gbhackers — Darktrace の最新調査により、従来型マルウェアと DevOps テクノロジーを組み合わせる攻撃キャンペーンが確認された。この攻撃の中心には、GitHub CodeSpaces でホストされる Python ベースの C2 (Command and Control) フレームワークが存在する。脅威アクターは、Python スプレッダーにより開始される多段階の Docker デプロイを悪用し、その後に、RESTful な登録/ポーリング機構を持つ Go ベースの RAT を展開するという。

コンテナ化とクラウド・ネイティブ・ツールを、高度なサービス拒否攻撃の手法と組み合わせる ShadowV2 は、DDoS マルウェアを BaaS (Botnet-as-a-Service) プラットフォームへと昇格させている。

ShadowV2 の特徴は、そのツールキットの洗練度と大規模な運用にある。このキャンペーンでは、HTTP/2 ラピッドリセット攻撃/Cloudflare Under Attack Mode (UAM) バイパス/大規模 HTTP フラッドなどを組み合わせ、ボリューム型 DDoS とクラウド・インフラ向けの標的攻撃を融合する、ハイブリッド手法が採用されている。

また、FastAPI と Pydantic を介した OpenAPI 仕様/洗練されたログインパネル/オペレーター用インターフェイスなどの存在は、マルチテナント運用を想定したサービス設計を示している。それにより、このオペレーションは、従来のボットネットではなく DDoS-as-a-Service として再定義されており、現代のマルウェアがアーキテクチャとユーザビリティの両面で、正規のクラウド・ネイティブ・アプリケーションを模倣していることを示している。

HTTP/2 のラピッド・リセット手法では、プロトコルの多重化機能が悪用されている。単一のコネクション内で、数千のリクエスト・ストリームを生成して即座にキャンセルすることで、新たなストリームのための容量を解放し、クライアント当たりの実効リクエスト・レートを劇的に増加させる。それにより攻撃対象サーバのリソース枯渇が早期に進行し、従来のフラッド対策を回避しやすくなる。

このマルウェアは UAM バイパスのために、ChromeDP 経由でヘッドレス Chrome バイナリをバンドルし、JavaScript チャレンジを解いてクリアランス Cookie を取得する。ただし、Cloudflare のヘッドレス・ブラウザ検出メカニズムにより、有効性が制限される場合がある。そのため、追加の工夫として、ランダムなクエリ文字列/偽装転送ヘッダー (ランダム IP) /未稼働の WordPress バイパスルーチンなどをサポートする。

ShadowV2 攻撃の分析

初期アクセス

ShadowV2 の初期侵入は、AWS EC2 上の公開 Docker デーモンを標的に実行される。Darktrace のハニーポットが記録した Python Docker SDK のリクエストには、User-Agent: docker-sdk-python/7.1.0 と、GitHub による X-Meta-Source-Client: github/codespaces が含まれていた。

Attacker creates a blank container from an Ubuntu image.
Attacker creates a blank container from an Ubuntu image.

この接続試行は、シンガポールの Microsoft IP アドレスから発信されており、GitHub CodeSpaces のホスティングと一致する。攻撃者は汎用的な “SetUp”コンテナを生成し、Ubuntu 環境に RAT および DDoS バイナリをインストールした後に、そのコンテナをイメージ化して展開することで、外部へのフォレンジック・アーティファクトの露出を最小化していると推測される。

マルウェアの挙動

展開された Docker コンテナは、Go 言語で記述された ELF バイナリを “/app/deployment” にドロップする。このアンストリップ・バイナリ (unstripped binary) は、環境変数 MASTER_ADDR と VPS_NAME を用いて本拠地に通信し、VPS 名と Unix タイム・スタンプを連結して一意の VPS_ID を生成する。

ippet that performs the registration by sending a POST request to the C2 API with a JSON structure.
Snippet that performs the registration by sending a POST request to the C2 API with a JSON structure.

このインプラントは、2つの永続ループにより駆動される。1つは “/api/vps/heartbeat” への1秒間のハートビート POST、もう1つは “/api/vps/poll/ <VPS_ID>” への5秒間の GET ポーリングであり、それにより新しいコマンドを取得する。

2025年6月と 7月に VirusTotal へ提出された、2つの旧版マルウェアをリバースエンジニアリングしたところ、過去の検知記録は確認されなかった。したがって、被害者による偶発的な提出もしくは、攻撃者によるテストが示唆される。

 A snippet showing the fasthttp client creation loop, as well as a function to report the worker count back to the C2.
 A snippet showing the fasthttp client creation loop, as well as a function to report the worker count back to the C2.

コマンド・ペイロードが指定するのは、HTTP メソッド/攻撃 ID/ターゲット URL とポート/スレッド数/実行時間/オプションのプロキシなどである。このマルウェアは複数のスレッドを生成し、Valyala の fasthttp ベースの HTTP フラッド攻撃または、HTTP/2 ラピッド・リセット攻撃を、指定ターゲットに対して実行する。ある事例で研究者が傍受したのは、アムステルダムの VPS を標的とする、120 スレッドの HTTP/2 ラピッド・リセット攻撃だった。

API と C2 インフラ

このマルウェアの RESTful C2 は、Cloudflare の背後にホストされ、おそらく GitHub CodeSpaces 上で動作している。OpenAPI 仕様で文書化された、広範な API を公開していたが、現在は公開が取り下げられている。

The login UI at /login.
The login UI at /login.

提供されるエンドポイントでサポートされるのは、ユーザー認証/権限区別/攻撃開始/ゾンビホスト管理などである。管理者専用のユーザー作成エンドポイント/明示的なゾンビリストを要求する攻撃開始エンドポイント/ブラックリスト管理機能の存在は、この脅威が単なるアンダーグラウンド・ボットネットではなく、マルチテナント型の商用 DDoS サービスであることを示している。

防御側にとって必要なことは、コンテナ・オーケストレーション・プロセスへの詳細な可視化の取得/Docker API へ厳格なアクセス制御の適用/異常な API 使用やネットワーク・パターンに応じた行動分析であり、それにより、クラウド・ワークロードを継続的に監視することだ。

さらに、この件を孤立したマルウェア株と見なすのではなく、モジュール化されたサービス・ベースの脅威として認識し、オンデマンド DDoS 攻撃を検出/抑止する仕組みを整えることが重要である。