【明日は我が身】7Pay不正利用事件で UIデザイナーが考えるべきこと
どうもー UI/UXデザイナーのうっくんです。
セブイレが鳴り物入りでローンチしたスマホ決済サービス、7Payがいきなり不正利用で5000万円以上流出させた事件がそこそこ話題になってます。
Twitterではセブイレ側のお粗末すぎる対応をネタにして、若干お祭りムードな感じになっていますが、 UIデザイナーとしては明日は我が身です!
免責事項として言っておきますが、後述する「グッドプラスティス」は絶対的な安全性を保障するものではありません。セキュリティはいたちごっこなので、常にグッドプラスティスは変わり得ます。このnoteの目的は、 UIデザイナーに対してセキュリティを啓蒙することであり、これを教科書にしようといった意図はこれっぽっちもありません。常にアンテナを張って「これ大丈夫かな?」と批判的に考えるマインドセットを啓蒙するためのものです。
そもそもセキュリティとは
UI/UXデザインと「セキュリティ」はある意味相反する概念だとおもっています。
というのも、セキュリティは利便性を犠牲にしてこそ成り立つものだからです。
若干脱線しますが、実は国際関係や安全保障などの分野が大学の専攻である筆者。セキュリティ、即ち安全保障というのはどういうことかというと、「悪意のある人が攻撃してきたときに、リスクをどれだけ最小化できるか。」ということに尽きます。
まさに今回の事件のように、悪意のあるハッカーが、善良なユーザーのアカウントを乗っ取って、お金を不正に利用しようと試みた場合に、どれだけ被害のリスクを小さくできるか、というのがセキュリティの基本的な考え方になります。(また、攻撃者が諦めてしまう程度にめんどくさくするや、攻撃が成功したとしてもバレた時のリスクやリターンを釣り合わなくして思いとどまらせる、などの手法もあります。)
筆者は性格的に楽観主義者ですが、ことセキュリティに関しては「最悪の事態」を想定するので、悲観的にならなければいけません。これが基本的なマインドセットになります。
利便性vsセキュリティ
通常、 UI/UXデザイナーというのは、ユーザーの利便性や利益を最大化することを目的とする仕事です。
だったら、ログイン画面でIDを入れるだけ(パスワードなし)でショッピングが出来た方が簡単で便利じゃね?と考えてしまいたくなる生き物です。
でもそれだと、悪意のある人間が、「私がうっくんです」と偽ってログインしようとしただけで、アカウントが乗っ取られて好き放題買い物されてしまうリスクがあります。
なので、パスワードといううっくんだけが知っているキーワードを使ったら、ログインさせてあげるよーとなってるわけですね。
高度化するテクノロジーとサイバーアタック
セキュリティというのはいたちごっこです。残念ながら先程言った「パスワード」だけではもはや十分なセキュリティとは言えません。
例えば、悪い人が1234のような簡単なパスワードを片っ端からトライしたらいつか乗っ取れてしまいますよね。
というように、利便性とセキュリティは得てして相容れないものです。
UIデザイナーができるセキュリティ対策
ウェブサービスやモバイルアプリでもっともセキュリティが求められる「ログイン」「パスワード周り」「決済」「個人情報」と言った部分で、 UIデザイナーができることは、最低限のグッドプラスティスを守るということになるかと思いますので、自分への戒めとしても、まとめてみたいと思います。
1. ログインエラー時のエラー内容を詳しく教えるな
例えばよくあるバッドプラクティスとして、「IDが存在しません」などのエラーを返すパターンがあります。
これはやめましょう。
理由:
😈「へーー、このIDはないのか。じゃあこれは?おー、これはあるのねー。」
と、IDの有無を調べられてしまうからです。
この場合のグッドプラスティスは
「ログインできませんでした」です。
これなら、IDがそもそもないかもしれないので、前述の手法で攻撃してくるリスクを減らすことができます。
同様の理由で、エラー番号を表示して、ユーザーサポートのために活用する、などのソリューションもバッドプラクティスです。悪い人がエラー番号の違いを分析して、どういう実装になっているのか外部から想像できてしまうからです。
2. アカウントロック
パスワードやIDを連続でトライする初歩的な攻撃に対しては、アカウントロックが有効です。
とはいえ、真面目にやってるユーザーが本当にパスワードを3回間違えてしまうケースもあるので、ロックする前にまずパスワードリセットを促すべきでしょう。
アカウントロックでは防げないタイプの攻撃もありますので、あなたの担当しているサービスが、性質上攻撃を受けた時のリスクが非常に高いシステムなら、セキュリティの専門家を設計段階で入れるなどの対策を検討すべきだと思います。
3. パスワードリセット
2のケースから分かる通り、パスワードリセットもはや必須の機能です。
パスワードリセットは通常、登録済みのメアドに送るのがグッドプラスティス。今回のセブイレのように、任意のメアドに送れてしまうような実装は言語道断です。
その上で「****hoge@gmail.comに送りました」とユーザーに教えるような UIも完全にバッドプラクティス。理由は1と同じ。
パスワードリセットは、アカウントに紐づけられているメアドに送りましょう。これならユーザーのメールそのものが乗っ取られていない限りは、攻撃を回避することができます。
ユーザーへパスワードリセットのリンクを送る方法も気をつけないといけません(パスワードを直接教えるなどは言語道断です) が、専門的になってくるので割愛します。かならず最新の情報をもとにセキュアな実装をするようにしましょう。
4. 2段階認証
セブイレ事件の質疑応答でもありましたが、2段階認証の導入はUIデザイナーとしても考慮すべきポイントです。
ご存知の通り、ログイン時にメアドxパスワードに加えて、それ以外の手段で本人確認をするのが2段階認証です。SMS(電話番号)や、認証ツール(自動的に第二パスワードを生成するツール)などを用いて一時的な第二パスワードを発行してあげます。
流石に毎回これをやるのはめんどくさいので、「このコンピュータからのアクセスを信頼する」みたいな選択肢を設けているサービスが多いですね。これは、そのコンピュータ自体がパスワードでロックされているので、既に2段階認証の1段階として機能してますというのを担保にしている感じかとおもいます。ただし、新しい端末からログインする場合や、ネットバンキングで送金を行う、パスワードを変更する、といったハイリスクなアクションに対してははかならず2段階認証を求めるというのも必須だと思います。すでに認証済みのデバイス以外からログインを試みたり、普段アクセスのないはずの海外からアクセスがあった場合などにも警戒が必要。
5. 決済を自前で作るな
ウェブやアプリに決済システムを組み込まないといけないことは多いかと思いますが、絶対に自前で作ろうとするのはやめてください。
世の中には決済代行業者というのがあって、手数料を取る代わりに決済部分の機能を担当してあげるよ、というサービスがあります。
有名どころでいうと、App StoreやGooglePlayのアプリ内決済。手数料=売上の30%(クソでかい)。こちらはアプリ内での課金を担当。
Web系では大手の「ソフトバンクペイメントサービス」、中小規模では「BASE」などがあります。
よっぽどのことがない限り、決済システムを自前で作ろうとは思わないでください。今回7Payと全く同じことが起こる可能性が高いです。
5. HTMLフォームをちゃんと作れ
テキストフィールドをにpasswordのメタデータをつけてあげるだけで、よくある「●●●●」みたいなやつを実装することができます。
<input type="password"> ~ </input>
こうすることで「覗き見攻撃」を無力化することでができます。最近はスマホを電車内で使うケースも多いので、黒丸は結構重要かと思います。
ついでに、ブラウザのパスワード管理ツールに「ここの値がパスワードやで」と教えることができるので、ユーザーがパスワードを手打ちするケースを減らすことにつながります。
6. 余計な個人情報を取るな
ユーザーから情報を提供してもらうときは、とにかく慎重になってください。Appleはガイドラインで、「いきなりログインしないと使えないようなアプリは審査落とす」や、「不要な個人情報を取得しているアプリは落とすよ」と言っていて、iOS13からは「ソーシャルログインをつかってるアプリはApple IDでもログインできるようにしないと落とすよ」と言っています。
たしかに、今後のマーケティングに使ったりユーザーの動向を分析したいと言う欲望は分かるのですが、この情報がなかったら本当にどうしようもない、サービスが成立しない、という状態になるまでは最低でも我慢してください。例えば、Tinderで性別を聞くとかは流石にしょうがなくね?的な。
年齢とか住まいとか聞いてどないすんの?と。
ちなみに、アカウント登録のフォームで、入力する要素が多ければ多いほど、完了率が明確に下がっていくという統計もありますので、アカウント登録時にあれこれ聞くのは初対面の女性にいきなり年齢を聞くぐらいやばいことだと思ってください。
そんな感じ!
自分自身セキュリティの専門家ではないので、あまり無責任なことをいうのは避けておきます。
今回はUIデザイナーに対してセキュリティを啓蒙するのが目的なので、間違ったことを言わないように注意したつもりですが、やばいことを言っていたらぜひ指摘してください。
UI/UXデザインに関する情報発信をしています。この分野のコミュニティに貢献できるように、全てのnoteは無料で公開しています。サポートしていただけましたら、デザインのツールを購入するのに使いたいと思います。ツールの使い方や、レビューを投稿しておりますのでぜひご覧ください。