Security
login
register
Account
attack

リスト攻撃事案から得られるユーザー周りの設計の学び

概要

パスワードリスト攻撃を受けた経緯がニュースになっていました。

対岸の火事ではない、ディノス・セシールを襲った新型リスト攻撃

有料会員限定記事なので見れない人は Googleのキャッシュとかでなんとか この記事をどうぞ。

巧妙化するECサイトへの不正アクセス。セシールの被害は「二重登録防止機能」の悪用が原因

まとめると

  • リスト攻撃を受けた
  • 施行されたメアドは登録済みのものだけだった
  • 内部からの漏洩?はしてないっぽい
  • 登録時に多重登録防止の仕組みがあった
  • 新規登録試行いっぱいあった
  • 攻撃対象のメアド抽出に使われたなこれは

というお話です。

このお話に関連する、ユーザー周りの設計時に気をつけてることを書き残しておきます。

攻撃者にも親切なエラー

業務でユーザー周りの設計をしていると

  • メアド + パスワードで登録/ログイン
  • 登録時にはメールを送って確認する

っていうごくごく一般的な要件が出てきます。
当然、この要件では

  • 登録済みメアドで新規登録しようとしたらエラー
  • 未登録のメアドでログインしようとしたらエラー

とする必要がありますが、今回の案件ではこのエラーを試行中のユーザーに見せて良いかが重要になります。

「このメアドで登録したっけ?」「このサービス使ってたっけ?」みたいなユーザーには、ログイン時に「このメアドは登録されていません」みたいなエラーを返してもらう方が親切でしょう。
しかし、第3者のメアドのリストを保持している攻撃者に対しては「このメアドで登録済みのユーザーがいるか」が簡単にわかるので、「リストのスクリーニング」に利用できます

このリスクへの対策として「メアドもしくはパスワードが正しくありません。」とかのエラーを返して「どうしてもログインできないときは」みたいなリカバリーフローに流す方法を提案することが多いですし、一般的かと思います。
記事では「セシールオンラインショップ」が攻撃を受けたとあったのでその辺りでログインエラーを調べようと思ってググったらなんかたくさんあってメアドじゃなくてお客様番号とかでログインさせるとこもあったので途中でやめましたが、お仲間であるディノスのオンラインショップではこんな感じでした。

dinos_login_error.png

上記ディノスの登録フロー...というかECの登録フローは最初の画面で氏名/性別/電話番号/住所...と言った情報を入力させまくる系のが多いので試す気になりませんでしたが、今回の案件から大事なのはログインのエラーと同様に登録時に「登録済みのメアドかどうか」も試行中のユーザーに教えてあげたらいかんっていう話です。
登録フローで「登録済みエラー」を表示することにより、攻撃者にメアドのチェック機能を提供しているのと一緒なのですが、なかなかここをぼやかしてエラーにするのは難しいところでしょう。

メール送った送った詐欺による対策

では、登録のところでどのように「リストのスクリーニング」リスクを回避できるかというところですが、個人的には

  • 最初にメアド確認処理を行う
  • 登録済みのメールにはメールを送らないで登録フローを進められないようにする or 登録済みだからログインしてという内容を送る

という落とし所を提案することが多いです。

例えばmixiの登録フローはそうなってる風です。

mixi_unregistered_email.png

上記のディノスのサイトの確認のせいで広告がディノス家具になってること、某有名サングラス😎の件があるので説得力がががってのはおいといて、登録済みのメアドで登録を試みても同じ画面になります。
このような画面では、攻撃者が「リストのスクリーニング」に利用することは困難でしょう。(世の中には処理の複雑さの違いによるレスポンスタイムの差により登録済みかどうかを判定できるという強者もいるらしい話を聞いたことがありますがここでは考慮しません)
また、ログイン、登録と同様にパスワードリセットなどのリカバリーフロー時にも同様の仕様にしておくのが無難だと思います。「未登録なメアドには何も送らない、もしくは未登録(だから登録して使ってねとかの)通知を行う」などの仕様が必要になるでしょう。

例えばGoogle先生はどうしてるか

google_login_error.png

なるほどなるほど。。。

Googleはメアド入力とその後のパスワード入力のステップを分けていることもあり、利便性重視でやってる感じでしょうかね。

あの有名な徳丸本でもこのあたりの最近の流れに言及がありました。

まぁ、Google先生は色々鍛えてると思うのでここは参考にしない方がいいと思います。

昔はメアドから氏名引いて表示しちゃうサービスもあった

Quoraのログイン画面はメールアドレスからユーザーのお名前を教えてくれる!

2011年の記事で、今見たらこんなでした。

quora_login_error.png

名前は引かなくなったらしいけど登録済みかどうかはわかりますね。

おまけ : メアドでログインさせるのやめたらいい?

これは最初の記事でどこかの社長が「メアドでログインやめるべき」みたいなことを言ったと書いていました。
世の中に出回っているメアドのリストがそのまま使えないってことは良い点かもしれません。
しかし、実際のところはユーザーがついてこれるかってところは難しいですね。それなりに「ログインできない」「IDわからん」な問い合わせは増えるでしょう。

あと、ログイン同様に登録も監視しっかりな!みたいなことも書いてましたが、「スクリーニング対策」として本投稿でかいたようなことを先に言ってもらいたかったなと思いながらこの投稿を書きました。
以上です。