Chrome の TLS ClientHello のランダム順列機能をご紹介
TLS フィンガープリントは、ネットワークを保護するために悪質なトラフィックを特定するのに使用される数ある手法のひとつです。この手法は、ほぼ10年にわたり広く使用されてきました。その間、クライアントとサーバーを特定するために、さまざまな TLS フィンガープリントアルゴリズムが開発されました。これについては、過去のブログ記事</u>をご覧ください。
Chrome は1月20日、最も広く使用されている TLS クライアントのフィンガープリントアルゴリズムのひとつ、JA3</u> のプロファイルに影響するアップデートをリリースしました。このブログ記事では、この変更の内容と、これに関連して Fastly のネットワークで観測されたことについてご紹介します。
TLS フィンガープリントと Chrome のアップデート
TLS クライアントのフィンガープリントを使用して、トラフィックを分類してネットワーク攻撃を特定することができます。TLS クライアントのフィンガープリントアルゴリズムは通常、ClientHello メッセージを確認し、TLS のバージョンや使用可能な暗号化スイート、サポートされている楕円曲線、曲線形式、TLS 拡張のリストなど、クライアントによって提供される特定の属性を取得することで機能します。JA3 は、広く使用されている TLS フィンガープリント標準で、Salesforce の研究者によって開発された後、さまざまな商用およびオープンソースのツールで採用されています。この記事の目的上、最も重要なポイントは、JA3 アルゴリズムでは、生成するフィンガープリントの特徴のひとつとして、クライアントによって送信された TLS 拡張の実行順序の情報が使用されることです。undefinedundefined
しかし、Google Chrome ブラウザに最近実装された機能によって、ClientHello メッセージで送信された一連の TLS 拡張の実行順序がランダム化されるため、Chrome ブラウザから新しい接続が行われる度に異なる JA3 フィンガープリントが生成されています。
この変更は、固定された順序で拡張が実行されることを前提とするのを回避するために実施されました。順序が固定されると、Chrome による TLS の実装に対する将来的な仕様変更が制限され、TLS のエコシステムを強化する取り組みの妨げとなるためです。TLS GREASE という言葉を聞いたことがある方には、分かりやすいと思います。ちなみに、TLS バージョン 1.3 RFC では、特定の順序で拡張が実行される必要がないことが定義されています。 ただし例外として、pre_shared_key が存在する場合は、必ず拡張リストの最後でこれを実行する必要があります。
Chrome によって送信される TLS 拡張情報には、15の階乗という膨大な数の順列パターンが存在するため、この TLS ClientHello 拡張の順列をランダム化する機能を使って行われた各接続は、事実上、一意の JA3 フィンガープリントを持つのと同じです。
この機能は当初、Chrome バージョン 110 でリリースされる予定でしたが、108 と 109 でも実装されているようで、Chromium ソースコードでデフォルトで有効化されています。
この変更による影響の観測
この変更の前、大半のプラットフォームで Chrome の最も新しい一般的な JA3 フィンガープリントは cd08e31494f9531f560d64c695473da9
でした。2023年1月20日以降、このフィンガープリントを使用して Fastly のネットワークに接続する Chrome クライアントの割合 (下のチャートで青線で示されています) が大幅に減少したことが観測されました。ユーザーがブラウザを更新し、この拡張のランダム順列機能が使用されるのに伴い、この傾向が今後も続くことが予想されます。
さらなる機能強化に向けた取り組み
この記事を執筆している時点では、このような変更は Chrome に限られていますが、Firefox も同様の機能を今後、実装することを検討中です。このような TLS の信頼性強化は、JA3 のように順列が重要な TLS フィンガープリント技術の実用性に影響する可能性があり、ランダム化された拡張の順列に対応できるアルゴリズムが新たに開発されるかもしれません。
また、Fastly を含むさまざまな組織がインターネットコミュニティと連携し、プライバシーが保護されたオープンプロトコルを可能にするプライベートアクセストークンのようなテクノロジーを開発しています。このようなテクノロジーはネットワーク防御の面ですぐにメリットが得られるだけでなく、今後、受動的なフィンガープリント手法に代わり、ブラウザの特定に使用されるようになる可能性があります。
Fastly のプラットフォームで JA3 ハッシュを操作したい場合は、VCL や Compute@ のライブラリからアクセスできます。