このページは翻訳版です。正式な本文は英語版です。 英語版を読む
malware · cryptojacking · crypto-stealer · rust · docker · worm · honeypot · monero
godhive: 新種の Rust 製クリプトスティーラー/マイナーフレームワーク
Kinryū Labs は、当社ハニーポットネットワーク上で露出した Docker API を悪用している最中に捕捉された、新種かつ未報告の Rust 製攻撃フレームワーク godhive を解析した。Monero をマイニングし、主要取引所および 8 種以上のブロックチェーンをまたいで暗号資産ウォレットから資金を抜き取り、ワームとして拡散し、テイクダウンに耐えるよう設計されたコマンドチャネルの背後に隠れる。これが専用に作り込まれたクライムウェアであり、単独の開発者がコンシューマ向けモバイル回線から自作ツールを実地テストする形で展開したものであると、高い確度で評価する。
著者 Davis Zheng·
TLP:CLEAR. 公開可。Kinryū Labs のハニーポットセンサーネットワークによって捕捉。以下の指標は無害化 (defang) 済み。
エグゼクティブサマリ
- 6,9461 回の自動化バーストにおける Docker API リクエスト数
- 946バイナリに含まれる Rust ソースモジュール数
- 8+ウォレットドレイナーが標的とするブロックチェーン
- 9コマンドチャネルの種類
godhive は Rust でコンパイルされたワーム、クリプトスティーラー、マイナーの複合フレームワークであり、露出した Docker Remote API 経由で当社のハニーポットネットワークに到達した。単一のオペレーターが、露出した Docker API に対して大量かつ自動化されたキャンペーンを実行し、攻撃チェーン全体を 21 回反復した。Kinryū Labs は、godhive がコモディティマイナーではなく専用に作り込まれたクライムウェアであると高い確度で評価する。独自のブランドを備え、その名称は公開された脅威インテリジェンスに存在せず、回収したバイナリには 946 個の異なる Rust ソースモジュールと数か月分の開発が含まれている。
オペレーターはフレームワークを URL から取得することを一切しなかった。ELF を base64 化し、printf でチャンク単位にコンテナ内へインラインで書き込んだ。バイナリはオペレーター自身のインラインチャンクから完全に再構成された。215 個のチャンクを再結合して得られたのは 6.2 MB の x86-64 ELF (SHA-256 4194f2337c2b261ed6e1fd0b6d18f0ba75388bdc91a2658eb827a154ed784f36) で、VirusTotal には存在しない。
特徴的な発見は、godhive が本来マイナーではないという点である。マイニングはフォールバックにすぎない。主たる商売は窃取であり、6 つの主要取引所をまたいだ自動出金と、8 種以上のブロックチェーンをまたいだ資金のスイープを行い、ウォレットが見つからなかった場合にのみ Monero のマイニングに移る。
- godhive は新種の、専用に作り込まれた Rust 製クライムウェアである。独自ブランドを持ち、公開報告に存在せず、946 個の Rust モジュールと 18 個以上のクレート依存関係から構成されている。回収したバイナリは単純なドロッパーではなく、幅広い攻撃ツールキットである。
- 目的は収益化であり、窃取が最優先である。バイナリは取引所からの出金 (Binance、Coinbase、Kraken、Bybit、OKX、KuCoin) と、Ethereum、BSC、Polygon、Arbitrum、Optimism、Base、Avalanche、Cronos、Solana をまたぐ DeFi ドレインを自動化し、ステーブルコインを優先する。XMRig による Monero マイニングは、ウォレットが存在しないホスト向けのフォールバックである。
- 端から端まで観測した内容。観測されたチェーンは、露出した Docker API、ホストファイルシステムを読み書き可能でマウントした特権コンテナ、ホストエスケープ、
/etc/shadowと SSH 鍵の窃取、XMRig の展開、帯域外アクセス用の ngrok トンネル、Telegram ボットへの窃取データ送信、そしてクラウドメタデータへの SSRF と Kubernetes および Elasticsearch のスキャンであった。 - コマンドチャネルはテイクダウンに耐えるよう設計されている。godhive はピアツーピアの Kademlia メッシュ、ブロックチェーン上にホストされた C2 (EtherHiding)、稼働中の Cloudflare Workers リレー、アルゴリズム生成のバックアップドメイン、そして Telegram を重ねて配置し、あるチャネルが沈黙した際には自動で移行する。
- オペレーターのトレードクラフトはツーリングと正反対である。プロダクション品質のクライムウェアが、コンシューマ向けモバイル回線から、平文でハードコードされた Telegram トークンと公開ファイルホストを伴って、アンチハニーポットモジュールを搭載しているにもかかわらず単一送信元からの目立つ 1 回のバーストで展開された。単独の開発者が自作フレームワークを実地テストしている可能性が最も高いと評価する。
侵入経路: 露出した Docker API
侵入口はコンテナ界で最も古典的なものである。TCP/2375 で認証なしに公開された Docker Remote API だ。そこから先のチェーンは教科書どおりのホスト乗っ取りであり、オペレーターの Docker API リクエストから再構成できる。
オペレーターは alpine:latest から、privileged: true で network_mode: host を用い、ホストファイルシステム全体を読み書き可能でバインドマウント (/:/host:rw) したコンテナを作成する。このコンテナ設定そのものがエスケープである。ホストルートを特権コンテナにマウントすることは、マシンに対する root 相当の制御を意味する。続いて競合するマイナーを排除し (pkill -9 xmrig; pkill -9 lolMiner; pkill -9 minerd; pkill -9 godhive_c2)、永続化ディレクトリをホスト側の /etc/godhive に作成し、マウント越しにホストの機密情報を直接読み出して /etc/shadow と /root/.ssh/authorized_keys をダンプする。
見慣れたクリプトジャッキングが登場するのはここからである。godhive は匿名ファイルホストから XMRig ビルドを取得して展開し、帯域外アクセス用に ngrok トンネルを開き、結果を Telegram ボットへ送信する。最後にクラウドメタデータサービス (169.254.169.254) へ認証情報を照会し、Kubernetes、Elasticsearch、Kibana を探索して侵害範囲を広げようとする。オペレーターはこのチェーンをバースト中に 21 回反復した。
マイニングは些末な部分にすぎない
回収したバイナリは、実際に動作を観測したチェーンよりはるかに大規模である。946 個の Rust モジュールとそのビルド文字列が、幅広い攻撃ツールキットの全体像を描き出している。その一部はコンパイル済みコードに裏付けられている (Rust のモノモルフィ化による重複リテラル、エラーハンドリング経路、クレートのビルドディレクトリ)。一方で、モジュール名と設定スタブだけのものもあるため、以下のリストは実証された機能というより意図として読むべきである。
中核は収益化パイプラインである。harvester はファイルシステムを走査して wallet.dat、.env、SSH 鍵、wp-config.php を探す。scorer は BTC、XMR、ETH、Ravencoin を CoinGecko と照合して価格付けし、被害者を価値順にランク付けする。認証情報ステージは 2CAPTCHA 統合によってログインチャレンジを突破しつつ、窃取した認証情報でクレデンシャルスタッフィングを行う。そしてドレイナーは CCXT 取引所ライブラリとオンチェーンの DeFi スイープを通じて資金を引き出し、窃取したシードフレーズから鍵を導出し、出金ごとに最も安価なチェーンを選択する。バイナリ内に残された開発者コメントは、Ethereum のガス代を回避するためステーブルコインの出金を最適化するものであり、この水準の配慮が、機能するドレイナーと概念実証を分けている。
その中核の周囲にキットの残りが配置されている。Masscan と Nuclei でスキャンし、Docker、Redis、Kubernetes、Elasticsearch、WordPress、そして Log4Shell を含む一連の Windows および Java の脆弱性を悪用するワーム。プロセス名でエンドポイントベンダー 9 社を狙う EDR キラー。TPM 操作を伴う UEFI ブートキットに至るまでの 5 層の永続化。C2 に触れることなく新機能をボットネット全体へ配布する WASM プラグインシステム。1,000 米ドルの価値しきい値を超えた場合にのみ発火するよう制限されたランサムウェア。クリップボードハイジャッカー。DDoS モジュール。そして wtmp、btmp、ジャーナルログを削除し、アナリストの時間を浪費させるために偽の syslog ノイズを植え付けるアンチフォレンジック。全モジュールを偽の sysd プロセス名で偽装し、実在する googlevideo.com の SNI ホスト名を借用して自身の通信を YouTube のストリーミングに見せかける。
この全体像を和らげる点が 2 つある。1 つは、このフレームワークが 15 種のハニーポットプラットフォームと一連のサンドボックスおよびハイパーバイザーの検出機能を備えていること。もう 1 つは、いくつかの設定が未完成であることだ。デフォルトのマイニングプールは 2022 年に停止しており、クリップボード用の ENS 名は登録されておらず、暗号鍵はいまだ CHANGE_ME のプレースホルダである。機能はコンパイル済みで実在するが、その一部はまだ配線されていない。
ngrok と、それがハックツールとされる理由
このキャンペーンを最初に検知させたサンプルは、ngrok 自身の CDN から取得された正規の署名済み ngrok バイナリである。これはマルウェアではない。商用のリバーストンネリングツールであり、アンチウイルスエンジンがハックツールと分類するのは、まさに侵害後にきわめて有用だからである。godhive が特権コンテナ内でコード実行を得ると、ngrok は ngrok のクラウドへアウトバウンド接続し、選択したローカルサービスを公開 URL 経由で露出させる。インバウンドポートは一切開かれず、境界ファイアウォールや egress-only NAT に止める手立てはない。オペレーターは ngrok のローカルエージェント API (127.0.0.1:4040/api/tunnels) をポーリングしてトンネルを確認し、得られた公開 URL を自身の Telegram ボットへ送信することで、新たに掌握したホストをクリック 1 つで接続できるハンドルに変えていた。
テイクダウンに耐えるよう設計されたコマンドチャネル
godhive は単一の C2 に依存しない。除去の難易度が高い順にチャネルを積み重ねている。最下層にはプルーフオブワークによる参加チャレンジと NAT トラバーサルを備えたピアツーピアの Kademlia メッシュがあり、押収すべき中心点が存在しない。その上に EtherHiding があり、現行のバックエンドアドレスは失効させられないブロックチェーンのスマートコントラクトに格納され、実行時に稼働中の Cloudflare Workers リレー (c2-proxy.operator.workers[.]dev) 経由で解決されることで、バックエンドを防御側から隠蔽する。さらにその上に、SNI を偽装した DNS-over-HTTPS で取得されるアルゴリズム生成のバックアップドメイン、Tor 秘匿サービス、GitHub gist 上のデッドドロップ、8 つの SaaS チャネル、そして主要なオペレーターチャネルとしての Telegram がある。バーン検知はコマンドポーリングが連続して空振りする状況を監視し、暗号化された設定バックアップを伴ってオペレーターを新しいインフラへ自動移行させる。また、フェデレーション機能によって複数ボット間の連携が可能になっている。
Cloudflare Workers リレーを外部からフィンガープリンティングし、稼働中かつリクエストを処理していることを確認した。登録、タスク配信、ダッシュボードの各エンドポイントはバックエンドへルーティングされる一方、認証されていない入力は拒否され、これはバイナリが C2 認証に用いる AEAD 暗号化トークンと整合する。オペレーターはその背後で堅牢化された管理ダッシュボードも運用しており、Argon2 によるパスワードハッシュ、多要素認証、ロールベースアクセス制御、さらには TLS 設定におけるポスト量子オプションまで備えている。ボットネットをプロダクションインフラとして扱う姿勢であり、Prometheus メトリクスのエクスポートに至るまで一貫している。
もう半分: 素人同然の運用
これだけのエンジニアリングにもかかわらず、展開の仕方は重要な点で無防備である。キャンペーンは米国 Verizon Wireless のコンシューマ向けモバイル回線 1 本 (174.230.35[.]232、逆引き 232.sub-174-230-35.myvzw.com、フロリダ州ゲインズビル) から発信されており、バレットプルーフホストでも VPS でもなく、インフラの再利用もない短時間の自動化バーストであった。Telegram のボットトークンは平文でハードコードされており、テイクダウンの単一点となる。XMRig ペイロードは公開の匿名ファイルホストから配信された。そしてハニーポット検出コードを抱えていながら、追跡可能なアドレスから目立つ 1 回のバーストで展開された。
バイナリは macOS 上で、dev という名のユーザー配下、research/godhive というディレクトリでビルドされていた。オペレーターの Telegram アイデンティティに施された意図的な匿名化、未完成の設定、そして自己帰属的な展開と併せて読むと、最も無理のない解釈は、マルウェア・アズ・ア・サービスの顧客ではなく、熟練した単独開発者が自作フレームワークをテストしつつ運用しているというものだ。ブランドは洗練されており、独自の金色の蜂の巣ロゴと “one mind, one purpose, one hive” というタグラインを備えている。運用はそうではない。
攻撃者の特定
このキャンペーンは、Telegram インフラを通じて単一のオペレーターに結びつく。godhive は窃取した認証情報、トンネル URL、感染確認をハードコードされたボット @godhive_bot (ボット id 8836117161) へ送信する。捕捉した chat_id は個人アカウント @godhive77 (ユーザー id 7659611777) に解決され、表示名はアンダースコアのみでプロフィール写真もない。匿名性の確保を試みたものだが、godhive77 というハンドル自体がそれを台無しにしている。同一のオペレーターは名称確保用のチャネル @godhive (購読者 1 名、公開投稿なし、転送無効) も保有しており、連番の Telegram ユーザー id はアカウント作成が 2024 年後半であることを示す。godhive77 というハンドルが、さらなる attribution に向けた最も有力なピボットである。
侵害指標
攻撃者インフラは無害化してある。マルウェアが悪用する正規のサードパーティサービスは、検知目的でそのまま記載する。
ネットワークとホスト
| 指標 | 補足 |
|---|---|
c2-proxy.operator.workers[.]dev | 稼働中の Cloudflare Workers C2 リレー (Cloudflare へ通報のこと) |
hxxps://files.catbox.moe/p46h39.gz | 匿名ファイルホスト上の XMRig ペイロード (SHA-256 cb49ae0793b2…) |
bin.equinox.io/c/.../ngrok-v3-stable-linux-amd64.tgz | ngrok のダウンロード (正規 CDN)。サーバーから bin.equinox.io への外向き通信自体がシグナルとなる |
127.0.0.1:4040/api/tunnels | ngrok ローカルエージェントのポーリング (割り当てられた公開トンネル URL を読み取る) |
169.254.169.254/latest/meta-data/ | 認証情報窃取を狙ったクラウドメタデータ SSRF |
api.telegram.org | Telegram ボットによる C2 と窃取データ送信。サーバーワークロードからの外向き通信がハントのシグナル |
gitlab.com/nzyme/ | 静的ツールのステージング (sshpass、redis-cli、wget、tor、proxychains) |
2captcha.com, hashes.org, nitrxgen.net | 認証情報パイプラインで悪用される CAPTCHA 解決およびハッシュクラッキングサービス |
r[1-20]---sn-*.googlevideo.com, manifest.googlevideo.com | TLS SNI 偽装に使われる実在の YouTube CDN ホスト名。Google 以外の IP に解決される場合にアラートを上げる |
攻撃者、C2 アイデンティティ、送金先
| 指標 | 補足 |
|---|---|
174.230.35[.]232 | キャンペーンの発信元 (Verizon Wireless モバイル、232.sub-174-230-35.myvzw.com、フロリダ州ゲインズビル)。キャリアの動的アドレスであり、ブロックする価値は低い |
@godhive_bot (Telegram ボット id 8836117161) | マルウェアの C2 および窃取データ送信用ボット。トークンはバイナリにハードコード (シークレットは本稿では伏せ、テイクダウンのため Telegram へ通報済み) |
@godhive77 (Telegram ユーザー id 7659611777) | オペレーターの窃取データ受信アカウントであり、最も有力な attribution のピボット |
@godhive (Telegram チャネル id -1002105830453) | オペレーターの名称確保用チャネル |
49aXwwgXBKRKTUVgYuLy3fZkTeLP3PWgMhwiyK55Ur7WhgYXJ33N8JZG87vzUV1UyVdZzPGLvx1w9YQHk7faWPn1UzJte2R | 確認された Monero の送金先ウォレット (稼働中の XMRig 設定と対応) |
pool.minexmr.com:4444 | XMRig 設定のプール。ただし minexmr は 2022 年に停止しているため、このデフォルトでは失敗する |
ファイルとアーティファクト
- godhive バイナリ (再構成済み): SHA-256
4194f2337c2b261ed6e1fd0b6d18f0ba75388bdc91a2658eb827a154ed784f36(6.2 MB の x86-64 ELF、VirusTotal 未登録)。ELF ヘッダは意図的に破損させられており、サイズを約 106 MB と称し、コードがファイル末尾より先を指すようになっているため、標準的なツールが機能しない。 - ホスト上の永続化:
/etc/godhive、/host/usr/local/bin/sysd(systemd を装ったバイナリ)、/host/tmp/godhive_deployed.txt、プロセスgodhive_c2、コンテナ内で作成される独自イメージgodhive:latest。 - コンテナエスケープのシグネチャ:
Privileged:true、network_mode:host、および/:/host:rwバインドで作成されたコンテナ。 - ビルドアーティファクト:
/Users/dev/.cargo/registry/src/配下の cargo パスとresearch/godhiveビルドディレクトリ (macOS 開発者)。 - ホスト堅牢化の痕跡: Redis パスワードが
CHANGED_BY_GODHIVEに設定される。WordPress へのブルートフォース活動と並んでb374k.phpウェブシェルが設置される。
挙動
pkill -9 xmrig|lolMiner|minerd|godhive_c2に続くmkdir /host/etc/godhive。- コンテナのマウント経由での
/host/etc/shadowおよび/host/root/.ssh/authorized_keysの読み取り。 - 本物の systemd ではない
sysdプロセス。“System Core” というラベルの EFI ブートエントリを作成するefibootmgrの書き込み。 - Nuclei の作業ディレクトリ
/tmp/.nuclei_assault-t*。
検知
- サーバーからの
bin.equinox.ioおよび任意の*.ngrok*ホストへの外向き通信、ならびに ngrok エージェント API へのポーリング127.0.0.1:4040/api/tunnelsにアラートを設定する。 Privileged:trueかつ/:/hostバインドで作成されたコンテナにアラートを設定する。この組み合わせはほぼ確実にエスケープの試みである。- サーバーワークロードから
api.telegram.org、c2-proxy.operator.workers[.]dev、gitlab.com/nzyme/、2captcha.com、およびハッシュクラッキングサービスへの外向き通信にアラートを設定する。 sysdプロセス、EDR エージェントの停止や強制終了 (falcon-sensor、SentinelOne、cbdefense、sophos-edr、cylancesvc)、およびCONFIG SET requirepass CHANGED_BY_GODHIVEにアラートを設定する。- Google 以外の IP に解決される
googlevideo.comSNI の TLS、およびブラウザ以外のプロセスからのmanifest.googlevideo.comは、トラフィック偽装として扱う。
緩和策
- 2375 番ポートで Docker API を認証なしに公開してはならない。 localhost にバインドし、TLS クライアント認証を用いること。これが根本原因である。
no-new-privilegesを強制し、--privilegedを廃し、ホストのバインドマウントを制限する。あるいは rootless Docker か gVisor を使う。- コンテナからクラウドメタデータサービス (
169.254.169.254) へのアクセスをブロックし、IMDSv2 を必須とする。 - 外向き通信をフィルタする。サーバーワークロードは匿名ファイルホスト、ngrok、Telegram、CAPTCHA 解決サービス、および上記の静的ツールステージング先に到達すべきではない。
- UEFI 永続化を鈍らせるため Secure Boot を有効化し、godhive が停止を試みるエンドポイントエージェントの改ざん防止機能を有効にする。
- いずれかのホストが侵害された可能性がある場合は、取引所の API キーを直ちにローテーションすること。godhive は出金を自動化する。
MITRE ATT&CK マッピング
| 戦術 | 技術 |
|---|---|
| 初期アクセス | T1190 Exploit Public-Facing Application (Docker API。武器庫には Redis、Kubernetes、WordPress、Log4Shell も含む) |
| 実行 | T1610 Deploy Container、T1059.004 Unix Shell |
| 権限昇格 | T1611 Escape to Host (特権コンテナ、ホストマウント) |
| 永続化 | T1543 Create or Modify System Process (sysd)、T1542.003 Bootkit (UEFI)、T1014 Rootkit |
| 防御回避 | T1562.001 Impair Defenses (EDR キラー)、T1070 Indicator Removal (ログ削除)、T1497 Virtualization/Sandbox Evasion (ハニーポット/VM 検出)、T1036 Masquerading (sysd、YouTube SNI)、T1027 Obfuscated Files (破損 ELF) |
| 認証情報アクセス | T1003.008 /etc/passwd and /etc/shadow、T1552.004 Private Keys、T1552.005 Cloud Instance Metadata API |
| 探索 | T1046 Network Service Scanning (Masscan、Nuclei) |
| コマンド&コントロール | T1572 Protocol Tunneling (ngrok)、T1090 Proxy、T1071.001 Web Protocols (Telegram、Cloudflare Workers)、T1102 Web Service (GitHub gist、SaaS チャネル) |
| 影響 | T1496 Resource Hijacking (XMRig)、T1486 Data Encrypted for Impact (ランサムウェア)、T1657 Financial Theft (取引所および DeFi のドレイン)、T1498 Network Denial of Service |
手法と注記
- 分析は ELF の静的バイナリ解析であり、対象はハニーポットが捕捉したオペレーター自身のインライン base64 チャンクから完全に再構成したものである。これに加えて、捕捉した Docker API トラフィックのレビューと、オペレーターの稼働中 Cloudflare Workers リレーに対する許可された範囲での外部偵察を行った。マルウェアの実行は行っておらず、C2 認証の試行も行っていない。
- 指標は無害化してあり、マルウェアが悪用する正規のサードパーティサービスは検知目的でそのまま残している。
- サンプルは他の研究者および防御側に対し、要請に応じて提供する。contact@kinryu.sh 宛に、自身が誰で何のために必要かを簡潔に添えて連絡されたい。