1. ホーム
  2. ニュース
  3. Webアプリケーションにおけるパスワード再設定機能を安全に実装するために

Webアプリケーションにおけるパスワード再設定機能を安全に実装するために

セキュリティ 2022.10.26

1. 概要

 パスワードを使用してユーザ認証を行うWebアプリケーションでは、パスワード再設定機能・パスワードリセット・パスワードリマインダーなどと呼ばれる、パスワードを忘れたユーザが自身のパスワードを変更できる機能が実装されることが多くあります。このような認証情報を扱う機能の性格上、機能に脆弱性があった場合には被害が甚大となる場合が少なくありません。
 セブン&アイホールディングスの決済サービス「7pay」を廃止にまで追い込んだ2019年の不正アクセスは、パスワードリスト攻撃によってユーザ認証を不正に突破され、金銭的被害を発生させるものでした。この不正アクセスの直接の原因ではないとされていますが、パスワード再設定機能に脆弱性があったことが分かっています。最近では2022年9月に発生した「ニトリアプリ」への不正アクセスのように、パスワードリスト攻撃によってユーザ認証を不正に突破され、登録情報が漏えいする事例が発生しています。
 本記事ではパスワード再設定機能を安全に実装するために重要なポイントを紹介します。Webアプリケーションのセキュリティ対策の一助になれば幸いです。


2. パスワード再設定機能とは

 パスワード再設定機能は、登録されたユーザ本人がパスワード再設定操作をしていることを認証したうえで、新しいパスワードを設定できるものです。パスワードの再設定は一般的に、下の図のような3段階で行われます。

  1. 1. 再設定要求:パスワードを忘れたユーザがWebアプリケーションにメールアドレス・ユーザIDなどを入力し、パスワード再設定を要求する。
  2. 2. ユーザの認証:1.の要求をした者が本来のユーザアカウントの所有者であることを何らかの方法で確認する。
  3. 3. 再設定実行:認証されたユーザが新しく設定するパスワードを入力し、パスワードを変更する。


3. 安全なパスワード再設定の実装

 パスワード再設定機能は、パスワードに代わる方法でユーザ本人であることを確実に認証する必要があります。しかし、認証の実装に不備があると、本来のユーザではなく第三者がパスワードを再設定することができ、アカウントを乗っ取る攻撃が可能となってしまうなどの脆弱性となります。
 OWASP(※1)では、「OWASP Cheat Sheet Series」プロジェクトにて、推奨されるセキュリティ対策を分野ごとにまとめた資料を公開しています。本記事では「Forgot Password Cheat Sheet」に沿って、安全なパスワード再設定の実装にあたって特に注意したい項目を説明します。

  1. 1. 再設定要求

・入力したアカウントが存在するかどうかを分からないようにする
入力したアカウントが存在するかどうかをHTTPレスポンスから判断できると、攻撃者は存在するアカウントに対して様々なパスワードでログイン試行をする攻撃に利用するおそれがあります。存在しないアカウント情報が入力された場合も「登録されているメールアドレスにパスワード再設定用のURLを送信しました。届かない場合は、アカウントが存在しないか、入力したメールアドレスが間違っています。」といった、アカウントの有無が分からないメッセージを返すようにします。

・自動実行を防止する
ユーザごとに一定時間で再設定要求を実行できる回数の制限をする、CAPTCHAを使用したりするなどの方法で、自動的に大量のリクエストを実行できないようにします。自動で何度でも実行できると、大量のメールが送信され、ユーザにとって迷惑になります。

・一般的なセキュリティ対策をする
Webアプリケーションのフォームに対して一般的に必要とされる、SQLインジェクション対策・入力値検証などのセキュリティ対策を実装します。

  1. 2. ユーザの認証

・Webアプリケーション以外の通信手段を使用する
ランダムな英数字の文字列(トークン)や6桁~12桁の数字(PIN)などを発行し、メールやSMSなどのWebアプリケーションとは別の手段でユーザに送信します。トークンを含めたURLを生成してメールで送付する方法が推奨されています。トークンなどは推測や総当たりによる攻撃ができないよう、十分に長いランダム値とします。

・「秘密の質問」に依存しない
あらかじめ設定しておいた「秘密の質問」の答えを入力させる方法は、答えを容易に推測できたり、SNSに公開されている情報などから攻撃者が知ることができる場合が多いため、秘密の質問のみで認証してはいけません。使用する場合は、メールで送信されるURLトークンに加えて質問の答えを入力させるなど、ほかの認証方法と組み合わせるようにします。

・メールの宛先を入力させない
メールやSMSの宛先は、サーバ側に登録されているものにします。登録されているものと異なる宛先にメールが送信できる場合、本来のユーザではない第三者がトークンなどを受信し、パスワード再設定を実行するおそれがあります。

  1. 3. 再設定実行

