セッションハイジャック攻撃の仕組みと対策についてのイメージ画像

セッションハイジャック攻撃とは?


著者: Yunes Tarada
翻訳: 東條 百々朱

この記事はPowerDMARCのブログ記事 What Is Session Hijacking? Types and Protection Tips の翻訳です。
Spelldataは、PowerDMARCの国内正規代理店です。
この記事は、PowerDMARCの許可を得て、翻訳しています。


主なポイント

  1. セッションハイジャックとは、攻撃者がアクティブなWebセッションを乗っ取り、機密情報やアカウントへ不正にアクセスする攻撃です。
  2. ARPポイズニングやセッション固定攻撃など、セッションハイジャックに使われるさまざまな手法を理解することは、効果的な防御策を講じるうえで重要です。
  3. HTTPSなどの安全な通信プロトコルを使用することで、通信経路上でセッショントークンを盗まれるリスクを軽減できます。
    また、メール通信ではMTA-STSなどを利用することで、メールサーバー間通信の安全性を高められます。
  4. 不審なリンクを安易にクリックせず、機密性の高い操作を行う際には公衆Wi-Fiの利用を避けることで、攻撃を受けるリスクを大幅に低減できます。
  5. Webアプリケーションファイアウォールや最新のウイルス対策ソフトウェアなど、追加のセキュリティ対策を導入することで、セッションハイジャックに対する防御をさらに強化できます。

セッショントークンやCookieは、ユーザーが認証情報を何度も入力することなくログイン状態を維持するために使われます。
そのため、サイバー犯罪者にとって格好の標的となっています。
攻撃者がこれらの情報を入手すると、ユーザー本人になりすまし、目立ったセキュリティアラートを発生させることなくアカウントへアクセスできる場合があります。

リモートワークやクラウドアプリケーションの利用が広がる中、暗号化されていない通信や安全性の低い設定を通じて、ユーザーセッションが外部へ露出する機会も増えています。
そのため、セッションハイジャックへの対策はこれまで以上に重要になっています。
セッションハイジャックの手法と防御策を理解することは、個人情報だけでなく、企業のシステムやインフラを守るうえでも重要です。

セッションハイジャックとは?

セッションハイジャックとは、攻撃者がWebサイトやアプリケーション上で進行中のユーザーセッションを乗っ取るサイバー攻撃です。
この攻撃では、盗まれたセッショントークンなどを悪用して、正規ユーザーになりすまし、アカウントへ不正にアクセスします。
ユーザーのログイン状態を維持するWebサイトやアプリケーションでは、ユーザーを識別するためにセッショントークンやCookieが使用されます。

サーバーはこれらの情報をもとにセッションを識別するため、ユーザーはページへアクセスするたびにログイン情報を入力する必要がありません。
攻撃者は、ネットワークの盗聴、マルウェア、クロスサイトスクリプティング(XSS)の脆弱性などを悪用して、こうしたセッショントークンを盗みます。
盗まれたトークンがサーバーへ送信されると、サーバーが正規ユーザーの既存セッションとして受け入れてしまう場合があります。

セッションハイジャックでは、サーバー自体へ直接侵入するのではなく、ユーザーとサーバー間でやり取りされるセッション情報を盗み取ったり悪用したりする点が特徴です。
攻撃が成功すると、機密データの窃取、不正アクセス、アカウントの悪用などにつながり、個人のプライバシーだけでなく、企業の重要情報も脅かされます。

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

ここでは、Webサイトがユーザーセッションを作成・維持する仕組みと、どこに脆弱性が生じ、攻撃者がどのように悪用するのかを順番に説明します。

1.ユーザーセッションが確立・維持される仕組み

ユーザーがログインすると、リクエストのたびにパスワードを入力しなくても本人を識別できるよう、サーバーがセッションを作成します。
サーバーはクライアントへセッション識別子、つまりセッションIDやトークンを発行します。

この識別子は、その後のリクエストとともに送信されます。
サーバーはこの情報を使ってユーザーを識別し、認証済みのユーザーだけが利用できるページや機能へのアクセスを許可します。

2.セッションID/トークンが生成・保存・検証される仕組み

生成
安全なシステムでは、暗号学的に十分な強度を持つランダムな値、つまり高いエントロピーを持つ値を使用してトークンを生成します。
必要に応じて、有効期限などの情報もあわせて管理します。
例えば、ランダムに生成されたセッションIDや、署名付きのJWTなどがあります。
保存(クライアント側)
Cookieは最も一般的な方法です。
サーバーがセッションIDを含むCookieを設定します。
Cookieには、セキュリティリスクを軽減するため、HttpOnly、Secure、SameSiteなどの属性を設定できます。

