🛡 概要
グローバル規模で観測された「ShadowRay 2.0」キャンペーンは、RayのJobs APIに存在する既知のリモートコード実行の脆弱性(CVE-2023-48022)を突き、インターネットから到達可能なRayクラスターを乗っ取り、自己拡散する暗号資産(Monero)マイニング・ボットネットへ変換します。調査報告では、攻撃者はAI生成と見られるBash/Pythonペイロードを用い、マイニングのみならず、リバースシェルによる対話的操作、資格情報・モデル/ソースの窃取、さらにはSockstressを用いたDDoSの踏み台化まで行うとされています。現時点で当該欠陥に恒久的な修正はなく、Rayは信頼できる閉域環境での運用を前提としているため、公開露出の遮断と多層防御が必須です。
脆弱性: CVE-2023-48022(Ray Jobs APIの認証不備に起因する任意コード実行)/CVSS: 公的な評価値は要確認(本稿では未記載)
🔍 技術詳細
攻撃はRayダッシュボード(デフォルトポート8265)経由のJobs APIに対して認証なしでジョブを投入できる点を突きます。攻撃者はGitLabやGitHub上のリポジトリからステージングされたスクリプトを取得し、BashとPythonを多段で実行。Rayのオーケストレーション機能を逆手に取り、ヘッドノードから全ワーカーノードへマルウェアを一斉配布し、自律的なクラスター間拡散まで行います。ペイロードにはLLM生成特有の冗長なdocstringや不要なechoが含まれる例が確認され、コード生成にAIが関与した可能性が指摘されています。マイナーはXMRigを用い、CPU/GPU資源や権限を検査した上で稼働率をおおむね60%に抑え、直感的検知を回避します。持続化はcronやsystemdの改変で実装され、実行ファイルの格納先やプロセス名(例: 「dns-filter」)を偽装して痕跡を隠蔽。さらに競合する他のマイナーを強制終了し、/etc/hostsやiptablesで他者が利用するプールを遮断します。C2として複数のPythonリバースシェルを開設し、作業環境情報、MySQL資格情報、独自AIモデル、ソースコード等の窃取や横取りを可能にします。攻撃インフラへの定期的なポーリングのため、15分間隔でリポジトリ更新をチェックするcronが仕掛けられる事例も報告されています。DDoSはSockstressにより、生TCPで多数の接続を開く非対称消耗を悪用してリソースを枯渇させる手口が用いられます。キャンペーンは2023年の初期波(ShadowRay)から継続しており、2024年11月にはGitHubを用いる波が確認されています。露出するRayサーバは数十万規模に増加しているとの指摘があり、影響範囲は極めて広範です。
⚠ 影響
– 計算資源の不正占有による学習/推論ジョブの遅延・失敗、クラウド費用の高騰
– モデル/コード/資格情報の窃取による知的財産・機密漏えいリスクの拡大
– 組織外へのDDoS発信・ボットネット参加による法的・信用上のダメージ
– ネットワーク設定やシステム構成の改変(iptables, systemd, cron)による復旧コスト増
🛠 対策
恒久パッチがない前提でのハードニングが必要です。
- 公開遮断: ダッシュボード/Jobs API(デフォルト8265)をインターネットから隔離。SG/ACL/Firewallで特定管理セグメントのみ許可。Zero Trust原則に基づくプリンシパル最小化。
- 強制認証: リバースプロキシ(例: mTLS/SSO/OIDC)でダッシュボードとJobs APIに認証・認可を付与。IP制限と組み合わせ。
- 最小権限: Ray実行ユーザーを非特権化。root不要化、sudo無効化、書込み先を限定。
- アウトバウンド制御: 既知のマイニングプールや不審ドメインへの通信をEgress制御。GitHub/GitLab Raw等への頻繁アクセスを監視・制限(正規CI/CDと区別する例外設計を実施)。
- 構成監視: cron, systemd(新規ユニット/Override)、/etc/hosts, iptablesの変更検知と差分監査。
- ワークロード監視: CPU/GPU使用率の平常時ベースライン化と逸脱検知。プロセス名偽装(dns-filter等)を前提にハッシュ/親子関係で判定。
- インシデント準備: 侵害時は直ちにネットワーク隔離→イメージ再構築(ゴールデンイメージ)→秘密情報ローテーション→法務/広報連携の手順化。
📌 SOC視点
- ネットワーク: 8265/TCPへの外部からのアクセス試行、短時間の大量POST、Geo分散元IP。マイニングプール宛のStratumプロトコル風通信、長時間の外向き接続。
- プロセス/EDR: 親python→bash→curl/wget→sh→xmrigのプロセスツリー。コマンドラインに「–donate-level」「stratum+tcp」が含まれる、あるいは/procで偽装名(dns-filter)。
- 永続化痕跡: /etc/cron.*, crontab -lの不審エントリ(*/15)、/etc/systemd/system/配下の新規サービスやOverride。systemctlの実行ログ。
- 構成改変: /etc/hostsへの大量FQDNブロック追記、iptables/nftablesの新規DROP/REDIRECTルール。
- ファイルI/O: /tmp, /var/tmp, ~/.cache等へのELF/スクリプト投下、GitHub Rawからの周期的ダウンロード。
- DDoS兆候: 原始ソケット使用、SYN/半開接続の急増、Socketリソース枯渇。
📈 MITRE ATT&CK
- Initial Access: T1190 公開アプリ脆弱性の悪用(Ray Jobs APIを認証なしで悪用)
- Execution: T1059 コマンド/スクリプト(Bash/Python多段ペイロード)
- Persistence: T1053.003 Cron、T1543.002 Systemdサービス作成/改変
- Privilege/Defense Evasion: T1036 偽装(dns-filter等)、T1562 防御妨害(競合マイナー停止・iptables/hosts改変)
- Discovery: T1082 システム情報探索(CPU/GPU/権限の検査)
- Lateral Movement: T1210 リモートサービスの悪用(Rayの分散実行でノード/クラスター間展開)
- Command and Control: T1071 アプリ層プロトコル(逆シェル通信)、T1105 ツール/ペイロードの外部転送(GitHub/GitLabから取得)
- Credential Access/Collection: T1552 認証情報の平文取得(環境/設定からのMySQL等)、T1005 ローカルデータ取得
- Impact: T1496 リソースハイジャッキング(暗号資産マイニング)、T1498 ネットワークDoS(Sockstress)
🏢 組織規模別助言
- 小規模: まず公開遮断(SG/Firewall)と認証付きリバースプロキシを導入。単一ダッシュボードへのVPN強制、定期スキャンで8265露出の有無を確認。侵害時は再構築優先。
- 中規模: IaCでセグメンテーションを標準化。EDR/eBPFでプロセス系テレメトリを常時収集し、Sigma/YARAでxmrig系指標を検出。アウトバウンド制御をプロキシで集中管理。
- 大規模: 専用のAI/HPCセグメントを分離し、mTLS・短命証明書・機械IDでゼロトラスト化。SOARで隔離/秘匿情報ローテーションを自動化。サプライチェーン(GitHub/GitLab)に対する署名/整合性検証を徹底。
🔎 類似事例
- ShadowRay(2023–2024)の継続攻撃波で同脆弱性を悪用
- TeamTNTによるKubernetes/Redis/Docker APIの露出悪用とマイニング展開
- Kinsingマルウェアによるコンテナ/クラウドへの横展開とXMRig設置
- Log4Shell(CVE-2021-44228)を足掛かりにした企業内クラスターへのマイナー導入事例
🧭 次の一手
直ちにRayの公開可視性を棚卸しし、8265/TCPを含む管理面の外部露出を遮断。侵害兆候(cron/systemd改変、xmrig痕跡、GitHub Raw定期取得、逆シェル通信)をハンティング。再構築・秘匿情報ローテーション・法務対応を並行で計画してください。運用標準化のため、Rayセキュリティ実装チェックリスト(認証リバースプロキシ、Egress制御、構成監査、監視クエリ集)を参照し、恒常化を図りましょう。


