概要
Google Chromeが新たに導入した X-Browser-Validationヘッダー の仕組みを解説。 このヘッダーは APIキーとUser-Agent を結合し、SHA-1でハッシュ化後、Base64エンコードして生成。 主な目的は クライアントの整合性検証 やUser-Agentの偽装検出。 Chromeバイナリのリバースエンジニアリングで 実装手順 が明らかに。 プラットフォームごとに 異なるAPIキー が利用されている点も特徴。
Chrome X-Browser-Validationヘッダーのリバースエンジニアリングと生成手順
-
Chromeが追加した 新規ヘッダー:
- x-browser-channel: ブラウザのリリースチャンネル情報
- x-browser-copyright: 著作権表示
- x-browser-validation: ハッシュ値(主題)
- x-browser-year: 年度情報
-
x-browser-validation の特徴:
- Base64デコードすると SHA-1ハッシュ のような値
- 目的は User-Agentとプラットフォームの整合性検証
- User-Agent偽装の検出や信号として活用
-
生成手順:
- APIキー (OSごとに異なる)を取得
- User-Agent文字列 を用意
- 2つを 連結 してバッファを作成
- そのバッファを SHA-1でハッシュ化
- Base64エンコード してヘッダー値とする
-
プラットフォーム別APIキー:
- Windows: AIzaSyA2KlwBX3mkFo30om9LUFYQhpqLoa_BNhE
- Linux: AIzaSyBqJZh-7pA44blAaAkH6490hUFOwX0KCYM
- macOS: AIzaSyDr2UxVnv_U85AbhhY8XSHSIavUW0DC-sY
-
Pythonによる生成例:
header_value = generate_validation_header(ua)- 必要に応じて
api_keyを明示指定
-
リバースエンジニアリングによる実装確認:
- Chromeバイナリ(chrome.dll)をIDAで解析
- APIキーとUser-Agentを バッファに連結
- SHA-1ハッシュ関数に渡す(典型的な初期値からSHA-1と判明)
- 20バイトのダイジェストを Base64エンコード
- 最終的に X-Browser-Validationヘッダー としてリクエストに追加
-
動的デバッグでの検証:
- ハッシュ直前でバッファ内容をダンプ
- 実際に APIキー+User-Agent のみで構成されていることを確認
-
まとめ:
- Base64(SHA-1(API_KEY+User-Agent)) がX-Browser-Validationの正体
- Chrome独自の クライアント検証メカニズム
- 解析・再現が容易なため、 自作生成器の開発も可能
X-Browser-Validationヘッダーの用途と今後の動向
-
主な用途:
- User-Agent偽装や不正クライアントの検出
- Webサービス側での Chrome正規性判定
- セキュリティやトラフィック分析での活用
-
今後の展望:
- Chrome以外のブラウザでも類似メカニズム導入の可能性
- サーバー側での 利用拡大 や検証強化
- APIキーの 定期的な更新 や仕組みの複雑化も予想
-
注意点:
- APIキーは Chromeバイナリにハードコード されているため、簡単に抽出可能
- セキュリティ上の 過信は禁物
- 仕様変更や追加対策に備えた 継続的なリサーチ が必要