OWASP A07:2021 – Identification and Authentication Failuresについて個人用にメモする。
※かなり以前にまとめたもの
概要
-
これまではBrokenAuthenticationとして扱われていたカテゴリの脆弱性
-
該当するCWE(Common Weakness Enumeration、ソフトウェアにおけるセキュリティ上の脆弱性の種類を識別するための共通の基準)
CWE No. 内容 CWE-287 不適切な認証 CWE-297 ホストの不一致による証明書の不適切な検証 CWE-384 セッション固定化
説明
-
認証関連の攻撃から保護するには、ユーザーのID、認証、およびセッション管理の確認が重要。
-
アプリケーションが次の状態の場合、認証処理に脆弱性を含んでいる可能性がある。
-
(攻撃者が、有効なユーザー名/パスワードのリストを持っている場合、)資格情報の連続入力など自動化された攻撃を許可している場合
-
ブルートフォースまたはその他の自動化された攻撃をブロックしていない場合
-
「Password1」や「admin / admin」など、デフォルト、脆弱、または既知のパスワードを許可している場合
-
「個人に関する質問」など、弱いもしくは効果のないリカバリ手段を利用している場合
-
プレーンテキスト、暗号化、もしくは弱くハッシュ化されたパスワードを使用している場合
-
多要素認証を利用していない場合
-
URL上にセッションIDを公開している場合
-
ログイン成功後、セッションIDをローテーションしていない場合
-
ユーザーセッションや認証トークン(主にシングルサインオン(SSO)トークン)をログアウト中や非アクティブ期間中に無効化しない場合
-
対策
-
多要素認証を実装し、次の攻撃を防止する。
- クレデンシャルスタッフィング(インターネット上に流出したIDとパスワードの組み合わせを使って、他のWebサイトへのログインを自動的に試みる攻撃)
- ブルートフォース
- 盗まれたクレデンシャル再利用攻撃
-
管理者ユーザーの資格情報をデフォルトのままデプロイしない。
-
パスワードチェック処理の実装
- 新規または変更されたパスワードを上位10,000の最悪のパスワードリストと照合してチェックする、など。
-
パスワードの長さ、複雑さ、およびローテーションポリシーをNIST800-63bのガイドラインに合わせる。
-
ログイン処理の結果に、同じメッセージを使用する(アカウント列挙攻撃対策)
-
ログイン試行を制限もしくは再試行にウェイトを設ける。すべてのログイン試行失敗をログに記録し、管理者にアラートを通知する。
-
ログイン後にエントロピーの高い新しいランダムセッションIDを生成する、サーバー側の安全な組み込みセッションマネージャーを使用する。
- セッションIDは、URLに含めず、安全に保存し、ログアウト、タイムアウト後などに無効にする。
攻撃シナリオ
シナリオ#1
-
クレデンシャルスタッフィング攻撃(既知のパスワードリストの使用)対策していない場合
→ アプリケーションをクレデンシャルリストの有効性確認に利用されてしまう。
シナリオ#2
- アプリケーションセッションのタイムアウトが正しく設定されていない場合。
- ユーザーは、公共のコンピューターを使用してアプリケーションにアクセスする
- 「ログアウト」を選択する代わりに、ユーザーはブラウザのタブを閉じて立ち去る
- 攻撃者は1時間後に同じブラウザを使用しますが、ユーザーは引き続き認証される