クリプトハーバー(以下CHE)トークンのエアードロップが始まって
数日が経過したわけですが、その中で申請者から
「エアードロップの送金先が第三者のイーサアドレスになっている」
という報告がありました。
Discordのチャンネル内で意見を交換した結果、
「Googleフォームを利用したエアードロップの脆弱性」
が見えてきました。
~ 今回の事件の概要 ~
1.被害者がCHEのエアードロップ申請を行い、下記の3つの情報を送信。
Twitter ID(@アカウント名)
Discord ID(名前#ユニークコード)
イーサリアムアドレス(ERC)
2.エアードロップがほぼ完了したにもかかわらずCHEトークンが届かない事を
不審に思った被害者が「エアドロ臨時窓口」に問い合わせたところ
運営サイドから重複して申請しているとして次のような申請ログが届いた。
4/5/2018 0:41:19
本人のDiscordID
第三者のTwitterID
第三者のイーサリアムアドレス
4/4/2018 0:34:20
本人のDiscordID
第三者のTwitterID
第三者のイーサリアムアドレス
4/3/2018 21:52:04
本人のDiscordID
本人のTwitterID
本人のイーサリアムアドレス
3.既にこの時点で運営から第三者にエアードロップが送金されており、
なりすまし犯にトークンを横取りされていたことが判明。
事件が発覚した。
~ なりすましの手口を考察 ~
色々と「運営サイドあかんやろ」的なツッコミどころはありますが
これは下記の要素が起因となります。
・Googleフォームの仕様
フォームを設定したCHE運営サイドは誰が申請したのか
IPアドレスなど個人を特定出来る情報は入手することは出来ない。
(悪用防止のためGoogleがそういう設計にしている)
・CHEエアードロップ申請の仕様(※推定)
申請したDiscordIDの公式チャンネル参加とTwitterIDの公式アカウントの
フォローという条件を満たしていると、指定されたイーサリアムアドレスに
エアードロップのトークンを送金する。
後から重複して送信された登録情報は「修正」として処理する。
勘の良い人ならお気づきと思いますが、この条件であれば
いくらでもなりすまし&横取りが可能です。
Discord公式チャンネルに参加するだけで他の人のIDは取得出来ます。
Twitterで公式アカウントのフォロワーを見ればTwitterIDも取得できます。
イーサリアムアドレスはJAXXなりMEWなりで好きなだけ発行できます。
犯人はGoogleの捨てアカウントを作成し、Discordで適当なIDをコピー。
Twitterで公式アカウントのフォロワーから適当に参照したIDをコピー。
イーサリアムアドレスだけ自分のアドレスを用意。
これらを使ってエアードロップ最終日ギリギリに申請を行うと…?
・元になったDiscordID保有者がエアードロップ未申請の場合
=普通に申請が通るので、犯人がなりすましでエアードロップ入手。
・DiscordID保有者がエアードロップ申請済みの場合
=正規の入力済み情報が「修正」されて、犯人がエアードロップ入手。
というわけで、必ず犯人のなりすまし&横取りが成功します。
「犯人はDiscord内に居る誰かだ!」=数千人の中から絞れと?
「Twitterで問い詰めろ!」=なりすましに使われたIDはたぶん無関係な人。
「犯人のイーサアドレスを凍結してもらえ!」=現実的に無理。
というわけで完全に詰んでますコレ。
Googleフォームを使うエアードロップは理論上、
全部この手口使われるだけで太刀打ち出来ません。
~ どうすれば防げたのか? ~
単純に修正を承認せずに2回目以降の申請を全て運営が無視すれば
申請した被害者がトークンを横取りされるリスクは無くなるのですが
それだとDiscordに犯人が張り付いて、誰かがログインした瞬間に
その人のIDをコピーして即座に申請されたらアウトです。
(順番が逆なだけで被害者へのダメージは全く変わりません)。
となると、TwitterID&DiscordID&イーサアドレスしか入力させない
既存のエアードロップの方針ではなりすまし被害をなくすことは不可能です。
ここから先は今後、国産コイン・トークンを発行したいと考えている
運営者向けの内容ですが、詐欺の回避には下記の方法が考えられます。
1.エアードロップにGoogleフォームを使わず独自に行う。
犯罪者は自分を特定されるのを嫌いますので効果的です。
2.テレグラムBotを使ってエアードロップを行う。
最近の流行で、プライベートメッセージでのやりとりになるので
なりすましが出来ません。
3.Discordでエアードロップ受け付け用の運営アカウントを用意する。
テレグラムBotと同じような受付方法のDiscord版です。
4.同一IDからの複数申請があったら即座に送金せずに連絡を待つ。
特にシステム構築も要らず、これが最も無難です。
4に関しては運営サイドが申請者に連絡してあげる事が出来ればベストですが
エアードロップの申請件数的にそれは非現実的ですね。
結論としては、最もローコストかつ最低限の労力でなりすましを防ぐ方法は…
同一IDによる複数申請があった場合はエアードロップを行わず、
申請者から直接連絡があるまでは運営サイドは何もしない。
告知には「エアードロップが届いていない方はご連絡ください」
とだけ記述し、なりすまし対策など余計な情報は書かない。
ですかね。
これだけでも被害は大幅に減らすことが出来るはずです。
ちなみに国内トークンだから今回注目されているだけであって、
恐らくこの手口は昔からずっと使われている古典的手法と思われます。
海外のエアードロップは結構高い確率で届かないんですが、
外人がテキトーだから届かないと思ってたけど、
実はなりすましに横取りされてるだけだった
というのも実は多いのかもしれませんね。