Gmail アドレス内の 「.」(ピリオド) を無視する仕様がフィッシングに悪用可能だという指摘

Gmail がアカウント名に含まれる 「.」(ピリオド) を無視する仕様が、Gmail アドレスを登録する Web サービス側の特定の仕様と組み合わさることによってフィッシングのリスクを増加させるという指摘がされていましたので取り上げてみます。

以前、下記の参考記事でも書いたのですが、個人向けの Gmail には、所有しているアカウント名に 「+」 で任意の文字列をつなげることで利用できる 疑似エイリアス (便宜的にこう呼びます) 機能や、アカウント名に含まれる 「.」(ピリオド) を無視するという仕様を使って、同様に疑似エイリアス的な使い方ができる点に触れました (記事としては、それは本来のエイリアスとは異なるから注意しようという内容ですが)。

この 「ピリオドを無視する」 という仕様が、いくつかの条件が重なったときにフィッシング (Phishing) に悪用される可能性があるよねという指摘を、Vidrio の開発者である James Fisher 氏がしていて、興味深かったので簡単に書いてみます。

氏がこの可能性に気がついたのは、自身の Gmail アドレスに Netflix から身に覚えのないクレジットカード情報の更新通知が届いたのがきっかけとのこと。

氏は当初フィッシングを疑ったのですが(これは当然ですね)、メール自体は Netflix から正規に送られてきているものだったので、試しにメールに記載の 「Update your credit or debit card. (あなたのクレジットカードやデビットカードを更新する)」 リンクをクリックしてみたところ、正しく Netflix のページが表示され、そこに知らないカード番号が表示された上で、「このクレジットカードでの支払いが拒否されているので新しいクレジットカード情報を入れろ」 と案内されます。

ここで氏が気がついたのは、問題のメールの宛先が、普段使っているアドレスに、ピリオド 「.」 を含んだものだったこと。このことから、「もしかして Netflix は Gmail がアカウント名に含まれるピリオドを無視して、全て同じアカウントとして扱う仕様を知らずに、すべて別のアドレスとして扱っているのでは?」 と仮説を立てます。

つまり、example@gmail.comexa.mple@gmail.com は、Gmail 上では同じアカウントなわけですが、Netflix 上ではそれぞれ別のアカウントとして扱われてしまっているということですね。

そこで試しにピリオド入りのアドレスに対してパスワードリセットをしてみると、当然ながら自分のアドレスにパスワードリセット用のリンクが送られてきます。あとは手順に従ってパスワードをリセットすれば、ピリオド入りのアドレスでログインできてしまうわけですが、これは赤の他人が実際に登録していたアカウントでしたと。つまり、他人のアカウントを乗っ取ることができてしまったわけです。

根本的にはアドレスを間違えて登録した人の問題

問題のスタートは、他人が所有している Gmail アドレスで Netflix に登録するというミスをしたユーザーがいたことです。例えばすでに example@gmail.com を誰かが取得済みの場合、下記のようなアドレスも同じユーザーに予約されていることになります。つまり他の人は取得できないわけですね。

  • e.xample@gmail.com
  • ex.ample@gmail.com
  • exa.mple@gmail.com
  • exam.ple@gmail.com
  • examp.le@gmail.com
  • exampl.e@gmail.com
  • e.x.a.m.p.l.e@gmail.com ...etc

ですから、例えば exa.mple@gmail.com で Netflix に登録した第三者 (example@gmail.com の所有者ではない人) は、アドレスを打ち間違えた結果、たまたま別の人が所有するアドレス (example@gmail.com) の疑似エイリアスで登録したことになってしまったか、何らかの理由でこのアドレスを 「所有していると勘違い」 して登録に使用したか、どちらかだとは思いますが、どちらにしろその人の 「間違い」 がきっかけになります。

この仕様を悪用する手順

で、アドレスの入力間違いなんかは誰でもする可能性がありますから、間違えた人に問題はあるものの、意図せずこの状況が生まれる可能性はありますね。

