パスワードリカバリーの落とし穴 - アカウント復旧が攻撃経路になるとき
この記事は約 12 分で読めます
パスワードリカバリー (アカウント復旧) は、ユーザーがアカウントへのアクセスを取り戻すための仕組みですが、皮肉にも認証セキュリティにおける最も脆弱なリンクの 1 つとなっています。攻撃者はパスワードそのものではなく、アカウント復旧フローを標的にするケースが増えています。復旧メカニズムがアカウントを保護するセキュリティ対策そのものを迂回してしまうためです。Google Threat Analysis Group の 2024 年レポートによると、アカウント復旧の悪用は標的型アカウント乗っ取りの 28% を占め、特定のカテゴリではフィッシングを上回る主要な攻撃経路となっています。FBI IC3 の統計では、SMS ベースの復旧を狙った SIM スワップ攻撃は 2021 年以降 450% 急増しています。本記事では、パスワードリカバリーシステムの構造的な脆弱性を明らかにし、ユーザーとサービス設計者の双方に向けた具体的な防御策を提示します。
メールベースリセットの構造的問題
メールによるパスワードリセットは最も普及している復旧手段ですが、セキュリティの観点からは「パスワードの強度をメールアカウントの強度に依存させる」という根本的な問題を抱えています。どれほど強力なパスワードを設定しても、メールアカウントが侵害されればリセットリンク経由で即座にアカウントを乗っ取られます。
技術的な脆弱性がこの問題をさらに深刻にしています。多くのサービスがリセットトークンの生成に十分なランダム性を確保していなかったり、適切な有効期限を設定していなかったりします。OWASP の 2023 年分析では、調査対象の Web アプリケーションの 12% が予測可能なトークン生成パターンを使用しており、8% がリセットトークンを 24 時間以上有効なまま放置していました。さらに、暗号化されていないメールで送信されるリセットリンクは、公衆 Wi-Fi ネットワーク上の中間者攻撃で傍受される可能性があります。すべてのリセットの基盤となるメールアカウントの保護については、メールアカウント保護ガイドを参照してください。
SMS リセットと SIM スワップの脅威
SMS ベースのパスワードリセットは、メールよりも安全と考えられていた時期がありました。しかし、SIM スワップ攻撃の急増により、その前提は完全に崩壊しています。SIM スワップとは、攻撃者が携帯キャリアのカスタマーサポートを騙して (あるいは内部協力者を利用して)、ターゲットの電話番号を攻撃者の SIM カードに移し替える手法です。
FBI IC3 の 2023 年報告書によると、SIM スワップ攻撃による被害額は年間 4,800 万ドルに達し、2021 年の 6,800 万ドルから手口の巧妙化に伴い 1 件あたりの被害額が増大しています。攻撃者は電話番号を掌握した後、SMS で送信されるパスワードリセットコードや二要素認証コードをすべて受信できるようになります。つまり、SMS ベースの復旧手段は、攻撃者にとって「パスワードも二要素認証も同時に突破できる」一石二鳥の攻撃経路なのです。
秘密の質問が「秘密」でない理由
秘密の質問は、現在も使用されている復旧メカニズムのなかで最も危険なものの 1 つです。Google の 2015 年の画期的な研究「Secrets, Lies, and Account Recovery」では、37% のユーザーがセキュリティを高めるために意図的に虚偽の回答を設定していましたが、その虚偽の回答を忘れてしまい復旧不能になるケースが多発していました。逆に、「母親の旧姓」や「生まれた都市」といった一般的な質問への正直な回答は、ソーシャルエンジニアリングや公的記録の検索で容易に発見できます。
SNS の普及がこの問題をさらに悪化させています。Facebook のプロフィールには出身地や出身校が記載され、Instagram には家族やペットの写真が投稿されています。「最初に飼ったペットの名前は?」「卒業した高校は?」といった質問の答えは、ターゲットの SNS を 5 分間閲覧するだけで判明することが珍しくありません。秘密の質問を設定せざるを得ない場合は、質問とは無関係なランダムな文字列を回答として設定し、パスワードマネージャーに保存するのが最善策です。
リカバリーコードの安全な保管方法
二要素認証を設定すると、多くのサービスがバックアップ用のリカバリーコード (通常 8〜10 個の一次使用コード) を発行します。このリカバリーコードは、認証デバイスを紛失した場合の最後の砦ですが、その保管方法を誤ると新たな攻撃経路を生み出してしまいます。
最も危険な保管方法は、リカバリーコードをメールの下書きやクラウドメモに保存することです。メールアカウントが侵害されれば、リカバリーコードも同時に漏洩します。スクリーンショットとして写真ライブラリに保存するのも、クラウド同期経由で漏洩するリスクがあります。
推奨される保管方法は以下の 3 つです。第一に、パスワードマネージャーの安全なメモ機能に保存する方法。第二に、紙に印刷して耐火金庫に保管する方法。第三に、暗号化された USB ドライブにオフラインで保存する方法です。いずれの場合も、リカバリーコードの保管場所を 1 箇所に限定せず、2 箇所以上に分散保管することで、1 箇所が失われても復旧可能な状態を維持してください。
リカバリーコードの管理も含めた総合的なパスワード管理については、パスワード管理の実践ガイド (Amazon)も参考になります。
サービス設計者が犯しがちな復旧フローの設計ミス
パスワードリカバリーの脆弱性は、ユーザー側の問題だけではありません。サービス提供者側の設計にも構造的な問題が存在します。
- リセットトークンの有効期限が長すぎる: 24 時間以上有効なトークンは、攻撃者に十分な時間を与える。推奨は 15〜30 分
- リセット後に既存セッションを無効化しない: パスワードをリセットしても攻撃者の既存セッションが生き残り、アクセスが継続される
- リセット試行回数に制限がない: 攻撃者がリセットリンクを大量に要求し、トークンの推測やタイミング攻撃を試みることが可能
- リセット成功時にアカウント所有者に通知しない: 正規ユーザーが不正なリセットに気づく機会を逃す
- 復旧フローで二要素認証をバイパスできる: パスワードリセットが完了すると二要素認証の再設定なしにログインできてしまう設計
ユーザーが今すぐ実行すべき防御策
- メールアカウントを最優先で保護する。パスつく.com で 20 文字以上のランダムパスワードを生成し、FIDO2 キーまたは認証アプリで二要素認証を有効化する
- SMS ベースの復旧は可能な限り避ける。代わりに認証アプリまたは FIDO2 キーを使用する。SMS が唯一の選択肢の場合は、キャリアに連絡して SIM 移行 PIN を設定する。詳細は二要素認証ガイドを参照
- 秘密の質問にはランダムな文字列を設定し、パスワードマネージャーに保存する。正直な回答は絶対に設定しない
- リカバリーコードは暗号化されたパスワードマネージャーと紙の印刷物の 2 箇所に分散保管する
- パスキー対応サービスではパスキーを導入する。パスキーベースの認証はパスワードリカバリーの問題を根本的に解消する。復旧すべきパスワードが存在しないためである
よくある質問
- パスワードリセットのメールが届いたのに自分でリクエストしていない場合、どうすべきですか?
- リセットリンクをクリックせず、直ちにそのサービスに自分でログインしてパスワードを変更してください。誰かがあなたのアカウントへのアクセスを試みている可能性があります。二要素認証が未設定であれば即座に有効化し、ログイン履歴に不審なアクセスがないか確認してください。同じメールアドレスを使用している他のサービスのパスワードも念のため変更することを推奨します。
- SIM スワップ攻撃から身を守るにはどうすればよいですか?
- 携帯キャリアに連絡して SIM 移行時の追加認証 (PIN コードや対面確認) を設定してください。SMS ベースの二要素認証を認証アプリまたは FIDO2 セキュリティキーに切り替えることが最も効果的です。また、電話番号をパスワードリカバリーの唯一の手段にしないよう、複数の復旧手段を設定しておくことが重要です。
- 秘密の質問を安全に設定する方法はありますか?
- 質問の内容とは無関係なランダムな文字列を回答として設定し、パスワードマネージャーに保存するのが最善です。「母親の旧姓」に対して "xK9#mP2vL" のようなランダム文字列を設定すれば、SNS からの推測は不可能になります。正直な回答は絶対に設定しないでください。SNS で公開している情報から容易に推測されます。