なぜ「パスワードを変えないこと」より「パスワードを使い回すこと」の方が危険なのか?
2020年9月から毎週投稿していたnoteも、2020年最後の記事になりました。
年末といえば大掃除、ということで、僕は個人で使っているパスワード管理ツールを移行しながら、Webサービスの個人アカウントの大掃除をしていました。
僕は中学生くらいからインターネットを使っていました。思えば当時はパスワードをどう管理すべきかなんて考えたこともなく、好きな漫画のタイトルか何かを適当に選んでパスワードを決めていました。基本的には全てのWebサービスで同じようなパスワードを使い回し、パスワード管理ツールなどというものは存在すら知りませんでした。一時期はパスワードを紙にメモしていたような気もしますが、「頭の中が一番安全だろう」と思ってやめてしまったような気がします。
今では、Tech系と言われるような界隈で働き、Webサービスを開発する側になりました。よくあるパスワード管理方法を比較し評価できるくらいには、セキュリティの知識も付いてきました。
今回は、パスワードをどう管理すべきかというテーマを題材に、僕がこれまで獲得してきたデジタル・セキュリティに関する3つの重要な考え方を紹介します。なお僕はエンジニアですがデジタル・セキュリティの専門家というわけではないので、つっこみあればください。
パスワード管理のベストプラクティス
どのようにパスワードを管理すべきか。その答えとなるベストプラクティスは、インターネット上の記事をあさればすぐに見つかります。しかし、それがなぜそれが「ベスト」かについてはあまり説明されないことが多い。なのでこの記事では、まずパスワード管理の一般的なベストプラクティスを紹介した上で、後からセキュリティリスクを見積もるための考え方について説明します。
さて、総務省のWebサイト内にある「安全なパスワード管理」というページでは、パスワード管理において次のような点が重要であるとされています。
これは、パスワード管理一般について重要な行為です。
さらに最近では、SaaSと呼ばれるWebアプリケーションを組み合わせて業務を進める企業が増えています。たとえばWeb系企業の情シスをしている僕の知り合いが書いた次の記事を読むと、情シスがWebサービス利用に関して何を考えているかがよくわかります。
「パスワードをどう管理すべきか?」という観点で見ると、ざっくり次のような立場で書かれています。
シングルサインオン(SSO)とは、「ソーシャルアカウントでアカウント登録」みたいなやつです。たとえばnoteでは、TwitterやFacebookのアカウントを使って会員登録やログインをすることができます。
パスワード管理ツールとは、その名の通りパスワードを管理するためのツールです。そのツール自体がパスワード認証などを突破しないと使えないようになっています。企業が社員のパスワード管理のためによく使うのは(たぶん)1PasswordやLastPassです。個人でライトに使うなら、AppleのiCloud キーチェーンやGoogleパスワードマネージャーなどを使う人もいるでしょう。
ちなみに僕が今の会社に転職してきたとき、当時はLastPassというパスワード管理ツールを使っていました。LastPassを使うと、Chromeで各種SaaSにログインする度に「このアカウントをLastPassに登録しますか?」というポップアップが出てきて、ボタンを押すだけで次回以降はログイン画面を自動入力してくれるようになります。初めて使う高機能なパスワード管理ツールの便利さに感動したのを覚えています。
以上が、一般にいわれるパスワード管理Tipsです。利用者目線でまとめると、あるWebサービスに新規登録するときのフローは次のようなものになるはずです。
セキュリティリスクを評価するための3つの基礎的な考え方
一方、こうした「ベストプラクティス」を覚えるだけでは、応用が効きません。たとえば次のような質問をされたら、あなたはどう答えるでしょうか?
こうした質問に対抗するには、セキュリティリスクを自ら評価するために必要ないくつかの考え方を身に付ける必要があります。
僕は、次の3つの考え方が特に重要だと考えています。
1. 「悪意ある人の最悪の攻撃」をシミュレーションする
セキュリティの問題を考えるとき、日常生活とは異なる視点に立つ必要があります。それは、性悪説的な視点です。
性善説に立てば、多くのセキュリティ上の問題はそもそも問題になりません。たまたまパスワードを書いた紙を落としてしまっても、世の中みんなが善人であれば、それが悪用されることは無いでしょう。「田舎では家の鍵を閉めない」というのと同じです。
しかしながら、多くのコンピュータがインターネットに接続された今となっては、見ず知らずの「悪意のある第三者」に突然攻撃されるリスクが常にあります。そこでは性善説を振りかざしても無力です。セキュリティの問題を考えるときは、人間の抱える悪と正面から向き合い、「自分に危害を加えたい人がいて最も痛いところを攻撃をしてくる場合、それでも安全か?」という視点で対策を評価する必要があります。まずはこの視点に立って状況をシミュレーションすることが、最も重要な考え方です。
たとえば「パスワードを使い回す」という行為のセキュリティリスクを考えてみましょう。ある1つのサービスからパスワードが流出し攻撃者の手に渡った場合、攻撃者は手当たり次第に色んなWebサービスでそのパスワードを使ってログインしようとします。ここでパスワードが使い回されていた場合、複数のWebサービスで攻撃者がログインに成功することになります。当然、1つのWebサービスを乗っ取られるより複数のWebサービスを乗っ取られる方が損失は大きいので、「パスワードを使い回す」という行為はリスクが高いことがわかります。
「パスワードを定期的に変更する」という行為はどうでしょう?確かにパスワードが攻撃者に流出した後で、あなたが流出の事実にしばらく気付かなかった場合、定期的なパスワード変更のタイミングで攻撃者がそのアカウントを使えなくなる可能性はあります。しかし、最悪の行動を取る攻撃者がアカウント乗っ取り後にパスワード自体を変更してしまったら、そもそもそのパスワードを上書きすることすらできなくなり、あまり意味がありません。逆にパスワード変更作業時にパスワードが流出するケースもあることを考えると、むしろパスワード定期変更によってリスクが高まることすらありそうです。
なおこうしたシミュレーションの精度を上げるには、「攻撃」の選択肢についての知識が必要になることがあります。たとえばブルートフォース攻撃や辞書攻撃などのよくある攻撃方法を知っておくことで、攻撃者の行動をイメージできるようになるかもしれません。また「量子コンピュータ技術を使うとこれまで安全だった暗号が解読される」みたいな話もあり、技術進歩によってセキュリティの常識が変わったりすることもあります。
また、攻撃への「対策」についても一定の知識が必要です。たとえば攻撃を受けてもすぐにそれに気付けて対策する術があれば大きな問題にならないケースがあります。たとえば前述した「SSOでのログインに使っているGoogleアカウントなどのパスワードが漏れたら、個々のパスワードが漏れるより危ないのではないか?」という指摘についても、Googleアカウントの機能を深く知っていれば十分に反論できます。たとえば不審なログインをメールで通知したり、ログイン時に二要素認証を求めたり、パスワード変更時に全てのデバイスで再ログインが強制したりすることができます。これらを組み合わせることで、パスワード流出や一時的なログイン乗っ取りがあった場合のリスクを十分に下げるような対策をすることができます。
2. 「利便性とのトレードオフ」の中でバランスを取る
セキュリティの問題で重要なのは、「どのレベルのセキュリティが求められるか」についての合意を取ることです。
もちろんセキュリティレベルが高いに越したことはないのですが、一般的にはセキュリティを強固にするほど、利便性が下がることが多いです。たとえば極端な例では、「そもそも他社のサーバーにデータを預けること自体がリスクなので、SaaSを使うこと自体ができない」みたいな会社もあります。一方、セキュリティレベルを上げてもそれによって生産性が大きく下がって事業成長が止まったりしたら、それはそれで問題です。あるWebサービスの利用に関して、求められるセキュリティレベルがどのくらいで、それを実現するのにどのくらいの利便性が犠牲になるのか。それを明らかにした上で、うまくバランスを取ることが求められます。
たとえば「二要素認証やIPアドレス制限などセキュリティを強化する機能が使える場合、必ず設定した方がいいか?」という指摘があった場合は、「できるならやった方がいいけどケースバイケースですね」というのが回答になる気がします。SSOで使うメインのアカウントでは流石に二要素認証を設定した方がいいでしょうが、ログインの手間自体は増えるので全てのWebサービスで二要素認証を必須にした方がいいとまでは言えないかもしれません。また管理画面に接続できるアクセス元IPアドレス制限は、特にリモートワーク環境下でサービス利用に強い制限をかけることになるので、利便性とのバランスを考え慎重に検討が必要です。
ちなみに、「セキュリティレベルを決めて一定のセキュリティリスクを受け入れる」という話は、先日書いた「サービスレベルを決めて一定のシステム障害リスクを受け入れる」という話と構造がかなり近いです。どちらも、「"リスクをゼロにする" というのは幻想なので捨てましょう」という態度であるといえます。幻想はゴミ箱へ。
3. 「最後に誰を信じるか」を決める
現代においては、業務で使うシステムを全て自社で開発するというのはあまり現実的ではなくなっています。そのため、「他社が提供するサービスを使い、自社の大事なデータの一部をその会社に預ける」という選択を取る企業が増えています。SaaSの普及とは、まさにそういった選択の普及でもあります。
対個人のレベルでは「性悪説」を前提として考えるべきセキュリティ問題も、対企業レベルではうまくバランスを取っていく必要があります。たとえばGoogleという会社を全く信用していなければ、Googleアカウントを業務で使いGoogleスプレッドシートなどの各種アプリケーションを使うようなことは、セキュリティ上とてもリスクがある行為になります。しかし実態としては、多くの企業がGoogleを信じてGoogle Workspaceを使っているわけです。
もちろん、不運にも企業がデータを流出させてしまうという事件は確かにあります。名の知れた企業全体が実はevilであったというケースは流石に多くありませんが、よく名前の知らないソフトウェア会社が不当にデータを収集するブラウザ拡張機能をばら撒いていたといった例は普通にあります。また、セキュリティ対策が甘くて重大な情報流出を招いてしまったというケースもあります。最近でも、楽天やPayPayが自社で利用しているSalesforceの設定ミスで情報漏洩の可能性があったことを発表しています。
どの企業をどのくらい信じるかを決めて、どのくらいのデータを渡すかを考える。プライベートでも業務でも、そんな態度でWebサービスを利用していくのが良さそうです。そのためには各サービス提供企業に興味を持ち、どんな人が始めて、どんなミッションを追っていて、過去にどんな失敗をして、政治的なポジションはどこで、などをうっすらとでも知っておく必要があります。
信じて任せること、信じて任せてもらうこと
ここまで、パスワード管理というテーマを中心に、Webサービスをめぐるセキュリティについて考えてきました。最終的には、セキュリティを保ちながら生産性を上げるためには、企業間の信頼関係が重要であることもわかりました。
これは言い換えれば、ITサービスの提供企業にとって「利用企業にセキュリティ面で信頼してもらうこと」が事業上とても重要であることを意味します。
たとえばある企業が一社員のセキュリティ意識の低さから顧客情報を流出させニュースになった場合、その企業が新しく始めたWebサービスを使う人も減ってしまった、ということは大いにあり得ます。「そんな信用ならない会社がやってる決済サービスなんて使えるかよ」といった具合です。
そんなわけで企業にとっては、セキュリティインシデントを防ぐための対策を行う重要性が増しています。アカウント管理の仕組み化、パスワード管理ツールの導入、セキュリティ教育、導入システムのセキュリティチェックetc...。
そして、十分にセキュリティリスクマネジメントを実施していることを社会に示していくこともまた重要です。たとえば国内企業でも、ISMS(情報セキュリティマネジメントシステム)の認定を受ける例などが増えています。
もちろんこれほどWebサービスやスマホアプリが普及する前から、重要な情報を流出させないことや企業としての信頼を失わないことは大切でした。しかしどんな企業もITサービスを提供する可能性のある時代において、そのサービスを介して企業に集まるデータの量や質も爆発的に増えています。逆にこうしたデータを活用してサービスの体験を改善していくことができなければ新興の企業にどんどん追い抜かれてしまう。
企業が保持すべきデータが増えたことによって、「社会に信頼される企業」になることのビジネス上の合理性がさらに高まった、と理解できそうです。
それでは良いお年を。
ここから先は
仕事を楽しくするデジタルリテラシー読本
【初月無料】デジタル時代の歩き方について考えたことを発信します。ソフトウェアの時代とは何か。エンジニアの頭の中はどうなっているのか。NoC…
サポートをいただけると、喜びドリブンで発信量が増えます!初月無料のマガジン『仕事を楽しくするデジタルリテラシー読本』もおすすめです!