しかし、「Gmail がアカウント名に含まれるピリオドを無視する仕様」 と、「ピリオドを含む Gmail アカウントそれぞれを別のユーザーとして扱う」、かつ 「登録時にメール認証 (メールアドレスの所有・存在確認プロセス) がない」 サービス側の仕様が組み合わさることで、非常に危険なことが起こるわけです。

具体的にはこの仕様を悪用することで、Gmail アカウントで Netflix に登録したユーザーからクレジットカード情報を詐取することが可能になると氏は指摘しています。具体的な手順は下記の通り。

  1. まず Netflix のユーザー登録ページで、Gmail アドレスが登録されていないか確認します。アドレスを入力していって、「そのアドレスは登録済みです」 と出るまでやればいいわけです。例として example@gmail.com が登録されていることがわかったとします。
  2. 登録されている Gmail アドレスがわかったら、そのアカウント名にピリオドを入れたアカウント (例えば exa.mple@gmail.com でアカウントを作成します (この時メール認証プロセスがなければ、本来のアドレス所有者は疑似エイリアスでアカウントが作られたことに気がつきません)。
  3. 次に捨てクレジットカード (ワンタイムのクレジットカード番号を発行してくれるサービスなどを利用して取得) の情報を使って無料トライアルを開始します。
  4. Netflix が登録した捨てクレジットカードの有効性だけ確認したら、カードをキャンセルしてしまいます。
  5. しばらくして無料トライアル期間が終わると、Netflix は課金をしようとしますが、最初に登録した捨てクレジットカードはキャンセルされてしまっていますので、決済ができず、メールにて 「正しいカード情報をください」 と exa.mple@gmail.com に対してメールを送ります (冒頭の氏が今回の件に気がつくきっかけがこれですね。その時は悪意のないユーザーのクレジットカード決済がたまたま失敗したためにこのメールが送信されてきたわけですが)。
  6. ここで Gmail の仕様により、このクレジットカード情報を求めるメールは example@gmail.com の所有者に送られるわけですね。
  7. example@gmail.com の所有者は Netflix からのメールを見て、「?」 とは思いつつも、メールアドレスもリンク先も正規の Netflix サイトなわけですので、クレジットカード情報を入力してしまうかもしれません。
  8. これで攻撃成功です。あとは作ったアカウントのメールアドレスを自分のアドレスに変更してしまえば、example@gmail.com の所有者が入力したクレジットカードの情報を使って、Netflix を利用できてしまうことになります。

上の手順を読んでてちょっと気になったのは、Netflix ってクレジットカード情報を入力する前にログインを挟まないの? っていう点ですかね。私が実際にクレジットカード情報の更新メールを受け取ったことがないので詳しく調べられていないのですが。

これを、Gmail の仕様を知らずに別アカウントとして扱ってしまう、もしくはそもそもメール認証もなくアカウントが作れる Netflix が悪いと感じる人もいるかもしれませんが、前者に関しては Gmail 以外にも同様の仕様で動いているメールサービスやメールサーバがあるかもしれず、それを全部把握しろというのは無茶な要求です。

後者について、どのサービスもメールアドレスの所有確認くらいは最低限しろよと個人的には思いますが、ユーザーの登録時の利便性だけを考えればない方がシンプルだし、メールアドレスの打ち間違えなどでメール認証が行えず、離脱してしまうユーザーがいることを考えれば省きたいサービス側の事情もわかります。

で、この問題を指摘している James Fisher 氏としては、Gmail の仕様を改めた方がいいんじゃないのという話になっているわけですね。とはいえこれも影響が大きすぎて、Gmail が仕様を変更し、ピリオドの有無で別アカウントとして扱うように変更するのはほぼ無理でしょう (氏はユーザーがピリオドの扱いを選択できるようにすればいいんじゃないのと書いていますが)。

Gmail ユーザーとしては、こういう問題があるということを認識して身に覚えのないクレジットカード情報の更新などに対して安易に情報を入力しないなどの防御策が必要かもしれません。

ちなみに、「+」 を使用した疑似エイリアスでも同様の問題が発生する可能性があります。

参考リンク

関連エントリー