🐷

【セキュリティ】セッションIDの固定化

に公開

はじめに

Webアプリケーションを利用する際、私たちはログイン状態を維持するためにセッションという仕組みを使っています。このセッションを管理するための「セッションID」が攻撃者に悪用される可能性があります。
本記事ではセッションID固定化攻撃(Session Fixation Attack)について、その仕組みと具体的な対策方法をまとめていきます。

セッションID固定化攻撃とは

セッションID固定化攻撃は、Webアプリケーションの脆弱性を利用して、攻撃者が正規ユーザーのセッションIDを乗っ取る攻撃手法です。一度攻撃が成功すると、攻撃者は正規ユーザーになりすまして様々な不正行為を行うことが可能になります。
例えば、オンラインバンキングであれば不正送金、SNSであれば不正投稿、ECサイトであれば不正購入など、被害の規模は計り知れません。

この攻撃の恐ろしい点は、ユーザーが正規の手順でログインしているにもかかわらず、気付かないうちにセッションが乗っ取られてしまうことです。
そのため、ユーザー側ではほとんど防ぐ手段がなく、サービス提供者(Webアプリケーション開発者)側での適切な対策が不可欠です。

攻撃の仕組みと流れ

流れの全体像


https://minnano.ubsecure.jp/session_fixation より引用

セッションID固定化攻撃は、以下のような手順で行われます。

1. 攻撃者は標的となるWebアプリケーションにアクセスし、セッションIDを生成

多くのWebアプリケーションは、ユーザーがログインしていなくても、サイトにアクセスした時点でセッションIDを発行します。攻撃者はこの特性を利用して、事前にセッションIDを用意します。

2. 攻撃者はこの生成したセッションIDを何らかの方法で正規ユーザーに送り込み

方法は様々で、メールにURLを添付してクリックを誘導したり、罠サイトにアクセスさせたり、公開フォーラムに特定のリンクを投稿したりします。重要なのは、このURLに攻撃者が生成したセッションIDが含まれている点です。

ユーザーがこのURLをクリックしてサイトにアクセスすると、攻撃者が用意したセッションIDがユーザーのブラウザに設定されます。そしてユーザーが普段通りにログイン操作を行なうと、そのセッションIDが「認証済み」の状態になってしまいます。攻撃者は事前にそのセッションIDを知っているため、ユーザーがログインした後で同じセッションIDを使ってサイトにアクセスすれば、正規ユーザーとして振る舞うことができるのです。

具体的な対策方法

1. ログイン時にセッションIDを再生成する

最も効果的な対策は、ユーザーがログインするたびに新しいセッションIDを発行することです。
これにより、たとえ攻撃者が事前にセッションIDを用意していたとしても、ログイン後にそのIDが無効化されるため、攻撃が成立しなくなります。
多くの現代的なWebフレームワークでは、この機能がデフォルトで実装されているか、簡単に有効にできるようになっています。

2. セキュアなCookieの使用

セッションIDは通常Cookieに保存されますが、このCookieの設定を適切に行なうことでセキュリティを強化できます。
具体的には以下の属性を設定します。

  • Secure属性
    HTTPS通信時のみCookieが送信されるようになります。これにより、通信経路上でセッションIDが盗まれるリスクを軽減できます。

  • HttpOnly属性
    JavaScriptからCookieにアクセスできなくなります。これにより、クロスサイトスクリプティング(XSS)攻撃によってセッションIDが盗まれるのを防ぎます。

3. 適切なセッション管理

セッションの有効期限を適切に設定し、不要なセッションは速やかに破棄するようにします。
特に、ユーザーがログアウトした際には、サーバー側でそのセッションを無効化することが重要です。
また、一定時間操作がないセッションは自動的に破棄する(セッションタイムアウト)などの対策も有効です。

4. 定期的な脆弱性チェック

Webアプリケーションに他の脆弱性があると、間接的にセッションID固定化攻撃を許す原因になることがあります。
例えば、クロスサイトスクリプティング(XSS)の脆弱性があると、攻撃者がユーザーのセッションIDを盗むことが可能になります。
定期的なセキュリティチェックと脆弱性の修正は、セッションID固定化攻撃を含む様々な攻撃に対する防御策として有効です。

おわりに

セッションID固定化攻撃は、一見複雑に見えますが、その仕組みを理解すれば効果的な対策を講じることができます。特に「ログイン時にセッションIDを再生成する」というシンプルな対策だけで、多くの攻撃を防ぐことが可能です。
Webアプリケーション開発者にとって、セッション管理はセキュリティ上極めて重要な要素です。本記事で紹介した対策方法を参考に、自身の開発するアプリケーションのセキュリティを見直してみましょう!
セキュリティ対策をしっかり行ない、顧客と企業を脅威から守っていく意識を持ちましょう。
最後までお読みいただき、ありがとうございました。

参考・画像引用元URL / 参考にした本

『体系的に学ぶ安全なWebアプリケーションの作り方 第2版(固定版) 脆弱性が生まれる原理と対策の実践』
https://minnano.ubsecure.jp/session_fixation
https://www.sc-siken.com/kakomon/29_haru/am2_5.html
https://blog.tokumaru.org/2012/12/what-kind-of-sites-are-vulnerable-to-session-fixation.html

Discussion