Discord Botは便利だけどリスクもあるから導入するときは気をつけようという話

はじめに

この記事の内容

Discord Botとの上手な付き合い方についてお話しします。
基本的に、Botは楽しく便利なものです。しかし、有害なBotを導入してしまうと、あなただけではなく、サーバーのメンバーにおもわぬ迷惑をかけることになるかもしれません。
Botと上手に付き合うために、注意すべき点について知っておきましょう。

引用のルール

当記事には一部、誤解を招きやすい表現が含まれています。この記事の一部のみをスクリーンショットやコピー&ペーストで切り出して利用することはご遠慮ください
途中、Botによって発生する困りごとについての記述がありますが、その部分だけを切り出していたずらに不安を煽ることは絶対におやめください。

免責事項

この記事は筆者であるcod個人の考え方に基づいて書かれたものです。
この記事に基づいて行動することにより受けた損害について、筆者は責任を負いません。
明らかに事実と違う記述があればご指摘いただけると嬉しいです。

むやみに怖がらないのが大事

Botについての具体的な説明に入る前に、以下の3つについて心に留めていただけると幸いです。

怖がってばかりではなにもできない

世の中には「絶対に大丈夫」なものはありません。家の外に出れば交通事故にあう可能性があります。しかし、だからといって外に出ないことにしている人は少ないでしょう。
Botを使うのもこれと同じで、リスクを把握し、自分のやりたいことと比較検討し、導入するようにしましょう。

無責任な批判をしないこと

Twitter連携アプリケーションなどについて、「このアプリと連携すると、DMを覗き見される。あやしいアプリケーションだから連携している人は解除して!」というような発信をたびたび見かけます。
このように根拠なくアプリケーションを批判するのは、Botのユーザーや作者に迷惑がかかるだけでなく、あなた自身の信頼を損なう行為です。

もちろん、明らかに情報を盗み取っている証拠があったり、スパムを投稿していることがはっきりしている場合はこの限りではありません。

自分で判断すること

Botを信用するにせよ、信用しないにせよ、自分で判断することが大切です。誰かが大丈夫と言ったとしても、なにかあったときにその人が責任を取ってくれるわけではありません。
大事なのは、Botをサーバーに導入するというのは、そもそもリスクを伴う行為であるという意識を持っておくことです。

Botというものについて

では、Botの話をしていきましょう。あたりまえの話もあるかもしれないので、適宜読み飛ばしてください。

Discord Bot

大量のデータを管理する大規模なBotから、ちょっとしたおみくじのような小規模なBotまで、DiscordにはさまざまなBotがありますね。

楽しそうなBotがあると、つい自分のサーバに導入したくなります。
この記事では、そのようなときにちょっと考えるべきことについてお話します。

筆者作Bot「shovel」

私自身、テキストチャンネルの内容をボイスチャンネルで読み上げるBot「shovel」を開発しています。
Discord読み上げBot「Shovel」βテストを実施します

Botって、つまり何?

そもそも、Botとはなんなのでしょうか?

Botの「見た目」

あなたのサーバーにいるBotは、きっと以下の図のように見えていることでしょう。ユーザーからみると、「Bot」とついている以外は、ふつうのdiscordアカウントのように見えますね。

Botの「なかみ」

あたりまえのことかもしれませんが、Botのなかみは、「プログラ厶」です。

つまり、Botとは?

Botは、「見た目」と「なかみ」、つまり「BotとしてのDiscordアカウント」と「そのDiscordアカウントにアクセスできるプログラム」をあわせて動作するものです。

どこかの誰かのコンピュータ上で動いているプログラムが、discordにBotとしてログインし、あなたのサーバー上でオンラインになっている。これがBotというものです。
どこかの誰かのコンピュータとは、個人のパソコンかもしれませんし、レンタルサーバーかもしれません。先程紹介したshovelはVPSで動いています。

Botプログラムの具体的な動作

あなたのサーバーで発言があったり、あたらしくメンバーが参加したり、サーバーの名前が変わったり、そういう出来事が発生すると、その情報はDiscordを経由して、どこかの誰かのコンピュータで動いているBotプログラムに届きます。
そして、Botプログラムがなにかしらの処理をして、またDiscord経由であなたのサーバーに返ってくるのです。

たとえば、「Hello」と入力すると、「Hi,(名前)」と返事してくれるBotであれば、以下のような流れで動いています。

すこしイメージが湧きましたか?
重要なのは、「ユーザーからは、Bot用アカウントが見えている。そのBot用アカウントは、どこかのコンピュータで動いているプログラムによって動いている」という点です。

Botによる害の例

では、有害なBotをサーバーに導入してしまうと、具体的にどのような被害をうけるのでしょうか。
Botの権限によってもさまざまなので、これらはほんの一部です。Botにできることと、それにより起きうることについて紹介します。

