セッション管理メカニズムは、ステートレス通信プロトコル (HTTP など) を使用している場合でも、アプリケーションがユーザとデバイスのやり取りを時間の経過とともに関連付けることができます。現代のアプリケーションは異なる特性と目的を持つ複数のセッション識別子やトークンを使用するかもしれません。安全なセッション管理システムとは、攻撃者が被害者のセッションを取得、利用、あるいはその他の方法で悪用することを防ぐものです。セッションを維持するアプリケーションは、以下のセッション管理の上位要件が満たされていることを確保しなければなりません。
- セッションは、各個人に固有のものであり、推測や共有することはできません
- セッションは、不要になったときや非アクティブ期間内にタイムアウトしたときに無効になります
この章の要件の多くは、一般的な脅威と一般的に悪用される認証の弱点に焦点を当てた、選択された NIST SP 800-63 Digital Identity Guidelines コントロールに関連しています。
特定のセッション管理メカニズムの具体的な実装の詳細に関する要件は他の章にあることに注意してください。
- HTTP クッキーはセッション識別子を保護するための一般的なメカニズムであり、クッキーの特定のセキュリティ要件は「Web フロントエンドセキュリティ」の章にあります。
- 自己完結型トークンはセッションを維持する方法として頻繁に使用されます。具体的なセキュリティ要件は「自己完結型トークン」の章にあります。
すべてのアプリケーションに適した単一のパターンはありません。したがって、すべてのケースに適した普遍的な境界と制限を定義することは不可能です。実装とテストの前提条件として、セッション処理に関連するセキュリティ上の決定を文書化したリスク分析を実施しなければなりません。これにより、セッション管理システムがアプリケーションの特定の要件に調整されます。ステートフルと「ステートレス」のどちらのセッションメカニズムを選択するかに関わらず、選択されたソリューションが関連するすべてのセキュリティ要件を満たすことができることを示すために、分析を完了して文書化しなければなりません。
# | 説明 | L1 | L2 | L3 | CWE |
---|---|---|---|---|---|
1.3.1 | [追加] ユーザのセッション非アクティブ期間と再認証前の最大セッション有効期間が文書化され、他のコントロールと組み合わせて適切であり、そのドキュメントには NIST SP 800-63B 再認証要件からの逸脱の正当性が含まれている。 | ✓ | ✓ | ✓ | |
1.3.2 | [追加] ドキュメントには、一つのアカウントで許可される同時 (並列) セッションの数と、アクティブセッションの最大数に達した場合に実行される意図した動作やアクションを定義している。 | ✓ | ✓ | ✓ | |
1.3.3 | [追加] フェデレーション ID (federated identity) 管理エコシステムの一部としてユーザセッションを作成および管理するすべてのシステム (SSO システムなど) は、セッションの有効期間、終了、および再認証を必要とするその他の状態を調整するためのコントロールとともに文書化している。 | ✓ | ✓ | ✓ |
このセクションでは、セッショントークンが安全に生成、管理、検証されることを確認することで、安全なセッションの基本的な要件を満たします。
# | 説明 | L1 | L2 | L3 | CWE |
---|---|---|---|---|---|
3.1.1 | [削除, 8.3.1 へマージ] | ||||
3.1.2 | [追加] アプリケーションが信頼できるバックエンドサービスを使用してすべてのセッショントークン検証を実行している。 | ✓ | ✓ | ✓ | 603 |
3.1.3 | [修正, 3.5.2 から移動, レベル L2 > L1] アプリケーションがセッション管理に自己完結型トークンまたはリファレンストークンを使用している。静的な API シークレットと API キーは避けるべきである。 | ✓ | ✓ | ✓ | 798 |
3.1.4 | [修正, 3.2.2 から移動, 3.2.4 からマージ] リファレンストークンがユーザセッションを表すために使用される場合、そのトークンは一意であり、暗号的に安全な擬似乱数生成器 (CSPRNG) を使用して生成され、少なくとも 128 ビットのエントロピーを持つ。 | ✓ | ✓ | ✓ | |
3.1.5 | [修正, 3.2.1 から移動] アプリケーションがユーザ認証 (再認証を含む) 時に新しいセッショントークンを生成し、現在のセッショントークンを終了する。 | ✓ | ✓ | ✓ |
# | 説明 | L1 | L2 | L3 | CWE |
---|---|---|---|---|---|
3.2.1 | [3.1.5 へ移動] | ||||
3.2.2 | [3.1.4 へ移動] | ||||
3.2.3 | [削除, 8.2.2 へマージ] | ||||
3.2.4 | [削除, 3.1.4 へマージ] |
セッションタイムアウトメカニズムは、セッションハイジャックやその他の形式のセッション悪用の機会を最小限に抑えるのに役立ちます。タイムアウトは文書化された要件を満たさなければなりません。
# | 説明 | L1 | L2 | L3 | CWE |
---|---|---|---|---|---|
3.3.1 | [3.8.1 へ移動] | ||||
3.3.2 | [修正, 3.3.5 へ分割] リスク分析と文書化されたセキュリティ上の決定に従って再認証が強制されるような、絶対的な最大セッション存続期間がある。 | ✓ | ✓ | ✓ | |
3.3.3 | [3.8.2 へ移動] | ||||
3.3.4 | [3.7.2 へ移動] | ||||
3.3.5 | [追加, 3.3.2 から分割] 文書化されたセキュリティ上の決定に従って再認証が強制されるような、非アクティブタイムアウトがある。 | ✓ | ✓ | ✓ | 613 |
# | 説明 | L1 | L2 | L3 | CWE |
---|---|---|---|---|---|
3.4.1 | [50.2.1 へ移動] | ||||
3.4.2 | [50.2.2 へ移動] | ||||
3.4.3 | [50.2.3 へ移動] | ||||
3.4.4 | [50.2.4 へ移動] | ||||
3.4.5 | [削除, 50.1.1 により廃止] |
# | 説明 | L1 | L2 | L3 | CWE |
---|---|---|---|---|---|
3.5.1 | [51.4.14 へ移動] | ||||
3.5.2 | [3.1.3 へ移動] | ||||
3.5.3 | [52.1.1 へ移動] |
このセクションは 依拠当事者 (Relying Party, RP) やクレデンシャルサービスプロバイダ (Credential Service Provider, CSP) コードを作成する人に関連します。これらの要件はフェデレーションおよびアサーションに関する NIST SP 800-63C に由来します。
# | 説明 | L1 | L2 | L3 | CWE |
---|---|---|---|---|---|
3.6.1 | [修正, 3.6.2 からマージ] 依拠当事者(Relying Parties, RP)とクレデンシャルサービスプロバイダ (Credential Service Provider, CSP) 間のセッションの有効期間と終了は文書化されたとおりに動作し、CSP 認証イベント間の最大時間に達した場合など、必要に応じて再認証を要求している。 | ✓ | 613 | ||
3.6.2 | [削除, 3.6.1 へマージ] | ||||
3.6.3 | [追加] セッションの作成にはユーザの同意または明示的なアクションが必要であり、ユーザとのやり取りなしに新しいアプリケーションセッションが作成されることを防いでいる。 | ✓ | ✓ |
このセクションでは、アクティブユーザセッションの存在と機能に依存する、クロスサイトリクエストフォージェリ (CSRF) やその他のクロスサイト攻撃などのベクトルを通じて、ハイジャックや悪用されるアクティブセッションによってもたらされるリスクを軽減するための要件を提供します。
# | 説明 | L1 | L2 | L3 | CWE |
---|---|---|---|---|---|
3.7.1 | [修正] アプリケーションは、機密性の高いトランザクションや、認証設定などの機密性の高いアカウント属性の変更を許可する前に、再認証や二次検証を要求している。 | ✓ | ✓ | ✓ | 306 |
3.7.2 | [修正, 3.3.4 から移動] ユーザは、現在のアクティブセッションの一部またはすべてを表示し、(ログインクレデンシャルを再入力することで) 終了することができる。 | ✓ | ✓ |
セッションの終了はアプリケーション自体によって処理されるか、SSO プロバイダ がアプリケーションの代わりにセッション管理を処理している場合は SSO プロバイダによって処理されます。いくつかの要件はプロバイダによってコントロールされる可能性があるため、このセクションの要件を検討する際に、SSO プロバイダが適用範囲に含まれるかどうかを判断する必要があるかもしれません。
セッションの終了は再認証を必要とし、アプリケーション、フェデレーションログイン(存在する場合)、依拠当事者 (Relying Parties) すべてに有効となっている必要があります。
ステートフルセッションメカニズムでは、終了には一般的にバックエンドでセッションの無効にすることを含みます。自己完結型トークンの場合、トークンが有効期限まで有効なままになる可能性があるため、トークンを失効するかブロックするための追加の対策が必要です。
# | 説明 | L1 | L2 | L3 | CWE |
---|---|---|---|---|---|
3.8.1 | [修正, 3.3.1 から移動] 「戻る」ボタンや下流の依拠当事者 (Relying Parties) が、認証済みセッションを再開できないように、ログアウトおよび有効期限によってユーザーのセッションが終了する。 | ✓ | ✓ | ✓ | 613 |
3.8.2 | [修正, 3.3.3 から移動, レベル L2 > L1] 認証要素が正常に変更または削除 (リセットやリカバリーによるパスワード変更や、存在する場合、MFA 設定の更新を含む) された後、アプリケーションが他のすべてのアクティブセッションを終了するためのオプションを提供している。 | ✓ | ✓ | ✓ | 613 |
3.8.3 | [追加] 認証を必要とするすべてのページでログアウト機能に簡単かつ目に見える形でアクセスできる。 | ✓ | ✓ | ||
3.8.4 | [追加] ユーザアカウントが無効または削除された場合 (従業員の退職など) 、アプリケーションはすべてのアクティブなセッションを終了する。 | ✓ | ✓ | ✓ | 613 |
3.8.5 | [追加] アプリケーション管理者は個々のユーザーまたはすべてのユーザーのアクティブなセッションを終了できる。 | ✓ | ✓ | ✓ | 613 |
詳しくは以下の情報を参照してください。