・パスワード再設定が実行されたことをメールなどで通知する
ユーザが不正アクセスに気づけるように、パスワード再設定が実行されたことをメールなどで通知します。パスワード自体をメールで送信してはいけません。

・パスワード再設定の完了後は通常通りログインさせる
パスワード再設定の完了後に自動でログインするようにすると、認証やセッション管理のコードが複雑になり、脆弱性の原因となりやすいため、パスワード再設定の完了後は通常通りログインが必要となるようにします。

・一度使用されたトークンなどを無効化する
認証のために発行したトークンなどは一度パスワード再設定が完了したら再度使用できないように無効化します。何度でも使用可能である場合、トークンが漏えいすると攻撃者がパスワード再設定を実行し、アカウントを乗っ取られるおそれがあります。コンテンツマネジメントシステム(CMS)の1つであるWordPressのバージョン5.4.1未満では、パスワード再設定用のURLが無効化されない脆弱性(CVE-2020-11027)が存在していました。この脆弱性はNIST(※2)のNVDではCVSS 3.1のスコアが8.1と判断されており、危険度が高い脆弱性と言えます。


4. まとめ

 本記事では、パスワード再設定機能の段階ごとに推奨されるセキュリティ対策を紹介しました。
弊社のWebアプリケーション脆弱性診断サービスで、パスワード再設定機能での検出の一例を下記に挙げます。

  • ・ 再設定要求のWebページにSQLインジェクション脆弱性が存在していた
  • ・ 任意のメールアドレスにトークンURLを送信することができた
  • ・ 認証のために発行したトークンが一定時間内なら何度でも使用可能となっていた

他にも様々な脆弱性が検出されている箇所でもあり、認証に関わる機能ですので、脆弱性診断は必須と言えます。


5. e-Gateの監視サービスおよび脆弱性診断サービスについて

 e-Gateのセキュリティ機器運用監視サービスでは、24時間365日、リアルタイムでセキュリティログの有人監視を行っております。サイバー攻撃への対策としてセキュリティ機器を導入する場合、それらの機器の運用監視を行い、通信が攻撃かどうかの分析、判断をして、セキュリティインシデント発生時に適切に対処できるようにすることが重要です。e-Gateのセキュリティ監視サービスをご活用いただきますと、迅速なセキュリティインシデント対応が可能となります。
 また、e-Gateの脆弱性診断サービスでは、お客様のシステムを診断し、検出された脆弱性への対策をご提案させていただいております。テレワークの常態化やIoT等のデバイスの多様化が進む昨今、特定の攻撃経路だけを想定した「境界防御」に加えて、脆弱性を把握・管理・対処する『本質防御』も必須となっています。e-Gateの脆弱性診断サービスをご活用いただきますと、お客様のシステムにおける脆弱性の存否が明らかになります。
 監視サービスや脆弱性診断サービスをご活用いただきますと、セキュリティインシデントの発生を予防、また発生時にも迅速な対処が可能なため、対策コストや被害を抑えることができます。

■総合セキュリティサービス 「e-Gate」
 SSK(サービス&セキュリティ株式会社)が40年以上に渡って築き上げてきた「IT運用のノウハウ」と最新のメソッドで構築した「次世代SOC “e-Gateセンター“」。この2つを融合させることによりお客様の情報セキュリティ全体をトータルにサポートするのがSSKの“e-Gate”サービスです。e-Gateセンターを核として人材・運用監視・対策支援という3つのサービスを軸に全方位のセキュリティサービスを展開しています。
【参考URL】
https://www.ssk-kan.co.jp/wp/e-gate


6. 参考資料

OWASP, Forgot Password Cheat Sheet, 2022年10月19日閲覧
https://cheatsheetseries.owasp.org/cheatsheets/Forgot_Password_Cheat_Sheet.html

NVD, CVE-2020-11027, 2022年10月19日閲覧
https://nvd.nist.gov/vuln/detail/CVE-2020-11027

※1: OWASPはOpen Web Application Security Project の略で、Webをはじめとするソフトウェアのセキュリティに関する情報共有と普及啓発を目的としたオープンソース・ソフトウェアコミュニティです。

※2: NISTはNational Institute of Standards and Technologyの略で、米国の政府機関である米国国立標準技術研究所を指します。脆弱性情報データベース National Vulnerability Database (NVD)を管理しています。


※本資料には弊社が管理しない第三者サイトへのリンクが含まれています。各サイトの掲げる使用条件に従ってご利用ください。
リンク先のコンテンツは予告なく、変更、削除される場合があります。
※掲載した会社名、システム名、製品名は一般に各社の登録商標または商標です。

≪お問合せ先≫
サービス&セキュリティ株式会社
〒150-0011
東京都渋谷区東3丁目14番15号 MOビル2F
TEL 03-3499-2077
FAX 03-5464-9977
sales@ssk-kan.co.jp