V7: セッション管理
Last updated
Was this helpful?
Last updated
Was this helpful?
セッション管理メカニズムは、ステートレス通信プロトコル (HTTP など) を使用している場合でも、アプリケーションがユーザとデバイスのやり取りを時間の経過とともに関連付けることができます。現代のアプリケーションは異なる特性と目的を持つ複数のセッショントークンを使用するかもしれません。安全なセッション管理システムとは、攻撃者が被害者のセッションを取得、利用、あるいはその他の方法で悪用することを防ぐものです。セッションを維持するアプリケーションは、以下のセッション管理の上位要件が満たされていることを確保する必要があります。
セッションは各個人に固有のものであり、推測や共有することはできない。
セッションは不要になったときや非アクティブ期間内にタイムアウトしたときに無効になる。
この章の要件の多くは、一般的な脅威と一般的に悪用される認証の弱点に焦点を当てた、選択された コントロールに関連しています。
特定のセッション管理メカニズムの具体的な実装の詳細に関する要件は他の場所にあることに注意してください。
HTTP クッキーはセッショントークンを保護するための一般的なメカニズムです。クッキーの特定のセキュリティ要件は「Web フロントエンドセキュリティ」の章にあります。
自己完結型トークンはセッションを維持する方法として頻繁に使用されます。具体的なセキュリティ要件は「自己完結型トークン」の章にあります。
すべてのアプリケーションに適した単一のパターンはありません。したがって、すべてのケースに適した普遍的な境界と制限を定義することは不可能です。実装とテストの前提条件として、セッション処理に関連するセキュリティ上の決定を文書化したリスク分析を実施する必要があります。これにより、セッション管理システムがアプリケーションの特定の要件に調整されます。
ステートフルと「ステートレス」のどちらのセッションメカニズムを選択するかに関わらず、選択されたソリューションが関連するすべてのセキュリティ要件を満たすことができることを示すために、分析を完了して文書化する必要があります。使用中のシングルサインオン (SSO) メカニズムとのやり取りも考慮する必要があります。
7.1.1
ユーザのセッション非アクティブ期間と再認証前の最大セッション有効期間が文書化され、他のコントロールと組み合わせて適切であり、そのドキュメントには NIST SP 800-63B 再認証要件からの逸脱の正当性が含まれている。
2
v5.0.be-1.3.1
7.1.2
ドキュメントには、一つのアカウントで許可される同時 (並列) セッションの数と、アクティブセッションの最大数に達した場合に実行される意図した動作やアクションを定義している。
2
v5.0.be-1.3.2
7.1.3
フェデレーション ID (federated identity) 管理エコシステムの一部としてユーザセッションを作成および管理するすべてのシステム (SSO システムなど) は、セッションの有効期間、終了、および再認証を必要とするその他の状態を調整するためのコントロールとともに文書化している。
2
v5.0.be-1.3.3
このセクションでは、セッショントークンが安全に生成および検証されることを確認することで、安全なセッションの基本的な要件を満たします。
7.2.1
アプリケーションが信頼できるバックエンドサービスを使用してすべてのセッショントークン検証を実行している。
1
v5.0.be-3.1.2
7.2.2
アプリケーションがセッション管理に動的に生成される自己完結型トークンまたはリファレンストークンを使用している。つまり、静的な API シークレットと API キーは使用していない。
1
v5.0.be-3.1.3
7.2.3
リファレンストークンがユーザセッションを表すために使用される場合、そのトークンは一意であり、暗号論的に安全な疑似乱数生成器 (CSPRNG) を使用して生成され、少なくとも 128 ビットのエントロピーを持つ。
1
v5.0.be-3.1.4
7.2.4
アプリケーションがユーザ認証 (再認証を含む) 時に新しいセッショントークンを生成し、現在のセッショントークンを終了する。
1
v5.0.be-3.1.5
セッションタイムアウトメカニズムは、セッションハイジャックやその他の形式のセッション悪用の機会を最小限に抑えるのに役立ちます。タイムアウトは文書化されたセキュリティ上の決定を満たす必要があります。
7.3.1
文書化されたセキュリティ上の決定に従って再認証が強制されるような、非アクティブタイムアウトがある。
2
v5.0.be-3.3.5
7.3.2
リスク分析と文書化されたセキュリティ上の決定に従って再認証が強制されるような、絶対的な最大セッション存続期間がある。
2
v5.0.be-3.3.2
セッションの終了はアプリケーション自体によって処理されるか、SSO プロバイダ がアプリケーションの代わりにセッション管理を処理している場合は SSO プロバイダによって処理されます。いくつかの要件はプロバイダによってコントロールされる可能性があるため、このセクションの要件を検討する際に、SSO プロバイダが適用範囲に含まれるかどうかを判断する必要があるかもしれません。
セッションの終了は再認証を必要とし、アプリケーション、フェデレーションログイン (存在する場合)、依拠当事者 (Relying Party) すべてに有効となっている必要があります。
ステートフルセッションメカニズムでは、終了には一般的にバックエンドでセッションの無効にすることを含みます。自己完結型トークンの場合、トークンが有効期限まで有効なままになる可能性があるため、トークンを失効するかブロックするための追加の対策が必要です。
7.4.1
セッションの終了 (ログアウトや期限切れなど) がトリガーされると、アプリケーションはセッションのそれ以上の使用を禁止している。リファレンストークンやステートフルセッションでは、これはアプリケーションバックエンドでセッションデータを無効にすることを意味する。自己完結型トークンを使用するアプリケーションでは、終了したトークンのリストを保持する、ユーザごとに所定の日時より前に生成されたトークンを禁止する、ユーザごとに署名鍵を入れ替えるなどの解決策が必要になる。
1
v5.0.be-3.8.1
7.4.2
ユーザアカウントが無効または削除された場合 (従業員の退職など) 、アプリケーションはすべてのアクティブなセッションを終了する。
1
v5.0.be-3.8.4
7.4.3
認証要素が正常に変更または削除 (リセットやリカバリーによるパスワード変更や、存在する場合、MFA 設定の更新を含む) された後、アプリケーションが他のすべてのアクティブセッションを終了するためのオプションを提供している。
2
v5.0.be-3.8.2
7.4.4
認証を必要とするすべてのページでログアウト機能に簡単かつ目に見える形でアクセスできる。
2
v5.0.be-3.8.3
7.4.5
アプリケーション管理者は個々のユーザーまたはすべてのユーザーのアクティブなセッションを終了できる。
2
v5.0.be-3.8.5
このセクションでは、アクティブユーザセッションの存在と機能に依存するベクトルを通じて、ハイジャックや悪用されるアクティブセッションによってもたらされるリスクを軽減するための要件を提供します。たとえば、悪意のあるコンテンツ実行を使用して、認証された被害者のブラウザに被害者のセッションを使用してアクションを実行します。
7.5.1
アプリケーションは、電子メールアドレス、電話番号、MFA 構成、アカウントリカバリに使用されるその他の情報など、認証に影響する可能性のある機密性の高いアカウント属性の変更を許可する前に、完全な再認証を要求している。
2
v5.0.be-3.7.1
7.5.2
ユーザは、現在のアクティブセッションの一部またはすべてを表示し、(少なくとも一つの要素で再度認証することで) 終了することができる。
2
v5.0.be-3.7.2
7.5.3
アプリケーションは、機密性の高いトランザクションや操作を実行する前に、少なくとも一つの要素での追加の認証または二次検証を要求している。
3
v5.0.be-3.7.3
7.6.1
依拠当事者 (Relying Party, RP) とアイデンティティプロバイダ (Identity Provider, IdP) 間のセッションの有効期間と終了は文書化されたとおりに動作し、IdP 認証イベント間の最大時間に達した場合など、必要に応じて再認証を要求している。
2
v5.0.be-3.6.1
7.6.2
セッションの作成にはユーザの同意または明示的なアクションが必要であり、ユーザとのやり取りなしに新しいアプリケーションセッションが作成されることを防いでいる。
2
v5.0.be-3.6.3
詳しくは以下の情報を参照してください。
このセクションは依拠当事者 (Relying Party, RP) やアイデンティティプロバイダ (Identity Provider, IdP) コードを作成する人に関連します。これらの要件はフェデレーションおよびアサーションに関する に由来します。