はじめに
この記事では、セッションハイジャック攻撃の概要、事例、ならびに成功した攻撃に伴うリスクについて解説します。Wallarmの情報を活用して、データをサイバー脅威から守る方法も学べます。
利用者がHTTP接続を利用してウェブサイトやアプリにアクセスする際、サーバーは通信を開始しアクセスを許可する前に、利用者の身元(たとえばユーザー名とパスワード)を確認します。しかし、HTTP接続は無状態であるため、利用者の各操作が独立して扱われます。もしHTTPのみを用いるなら、利用者はページ毎に再認証を求められることになります。
この問題はセッションによって解決されます。利用者がサインインすると、ウェブサイトやアプリのサーバー上にセッションが作成され、初回認証の証として機能します。サーバーのセッションが持続している間、利用者はログイン状態を維持できます。利用者はログアウトするか、または一部サービスでは一定時間操作がない場合に自動でセッションが終了されます。
多くのサービスは、短いセッションクッキー、URL、またはウェブサイト上の隠しフィールドに保存された英数字の組み合わせであるセッションIDを送信してセッションを開始します。これらのセッションIDは、場合によっては暗号化されることもあります。
セッションハイジャック攻撃またはTCPセッションハイジャック攻撃とは、攻撃者が利用者のセッションを乗っ取ることを指します。たとえば金融アプリにサインインするとセッションが開始され、ログアウトで終了します。この攻撃は、セッショントークンの情報を狙うことから、トークンハイジャックとも呼ばれます。パソコンのセッションはどんな場合も乗っ取られる可能性がありますが、サービスやウェブアプリのセッションが特に狙われやすいです。
セッションハイジャック攻撃には様々な種類があり、以下で詳細と例を紹介します。概ね、セッション乗っ取りの流れは次の通りです:
以下は架空のセッション乗っ取りの例です:
例1: カッシーはカフェでラテを楽しみながら銀行口座の残高を確認していました。隣のテーブルにいた犯罪者が「セッションスニッフィング」を用いてセッションクッキーを盗み、乗っ取りを行って口座情報にアクセスしました。
例2: ジャスティンは大手オンラインストアのセール案内メールを受け取り、リンクをクリックしてサインインし買い物を始めました。しかし、そのメールは攻撃者が送ったもので、リンクにジャスティン自身のセッションキーが含まれていました。攻撃者はそのセッションを乗っ取り、保存されたクレジットカード情報を使って買い物を行いました。
セッション乗っ取りの手法は多岐に渡ります。攻撃の仕組みを理解することで、オンラインでの安全性を高める手助けとなります。
セッションハイジャック攻撃が成功すると、攻撃者は対象利用者が行えるあらゆる操作にアクセスできるようになります。これにより、金融取引の実施、機密情報へのアクセス、またSSOを通じてほかのシステムへの不正アクセスなど、多岐にわたるリスクが生じます。
以下に、特に多く見られる脆弱性を挙げます:
攻撃の仕組みは、ハイジャックとスプーフィングで異なります。セッションハイジャックは、既にログインし認証された利用者のセッションを乗っ取るもので、利用者の視点から見るとアプリが不具合を起こしたりクラッシュしたりします。攻撃者は盗んだり偽造したセッショントークンを使い、新たにセッションを開始して元の利用者になりすますため、利用者は気付かないことが多いです。
より巧妙な乗っ取り攻撃として、セッションサイドジャッキング(セッションスニッフィングとも呼ばれる)があります。この場合、攻撃者はWiresharkやKismetなどのパケット解析ツールを使いネットワークの通信を監視して、ログイン後のセッションクッキーを盗みます。サーバーがログインページのみ暗号化し、その他のページを暗号化しない場合、利用者はこの攻撃に対して無防備となります。したがって、攻撃者はログイン後、復号されたページからセッションIDを取得できるのです。
攻撃者は利用者のネットワークへのアクセスが必要なため、セッションサイドジャッキングは主に安全でないWiFiや公共のネットワーク上で行われます。
セッション乗っ取りで最も一般的かつ危険な手法のひとつがクロスサイトスクリプティング(XSS)です。攻撃者が対象のサーバーやアプリの脆弱性を見つけると、サイトページにクライアント側のコンテンツを注入して悪質なコードを埋め込みます。一見、信頼できるサーバーからの正当なコンテンツに見えますが、悪質なコードが挿入された瞬間に利用者のセッションIDが盗まれてしまいます。
XSS攻撃では、攻撃者が信頼できるサイトのリンクに改変されたHTTPリクエストヘッダーを付けたリンクを送る場合があります。利用者がそのリンクをクリックすると、攻撃者はセッションIDにアクセスするか、場合によっては直接その情報が送信されることもあります。このような場合、攻撃者は通常URL短縮サービスを用いてリンクやその中の悪質な内容を隠します。
攻撃者が利用者のセッションIDを変更できる場合、これをセッションフィクスチャーと呼びます。対象ウェブサイトに、URLやフォームからセッションIDを設定できる脆弱性が存在する必要があります。攻撃者は利用者にセッションIDを割り当て、そのIDを含むフィッシングURLを送信するか、偽のログインフォームに埋め込むことで、利用者をログインさせることができます。
結果として、正当な利用者は攻撃者が設定した(すなわち攻撃者が知っている)セッションIDでログインし認証されます。攻撃者はその後、利用者がログインした段階でセッションIDを奪取するのです。
多くのサイトにはセッションID生成の規則があり、場合によっては利用者のIPアドレスなどを簡単に用いることがあります。攻撃者は発行されたセッションIDを観察し、そのパターンを把握できれば、正当な利用者のセッションIDを予測し、偽のIDを作成することが可能です。
また、攻撃者がセッションIDの候補リストにアクセスし、総当たり攻撃を仕掛けることも考えられます。生成方法が予測しやすい場合、そのようなリストが存在する可能性があります。
マルウェアがインストールされ、利用者がサイトにログインすると、攻撃者は中間者として動作し、データの傍受、利用者のサイト上での操作の改ざん、またはその利用者になりすました更なる行為を実行可能です。これらは利用者に気付かれることなく行われるため、実際の端末上で発生するセキュリティ侵害の検出は難しい場合があります。
セッション乗っ取り攻撃によって実際に起こった高い注目を集める事例がいくつかあります。以下はその代表例です:
「Zoomボンバリング」
COVID-19パンデミックにより学校、仕事、集まりなどでZoomのようなビデオ会議アプリが普及し、世界はデジタル化しました。その結果、これらの会議が狙われ、セッション乗っ取りが発生したため「Zoomボンバリング」という用語が生まれました。
複数の事例で、攻撃者はセッション乗っ取りを利用してプライベートなビデオ会議に侵入しました。攻撃者は罵声を浴びせ、不適切な言葉や露骨な画像を表示することで混乱を招きました。そのため、Zoomなどの企業はパスワードや待機室といったより堅牢なセキュリティ対策を実施し、セッションの参加者を手動で承認できるようにしました。
Mozilla Firefox用の「Firesheep」拡張機能
Mozilla Firefoxは2010年にFiresheepという拡張機能を公開し、オープンで暗号化されていないWiFiネットワーク上でブラウザを利用する際の脆弱性を明らかにしました。Firesheepは、利用者のブックマークに追加された任意のサイトからセッションクッキーを容易に盗み取る仕組みとなっていました。これを受け、多くのサイトがHTTPS接続を導入し、セッション乗っ取りのリスクを軽減しました。
Slack
2019年、バグ報奨金プラットフォームで活躍するセキュリティ研究者がSlackの脆弱性を発見しました。この脆弱性により、攻撃者は利用者を偽のセッションに誘導し、セッションクッキーを盗むことで、Slack上の共有情報にアクセスできるようになっていました(多くの組織では情報量が膨大です)。研究者が脆弱性を発見してから24時間以内に、Slackは問題を修正しました。
GitLab
2017年、セキュリティ研究者がGitLabの脆弱性により、利用者のセッショントークンがURLに露出する問題を発見しました。さらに調査すると、GitLabは期限切れにならない永続的なセッショントークンを使用していたため、攻撃者はそのトークンを気にせずに利用できることが判明しました。
このような露出と永続トークンの組み合わせは重大なリスクを生み、総当たり攻撃などによるセッション乗っ取りの被害を招いていました。GitLabはその後、トークンの取り扱いや保存方法を見直し、脆弱性を修正しました。
オンラインでの安全を高めるためには、さまざまな対策が講じられます。セッション乗っ取りを防止しサイバーセキュリティを強化するため、以下の対策を実施することが推奨されます。
セッション乗っ取りの被害に遭うことを想像すると不安になるかもしれませんが、これらの対策を講じることで攻撃者からセッションを守る助けとなります。
Testing for Session Hijacking - Github
Testing for Session Hijacking - OWASP
Session Hijacking - Github topics
最新情報を購読