はじめに:ゲームにおけるフィッシング攻撃の進化とBitBの手法
長年にわたり、SteamやEpic Games、DiscordなどのPCゲーマーを標的としたフィッシング攻撃は、見分けやすい古典的手法に頼っていました。スペルミスを利用した偽ドメイン(例:staemcommunitly.com)、暗号化されていないHTTP通信、あるいは粗雑なログイン画面の模倣などです。セキュリティ意識の高いプレイヤーの間では「認証情報を入力する前に、必ずブラウザのアドレスバーに表示された正規ドメインとSSL鍵マークを確認する」という鉄則が徹底されてきました。
しかし、ゲームコミュニティを標的とする攻撃者の技術は根本的な進化を遂げました。**ブラウザ内ブラウザ(Browser-in-the-Browser、略称BitB)**と呼ばれるフィッシング手法の登場により、従来の「アドレスバーを目視確認する」という防衛策は無効化されつつあります。BitB攻撃では、被害者を外部の怪しいURLへリダイレクトさせる代わりに、アクセス中の悪意あるウェブページ自体のドキュメントオブジェクトモデル(DOM)内部に、OSのウィンドウをピクセル単位で模倣した偽のブラウザウィンドウを描画します。
この模擬ウィンドウ内には、https://steamcommunity.comと精巧に表示されたアドレスバー、緑色のSSL鍵アイコン、そしてOS標準のウィンドウ制御ボタン(最小化・最大化・閉じる)が完全に再現されています。さらにバックエンドの**中間ブラウザ(Browser-in-the-Middle、BitM)**リバースプロキシと連携することで、被害者が入力したアカウント情報とSteamモバイルガードのワンタイムパスワード(二要素認証 / 2FA)をリアルタイムに転送し、わずか数秒でセッションCookieを強奪して全自動でアカウントを乗っ取ります。
BitB攻撃の技術構造:DOMウィンドウ再現とリバースプロキシ中継
BitB攻撃は、フロントエンドでのDOMベースのUI偽装と、バックエンドでのリバースプロキシ中継という2つの技術が組み合わさって成立しています。
[被害者のブラウザ表示領域:フィッシングサイト "cs2-tournament-bracket.com"]
│
├─► [BitB 模擬ウィンドウコンテナ (DOM [div] 要素)]
│ ├── 偽装されたタイトルバーとOS操作ボタン (最小化 / 最大化 / 閉じる)
│ └── 偽装された静的アドレスバー:表示 "https://steamcommunity.com/openid/login"
│
└─► [埋め込み Iframe / 入力フォーム / WebSocket リアルタイム中継]
│
▼ (入力されたユーザー名・パスワード・Steamガード認証コードをリアルタイム取得)
[攻撃者のリバースプロキシサーバー (例: Evilginx / Muraena)]
│
▼ (正規の認証情報をValveの公式サーバーへリアルタイム転送)
[Steam公式認証エンドポイント (valve / steamcommunity.com)]
│
▼ (Valveが正規の認証セッションCookieを発行: steamLoginSecure, sessionid)
[攻撃者がセッションCookieを捕捉 -> インベントリの全自動送金・API Key乗っ取り]
フロントエンドの偽装:DOMによるブラウザウィンドウの完全シミュレーション
正当なSteam OpenID認証フローでは、サードパーティ製サイトがJavaScriptのwindow.open()を実行し、OSレベルで完全に独立した本物のブラウザ子ウィンドウを生成して、Steam公式のログイン画面を開きます。
これに対し、BitB攻撃では新しいOSウィンドウプロセスは一切生成されません。
- モーダルコンテナの生成:悪意あるウェブページがCSSの絶対配置(
position: fixedなど)を用い、最前面にdivコンテナを生成してデスクトップアプリのウィンドウ風にスタイリングします。 - ブラウザUIの完全複製:攻撃者はベクターSVGアイコンとCSSを用いて、戻る・進むボタン、更新ボタン、SSL鍵マーク、そして
https://steamcommunity.comという文字列を配置します。このアドレスバーは実際にはブラウザの機能を持たない、ただの装飾されたHTMLテキストです。 - OSとブラウザの自動判別:高度なBitBツールキットは
navigator.userAgentを参照し、被害者のOS(Windows 10/11、macOS、Linux)やブラウザエンジンを識別します。その結果、被害者の環境と一致するウィンドウボタンやシステムフォントを自動描画するため、見た目だけで偽物と見抜くことは困難です。
バックエンドの傍受:リバースプロキシと2FAのリアルタイム突破
被害者がこの模擬ウィンドウに騙され、SteamのID、パスワード、およびSteamガードのワンタイム認証コードを入力すると、以下の連鎖が発生します。
- 2FAのリアルタイム迂回:一般的な二要素認証(TOTP)は、30秒ごとに変化するワンタイムコードを攻撃者が推測できないことを前提としています。しかしリバースプロキシ型攻撃では、被害者自身が有効なコードを入力します。プロキシサーバーはこの情報を即座にValveの公式認証サーバーへリレーするため、2FAを完全にすり抜けてログインを成立させます。
- 高権限セッションCookieの奪取:認証が成功すると、Valveのサーバーは正規の認証Cookieである
steamLoginSecureとsessionidを発行します。攻撃者のリバースプロキシは、このCookieをメモリ内で傍受し、自身のリモートデータベースに保存します。 - 全自動セッション乗っ取り:
steamLoginSecureを入手した攻撃者は、以後のパスワードや認証コードを一切必要としません。自動化されたヘッドレスブラウザが被害者のアカウントへ侵入し、即座に既存のWeb APIキーを取り消して攻撃者専用のAPIキーを登録、インベントリ内の高額アイテムを自動トレードで別アカウントへ送信し、フレンド一覧へ同様のフィッシングリンクを一斉送信します。
従来の目視確認が通用しない理由と技術的検知手法
偽装アドレスバーはピクセル単位で本物と見分けがつかないため、プレイヤーはブラウザの構造や挙動を利用した検証を行う必要があります。
1. ウィンドウのドラッグ移動テスト(物理的な境界の確認)
最も手軽かつ直感的な検証法は、ログインポップアップをブラウザの表示枠外へドラッグしてみることです。
- 本物のウィンドウ:OSが生成した正規の子ウィンドウは独立したプロセスであるため、ブラウザの枠を飛び越えてデスクトップの端やサブモニター上へ自由に移動できます。
- BitB模擬ウィンドウ:親ウェブページのHTML要素に過ぎないため、現在のブラウザ表示領域(ビューポート)の外側へ移動させることができません。画面の端にドラッグすると枠で遮られるか、背後に隠れてしまいます。
2. パスワードマネージャーの自動入力判定
Bitwardenや1Password、ブラウザ標準のパスワード管理機能は、画面上の文字ではなく、ブラウザが認識している真のドメイン(window.location.origin)を参照して動作します。
- 本物のSteam公式認証画面であれば、正規ドメイン(
steamcommunity.com)を認識して自動入力の候補を表示します。 - BitBの偽ポップアップの場合、真のオリジンはアクセス中の悪質サイト(例:
fake-tournament.com)であるため、パスワードマネージャーは一致する資格情報が存在しないと判定し、自動入力を拒否します。 - 鉄則:普段認証情報を保存しているブラウザにおいて、信頼できるパスワードマネージャーが一切反応しない場合、そのログイン画面は高確率でDOMに埋め込まれたフィッシング罠です。
3. デベロッパーツール(DOM構造の検査)
キーボードのF12キーを押してデベロッパーツールを開くか、模擬アドレスバー上で右クリックして要素の検証を選択します。
- 本物のブラウザのアドレスバーはOSネイティブの領域であり、ウェブページの検証機能で中身を見ることはできません。
- BitBウィンドウの場合、アドレスバーを検証すると
divやspanタグで構成されたウェブ要素であることがDOMツリー上に明確に表示されます。
比較マトリクス:正規Steam OpenIDとBitBフィッシングの構造差
| 比較項目 | 正規Steam OpenID認証ポップアップ | BitBフィッシング模擬フレーム |
|---|---|---|
| ウィンドウ生成 | OSネイティブの独立プロセス(window.open) | ページ内部のDOM要素(div / iframe) |
| 移動可能範囲 | ブラウザ枠を越えてマルチモニター間を自由移動 | 親ページの表示領域(ビューポート)内に固定 |
| アドレスバー | OS管理のセキュア領域、正規証明書を確認可能 | CSSで装飾された静的テキストとダミーアイコン |
| パスワードマネージャー | ドメイン一致を検知し自動入力を提示 | 偽サイトのドメインと判定し自動入力を拒否 |
| セッション引継ぎ | ログイン済みの場合「サインイン」ボタン1発で完了 | 常に新規のID・パスワード・Steamガード入力を要求 |
| 右クリック検証 | ブラウザ/OS標準のシステムメニューが表示 | ウェブ検証ツールが開きHTMLノードを直接選択可能 |
緊急対応:認証情報漏洩後のアカウント保護と遮断プロトコル
もしBitB偽ウィンドウにアカウント情報や認証コードを入力してしまった可能性がある場合、被害を最小限に食い止めるため以下の手順を直ちに実行してください。
- すべてのデバイスの認証セッションを即時解除:
- 公式のSteamモバイルアプリまたは安全なPCのSteamクライアントから「Steamガード」設定を開きます。
- 他のすべてのデバイスの認証を解除を実行します。これにより、発行済みの
steamLoginSecureCookieが直ちに無効化され、攻撃者のプロキシセッションが強制切断されます。
- Steam Web APIキーの確認と取り消し:
- 正規のブラウザから
https://steamcommunity.com/dev/apikeyへ直接アクセスします。 - 身に覚えのないAPIキーが登録されている場合(一般的なプレイヤーが登録する必要はありません)、即座にSteam Web API キーを取り消すをクリックしてください。攻撃者はこのキーを使ってトレードオファーを監視・すり替えます。
- 正規のブラウザから
- パスワードの変更と認証情報の更新:
- Steamアカウントのパスワードを変更し、登録メールアドレスのパスワードも安全な別端末から更新します。
- トレードURLの再発行:
- Steamのトレードオファー設定から新しいトレードURLを生成し、攻撃者のボットが既存のURLを使ってオファーを生成できないように遮断します。
近年の巧妙化するゲームセキュリティの脅威に対抗するには、ウェブ認証とアカウント基盤の仕組みを正しく理解することが不可欠です。365Findsの技術分析を参照することで、プレイヤーや大会運営者はDOMインジェクションやリバースプロキシといった最新の攻撃手法を事前察知し、大切なアカウントやゲーム内資産を確実に保護できます。