もちろん、すべてのBotがこのような悪意ある動作をするものではありません。あくまで有害なBotについての話です。
これだけを見て「Botは危険!」と思い込まないでください。Botによっては危険だから、ちゃんと判断して導入しよう、と気をつけていただくことが、本記事の目的です。

情報漏洩

会話の内容や、サーバーの参加者一覧などが漏洩する事態です。
いやがらせやスパムは攻撃を受けていることにすぐに気づくことができるので、BotをBANすればそれでおしまいです。しかし、こっそりと情報を盗み取られていることには、気付く方法がありません

これに気をつけないといけないのは、招待URLを一般に公開していないクローズドなサーバーです。このようなサーバーでは参加者がプライベートな情報を公開したり、オフレコな会話が行われていることが多いためです。
逆に、いつでも誰でも参加できるサーバー、多人数のサーバーであれば、そこまでリスクは高くありません。参加者がそれなりの意識で、出す情報を制限しているからです。

サーバー内の会話をBotに盗み見される

VIEW_CHANNELS権限を付与したBotは、全てのチャンネルの内容を読むことができます(特別な権限で制限されたチャンネルの内容を読むことはできません)。
知らない人が常にすべてのチャンネルでの発言を見ているのと同じことが起きえます。

ただし、Botがユーザーからの指示を受け取るにはVIEW_CHANNELS権限はほぼ必須です。この権限=怪しいBot、ではないのです。
以降の別の権限についても同様で、特定の権限を要求しているから悪意あるBotであると決めつけることはできません

サーバー内の会話履歴が流出

READ_MESSAGE_HISTORY権限を付与したBotは、過去に遡ってすべての会話を取得することができます。一瞬Botを招待するだけでも過去のものも含め、会話内容を盗み取られてしまう可能性があります。

いやがらせ・荒らし

サーバーのメンバーに迷惑をかけたり、無意味な投稿の繰り返しや発言の削除によってサーバーの機能を低下させる行為です。
迷惑ではありますが、害が目に見えて現れるため気づきやすく、Kick・Banすれば終わりです。

元いたメンバーがBotによって退出させられる

サーバーに参加してくれていたメンバーが、BotによってサーバーからKick・Banされてしまうパターンです。KICK_MEMBERSBAN_MEMBERS権限を持つBotによって行われます。
Discord以外でも付き合いがあればいいのですが、そのサーバーだけでの付き合いだと呼び戻すのに苦労するでしょう。また退出させられたユーザーが「管理人によってKick・Banされた!」と勘違いしてしまうと、そこから人間関係が拗れてしまう危険もあります。

発言やリアクションが消される

MANAGE_MESSAGES権限を持つBotにサーバーでの会話を無作為に削除されたり、会話のログをすべて削除されるパターンです。
重要度の低い雑談ならともかく、話し合いの記録残しておきたい会話を削除されてしまうと困るサーバーもあるのではないでしょうか。

困った事態はなぜ起きる?

害をなすBotは、すべて悪い人が作っているのでしょうか。実はそうとも限らないのです。

Botによる不利益をうける2つの原因

開発者・管理者に「悪意がある」パターン

そもそも、「なにか悪いことをしたい」という意図で作られるBotがこれに該当します。
表向きには音楽を流したり、お遊び機能を提供したりする良い振る舞いをしつつ、会話やメンバーの情報を盗み取ったり、メンバーをキックしたりします。

開発者・管理者に「悪意がない」パターン

いわゆる「うっかり」による情報流出が起きるパターンです。
Discord Bot開発は誰でもかんたんに行える手軽で楽しい行為です。しかし、視点を変えると、必ずしもBotの開発者だからといってプログラミングに精通しているわけではない、ともいえます。
会話の内容を誰にも見えないところに保管しているつもりで、全世界に公開していた、ということも起きえるのです。
また、Botの作者にそのつもりがなくても、利用しているライブラリやAPIの利用条項に情報の提供が含まれていたりすることもあります。

これなら安全?5つのパターン

具体的な例を示して説明していきましょう。

友達・知り合いが開発するBotだから安全?

友達がどんなにいい人でも、うっかりすることはあります。
管理者しか使えないはずの秘密のコマンドが誰でも使える設定になっていたり、うっかりトークン(BotでDiscordにログインするためのパスワードのようなもの)を流出させてしまったりすると、悪意ある別の人がBotを利用してあなたやサーバーの情報にアクセスすることができてしまいます。

すぐにKickするから安全?

「使えるか試して、微妙だったらすぐKickしているよ」という方も居るかも知れませんが、それは安全である根拠にはなりません
たとえば、悪意あるBotであれば、「招待された瞬間、サーバーの会話のログを一気にすべて取得し、保存する」という動作をするかもしれません(View ChannelsRead Message History権限を持つ場合)。残念ながら、このようなBotを作るのは非常に簡単です。しかも、サーバーにいる参加者からは、Botがそのような処理をしていることは全くわかりません。

