ASEC(AhnLab Security Intelligence Center)は、最近、Discord API を利用し C2(Command and Control)システムを構築したバックドアマルウェアが使用された攻撃事例(UNC5174 グループ[1])を発見した。 UNC5174 攻撃グループは、初期侵入以降、長期的な統制権を維持するため、複数のタイプのバックドアを順次配置する運用方式を使用する。実際の侵害事故の分析過程において、攻撃者はまず vshell など、過去に使用していたバックドアで対象システムにアクセスしたあと、一定時間が経過すると、検知負担がより少ない新しいタイプのバックドアを追加でインストールする戦術を繰り返し実行した状況が確認された。

[図1] UNC5174 グループの攻撃による侵害地域(出処: ATIP)
この転換過程で Discord Bot ベースのバックドアマルウェアが追加で配布された痕跡が発見され、このマルウェアは攻撃者の活動中に収集されたディスクアーティファクトおよびネットワークログから識別された。特に、攻撃者は別途の C2 インフラを構築せず、Discord API をコマンド・コントロールチャンネルで利用することにより、正常なユーザートラフィックと同じようなパターンを作り出し、既存のセキュリティポリシーを回避しようとする意図を見せた。このような運用方式は、既存の C2 サーバーが検知されたり、遮断される危険が生じた際、即時に代替チャンネルを確保しようとする UNC5174 グループの持続性戦略とも繋がっている。
Discord は、音声、映像、テキストベースのコミュニティプラットフォームであり、ゲーマー中心に始まったが、現在は様々な関心事とグループで広く使用されている。ユーザーは、特定のテーマでサーバーを作成し、その中でテキストチャンネル、音声チャンネル、スレッドなどを生成し、コミュニケーションすることができる。また、Bot を追加し、自動化機能を実装することができ、Discord API(REST + Gateway)を活用し、様々な機能を開発することができる。
攻撃者は、このような Discord の機能を悪用して Backdoor タイプのマルウェアを製作した。Github にオープンソースで公開されている discordgo モジュールを使用したものと確認され、2025年11月24日現在、この文章をポスティングしている時点で Virustotal Score は 1/64 点であり、AhnLab 製品群以外には検知されないファイルである。

[図2] VirusTotal Score
Discordgo は Go 言語(Golang)で記述されたオープンソースライブラリであり、Discord API と相互作用するアプリケーションやボットを開発する際に使用される。このライブラリは REST API と WebSocket Gateway の両方に対応しており、メッセージ送信、チャンネル管理、イベント処理など、様々な機能を実装することができる。また、音声チャンネル接続とオーディオストリーミング機能も提供しており、リアルタイムコミュニケーションボットの開発に適している。Discordgo を通じて認証トークンをベースにボットを容易に作成し、コマンド処理や自動化機能を実装することができる。オープンソースの特性上、誰でもアクセスが可能だが、攻撃者はこの点を悪用してマルウェアの製作に便利に活用した。
Discordgo Github repo : https://github.com/bwmarrin/discordgo

[図3] Discordgo
以下は、オープンソース Discordgo ライブラリを悪用して製作されたマルウェアを詳細に解析する。まず、Discord Bot を実装するための第一段階として、Token 値とサーバー ID 值を活用し、攻撃者のサーバーへの接続を試みる。この Token 値とサーバー ID 値は、ファイル内部に暗号化されており、ランタイムに base64、AES Decrypt方式を利用して復号化される。その後、復号化された値を持って攻撃者のサーバーへの接続を試みる。通常は Discord API を使用することが一般的だが、Discordgo ライブラリを活用すると discordgo.New() 関数を呼び出すことによって便利に接続を生成することができる。

[図4] discord.New() 呼び出し
Discord は単純なチャットプラットフォームを超えて多様な Bot 機能を提供している。注目すべき点は、Bot がサーバーでメッセージを受信すると、特定のイベントを発生させるが、そのうちの一つが MessageCreate イベントである。攻撃者は、まさにこのイベントを悪用し、バックドア機能を実装した。
Discordgo ライブラリでは、AddHandler() 関数を通じてイベント発生時に実行するコールバック関数を登録することができ、攻撃者はこの機能を利用して次のようなフローで自分のコマンドを Bot が処理するように構成した。
- コマンド受信:攻撃者が Discord チャンネルにコマンドを入力する。
- イベント発生:Bot がメッセージを受信すると、MessageCreate イベントがトリガーされる。
- コールバック実行:登録されたコールバック関数が実行され、コマンドを解釈して実行する。

[図5] AddHandler() を呼び出して MessageCreate イベントを処理する関数の登録
このように製作されたバックドアマルウェアは、以下のような機能を持つ。
- Command 実行
- ファイルアップロード
- ファイルダウンロード
- システム情報の収集
攻撃者からコマンドを実行しなさいというメッセージを受信すると、MessageCreate イベントを通してこれを受信し、登録されたハンドラーでコマンドを処理する。その後、bash -c の後ろに payload を付けて実行文字列を完成させ、システムコマンドを実行する。実行結果は /tmp/message.txt のような一時ファイルに保存した後、その内容を再び Discord に送信する。実行結果を攻撃者に送信した後、ファイルを削除して痕跡を最小限にする方式である。

[図6] bash で攻撃者のコマンドを実行

[図7] コマンド実行結果を message.txt に保存
以下のようなシステム情報を Victim から収集することができる。該当情報を収集する過程では、また別の Golang オープンソースが活用される。

[図8] システムで窃取できる情報
攻撃者のほとんどはオープンソースライブラリを活用して実装するため、自ら作成したコードが100行未満であると推定される。これほど短く簡単な方法で検知が困難な Backdoor マルウェアが十分に動作するという点で、脅威はより現実的である。このように、最近、攻撃者はオープンソースを基にマルウェアを製作し、正常なファイルのように偽装する手法を積極的に活用している。特に、Discord をコマンド・コントロール(C2) チャンネルとして使用すると、一般的なトラフィックに混ざり、検知がより困難になる。このような方式は、別途 C2 インフラを構築する必要がなく、認証・通信がすべて Discord プラットフォームを通して行われるため、セキュリティソリューションを回避しやすい。
| index | Bot Token | Server ID |
|
1 |
MTM5MzE4Mzg4NjYwMjkzMjI2NA.G6ooB1.zBdzA0XNv0k219EbJsXgxuR7N_X_H3beHgz_iM | 1393184594974474344 |
|
2 |
MTQxMzQyNzA1Nzc2MDY2NTcyMQ.Golp3b.yc5Z1_qjtKJxwsznCRc5k2KCB2_BARLMUGqqNs | 1413435292970647596 |
[表1] 攻撃に使用された Bot Token と Server ID
結果的に、攻撃者は簡単なメッセージイベントを通じて、リモートコマンド実行、データ流出など、様々な不正な振る舞いを行うことができる。オープンソースとコラボレーションプラットフォームを悪用する攻撃が増加しているため、ユーザーはこのような事実を事前に認知し、出所が不明なファイルに対して特に注意を払う必要がある。
Categories: マルウェア