セッションハイジャックの仕組みと対策

この記事は約 6 分で読めます

セッションハイジャックとは、正規ユーザーの Web セッションを攻撃者が乗っ取り、不正にアクセスする攻撃手法です。セッショントークン (Cookie に保存されるセッション ID) を窃取・推測することで、攻撃者はパスワードを知らなくてもユーザーになりすますことができます。OWASP の 2023 年レポートによると、セッション管理の不備は Web アプリケーション脆弱性の上位 10 項目に含まれており、全 Web 攻撃の約 7% がセッション関連の脆弱性を悪用しています。ログイン済みの状態を奪われるため、二段階認証を設定していても突破される可能性がある点が、この攻撃の深刻さです。本記事では、セッションハイジャックの技術的な仕組みと、ユーザー側で実践できる具体的な防御策を解説します。

セッションハイジャックの仕組み

XSS によるセッショントークンの窃取

クロスサイトスクリプティング (XSS) 攻撃は、Web ページに悪意のある JavaScript を注入する手法です。ユーザーが改ざんされたページにアクセスすると、スクリプトがセッション Cookie を読み取り、攻撃者のサーバーに送信します。Cookie に HttpOnly 属性が設定されていない場合、JavaScript から document.cookie でセッション ID を取得できるため、XSS はセッションハイジャックの最も一般的な手法の 1 つです。HackerOne の 2023 年バグバウンティレポートでは、報告された脆弱性の約 18% が XSS 関連であり、そのうちセッショントークンの窃取に直結するものが 3 割を占めていました。

暗号化されていない通信の盗聴

暗号化されていない HTTP 接続では、セッショントークンが平文で送信されます。公共 Wi-Fi など同一ネットワーク上の攻撃者は、パケットスニッフィングツールを使ってこれらのトークンを傍受できます。2010 年に公開された Firesheep というツールは、公共 Wi-Fi 上で他人のセッション Cookie を簡単に傍受できることを実証し、HTTPS の重要性を世に知らしめました。現在でも、HTTPS を使用していないサイトでは同様のリスクが存在します。注意すべき点として、HTTPS を使用していても、Secure 属性が設定されていない Cookie は HTTP リクエストにも付与されるため、混在コンテンツ (Mixed Content) がある場合にはトークンが平文で漏洩する可能性があります。

セッション管理の攻撃手法と防御を体系的に学ぶには、セッションセキュリティと XSS 対策の解説書 (Amazon)が参考になります。

セッション固定攻撃

セッション固定攻撃では、攻撃者が事前に既知のセッション ID を被害者に設定します。被害者がそのセッション ID のままログインすると、攻撃者は同じセッション ID を使って認証済みのセッションにアクセスできます。適切に実装されたサービスでは、ログイン時にセッション ID を再生成することでこの攻撃を防いでいますが、すべてのサービスが正しく対策しているとは限りません。よくある誤解として「ログイン画面が HTTPS なら安全」と考えがちですが、セッション固定攻撃は通信の暗号化とは無関係に成立するため、HTTPS だけでは防御できません。

クロスサイトリクエストフォージェリ (CSRF)

CSRF 攻撃は、ユーザーのブラウザを騙して、認証済みのサイトに意図しないリクエストを送信させる手法です。厳密にはセッションハイジャックとは異なりますが、既存のセッションを悪用してユーザーの意図しない操作 (パスワード変更、送金など) を実行させる点で、セッションの安全性に直結する脅威です。SameSite Cookie 属性の導入により CSRF のリスクは軽減されましたが、SameSite=None に設定されたサードパーティ Cookie を使用するサービスでは依然として注意が必要です。

セッションハイジャックから身を守る方法

HTTPS を使用しているサイトのみを利用する

ログインするサイトが HTTPS を使用していることを必ず確認してください。ブラウザのアドレスバーに鍵アイコンが表示されていることを確認します。特に公共ネットワークでは、HTTP のサイトに認証情報を入力しないでください。ブラウザの設定で「HTTPS のみモード」を有効にすると、HTTP サイトへのアクセス時に警告が表示されます。Google の透明性レポートによると、Chrome でのページ読み込みの 95% 以上が HTTPS 経由ですが、残りの 5% に含まれるサイトでは依然としてセッション傍受のリスクがあります。

公共 Wi-Fi での機密操作を避ける

公共 Wi-Fi は、セッションハイジャックの格好の狩場です。カフェ、空港、ホテルなどの公共ネットワークでは、銀行、メール、SNS などの機密性の高いアカウントへのログインを避けてください。やむを得ず利用する場合は、信頼できる VPN でトラフィックを暗号化しましょう。VPN アカウントのパスワードもパスつく.com で強力なものを生成してください。

使用後は必ずログアウトする

Web アプリケーションの使用後は、必ずログアウトしてください。特に共有 PC や公共端末では必須です。ブラウザのタブを閉じるだけではセッションが終了しない場合があります。多くの Web サービスではセッションの有効期限が 24 時間から 30 日間に設定されており、ログアウトしなければその間ずっとセッションが有効なままです。明示的なログアウト機能を使用し、セッション Cookie を無効化してください。ブラウザの「閉じたときに Cookie を削除する」設定も有効な対策です。

パスワードを強力かつ固有に保つ

強力なパスワード単体ではセッションハイジャックを防げませんが、アカウント全体のセキュリティにおいて不可欠です。パスつく.com で各サービスに固有の 16 文字以上のパスワードを設定し、定期的に更新することで、パスワード漏洩を起点とした攻撃のリスクを低減できます。セッションが乗っ取られた疑いがある場合は、直ちにパスワードを変更し、すべてのセッションを無効化してください。

セッション保護とあわせてアカウント全体の防御力を高めるには、Web 認証とトークンセキュリティの実践書 (Amazon)が実践的です。

セッションハイジャックが疑われる場合の対処

身に覚えのない操作、不明な場所からのログイン通知、変更した覚えのない設定変更など、アカウントに不審な活動を発見した場合、セッションが乗っ取られている可能性があります。対処は時間との勝負です。セッションの有効期限が切れる前に攻撃者がパスワードや復旧用メールアドレスを変更すると、アカウントの回復が極めて困難になります。

  • パスつく.com で直ちに新しいパスワードを生成し、変更する
  • アカウントのセキュリティ設定からすべてのアクティブセッションを無効化する
  • 多要素認証を有効化 (または再設定) する
  • アカウント設定、復旧用メールアドレス、電話番号に不正な変更がないか確認する
  • 連携しているサードパーティアプリを確認し、不審なアクセスを取り消す