本記事はDiscordの運営者を対象としたセキュアなDiscordの設計や運用のガイドです。
本記事の出所の多くはDiscordのセキュリティ監査を行っているJon_HQ氏のツイートです。
加えて私自身が1万人以上のユーザーを抱えるDiscordを運営しているため、そこで得られた知見も紹介しています。
はじめにDiscordを保護するために必要な前提知識を紹介します。そして、利用者側での注意点や、運営側でのセキュアな設定や運用方法を説明します。最後に偽アナウンスなどのインシデントが起きた場合の対処法も説明します。
※Jon_HQ氏から翻訳と公開の許可をいただいています。
前提知識
Discordトークンとは?
Discordにログインをする際に生成される認証用の一意の一連の数字と文字です。
Discordトークンを盗まれると2FAは突破されます。
パスワードを変更するとDiscordトークンも変更されます。
Discordトークンは次の場所で確認できます。
- Developer tools
- ブラウザのネットワークログ
- ブラウザローカルストレージ
Discordセキュリティ用語集
用語名 | 説明 |
Discord Builder | Discord サーバを初期設定する人。 |
Discord Nuke | 攻撃手法の1つ。Discord の管理者権限または昇格した権限を使用して、チャンネル/カテゴリ/ロール/サーバーを削除し、混乱を引き起こすこと。 |
Discord Raid | 攻撃手法の1つ。数百または数千のDiscordアカウントを使用して、サーバーに参加しスパムや大量メッセージの送信、ユーザーへのPing送信などを行うこと。 |
Fake Mint | 攻撃手法の1つ。Discordのユーザーをフィッシングサイトに誘導する、偽の悪質なアナウンスを行うこと。 |
Cosmetic Role | 権限を持たない Discord のロール。主にユーザーを異なるグループに分けたり、サイドバーで異なる表示をするために付与されるロール。 例:NFTホルダーロール |
Spacer Role (非推奨) | ロールリストで他のロールを分離すること。 誰かのユーザ名をクリックしたときに表示されるポップアップで、付与されたユーザロールを区切ることができる。 例:「Member」「–Rigion–」「Japan」 |
Bot Grouping Role (非推奨) | サーバー内のすべてのボットをグループ化し、サイドバーで一緒に表示できるようにするためのロール。 攻撃者の権限の昇格に使用されるため非推奨。 |
Role Hierarchy | ロールの存在する順番のこと。上に近いほど上位のロールです。Discordのパーミッションとアクションは、ロール階層に依存してアクションを実行できるかどうかを決定する。 例:自分より上位のロールに属する人をサーバーから追い出すことはできない。 |
Discord Self Bot | スクリプトを使用してボットのようにアクションを実行するユーザーアカウント。 |
Prune Function | Kick 権限を持つ人なら誰でも、サーバーから非アクティブなユーザーを追い出すことができる機能。Discord のメンバーリストの中にある機能。 |
Hoisting | サーバサイドバーにおいて、メンバーまたはロールを他のロールよりも上位に表示すること。 |
Bot Token | Discord 開発者ポータル内で生成される文字列。 スクリプトやアプリが Discord に送信するメッセージやアクションには、このボットトークンが必要。 開発者ポータル内でリセットすることができる。 |
Custom Commands | 一般的な Discord ボットで作成できるスクリプトで、特定のアクションを実行できるようにするコマンド。 例:コマンドに対してランダムなGIFで返信したり、MODにallowlistのロールを許可するのに使うことができる。 |
Links Whitelist | ユーザーが投稿できる”許可された”Webサイトのリスト。ボットを使ってリンクのホワイトリストを実施することで、許可されたウェブサイトリストにないウェブサイトを自動的に削除することができる。 フィッシングサイトや広告スパムを回避するのに有効。 |
Verification Gate | サーバーの設定の一部。新しく入ったメンバーがキャプチャを完了するか、絵文字でメッセージに反応するまで、サーバーの他の部分を見たり、サーバー内で会話することを禁止する機能。 |
Inline Captcha | ウェブサイト上のキャプチャやDMに送られるキャプチャとは対照的に、インラインキャプチャはDiscordサーバーの認証ゲート用のキャプチャを認証チャンネル内に表示する。 リンクをクリックしたり、DMを開いたりする必要がないため、外部のキャプチャやDMのキャプチャより安全。 |
Statdocks | Discordに何人のユーザーがいるか、何人がホルダーロールを持っているかなどの統計情報をボイスチャンネル名で表示する機能。 |
Vanity Link | discord gg/openseaのように単語やフレーズを招待リンクとして選ぶことができる。サーバーブーストレベル2以上で使用できる機能。 |
セキュアなDiscord【利用者編】
- Discord上のQRコードはスキャンしないこと
- ブラウザ拡張機能を安易に追加しないこと
- ダウンロードしたファイルを開く必要がある際は、ローカルで開かずGoogleDriveで開くこと
- 設定:プライバシー・安全>安全第一を選択
- 設定:フレンド申請をオフに設定
セキュアなDiscord【サーバ設定編】
Discordサーバのテンプレートを使用する
もしサーバを1から作ることを考えているのであれば、Jon_HQ氏が公開しているテンプレートを使用することをおすすめします。このテンプレートには、セキュリティに関する設定や、NFTプロジェクトで必要なチャンネル設定がされています。設定の動作の確認を行う実験用サーバとしても重宝します。
アナウンス専用アカウントの設定手順
危険な権限を持つアカウントを、他の人との会話やDMをしないように、別のデバイスに保存することで、フィッシング攻撃を防ぐことができます。また、チームメンバーがアナウンスや管理者権限を必要とする場合には、別のデバイスで2つ目のDiscordアカウントを使用します。このアカウントは攻撃時に侵害された他のアカウントを禁止するために使用する目的もあります。このようなアカウントを本記事ではアナウンス専用アカウントと呼称します。次にこのアナウンス専用アカウントの設定方法を説明します。
※フィッシング攻撃:情報をユーザから詐取することを目的としたサイバー攻撃
例:アナウンスを行ったりBotを追加したりするメンバー
例:古いスマホ、古いPC、新規購入したchrome bookなど
※不正なアカウント認定を避けるため
Botの追加やサーバの設定変更もアナウンス専用アカウントから行います
出所:Jon_HQ-2nd Announcement Account – Version v.2
セキュリティ対策のbotを導入する
Discordにも、コンピュータにウィルス対策ソフトを入れるように、セキュリティ用のbotの導入を検討することをおすすめします。導入する際は下記のリストのbotを優先的に検討ください。
認証レベルを低以上にする。中がお勧め。
場所:サーバ設定->管理->安全設定->認証レベル
モデレータアクションに二段階認証を必須にする
場所:サーバ設定->管理->安全設定
基本的に参加者に影響は出ないため必須にしておきましょう。
@everyone,@hereロールへのメンションをオフにする
場所:ロール->ロールの編集->権限
アナウンスアカウント以外のロールではオフにしましょう。
ロールごとへのメンションをオフにする
場所:ロール->ロールの編集->表示
@everyoneの代わりとして使われる可能性があるためオフにしておきましょう。
デフォルトの権限はすべてオフに設定
場所:ロール->デフォルトの権限
認証を行う前提のためデフォルトの権限はすべてオフに設定し、メンバーの基本的な権限はVerifiedロールに対して設定しましょう。
チャンネルに低速モードを設定する
場所:チャンネル->設定
低速モードを設定することで連続投稿による荒らしを防ぐことができます。
コミュニティサーバを有効にする
場所:サーバ設定->コミュニティ
コミュニティサーバを有効にしましょう。サーバのセキュリティを強化する様々な機能が解放されます。
ここでコミュニティ・アップデート・チャンネルに設定したチャンネルに下記の画像のようにDiscord公式からアナウンスが流れます。
ルールスクリーニングを有効にする
場所:サーバ設定->管理->ルールスクリーニング
ルールスクリーニングを設定することでルールに同意するまでサーバに入れなくなります。
認証をつける
Wick BotやPremium Captcha Bot を推奨します。
セキュアなDiscord【運用編】
チームメンバーやモデレータを雇う際にセキュリティテストを行う
Jon_HQ氏が公開されているDiscord Security Quizでメンバーが満点を取るまで権限を与えないようにしましょう。
期限付き招待リンクを発行しない
期限付き招待リンクは、まったく同じリンクをVanity URL(カスタム招待URL)として攻撃者に取得され悪用される可能性があります。
モデレーターに危険な権限を与えない
モデレーターが買収された事例があります。特にアナウンス権限は与えてはいけません。
使用するbotを制限する
外部のbotチームを調査することは困難なため、使用するbotを制限するか自前で作りましょう。またbotに管理者権限を与えずに、それぞれのbotに最低限の権限だけをつけるようにしましょう。Bot Grouping Roleを作りすべてのbotに管理者権限を与えてしまうと危険です。botそれぞれにロールを用意しましょう。
新規ユーザーを守るために継続的にメッセージを流す
あなたのDiscordには、Discordを初めて使うユーザーもいるかもしれません。継続的にセキュリティに関するメッセージを流すことでユーザーを守りましょう。セキュリティメッセージのテンプレートをJon_HQ氏が公開しています。
日本語版が下記になります。
このスペースには、あなたのお金とNFTを盗もうとする悪者がたくさんいます。
1.管理者やモデレータがあなたにDMを送ることはありません。
2.誰もあなたのシードフレーズを要求しません。秘密にしてください。
3.公式リンクを必ず確認すること – 詐欺のために偽のコレクションにリンクしようとする人がいます。
4.サプライズ/ステルスミントが行われることは決してありません。
Twitterで重要なお知らせがないか、常にダブルチェックしてください。5.NFTを「取引」または「交換」するように言ってくる人は非常に怪しいです – 彼らが提案するサイトは絶対に使わないでください。
6.プロジェクトがmintの開設を知らせるDMを送ることはありません。
TwitterやAnnouncementsをチェックし、そこからしか情報を得ないようにしてください。
7.次の設定にしてください。プライバシー・安全->安全第一を選択 、フレンド申請をオフに設定
セキュアなDiscord【対応編】
事前に攻撃を防ぐには?
ドメインを監視し、似たドメインを取られた際にチェックし、警戒することができます。
ドメイン監視ツールの例:DomainTools Monitors
偽のアナウンスをされた後の対処
- 偽のアナウンスのスクリーンショットを撮ります。
- 偽のアナウンスを削除します。
- アカウントをbanします。
- webhookを削除します。
- チームメンバーにパスワードの変更を依頼します。
- 危険な権限を持つロールを探し権限のクリアを行います。
※攻撃者がロールを作り別アカウントに付与している可能性があります - Botロールも確認します。
- 既存のアナウンスチャンネルを削除します。
※Discordを開いた際に詐欺のメッセージが表示されたままになることがあるため - 1~2日以内に追加されたBotを削除します。
- 監査ログを確認し、攻撃者の行動を確認します。
- Vanity URL(カスタム招待URL)が変更されていないことを確認します。
- Vanity URLが変更されていた場合は公開しているURLを変更し、Discordのサポートに連絡を取ります。
- 新しいアナウンスチャンネルを作成します。
- ユーザーとコミュニケーションを取ります。
- 被害を受けたユーザー向けに対処方法を伝えます。
おわりに
セキュリティの向上は、業務効率とトレードオフの関係にあり、また費用対効果が見えづらい部分です。
そのため、セキュリティ対策にどれだけのコストをかけるかは、プロジェクトの状況によって異なります。
本記事ではできるだけ費用や運用工数がかからない方法を優先的に紹介しているため、ぜひ取り入れられる部分を取り入れていただき、セキュアなDiscordを作り上げていきましょう。
よりよい設定や防御手法に関する知識をお持ちの方はぜひコメントでご教示ください。
よろしくおねがいします。
付録:Discord攻撃の事例集(随時更新)
参考資料