セッションハイジャック(session hijack)とは、Webサイトへログインした後に発行される「セッションID」という識別情報を第三者が不正に奪い取り、そのユーザーになりすましてサービスを乗っ取る攻撃のことです。パスワードを知らなくても、このIDさえ手に入れば、正規のログイン状態を横取りできてしまいます。
現実世界に例えると、セッションハイジャックは入場後に渡されるリストバンドを奪い取る行為のようなものです。入場口での本人確認(ログイン)をくぐり抜けていなくても、腕にリストバンドさえあれば、会場内では正規の来場者として扱われてしまいます。
セッションIDという仕組み
Webサイトにログインすると、サーバーはその利用者を識別するための「セッションID」という文字列を発行し、以降のやり取りではこのIDだけで本人確認を済ませています。毎回パスワードを入力しなくてもログイン状態が保たれるのは、この仕組みのおかげです。
主な手口
| 手口 | 内容 |
|---|---|
| 盗聴 | 暗号化されていない通信からセッションIDを盗み見る |
| XSS | 不正なスクリプトを使い、セッションIDを盗み出す |
| セッション固定 | あらかじめ用意したIDを、相手に使わせるよう仕向ける |
パスワードなしで侵入できる理由
セッションハイジャックが厄介なのは、攻撃者がパスワードやIDを一切知らなくても、セッションIDという「鍵」さえ手に入れば、その場でなりすましが成立してしまう点です。本人確認そのものを回避できてしまう性質が、この攻撃の大きな脅威となっています。
公共Wi-Fiに潜むリスク
暗号化されていない公共のフリーWi-Fiでは、通信内容が周囲から盗み見られやすく、セッションIDが含まれる通信データを盗聴される危険性が高まります。カフェや駅などで重要なサービスにログインする際は、通信環境に注意を払う必要があります。
通信を暗号化する(HTTPS化)
Webサイト全体をHTTPSで暗号化しておけば、通信内容が第三者に読み取られにくくなり、セッションIDの盗聴によるハイジャックを大幅に防ぐことができます。現在では、ほとんどのWebサービスがこの対策を標準で導入しています。
セッションIDの管理を強化する
サーバー側では、ログイン直後にセッションIDを新しく発行し直したり、一定時間操作がなければ自動的に無効にしたりすることで、万が一IDが漏れた場合の被害を最小限に抑える工夫が行われています。
Cookieにセキュリティ属性を設定する
セッションIDを保存するCookieには、JavaScriptから読み取れないようにする「HttpOnly」や、暗号化通信でのみ送信する「Secure」といった属性を設定することで、盗み取られるリスクをさらに減らすことができます。
利用者側でできる対策
利用者側としては、信頼できないネットワークでの重要な操作を避け、使い終わったサービスからは必ずログアウトするといった習慣が有効です。ログアウトによってセッションIDが無効化され、その後の悪用を防げます。

コメント