オープンソースのBotだから安全?

公開されているソースコードと、実際動いているソースコードが全く同じであるという保証はありません
むしろオープンソースであることで、Botをいちからつくる能力のない人でも簡単に高機能なBotにある悪意あるコードを混ぜ、提供できてしまいます。

プライバシーポリシーが書いてあるから安全?

プライバシーポリシーがあるからといって、絶対にそれを守ってもらえる保証はありません。
もちろんそのような行為は社会的に許されないことですが、情報が漏洩してしまったら元には戻りません。

Admin権限を渡していないから安全?

最も基本的なView Channels権限だけでも、チャンネル設定によってはサーバー上のすべての会話をディスク上に保存しておくことができます。
Discordはクローズドなサーバーでは発言内容が緩んでいる参加者も多いでしょう。その記録をあとから管理者に覗き見されるだけでも良い気はしませんが、管理者がうっかりして「記録したファイルが流出する」という事故が起きてしまうとかなり困った事態になります。

Botとつきあっていこう

ここまで読んだあなたは、「どのBotも安全ではないということになるじゃないか」と思われているかもしれません。誤解を恐れずにいうと、その通りです
そして、それはスマートフォンのアプリをインストールすることや、TwitterやDiscordなどのWebアプリケーションを利用するのと同じことなのです。結局のところ、リスクを承知で運営元を信頼するかどうかの問題です。

具体的にどうしたらいいの?

何をもって信頼するかはひとりひとりの価値観によるので一概にはいえませんが、ここではいくつかの基準と、より安全に使うためのポイントをいくつか紹介したいと思います。

知らない人のBotを軽率に使わない

一番大切なのがこれです。身元のよくわからない人をサーバに招待しないのと同じで、よくわからないBotをサーバーに招待するのは避けましょう。
Botの挙動を確認するために、自分だけが見ることのできるテスト用サーバーを設けるのもおすすめです。

招待時の権限に注意する

ADMINISTRATORBAN_USERなどの重要な権限を要求するBotには要注意です。もちろんその権限が本当に必要なBotもあります。自分で判断しましょう。
Discordのすべての権限についてはこちらが参考になります。

チャンネルの権限設定を行う

特定のテキストチャンネルの権限を編集し、Botの機能に必要のないチャンネルはBotには見せないようにしましょう。
具体的な手順は、以下のDiscord公式ガイドをご覧ください。
権限をセットアップするには?

絶対に漏れてはいけない会話はDMでする

Botにどのような権限を与えても、ユーザー同士のDMを閲覧することはできません。もちろん、Bot自身に届いたDMは閲覧できます。
とはいえ、Discord自体のバグなどで思わぬ漏洩は起き得ますので、漏れたときに困ることはそもそも言わないのが一番の対策かもしれません。

自分でホストする

ソースコードが公開されているBotであれば、自分で管理することも視野に入れてみましょう。
プログラミングの知識が必要ですが、自分のPC上でBotを動かしてしまえば、情報が意図しない漏れ方をするリスクを小さくすることができます。

Botを作ってみよう

ここまでお話した内容は、Dicordを利用し、Botを作る中で得た知識によるものです。自分でBotを作ることで、悪意ある開発者がどのようにBotを作るのか具体的に想像できるようになるでしょう。
そうでなくてもBot開発は面白いものです。個人でも簡単に始めることができるので、ぜひ挑戦してみてください。

Discord botの作り方 ユーザ作成からコーディング・動作確認までの手順を紹介

おわりに

この記事を書いたきっかけについてお話しします。

筆者が開発するBot「shovel」ですが、公開後、ありがたいことに急激にユーザーさんが増えました。もちろん頑張って開発しているBotなので、たくさんの人に使ってもらえるのはとても嬉しいです。

ただ、あまりにもかんたんに受け入れてもらえてしまい、少し怖くなりました。

Botは便利なものですが、この記事にかいたとおり、作り方ひとつでサーバーに害をなすことができます。
また、冒頭で書いたとおり、BotやTwitterアプリケーションはその便利さから広く使われていますが、反面カウンターのように「悪意あるものだ!」と糾弾されることもあります。
そのような糾弾の中には、過剰反応だったり、根拠のないものもあります。

Botを導入する際に気をつけないといけないことについて正しく知っており、そのうえでさまざまなBotについて、使うかどうか判断することができる。
そのようなユーザーさんが増えることで、「悪意あるBotに迷惑をかけられること」「無害なBotが悪者扱いされること」の両方をへらすことが出来るようになればと思ってこの記事を書きました。

足りないことや間違っていること、思ったことなどあれば、コメントやTwitter、Discordなどで話しかけて貰えればと思います。