9月25日、Pierluigi Paganiniが「AI-Powered CARBONATO Botnet Steals Credentials to Fund Its Own LLM Gateway」と題した記事を公開した。この記事では、DockerとAIエージェントを組み合わせ、盗んだAPIキーで自前のLLMゲートウェイを運営するボットネット「CARBONATO」の詳細な手口が紹介されている。
AIに「まずAPIキーを盗め」と命令するボットネット
CARBONATOが他のボットネットと一線を画すのは、AIエージェントへの最優先命令がAPIキーの窃取である点だ。
感染後にインストールされるのは、Nous Researchが公開しているオープンソースのAIエージェントフレームワーク「Hermes Agent」(MITライセンス)だ。攻撃者が改変するのはたった1ファイル――エージェントのペルソナ定義ファイルであるSOUL.mdのみ。39行のこのプロンプトがエージェントに「GH0ST」という名前を与え、Telegramを通じて受け取ったコマンドを実行させる。バイナリ自体は無改変の正規パッケージのため、バイナリ単体での検出は難しい。
SOUL.mdが定める優先順位は明快だ。OpenAI、Anthropic、Google、Gemini、OpenRouter、Together、Groq、Mistral、Cohere、LocalAI、Ollama、vLLM、LiteLLM、One APIの14プロバイダのAPIキーを、SSHクレデンシャルやアクセストークン、データベース認証情報よりも上位に位置づけている。
理由はシンプルだ。攻撃者は盗んだAPIキーで自前のLLMゲートウェイを運営し、AI計算コストをゼロにしている。調査時点(9月3日)でそのゲートウェイは稼働中で、無料枠のインフラ上で12モデルを公開し、APIを通じて27モデルを提供していた。
感染の仕組み:Docker APIを踏み台にする
初期侵入の手口は単純だ。ボットはポート2375で認証なしのDockerデーモンを公開しているホストをスキャンする。Docker公式ドキュメントはデーモンのリモートアクセスにTLS認証を必須としているが、このポートを無認証で公開しているホストはいまも多数存在する。見つかると、Docker API経由でホストファイルシステムをマウントした特権コンテナを起動し、そのコンテナ越しにホスト上でコマンドを直接実行する。
感染後の動作は以下の通りだ:
- リバースSSHトンネルをコスタリカのリレーサーバーへ開設(ポート番号は被害者のIPアドレスのMD5ハッシュから決定論的に算出)
- SSHサーバーをインストールし、攻撃者の公開鍵を追加
- コンテナID・ホスト名・IPアドレス・国情報をTelegramチャットへデプロイ報告として送信
永続化はcronジョブ、systemdタイマー、rc.local、OpenRCの4層で行われ、それらのファイルはimmutableフラグを立てることで削除を防ぐ。コンテナ名はsystemd-resolvedを名乗り、プロセス引数はカーネルスレッド[kworker/u2:0]に偽装する。ウォッチドッグがインプラントを監視し、コンテナが消えると自動で再取得する。
自律的な横展開:AIは使わない
拡散にAIは不要だった。5分ごとにスクリプトが起動し、侵害済みホストのネットワークとDockerブリッジに接続する/24ネットワークをスキャンして、次の脆弱なDockerデーモンを探す。新たなホストへ感染が成功すると、そのホストも同じスキャンを開始する。オペレーターの追加操作なしに自律的に拡大する設計だ。
実際の攻撃ワークフロー
- オペレーターがTelegramでタスクを送信
- Hermes AgentがSOUL.mdのペルソナとともにタスクをLLMゲートウェイへ転送
- LLMがターミナルコマンドを生成・実行し、出力を読んで次のアクションを決定
- 結果をTelegramへ報告
デプロイ報告と指令受信に同じTelegramチャットを使うこの構成は、攻撃者が状況適応型のコマンドインターフェースをほぼゼロのツール開発コストで得られることを意味する。
身元を示す複数の手がかり
本件を調査したMalwarebytesのセキュリティチーム「ThreatDown」が、認証なしで公開されていたコンテナレジストリを発見したことで、攻撃者のツールチェーン全体が露呈した。1日で4.3GBのイメージデータ、59リポジトリ、234タグ、605のファイルblobを受動的に収集し、C2アドレス、ボットトークン、LLMゲートウェイの共有パスワードまで判明した。
コスタリカ帰属の根拠は複数ある。162件のイメージ設定のうち14件がコスタリカのタイムゾーン(UTC-06:00)を持つ。Telegramハンドルが「Carbo506」で、+506はコスタリカの国番号だ。リバースSSHトンネルの終端はコスタリカのネットワーク(AS262145)にある。デプロイ報告に使われているスペイン語も、コスタリカを含む中米で使われる「voseo」形式だ。
防御と検出のポイント
ThreatDownのレポートが示す対策は具体的だ。まずインフラ設定の問題として、DockerデーモンのリモートAPIを無認証で公開する構成自体を排除することが前提となる。コンテナレジストリの認証設定漏れもまた、攻撃者のツールチェーン丸ごとの流出につながることが今回の事例で実証された。
検出シグネチャについては、hermes-agent自体をブロックリストに入れてはいけない(正規ユーザーが存在する)。代わりに以下の悪用固有のシグネチャを探す:
/root/.hermes/SOUL.mdに「GH0ST」を含むファイルCARBONATO_API_KEYを持つ.envファイル- サーバーからの原因不明なTelegramトラフィック
AI APIキーのインベントリを作成し、定期ローテーションと使用量監視を実施することも重要だ。CARBONATOの本質は「AI計算資源の横領」であり、APIキーが侵害されても使用量を監視していなければ気づけない。クラウドプロバイダ各社が提供する異常検知アラートの活用も有効な対策となる。
今回の事例は、AIエージェントフレームワークの正規コンポーネントを流用しつつ、プロンプトファイル1枚で目的を書き換えるという、検出回避と開発コスト削減を両立した攻撃設計を示している。「どのAPIキーがどこに存在するか」を把握していない組織にとって、CARBONATOは静かに計算コストを食い続ける脅威となりうる。
詳細はAI-Powered CARBONATO Botnet Steals Credentials to Fund Its Own LLM Gatewayを参照していただきたい。