Discordのbotが乗っ取られた話(対処方法、予防、反省)

この記事は、Discordのユーザーのアカウントの乗っ取りではなく、Discordのbotアカウントの乗っ取りについてのものです。

botアカウントが乗っ取られたときの対処方法
-----
(自分がした行動ではなく、理想の対処について書いています)

__**1から4まではすぐさま行ってください。**__
たとえ外出していて、動いてるbotをいじれなくてもです。

1. 乗っ取られたbotアカウントが自身のものなのか、自身のどのbotアカウントなのかを突き止めます。
2. https://discordapp.com/developers/applications/ にアクセスし、乗っ取られたBotのアプリケーションを選択します。
3. スマホの場合は左上のハンバーガーメニュー、PCの場合は左側のメニューにある、`SETTINGS`の`BOT`をクリックしてください。
4. `TOKEN`の`Regenerate`ボタンをクリックすると、`RESET BOT'S TOKEN?`と出るので、`Yes, do it!`ボタンを押してください。
5. するとそのページの上の方に`A new token was generated!`と出たのを確認します。できていたらホッと一息つきましょう。
6. もし、botのアイコンや名前が変更されていたら、同じページで変更し直しましょう。(名前の部分に何か書いておけば、すぐに伝えることもできます。)
7. botのトークンを乗せた部分をいじれる環境になったら、同じページから新しいトークンを取得して、古いトークンを置き換えて再起動させましょう。


### トークンの流出元を考える
これもなるべく早く考える方がいいです。

ボットの乗っ取りはトークンが悪意のある人間に知られることによって起こります。

もしも他のBotも同じように漏れていれば、同じような被害がまた起こります。不安な場合は他のbotのトークンも再発行しましょう。

さらに、自身のパスワードが漏れて、そこからbotアカウントが乗っ取られた、ということも考えることができます。不安な場合は変更しましょう。

#### GitHubのパブリックリポジトリには要注意

特に良くあるのがGitHubのパブリックリポジトリにトークンを上げてしまうパターンです。盗られるものは違いますが、だいたいこれと同じです。
[GitHub に AWS キーペアを上げると抜かれるってほんと？？？試してみよー！ - Qiita](https://qiita.com/saitotak/items/813ac6c2057ac64d5fef)

また、force-pushでは歴史は変わったように見えるかもしれませんが、**内部では生き残っています**。(特にGitHubの内側では)

もしもトークンがコード内に書いてある場合は、プライベートリポジトリに変更して、トークンを再生成しましょう。

### 被害の規模の確認とか(慣れた人向け)
botアカウントは生き残っているので、簡易的なbotを作ったりすると被害状況の確認ができるかもしれません。
もし乗っ取りの被害がDMにスパムする系のやつだったら、メッセージの削除までできそうな気がします。


botの乗っ取りでどんな被害が出るのか
-----

botが導入されているサーバーの数、規模、権限、乗っ取った相手の行動によって被害は大きく変わります。

特に、botが管理者権限を要求するものだった場合、かなり酷いことになります。

900人ほどがいるサーバーのチャンネル・発言が全て消され、ほぼ全員がキックされた例もあります。

それがBotに権限が渡されている全てのサーバーで起こります。

また、管理者権限が渡されていなかったとしても、そのサーバーに入っている人全員にスパムを送りつけられます。

一瞬の間に数百人、数千人に影響が出ます。

もちろん一番悪いのはトークンを悪用しようとする人たちです。ですが、できる限りそれを起こさないようにする義務があると思います。

<!-- (噂で、Discord運営のサポートに連絡するとサーバーのロールバックをしてくれるという話があるけど、真偽について確かめる) -->


予防について
-----

### サーバー管理者側の予防
- できる限りbotの権限を絞る。
  - DM攻撃を防げないのが悲しいところ・・・
  - ちなみに、botを招待するときに権限の欄が出ない場合は一般ユーザーと同じ権限になります。
- 使っていないbotは蹴る。
  - 分母を減らす系の対策ですが、効果は大きいと思います。
  - bot製作者が一番最初に作ったbotとかは色々試行錯誤してることが多いので、比較的多く漏れてると思います。
- チャンネルなどのバックアップを取るbotを導入する。
  - 使ったことはないですが、チャンネルの構成・権限等をバックアップし、もしものときに戻せるようにするbotがあるらしいです。

### bot運営者側の予防
- トークンについて不安なbotがあれば、再発行しておく。
- 慣れないうちはコードを公開せず、プライベートリポジトリにしておく。
- 使用する予定のないbotがあるときは、トークンを再発行してどこにも貼らないようにする。
- GitHub以外でも、トークンを載せてしまったときはすぐに再発行する。

自分の対処と、その反省
-----

やられたのはサーバーの参加者全員にDMを送る行為でした。

参加サーバーは自分が管理していたサーバー2つと、後で気がついた1つで計3つ、知らないところで入れられているかもしれないですが、多くてもせいぜい5つほどでしょう。
また、アイコンとユーザーネームを変更されています。

DMを送られたのはおそらく100人前後なのかと思います。

1. Discordを開くと、知らない名前、アイコンのボットから招待urlが届きます。スパムでしょうか。
- 履歴を遡ると、見覚えのあるメッセージがあります。さらに、他の人から乗っ取られていることを知らせるメッセージが来ています。
- 焦りながらとりあえずそのbotを管理しているサーバーからbanします。
  - 今考えるとこのタイミングでのこの行動は間違いです。それよりもするべきことがあります。
- https://discordapp.com にアクセスし、トークンを再発行しました。
  - この行動を先にするべきでした。
- 名前とアイコンが変えられてしまったbotアカウントが不気味で、botを削除しました。
  - この行動こそ今回の対処で一番誤ったところだと思います。
  - アカウントを残すことによって、被害規模を把握したり、ユーザーネームで何かを伝えたり、各ユーザーに送られたメッセージを消すことだってできます。
  - さらに、消してしまった場合はサーバーの過去ログに変えられてしまったユーザーネームとアイコンがずっと残ります。後悔してます・・・
- 不安になったので他のbotのトークンを再発行しました。
  - 外出していたので数時間は止まってしまいますが、もしもまた起きたときの被害とを比べればこれくらい仕方ないかなと思います。
- 自分が管理しているサーバーでeveryoneメンション付きで注意のメッセージを送りました。


迷惑をかけた方へ
-----

自分の管理、意識不足のせいでご迷惑をおかけし、申し訳ないです。
この記事で、同じような経験をする人が出ないようになることを祈ります。