Webストレージ(localStorage/sessionStorage)またはメモリはシングルページアプリケーションで、トークンの保存に利用されることがあります。
ただし、localStorageやsessionStorageはJavaScriptからアクセスできるため、XSSの影響を受けやすい点に注意が必要です。
検証(サーバー側)
サーバーは、セッションストア(メモリ、データベース、キャッシュなど)に保存されている情報と照合してトークンを確認します。
JWTなどのステートレスなトークンを使用している場合は、署名が正しいかどうかを検証します。

通常は、有効期限や失効状態も確認します。
必要に応じて、IPアドレスやユーザーエージェントなどの情報をセッションと関連付け、不審な利用を検知することもあります。

3.攻撃者が弱点を発見して悪用する方法

攻撃者は、トークンの生成、保存、送信、検証の各段階に存在する弱点を狙います。

予測可能なトークン
セッションIDが推測しやすかったり、ランダム性が不足していたりすると、攻撃者がブルートフォース攻撃によって有効な値を推測できる可能性があります。
有効期間が長すぎるトークン
有効期限が極端に長いトークンは、盗まれた際に悪用される期間も長くなります。
不十分な検証
有効期限を確認しない、トークンを適切に失効させない、重要な操作時に再認証を求めないといった実装は、攻撃のリスクを高めます。
セッション固定攻撃
攻撃者が自分の把握しているセッションIDを被害者に使用させ、その後、そのセッションを利用して被害者になりすます攻撃です。
クライアント側での露出
localStorageなど、JavaScriptからアクセスできる領域に保存されたトークンは、XSS攻撃によって盗まれる可能性があります。

4.一般的な侵入経路

暗号化されていない接続(HTTP/公衆Wi-Fi)
通信が暗号化されていない場合、攻撃者がネットワークトラフィックを盗聴し、中間者攻撃(Man-in-the-Middle)やパケットスニッフィングによってCookieやトークンを取得する可能性があります。
クロスサイトスクリプティング(XSS)
被害者のブラウザ上で悪意のあるスクリプトを実行し、CookieやlocalStorageに保存されたトークンを読み取って攻撃者へ送信します。
なお、CookieにHttpOnlyが設定されていれば、JavaScriptからCookieを直接読み取ることはできません。
マルウェア/キーロガー
端末に保存された認証情報やセッション情報などを盗み取ります。
クロスサイトリクエストフォージェリ(CSRF)/ソーシャルエンジニアリング
ユーザーを誘導し、意図しない操作を実行させたり、認証済みセッションを悪用したりします。
共有端末/公共の端末
ログアウトせずに残されたセッションや、ブラウザに保存された認証情報を第三者に利用される可能性があります。
不適切なCookie設定
HttpOnly、Secure、SameSiteなどの属性が適切に設定されていない場合や、Cookieの適用範囲が必要以上に広く設定されている場合、悪用されるリスクが高まります。

5.攻撃者が盗んだセッション情報を使って行うこと

トークン/Cookieの再利用
攻撃者は、盗んだトークンを被害者の代わりにサーバーへ送信します。
サーバーがそのトークンを正規のものとして受け入れると、攻撃者はユーザー本人になりすますことができます。
不正操作やデータの窃取
ユーザーになりすまして個人情報を閲覧したり、設定を変更したり、送金したり、メッセージを読み取ったりする可能性があります。
権限の昇格
セッションの乗っ取りと別の脆弱性を組み合わせ、管理者権限を取得したり、別のアカウントへ侵入したりする場合があります。
不正アクセスの継続
トークンが失効または期限切れになるまで、攻撃者が正規ユーザーとして操作を続けられる可能性があります。

6.攻撃対象に関する重要なポイント

セッションハイジャックは、主にクライアントとサーバー間の通信やセッション管理の仕組みを狙う攻撃です。
通常、サーバーそのものへ侵入する必要はありません。
攻撃者は、セッショントークンの生成、保存、送信、検証方法に存在する弱点を悪用します。

攻撃者が使用する一般的な手法

ここでは、攻撃者がセッショントークンを盗んだり悪用したりする際に使う代表的な手法を紹介します。
それぞれ、セッションの作成、保存、送信方法に存在する異なる弱点を狙っています。
また、複数の手法が組み合わされる場合もあります。

1.マン・イン・ザ・ブラウザ攻撃

マン・イン・ザ・ブラウザ(MITB)攻撃は、ユーザーのブラウザに感染したマルウェアによって行われる攻撃です。
トロイの木馬や悪意のあるブラウザ拡張機能などが利用されることがあります。
ブラウザ内部へ侵入すると、データが暗号化される前、または復号された後のWebページやリクエストを読み取ったり、書き換えたりできます。

