セッションフィクセーション (セッションフィクセーション) とは | 意味や読み方など丁寧でわかりやすい用語解説
セッションフィクセーション (セッションフィクセーション) の読み方
日本語表記
セッション固定攻撃 (セッションコテイコウゲキ)
英語表記
Session Fixation (セッションフィクセーション)
セッションフィクセーション (セッションフィクセーション) の意味や用語解説
セッションフィクセーションとは、Webアプリケーションの脆弱性を悪用した攻撃手法の一つであり、攻撃者がユーザーのセッションを乗っ取ることを目的とする。システムエンジニアを目指す上では、Webセキュリティの基礎として理解しておくべき重要な概念である。 この攻撃の概要は、まず攻撃者が事前に有効なセッションIDを何らかの方法で取得し、そのセッションIDを被害者に強制的に使用させる。そして、被害者がそのセッションIDのままWebアプリケーションにログインすると、アプリケーションは認証後のセッションも同じIDで継続してしまうため、攻撃者はそのセッションIDを利用して被害者になりすますことが可能になる、というものである。これにより、攻撃者は被害者のアカウントに不正にアクセスし、機密情報を窃取したり、被害者の権限で操作を行ったりできるようになる。 詳細な攻撃手順を見てみよう。まず、攻撃者は標的となるWebアプリケーションのログイン前のページにアクセスする。多くのアプリケーションは、ユーザーがログインする前からセッション管理のためにセッションIDを発行する。このとき、攻撃者はアプリケーションから発行されたセッションID(例:URLパラメータやCookieに含まれる)を記録しておく。次に、攻撃者はこの記録したセッションIDを、何らかの方法で被害者に強制的に使用させる。具体的な方法としては、フィッシングメールや悪意のあるWebサイトを通じて、セッションIDがURLパラメータとして含まれたリンクをクリックさせる手法が一般的である。例えば、「http://example.com/login?JSESSIONID=攻撃者が知っているID」といった形式のURLを被害者に送る。被害者がこのリンクをクリックすると、ブラウザは攻撃者が意図したセッションIDを保持したままアプリケーションにアクセスすることになる。 被害者がこのリンクをクリックしてWebアプリケーションにアクセスし、ログインページで自分の認証情報(ユーザー名とパスワード)を入力してログインを試みる。ここで、脆弱なアプリケーションの場合、ユーザーが正しく認証された後も、ログイン前に発行されたセッションIDを使い続けてしまう。つまり、アプリケーションは「このセッションIDは、今ログインしたユーザーのものです」と認識するようになる。攻撃者は、被害者がログインする前に取得しておいたセッションIDを知っているため、被害者がログインを完了した後に、その同じセッションIDを使ってアプリケーションにアクセスする。アプリケーションは攻撃者のリクエストを、先にログインした被害者の正当なリクエストだと誤認し、攻撃者は被害者の認証済みセッションにアクセスできるようになる。これにより、被害者のアカウント情報や個人情報へのアクセス、さらにはECサイトでの不正な購入など、様々な悪意のある行為が可能となる。 セッションフィクセーション攻撃が成功する主な原因は、Webアプリケーションがユーザーの認証が成功した後に、セッションIDを新しく発行(再生成)しないことにある。セッションIDの再生成を行わないと、ログイン前の未認証セッションとログイン後の認証済みセッションが同じIDで紐付けられてしまうため、攻撃の機会を与えてしまうことになる。 この攻撃に対する最も効果的で基本的な対策は、ユーザーが認証を成功させた直後に、Webアプリケーション側で新しいセッションIDを生成し、古いセッションIDを無効化することである。これにより、攻撃者が事前に知っていたセッションIDは、認証後のセッションではもはや無効となるため、乗っ取りを防ぐことができる。また、セッションIDの管理においては、予測が困難な十分に長いセッションIDを使用すること、HTTPS(SSL/TLS)を利用してセッションIDが通信経路上で盗聴・改ざんされないようにすること、セッションCookieにHttpOnlyフラグとSecureフラグを設定してJavaScriptからのアクセスや非HTTPS通信での送信を防ぐこと、そして適切なセッションタイムアウトを設定することも重要である。これらの対策を複合的に適用することで、より堅牢なセッション管理を実現し、セッションフィクセーションを含む様々なセッション関連の攻撃からアプリケーションを保護できる。