> For the complete documentation index, see [llms.txt](https://coky-t.gitbook.io/owasp-asvs-ja/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://coky-t.gitbook.io/owasp-asvs-ja/owasp-apurikshonsekyuriti-50/0x16-v7-session-management.md).

# V7: セッション管理

## 管理目標

セッション管理メカニズムは、ステートレス通信プロトコル (HTTP など) を使用している場合でも、アプリケーションがユーザとデバイスのやり取りを時間の経過とともに関連付けることができます。現代のアプリケーションは異なる特性と目的を持つ複数のセッショントークンを使用するかもしれません。安全なセッション管理システムとは、攻撃者が被害者のセッションを取得、利用、あるいはその他の方法で悪用することを防ぐものです。セッションを維持するアプリケーションは、以下のセッション管理の上位要件が満たされていることを確保する必要があります。

* セッションは各個人に固有のものであり、推測や共有することはできない。
* セッションは不要になると無効になり、非アクティブ期間内にはタイムアウトする。

この章の要件の多くは、選択された [NIST SP 800-63 Digital Identity Guidelines](https://pages.nist.gov/800-63-4/) コントロールに関連しており、一般的な脅威と一般的に悪用される認証の弱点に焦点を当てています。

特定のセッション管理メカニズムの具体的な実装の詳細に関する要件は他の場所にあることに注意してください。

* HTTP クッキーはセッショントークンを保護するための一般的なメカニズムです。クッキーの特定のセキュリティ要件は「Web フロントエンドセキュリティ」の章にあります。
* 自己完結型トークンはセッションを維持する方法として頻繁に使用されます。具体的なセキュリティ要件は「自己完結型トークン」の章にあります。

## V7.1 セッション管理ドキュメント

すべてのアプリケーションに適した単一のパターンはありません。したがって、すべてのケースに適した普遍的な境界と制限を定義することは現実的ではありません。実装とテストの前提条件として、セッション処理に関連するセキュリティ上の決定を文書化したリスク分析を実施する必要があります。これにより、セッション管理システムがアプリケーションの特定の要件に適合するようになります。

ステートフルと「ステートレス」のどちらのセッションメカニズムを選択するかに関わらず、選択されたソリューションが関連するすべてのセキュリティ要件を満たすことができることを示すために、分析を完了して文書化する必要があります。使用中のシングルサインオン (SSO) メカニズムとのやり取りも考慮する必要があります。

|     #     | 説明                                                                                                                                                  | レベル |
| :-------: | --------------------------------------------------------------------------------------------------------------------------------------------------- | :-: |
| **7.1.1** | ユーザのセッション非アクティブタイムアウトと絶対最大セッション有効期間が文書化され、他のコントロールと組み合わせて適切であり、そのドキュメントには NIST SP 800-63B 再認証要件からの逸脱の正当性が含まれている。                                    |  2  |
| **7.1.2** | ドキュメントには、一つのアカウントで許可される同時 (並列) セッションの数と、アクティブセッションの最大数に達した場合に実行される意図した動作やアクションを定義している。                                                              |  2  |
| **7.1.3** | フェデレーション ID (federated identity) 管理エコシステムの一部としてユーザセッションを作成および管理するすべてのシステム (SSO システムなど) は、セッションの有効期間、終了、および再認証を必要とするその他の状態を調整するためのコントロールとともに文書化している。 |  2  |

## V7.2 基本セッション管理セキュリティ

このセクションでは、セッショントークンが安全に生成および検証されることを確認することで、安全なセッションの基本的な要件を満たします。

|     #     | 説明                                                                                                        | レベル |
| :-------: | --------------------------------------------------------------------------------------------------------- | :-: |
| **7.2.1** | アプリケーションが信頼できるバックエンドサービスを使用してすべてのセッショントークン検証を実行している。                                                      |  1  |
| **7.2.2** | アプリケーションがセッション管理に動的に生成される自己完結型トークンまたはリファレンストークンを使用している。つまり、静的な API シークレットと API キーは使用していない。                |  1  |
| **7.2.3** | リファレンストークンがユーザセッションを表すために使用される場合、そのトークンは一意であり、暗号論的に安全な疑似乱数生成器 (CSPRNG) を使用して生成され、少なくとも 128 ビットのエントロピーを持つ。 |  1  |
| **7.2.4** | アプリケーションがユーザ認証 (再認証を含む) 時に新しいセッショントークンを生成し、現在のセッショントークンを終了する。                                             |  1  |

## V7.3 セッションタイムアウト

セッションタイムアウトメカニズムは、セッションハイジャックやその他の形式のセッション悪用の機会を最小限に抑えるのに役立ちます。タイムアウトは文書化されたセキュリティ上の決定を満たす必要があります。

|     #     | 説明                                                         | レベル |
| :-------: | ---------------------------------------------------------- | :-: |
| **7.3.1** | 文書化されたセキュリティ上の決定に従って再認証が強制されるような、非アクティブタイムアウトがある。          |  2  |
| **7.3.2** | リスク分析と文書化されたセキュリティ上の決定に従って再認証が強制されるような、絶対的な最大セッション存続期間がある。 |  2  |

## V7.4 セッションの終了

セッションの終了はアプリケーション自体によって処理されるか、SSO プロバイダ がアプリケーションの代わりにセッション管理を処理している場合は SSO プロバイダによって処理されます。いくつかの要件はプロバイダによってコントロールされる可能性があるため、このセクションの要件を検討する際に、SSO プロバイダが適用範囲に含まれるかどうかを判断する必要があるかもしれません。

セッションの終了は再認証を必要とし、アプリケーション、フェデレーションログイン (存在する場合)、依拠当事者 (Relying Party) すべてに有効となっている必要があります。

ステートフルセッションメカニズムでは、終了には一般的にバックエンドでセッションの無効にすることを含みます。自己完結型トークンの場合、トークンが有効期限まで有効なままになる可能性があるため、トークンを失効するかブロックするための追加の対策が必要です。

|     #     | 説明                                                                                                                                                                                                                                     | レベル |
| :-------: | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-: |
| **7.4.1** | セッションの終了 (ログアウトや期限切れなど) がトリガーされると、アプリケーションはセッションのそれ以上の使用を禁止している。リファレンストークンやステートフルセッションでは、これはアプリケーションバックエンドでセッションデータを無効にすることを意味する。自己完結型トークンを使用するアプリケーションでは、終了したトークンのリストを保持する、ユーザごとに所定の日時より前に生成されたトークンを禁止する、ユーザごとに署名鍵を入れ替えるなどの解決策が必要になる。 |  1  |
| **7.4.2** | ユーザアカウントが無効または削除された場合 (従業員の退職など) 、アプリケーションはすべてのアクティブなセッションを終了する。                                                                                                                                                                       |  1  |
| **7.4.3** | 認証要素が正常に変更または削除 (リセットやリカバリーによるパスワード変更や、存在する場合、MFA 設定の更新を含む) された後、アプリケーションが他のすべてのアクティブセッションを終了するためのオプションを提供している。                                                                                                                        |  2  |
| **7.4.4** | 認証を必要とするすべてのページでログアウト機能に簡単かつ目に見える形でアクセスできる。                                                                                                                                                                                            |  2  |
| **7.4.5** | アプリケーション管理者は個々のユーザーまたはすべてのユーザーのアクティブなセッションを終了できる。                                                                                                                                                                                      |  2  |

## V7.5 セッションの悪用に対する防御

このセクションでは、アクティブユーザセッションの存在と機能に依存するベクトルを通じて、ハイジャックや悪用されるアクティブセッションによってもたらされるリスクを軽減するための要件を提供します。たとえば、悪意のあるコンテンツ実行を使用して、認証された被害者のブラウザに被害者のセッションを使用してアクションを実行します。

このセクションの要件を検討する際には、「認証」の章のレベル固有のガイダンスを考慮する必要があることに注意してください。

|     #     | 説明                                                                                                          | レベル |
| :-------: | ----------------------------------------------------------------------------------------------------------- | :-: |
| **7.5.1** | アプリケーションは、電子メールアドレス、電話番号、MFA 構成、アカウントリカバリに使用されるその他の情報など、認証に影響する可能性のある機密性の高いアカウント属性の変更を許可する前に、完全な再認証を要求している。 |  2  |
| **7.5.2** | ユーザは、現在のアクティブセッションの一部またはすべてを表示し、(少なくとも一つの要素で再度認証することで) 終了することができる。                                          |  2  |
| **7.5.3** | アプリケーションは、機密性の高いトランザクションや操作を実行する前に、少なくとも一つの要素での追加の認証または二次検証を要求している。                                         |  3  |

## V7.6 フェデレーション再認証

このセクションは依拠当事者 (Relying Party, RP) やアイデンティティプロバイダ (Identity Provider, IdP) コードを作成する人に関連します。これらの要件はフェデレーションおよびアサーションに関する [NIST SP 800-63C](https://pages.nist.gov/800-63-4/sp800-63c.html) に由来します。

|     #     | 説明                                                                                                                                         | レベル |
| :-------: | ------------------------------------------------------------------------------------------------------------------------------------------ | :-: |
| **7.6.1** | 依拠当事者 (Relying Party, RP) とアイデンティティプロバイダ (Identity Provider, IdP) 間のセッションの有効期間と終了は文書化されたとおりに動作し、IdP 認証イベント間の最大時間に達した場合など、必要に応じて再認証を要求している。 |  2  |
| **7.6.2** | セッションの作成にはユーザの同意または明示的なアクションが必要であり、ユーザとのやり取りなしに新しいアプリケーションセッションが作成されることを防いでいる。                                                             |  2  |

## 参考情報

詳しくは以下の情報を参照してください。

* [OWASP Web Security Testing Guide: Session Management Testing](https://owasp.org/www-project-web-security-testing-guide/stable/4-Web_Application_Security_Testing/06-Session_Management_Testing)
* [OWASP Session Management Cheat Sheet](https://cheatsheetseries.owasp.org/cheatsheets/Session_Management_Cheat_Sheet.html)