そのため、ユーザーやサーバーからは通常の操作に見える場合があります。
悪意のあるコードはブラウザ内部で動作するため、HTTPS/TLSだけでは完全に防ぐことができません。

MITBマルウェアは、ログイン情報の窃取、銀行取引情報の書き換え、不正なリクエストの追加、セッショントークンの外部送信などを行う可能性があります。
特に、金融取引や機密性の高い操作では大きなリスクとなります。

対策
信頼できるマルウェア対策ソフトやエンドポイント保護を導入し、ブラウザと拡張機能を常に最新の状態に保ってください。
また、利用可能な場合はブラウザや拡張機能の制御機能を活用し、重要な取引には別経路での確認や多要素認証を導入してください。

2.ブルートフォース攻撃

セッションIDが脆弱で予測しやすい場合、攻撃者がブルートフォース攻撃によって有効なセッションIDを推測する可能性があります。
ブルートフォース攻撃では、有効なセッションIDやトークンが見つかるまで、大量の候補値を自動的に試します。
ネットワークからトークンを盗み取るのではなく、サーバーが受け入れる値を大量に試して見つけ出す方法です。

セッショントークンが短い、連番になっている、ランダム性が低いなどの問題があると、有効な値の推測が現実的になります。
さらに、トークンの有効期間が長い場合、一度発見されたトークンを長期間悪用される可能性があります。
以下の対策により、セッショントークンを推測する攻撃を現実的に実行しにくくできます。

推奨される防御策
  • 暗号学的に強力で、十分なランダム性を持つセッショントークンを発行します。
  • すべてのページでHTTPSを使用し、通信中のトークンの漏洩を防ぎます。
  • セッションの有効期間を必要以上に長くせず、重要な操作後には必要に応じてトークンを更新します。
  • レート制限やアカウント・IP単位の制御を導入し、大量の試行を防止します。
  • 異常なトークン利用や大量の失敗を検知できるログ監視とアラートを導入します。
  • 必要に応じてCAPTCHAや多要素認証を活用します。

3.セッションサイドジャッキング

セッションサイドジャッキングでは、攻撃者がユーザーのネットワークトラフィックを傍受し、セッション情報を盗んでアクティブなWebセッションを乗っ取ります。
代表的な手法がパケットスニッフィングです。

公衆Wi-FiやHTTP通信など、暗号化されていない環境では、セッショントークンやその他の機密情報が盗み取られるリスクが高まります。
攻撃者が通信データを取得すると、その中からセッションIDや認証Cookieを抽出します。

有効なトークンを入手できれば、正規ユーザーになりすましてアカウントへアクセスし、不正な操作を行える可能性があります。
すべての通信をHTTPS/TLSで暗号化することで、通信内容の盗聴や改竄を大幅に困難にできます。
また、CookieにはSecureやHttpOnlyなどの適切な属性を設定し、重要な操作では再認証を求めることも有効です。

4.クロスサイトスクリプティング

クロスサイトスクリプティング(XSS)は、Webページへ悪意のあるスクリプトを挿入し、ユーザーのブラウザ上で実行させる攻撃です。
Webアプリケーションに入力値の検証や出力時のエスケープ処理などの不備があると、悪意のあるスクリプトを実行される可能性があります。
その結果、JavaScriptからアクセスできるセッショントークンなどが盗まれ、攻撃者にセッションを乗っ取られる可能性があります。

5.セッション固定攻撃

セッション固定攻撃では、攻撃者があらかじめ把握しているセッションIDを被害者に使用させます。
その後、被害者がそのセッションIDのままログインすると、攻撃者も同じセッションIDを使って被害者の認証済みセッションへアクセスできる可能性があります。

例えば、攻撃者が特定のセッションIDを含むリンクを被害者へ送り、そのリンクからログインさせる方法などがあります。
この攻撃を防ぐには、ログイン成功時に新しいセッションIDを発行することが重要です。

セッションハイジャックを検出する方法

セッションハイジャックを検出するには、通常とは異なるユーザー行動や、セッションの利用状況に見られる異常を継続的に監視することが重要です。
主な確認ポイントは以下のとおりです。

