はじめに:Discord Webhookの新たな悪用
人気のあるオープンソースパッケージリポジトリにおいて、悪意のあるパッケージがDiscord Webhookをコマンド&コントロール(C2)サーバーとして悪用し、機密ファイルの外部持ち出しやテレメトリーのホスティングを行っていることが明らかになりました。この手口は、従来のC2インフラストラクチャを回避し、正規のHTTPSトラフィックに紛れ込むため、検出が困難です。Socketの脅威調査チームがこの新たなトレンドを発見し、その詳細を報告しています。
なぜDiscord Webhookが悪用されるのか
Discord Webhookは、POSTリクエストを受け付けるシンプルなHTTPS URLです。URLを知っているだけで認証は不要であり、トラフィックはポート443を介した無害なJSONとして表示されます。これにより、攻撃者は以下の利点を得ています。
- 信頼されたドメインの利用:Webhooksは信頼されたドメイン上で動作するため、ファイアウォールによるブロックを回避しやすいです。
- 検出の回避:シグネチャベースの検出をほとんどトリガーせず、悪意のある活動が表面化しにくいです。
- インフラコストの削減:攻撃者は独自のC2サーバーを構築・維持する必要がなく、無料で堅牢なチャネルを利用できます。
npmパッケージにおけるドロッパーの事例
複数のnpmパッケージでDiscord Webhookの悪用が確認されています。
mysql-dumpdiscord
このnpmパッケージのindex.js
スクリプトは、config.json
、.env
、ayarlar.json
などの一般的な設定ファイルを標的にします。各ファイル名の絶対パスを解決し、その内容を読み取ります。エラーはサイレントに処理され、環境変数、APIキー、コマンド出力などの任意のテキストをユーザーに警告することなく外部に持ち出すことが可能です。ファイルが存在する場合、スクリプトはメッセージを構築し、1,900文字未満のファイルはコードブロックでラップされ、それより長いファイルはトルコ語の警告とともに1,900文字に切り詰められます。このメッセージは、ハードコードされたDiscord Webhook URLにJSONとしてPOSTされます。
nodejs.discord
このnpmモジュールはDiscordWebhook
クラスのみを含んでいます。そのconnect(...messages)
メソッドは、任意の引数を文字列に連結し、Discord.jsのWebhookClient
を使用して、別の埋め込みWebhook URLに送信します。
PyPIパッケージにおけるサプライチェーンリスク
PyPIのmalinssx
パッケージは、setup.py
でsetuptools
のinstall
コマンドをオーバーライドします。そのRunPayload
クラスは、「誰かがpip経由でmaladicusパッケージをインストールしました!」というJSONペイロード(元はベトナム語)をDiscord Webhookに送信してからインストールを完了します。このインストール時フックは、攻撃者にすべてのpip install
に関するテレメトリーを提供する古典的なサプライチェーンリスクをもたらします。
Ruby Gemにおけるホスト情報収集の事例
悪意のあるRuby Gemであるsqlcommenter_rails
は、包括的なホスト情報を収集します。これには、/etc/passwd
の内容、/etc/resolv.conf
からのDNSサーバー、ホスト名、現在のディレクトリとホームディレクトリ、api.ipify.org
を介した公開IPが含まれます。このデータはGemのメタデータとカスタムノートとともにパッケージ化され、整形された複数行のメッセージとして標準出力に表示された後、HTTPS経由でDiscord WebhookにJSONとしてPOSTされます。ネットワークの問題は静かに無視され、ステルス性が確保されます。
今後の展望と防御策
Discord Webhookの武器化は、サプライチェーン攻撃の経済性を根本的に変えます。脅威アクターはインフラコストやドメイン登録の必要がなくなり、組織によってすでに許可されている無料の堅牢なチャネルを悪用します。Webhook URLは実質的に書き込み専用であるため、コードやファイアウォールログに隠れ、検出を回避します。Discord以外にも、攻撃者はSlack、Telegram、GitHubのWebhooksを同様の目的で試しています。
防御側は、Webhooksを潜在的なデータ損失チャネルとして扱う必要があります。以下の対策が重要です。
- エグレスフィルタリング:特にビルドサーバーや開発者のワークステーションからのアウトバウンドHTTPSに対して、許可リストを強制します。
- 依存関係管理:ロックファイル、SLSAのようなプロベナンスフレームワーク、厳格な審査を通じて、悪意のあるパッケージがインストールされる前にブロックします。
- ランタイム監視:インストールフックやビルドスクリプトでネットワーク呼び出しを呼び出すコードをフラグ付けします。
- 開発者資格情報のローテーション:リポジトリに保存されている機密情報を最小限に抑え、外部持ち出しが成功した場合の露出を制限します。
Socketのセキュリティツールスイートは、これらの脅威に直接対処します。GitHub Appはプルリクエスト内のハードコードされたWebhooksやインストール時フックをスキャンし、Socket CLIはパッケージインストール時に同じチェックを強制します。Socket Firewallは依存関係のフェッチを仲介し、既知の悪意のあるパッケージをブロックします。ブラウザ拡張機能はレジストリ上の疑わしいパッケージを強調表示し、AIアシストコーディングツールはリスクのある依存関係を提案する際に警告を発します。行動検出とサプライチェーンの衛生管理に焦点を移すことで、組織は機密データが開発者のマシンから離れる前に、DiscordベースのC2攻撃を軽減できます。