サイト内の現在位置

Windows環境におけるDiscordチャットログフォレンジック

NECセキュリティブログ

2025年12月5日

今回は近年チャットツールとして使用されているDiscordについて取り上げます。Discordはオンラインコミュニケーションの場として広く利用されており、ゲームや趣味のコミュニティだけでなく、日常的なチャットツールとしても活用されています。その一方でDiscordを悪用した情報漏えいなどのセキュリティインシデントも報告されています。
そこで今回はローカル環境に残るキャッシュを活用したフォレンジック分析に焦点を当て、Discordに対する簡易フォレンジックの流れを簡単に紹介します。


注意事項
本ブログは、筆者による独自の調査に基づいて執筆されていますが、記載内容がすべて正確・最新であることを保証するものではありません。また、本ブログの内容を使用したことによって発生する不利益等について、筆者および関係者はいかなる責任も負いません。

目次

本記事のきっかけ

本記事を執筆するきっかけとなったのは「LetsDefend」new window[1]というトレーニングプラットフォームで提供されている「Discord Forensics」チャレンジに取り組んだことです。

LetsDefendとは

LetsDefendとはブルーチーム向けに設計されたオンラインのサイバーセキュリティトレーニングプラットフォームです。実際のインシデント対応を想定したシナリオや演習環境が用意されており、実務に近い形でスキルを身につけることができます。

図 1 LetsDefendトップページ

Discordとフォレンジック

Discordとは

Discord new window[2]とは音声通話・ビデオ通話・テキストチャットを提供するオンラインコミュニケーションプラットフォームです。オンラインゲームをプレイするユーザ同士がボイスチャットを行うことを目的に開発されましたが、現在では勉強会や趣味のサークルなど、ゲーム以外の用途でも広く利用されています。

インシデントにおける悪用事例

セキュリティインシデントにおいて、Discordが以下のような方法で悪用されるケースが確認されています。

  • 情報漏えいの経路:社内情報や認証情報が外部のDiscordサーバーへ送信される
  • フィッシング攻撃:Discord内でのDMを通じた詐欺やマルウェア配布 new window[3]

Discordのアーティファクト

ローカルキャッシュ

Discordアプリケーションは、メッセージや画像の一部をローカル端末にキャッシュとして保存します。
本記事ではローカルキャッシュからチャットログを復元する手法を解説します。ただしキャッシュという性質上、調査時点で当該データが既に削除されている可能性がある点には注意が必要です。

クラウドストレージ

Discordのメッセージは基本的にはクライアント端末ではなく、Discordのクラウドサーバーに保存されています。
そのため、チャット内容を完全に把握するなど網羅的な情報を取得したい場合は、Discord社へ問い合わせる必要があります。

ローカルの主要な保存場所(Windows環境)

Discordアプリケーションがローカルに保存するデータの場所や情報は公式ドキュメントには記載されていません。下記のアーティファクト情報は、フォレンジック調査の実践やコミュニティの知見を参考に記載しています。

Windows環境の保存パス
```
C:\Users\[任意のユーザ名]\AppData\Roaming\Discord
```
Discordのローカルキャッシュから収集できる主要なアーティファクトを以下にまとめます。

表1 Discordのアーティファクト一覧

カテゴリ 内容 保存場所
メッセージキャッシュ テキストメッセージ Cache/ (JSON形式)
ファイルキャッシュ 画像・動画などのファイル Cache/

アーティファクト解析

事前準備

Discordのキャッシュを用いた解析を行う前に以下のツールを用意します。

ツールの準備

  • ChromeCacheView new window[5](NirSoft製、無料): キャッシュファイルの表示・抽出
  • テキストエディタ(メモ帳、VScodeなど) : JSONファイルの中身確認用

ChromeCacheView

ChromeCacheViewとはGoogle ChromeなどのChromium系ブラウザが保存するキャッシュファイルを一覧表示し、その内容を確認・抽出できるツールです。URLやコンテンツタイプ、最終アクセス時刻、サイズといった情報をGUI上で確認できます。

図 2 ChromeCacheViewトップページ

DiscordはElectronフレームワーク上で動作しており、Electronは内部でChromiumエンジンを利用しています。new window[6]そのためDiscordが生成するキャッシュの構造はChromium系ブラウザのキャッシュ構造と似ていることが報告されています。
この特性を利用しChromeCacheViewを用いてDiscordのキャッシュフォルダを読み込むことで、Discord上の一部コンテンツの痕跡を確認することができます。

仮想シナリオ:キャッシュからのチャットログ復元

本記事では、情報漏えいインシデントを想定した仮想シナリオを用いて、Discordチャット履歴の抽出手法を解説します。なお、以下のシナリオは検証用に作成した架空の事例です。