行動の異常
IPアドレスが突然変わる、遠く離れた場所から短時間にログインする、複数の端末から同時にアクセスするといった挙動は、セッションが乗っ取られている兆候である可能性があります。
ログ分析と侵入検知システム(IDS)
サーバーやアプリケーションのログを定期的に確認し、IDSを活用することで、異常なセッション利用やログイン失敗の繰り返しなどを検出できます。
セッション利用パターン
セッションの継続時間、利用端末の変化、リクエスト頻度などを確認することで、通常とは異なる利用を検知しやすくなります。
アラート機能
不審なセッションの挙動を検出した際に、管理者へ自動的に通知する仕組みを導入することで、重大な被害が発生する前に対応できます。
多要素認証(MFA)
不審な挙動が確認された際に再度MFAを要求することで、盗まれたセッショントークンだけでは操作を継続しにくくできます。

セッションハイジャックを防止する方法

攻撃を受けた後に対処するよりも、事前にリスクを軽減しておくことが重要です。
セッションを保護するための主な対策は以下のとおりです。
以下の対策を組み合わせることで、セッション情報とユーザーアカウントを不正アクセスから保護しやすくなります。

すべてのWeb通信をHTTPSで保護する
HTTPS/TLSを使用することで、ユーザーとWebサーバー間の通信を暗号化し、通信途中でセッショントークンを盗み取られるリスクを軽減できます。
安全なセッション管理を行う
HttpOnly、Secure、SameSiteなどのCookie属性を適切に設定し、推測されにくいセッショントークンを使用してください。
MTA-STSでメール通信を保護する
MTA-STSはWebセッションのハイジャックを直接防ぐ仕組みではありませんが、メールサーバー間でTLS暗号化を強制することで、メール通信の盗聴や改竄リスクを低減できます。
不審なリンクやファイルを避ける
マルウェアの侵入や認証情報の窃取につながる可能性があるため、不審なリンクやダウンロードには注意してください。
ウイルス対策ソフトウェアとファイアウォールを利用する
セッション情報を盗む可能性があるマルウェアやトロイの木馬などから端末を保護します。
公衆Wi-Fiで重要な操作を行わない
信頼できないネットワークでは盗聴などのリスクが高まるため、機密性の高い操作は避けてください。
やむを得ず利用する場合は、HTTPSを確認し、必要に応じて信頼できるVPNを使用してください。

まとめ

セッションハイジャックは、攻撃者がアクティブなセッショントークンを盗んだり悪用したりして、正規ユーザーになりすますサイバー攻撃です。
攻撃が成功すると、機密情報の窃取、不正操作、アカウントの悪用などにつながる可能性があります。
こうした攻撃の仕組みを理解し、HTTPSによる暗号化、安全なセッション管理、マルウェア対策、多要素認証、慎重なユーザー行動などを組み合わせることで、リスクを大幅に低減できます。

また、メールを経由したフィッシングやマルウェア感染が攻撃のきっかけとなる場合もあるため、メールセキュリティを強化することも重要です。
PowerDMARCは、DMARC、SPF、DKIM、MTA-STSなどを通じて、組織のメールセキュリティ強化を支援します。
こうした対策を組み合わせることで、アカウントや機密データ、オンライン環境をさまざまなサイバー脅威から保護できます。

よくある質問

セッションハイジャックにはどのような影響がありますか?
セッションハイジャックが発生すると、攻撃者が正規ユーザーになりすましてアカウントへ不正にアクセスできる可能性があります。
個人情報や機密データを盗まれたり、設定を変更されたり、データを削除されたりする場合があります。

銀行口座や決済サービスのアカウントが標的となった場合は、金銭的な被害につながる可能性もあります。
企業でセッション情報が漏洩した場合は、情報漏洩や不正アクセスだけでなく、顧客からの信頼低下やブランドイメージの悪化につながる可能性があります。
HTTPSはセッションハイジャックを防止できますか?
HTTPSはブラウザとサーバー間の通信を暗号化するため、通信途中で攻撃者がセッショントークンを盗み取ることを大幅に困難にします。
ただし、マルウェア、マン・イン・ザ・ブラウザ攻撃、クロスサイトスクリプティングなど、端末やWebアプリケーション自体を狙う攻撃までは防げません。
HTTPSに加えて、安全なセッション管理、多要素認証、適切なCookie設定などを組み合わせることで、より強固な保護を実現できます。
セッションハイジャックとスプーフィングの違いは何ですか?
セッションハイジャックは、攻撃者が有効なセッション情報を盗んだり悪用したりして、正規ユーザーになりすます攻撃です。
一方、スプーフィングは、メールアドレス、IPアドレス、ドメインなどの送信元情報を偽装し、別の人物や組織になりすます手法です。
どちらも不正アクセスや詐欺につながる可能性がありますが、セッションハイジャックでは、すでに確立されている正規のセッションを悪用する点が大きく異なります。