インターネットを使っていると、「ログイン状態を保持しますか?」と聞かれたり、一度ログインしたらしばらくパスワード入力なしでサービスを使えたりしますよね? これは「セッション」という仕組みのおかげです。 今回は、このセッション管理がうまくいかないときに起こる「セッションハイジャック」と「セッション固定化(セッションフィクセーション)」という問題について、できるだけ専門用語を使わずに解説します。
そもそも「セッション」って何?
Webサイトやアプリにログインしてからログアウトするまでの一連の操作や通信のことを「セッション」と呼びます。 例えるなら、遊園地に入るときにもらう「一時的な通行パス」のようなものです。このパスがあれば、アトラクションに乗るたびに入園券を見せなくても済みますよね?
Webサイトでは、ログイン時に「セッションID」という、あなた専用の特別な「通行パス(合言葉)」が発行されます。ブラウザ(ChromeやSafariなど)は、このセッションIDを一時的に記憶しておき、サイト内で移動するたびに「はい、これ通行パスです」とサーバー(Webサイトの本体)に見せます。サーバーはそれを見て「OK、ログインしている本人だな」と判断し、サービスを提供し続けてくれるのです。
危ない!セッションハイジャックとは?
セッションハイジャックとは、悪意のある第三者(攻撃者)が、あなたの「セッションID(通行パス)」を盗み出して、あなたになりすましてしまう攻撃のことです。 まるで、誰かがあなたの遊園地の通行パスをこっそりコピーして、あなたになりすましてアトラクションを勝手に楽しんでしまうようなものです。
攻撃者は、盗んだセッションIDを使ってWebサイトにアクセスします。Webサイト側は、正しいセッションIDが送られてくるため、本物のユーザーからのアクセスだと勘違いしてしまいます。
どうやって盗まれるの?
- 推測される: セッションIDが単純な連番(1234, 1235…)や日付など、予測しやすいものだと、攻撃者に当てられてしまう可能性があります。
- 盗聴される: カフェなどの公共Wi-Fiで、通信が暗号化されていない(URLが
http://
で始まる)サイトを使うと、通信内容を覗き見られてセッションIDが盗まれることがあります。 - 他の脆弱性を利用される: Webサイト自体に「クロスサイトスクリプティング(XSS)」などの別の弱点があると、そこからセッションIDを盗まれることもあります。
どんな被害があるの?
なりすまされた結果、以下のような被害にあう可能性があります。
- 個人情報(住所、氏名、電話番号など)を盗み見られる。
- 登録情報を勝手に変更される。
- ネットショッピングで勝手に買い物をされる(クレジットカード情報の不正利用)。
- ネットバンキングで不正に送金される。
- SNSアカウントを乗っ取られ、勝手な投稿をされる。
これも危険!セッション固定化(セッションフィクセーション)とは?
セッション固定化(Session Fixation)は、セッションハイジャックの一種ですが、少し手口が異なります。 これは、攻撃者が「あらかじめ用意したセッションID(通行パス)」を、何らかの方法であなたに使わせようとする攻撃です。
例えるなら、攻撃者が特定のロッカーの鍵(セッションID)を用意しておき、あなたに「このロッカーを使ってください」と誘導します。あなたがその鍵でロッカーに荷物を入れた(ログインした)後、攻撃者は元々知っていた鍵を使って、あなたのロッカーを開けてしまうようなイメージです。
どうやって使わせるの?
- 罠のリンク: 攻撃者が用意したセッションIDを含む特別なURL(リンク)をメールなどで送りつけ、「ここからログインしてください」と誘導します。あなたがそのリンクからログインすると、攻撃者が用意したセッションIDが使われてしまいます。
あなたが攻撃者の用意したセッションIDでログインしてしまうと、攻撃者はそのセッションIDを知っているので、あなたと同じようにログイン状態になることができます。
どんな被害があるの?
セッションハイジャックと同様に、なりすましによる個人情報の閲覧、不正利用、不正送金などの被害が発生する可能性があります。
開発者はどうやって対策してるの?
Webサイトやアプリの開発者は、このような攻撃から私たちを守るために、様々な対策を行っています。専門的な話は省きますが、簡単に言うと以下のようなことをしています。
対策 | 簡単な説明 |
---|---|
ログイン後にセッションIDを変更する | ログインが成功したら、新しい「通行パス」を発行し直します。これにより、もしログイン前にセッションIDを盗まれたり固定化されたりしても、ログイン後は無効になります。 |
推測されにくいセッションIDを使う | 単純な連番などではなく、非常に複雑でランダムな文字列をセッションIDとして生成し、推測されにくくします。 |
セッションIDをURLに含めない | URLにセッションIDが含まれていると、それが漏洩しやすくなるため、Cookie(ブラウザに情報を保存する仕組み)など、より安全な方法で管理します。 |
通信を暗号化する (HTTPS) | サイト全体でHTTPS(URLがhttps:// で始まる)を利用し、通信内容を暗号化することで、盗聴を防ぎます。 |
セッションタイムアウトを設定する | 一定時間操作がない場合に自動的にログアウト(セッションを終了)させることで、万が一セッションIDが盗まれても、利用される時間を短くします。 |
セキュリティ関連の属性を設定する (HttpOnly, Secure, SameSite) | Cookieに特別な設定(属性)を追加し、プログラムからの不正なアクセスを防いだり、安全な通信時のみCookieを送信するようにしたりします。 |
これらの対策を組み合わせることで、セッション管理の安全性を高めています。
私たちユーザーができること
開発者側の対策も重要ですが、私たちユーザー側でも注意できることがあります。
- 公共のWi-Fiなど、安全でない可能性のあるネットワークで重要なサイト(ネットバンキングなど)にログインするのは避けるか、VPNなどのセキュリティ対策を行う。
- 不審なメールやメッセージに記載されたリンクは安易にクリックしない。ログインは公式サイトのブックマークなどから行う。
- Webサイトの利用が終わったら、こまめにログアウトする習慣をつける。
- ブラウザやOS、セキュリティソフトを常に最新の状態に保つ。
- URLが
https://
で始まっているか(鍵マークが表示されているか)を確認する。
これらの基本的な対策を心がけることで、セッションハイジャックやセッション固定化のリスクを減らすことができます。安全にインターネットを利用しましょう!