シナリオ

今回は社内の機密文書が外部に漏えいした疑いがあるとの報告を受けました。従業員A(Windowsログオン名: client_1)の業務用PCを調査しました。端末確認の結果、Discordアプリがインストールされていることが判明しました。事前調査から「listfile.txt」というファイルを外部の人間に送信した可能性が高いことが分かっており、本調査ではDiscordのローカルキャッシュからその裏付けを試みます。

調査方法

  • 1.
    証拠ファイルの確保
    対象の端末からDiscordのキャッシュフォルダを保全します
    保全対象パス: C:\Users\client_1\AppData\Roaming\discord
    解析対象のキャッシュフォルダ:
    C:\Users\client_1\AppData\Roaming\discord\Cache\
  • 2.
    ChromeCacheViewで当該フォルダを開く
    ChromeCacheViewを起動し、「ファイル」→「キャッシュフォルダーの選択」から手順1.で保存したキャッシュフォルダを指定して読み込みます
図 3 ChromeCacheViewのフォルダ参照
  • 3.
    データの絞り込み
    「編集」→「検索」から検索ダイアログを開き、検索文字列に「message」と指定して検索します。検索結果の中からURLが「messages?limit=[任意の数字]で終わるエントリを探します。
    今回の場合は50.JSONというファイルが該当のURL(`messages?limit=50`)で終わるキャッシュファイルでした。
図 4 ChromeCacheView上での文字列検索
  • 4.
    当該JSONファイルの抽出・閲覧
    該当のJSONファイルを任意のテキストエディタで開きます。今回はwindows標準のアプリケーションである「メモ帳」を使用しています。
図 5 JSONファイルをメモ帳で表示
  • 5.
    「listfile.txt」の検索
    テキストエディタの検索機能を用いて、「listfile.txt」という文字列を探します。検索結果から「listfile.txt」というファイルを送信した痕跡がありました。
図 6「listfile.txt」の検索
  • 6.
    前後のコンテキストの確認
    「listfile.txt」が含まれている箇所の前後にある「content」のタグなどのフィールドを確認します。「content」はユーザが送信したメッセージを表すフィールドです。
図 7「content」タグの検索

やり取りの再構成

調査により今回のDiscord上での会話は次のような流れであったことが分かりました。([ ]内は「content」フィールドに保存されていたメッセージ本文を示しています)
1. test_user0151 : [hello]
2. attack_user : [hello]
3. attack_user :
[\u4f8b\u306e\u3053\u3068\u3092\u983c\u3081\u308b\u304b\u3044\uff1f]
これはUnicodeエスケープされている状態でキャッシュファイルに保存されているので、デコードすると以下のようになります。
→ [例のことを頼めるかい?]
(以降に示す日本語メッセージは、いずれもJSON 内のUnicodeエスケープをデコードし、日本語文字列として復元した内容です)
4. test_user0151 : [yes]
5. test_user0151 : [this is list file]
6. test_user0151 : listfile.txtファイルを送信
7. attack_user : [ありがとう]
8. test_user0151 : [ok]
9. attack_user : [じゃあ消します]

このようにDiscordのローカルキャッシュに残されたJSONファイルを解析することでどのユーザがどのような会話の流れで「listfile.txt」を送信したのか一定の精度で再構成できることが確認できました。

実際のやりとり

これらの調査結果を踏まえて、実際に検証環境で送受信したDiscordメッセージ画面を示します。図8は実際にやり取りしたメッセージ画面、図9は一部メッセージを削除した後の画面です。

図 8実際のやりとり
図 9メッセージを削除後のやりとり

今回の検証は図9の状態(メッセージ削除後)で端末からデータを回収し、ローカルキャッシュの解析を行いました。その結果、本検証環境では、ユーザが削除したメッセージ本文そのものはローカルキャッシュから復元できず、画面上に残っていたメッセージのみ内容を確認できることが分かりました。

まとめ

インシデントレスポンスにおける初動対応としてDiscordのローカルキャッシュからテキストメッセージを復元する手法について解説しました。ただし、今回使用した方法では削除されたメッセージは復元できません。そのため詳細な情報が欲しい場合はDiscord社に問い合わせることを推奨します。
Discordはビジネス利用が増加しており、今後もセキュリティインシデントにおける調査対象となる機会が増えると予想されます。本記事が、インシデントレスポンスの初動対応の一助となれば幸いです。

参考文献

執筆者プロフィール

岡田 真一(おかだ しんいち)
担当領域:リスクハンティング

脆弱性診断、ツール開発・検証、デジタルフォレンジック業務などに従事。
CEH、CDFP-Bを保持

執筆者の他の記事を読む

アクセスランキング