1.10 セッションハイジャックとセッションフィクセーションとは?攻撃手法と効果的な対策を徹底解説
1.10 セッションハイジャック
セッションハイジャックは、ユーザーとウェブサーバー間で確立されたセッションを乗っ取り、不正に情報を取得したり、操作を行ったりする攻撃手法です。攻撃者はユーザーのセッションIDを盗み取り、そのユーザーになりすましてシステムにアクセスします。この攻撃は、オンラインバンキングや電子商取引など、セッション管理が重要なウェブアプリケーションにおいて特に深刻な脅威となります。
1.10.1 セッションハイジャックとは
**セッションハイジャック(Session Hijacking)**は、ユーザーがウェブアプリケーションにログインしている間に、そのセッションを乗っ取ることで、不正なアクセスを行う攻撃です。セッションは、ユーザーが認証を受けた後、継続的に通信を行うために維持される一時的な接続情報です。このセッションを識別するために、セッションIDがクッキーやURL、隠しフィールドなどを通じてやり取りされます。
攻撃者がセッションIDを取得する主な方法:
-
クッキーの盗難:
- クロスサイトスクリプティング(XSS):ウェブサイトの脆弱性を利用して、ユーザーのブラウザ上で悪意のあるスクリプトを実行し、クッキー情報を取得。
- マルウェア:キーロガーやスパイウェアを使用して、クッキー情報を収集。
-
ネットワークの盗聴:
- パケットスニッフィング:HTTP通信が暗号化されていない場合、ネットワーク上を流れるパケットを傍受してセッションIDを取得。
- 中間者攻撃(Man-in-the-Middle Attack):攻撃者が通信経路に介在し、データを盗聴・改ざん。
-
予測可能なセッションIDの悪用:
- セッションIDが推測しやすい場合、攻撃者が可能性のあるIDを試行。
セッションハイジャックの影響:
- 不正アクセス: 攻撃者がユーザーになりすまし、個人情報の閲覧・変更、金銭取引の不正操作などを行う。
- 情報漏洩: 機密情報や個人データが外部に流出。
- サービスの悪用: サーバーリソースの不正使用や、他のユーザーへの攻撃の踏み台にされる。
対策:
-
セッションIDの安全な管理:
- セッションIDを十分にランダムで推測困難なものにする。
- クッキーに
HttpOnly
属性を設定し、JavaScriptからのアクセスを禁止。 - クッキーに
Secure
属性を設定し、HTTPS通信時のみ送信。
-
通信の暗号化:
- HTTPS(SSL/TLS)の導入により、通信内容を暗号化し、盗聴を防止。
-
セッションタイムアウトの設定:
- 一定期間操作がない場合、セッションを自動的に終了。
-
ログイン時のセッションID再発行:
- 認証後に新しいセッションIDを発行し、前のIDを無効化。
-
ユーザー教育:
- 不審なリンクやメールを開かないように促す。
- 公共のWi-Fiや共有PCでの重要な操作を避ける。
1.10.2 セッションフィクセーション
**セッションフィクセーション(Session Fixation)**は、攻撃者があらかじめ特定のセッションIDをユーザーに割り当て、そのセッションIDを使用してユーザーがログインした後に、同じセッションIDを用いて不正アクセスを行う攻撃手法です。
攻撃の流れ:
-
攻撃者がセッションIDを取得または生成:
- サーバーから発行されたセッションIDを取得。
- 自身でセッションIDを生成(場合によっては不正な手段でサーバーに認識させる)。
-
ユーザーにセッションIDを押し付ける:
- URL埋め込み:セッションIDを含むURLをユーザーに送信し、そのリンクをクリックさせる。
- クッキーの設定:XSS攻撃や不正なウェブサイトを利用して、ユーザーのブラウザにセッションIDを設定。
-
ユーザーがログイン:
- ユーザーは割り当てられたセッションIDを使用してログイン。
-
攻撃者が同じセッションIDで不正アクセス:
- 攻撃者は既知のセッションIDを使用して、認証済みの状態でシステムにアクセス。
セッションフィクセーションの特徴:
-
サーバー側のセッション管理の欠陥を悪用:
- 認証後にセッションIDを再発行しないシステムが対象。
-
ユーザーの操作を必要とする:
- ユーザーが攻撃者の仕掛けたセッションIDを受け入れる必要がある。
対策:
-
認証後のセッションID再発行:
- ログイン成功時に新しいセッションIDを生成し、以前のIDを無効化。
-
セッションIDをURLに含めない:
- セッションIDはクッキーで管理し、URLパラメータとして渡さない。
-
クッキー設定の厳格化:
HttpOnly
属性やSecure
属性を設定。- クッキーのスコープ(ドメイン、パス)を適切に設定。
-
セッションIDの有効性チェック:
- セッションIDがユーザーに正しく割り当てられたものかをサーバー側で確認。
-
入力データの検証:
- ユーザーから受け取るセッションIDやその他のデータを検証し、不正な値を拒否。
ユーザー側の対策:
-
信頼できないリンクを避ける:
- 不審なURLやメール内のリンクをクリックしない。
-
定期的なログアウト:
- 使用後は必ずログアウトし、セッションを終了。
-
ブラウザのセキュリティ設定の確認:
- クッキーの取り扱いについて適切に設定。
まとめ
セッションハイジャックとセッションフィクセーションは、いずれもセッション管理の脆弱性を悪用した攻撃手法です。これらの攻撃に対抗するためには、ウェブアプリケーションの適切なセッション管理と、通信の暗号化、ユーザー教育など多角的な対策が必要です。開発者はセキュリティを考慮した設計と実装を行い、ユーザーも安全な利用方法を心がけることで、リスクを大幅に低減することができます。