TLSフィンガープリンティング は、TLS ClientHello の形状を読み取ります。 サーバーは最初の HTTP リクエストの前にこのメッセージを確認するため、ページの JavaScript を待たずに接続スタックを検査できます。
JA3 と JA4 は、選択された ClientHello フィールドを比較しやすい値に変換します。 暗号スイート、TLS 拡張機能、サポートされているグループ、およびプロトコルの詳細は、ブラウザーとモバイル アプリ、マルウェア サンプル、または基本的な HTTP ライブラリを区別するのに役立ちます。
役に立つのは一貫性です。 クライアントは、ユーザー エージェントで Chrome であると主張する場合があります。 その TLS ハンドシェイクは、その主張の背後にあるブラウザーとバージョンに適合するはずです。 2 つの層が一致しない場合は、リクエストを詳しく検査する必要があります。
この不一致はシグナルの 1 つにすぎません。 TLS フィンガープリントは、個人ではなくクライアント スタックを記述します。 優れたリスク システムでは、IP 履歴、HTTP 動作、および広範な ブラウザー フィンガープリント と比較されます。
TLSフィンガープリンティングとは何ですか?
TLS は、クライアントとサーバー間で送信されるデータを保護します。 暗号化の準備ができる前に、双方が接続設定に同意する必要があります。 クライアントは ClientHello とのネゴシエーションを開始します。
さまざまなソフトウェアが、このメッセージを認識可能な方法で構築します。 Chrome は BoringSSL を使用します。 Firefox は NSS を使用します。 多くのスクリプトは、別のライブラリを通じて OpenSSL に到達します。 サポートされているオプションと拡張パターンが偶然一致することはほとんどありません。
CDN、Web アプリケーション ファイアウォール、またはオリジン サーバーは、選択したフィールドとグループ接続を記録し、同様の結果を得ることができます。 ページを復号化したり、ユーザーを識別したりする必要はありません。 証拠は接続設定にすでに存在します。
TLSフィンガープリンティングはどのように機能しますか?
一般的なチェックは 5 つの手順に従います。
- クライアントは HTTPS 接続を開きます。
- サポートされている接続オプションを使用して ClientHello を送信します。
- サーバーまたは CDN は、そのメッセージから選択されたフィールドを読み取ります。
- フィンガープリンティング手法は、これらのフィールドを正規化して要約します。
- セキュリティ システムは、結果を既知のパターンおよび他の要求信号と比較します。
HTTP ユーザー エージェントを変更しても、基礎となる TLS スタックは再構築されません。 したがって、リクエストは、別のアプリケーションと同様に接続中に 1 つのブラウザー ファミリを要求できます。
これはリクエストを検査する理由であり、見つけ次第ブロックする理由ではありません。 企業ゲートウェイ、セキュリティ ソフトウェア、異常なブラウザ ビルド、および TLS 仲介はすべて、サーバーが監視する内容を変更する可能性があります。
TLS フィンガープリントではどのような情報が使用されますか?
フィンガープリント形式では、さまざまなフィールドと正規化ルールが選択されます。 ほとんどは、ClientHello の同じ部分から取得されます。
| 信号 | 説明されている内容 | 重要な制限 |
|---|---|---|
| TLSバージョン | クライアントが提供するプロトコルのバージョン | 同じバージョンが多くのクライアントで共有されている |
| 暗号スイート | クライアントがサポートする暗号化オプション | リストは個人ではなく能力を説明します |
| TLS 拡張機能 | ClientHello に含まれる追加機能 | 最新のブラウザでは拡張子の順序が変更される可能性があります |
| サポートされているグループ | 楕円曲線と鍵交換グループ | ライブラリの更新により結果が変わる可能性があります |
| 署名アルゴリズム | クライアントが受け入れる署名メソッド | 複数のアプリケーションが同じリストを使用する場合があります |
| ALPN | HTTP/2などのアプリケーションプロトコル | 完全な HTTP 動作については説明しません。 |
| SNIの存在 | サーバー名が含まれるかどうか | コンパクトなフィンガープリントには名前自体が含まれない場合があります |
| フィールドの順序と数 | クライアントがメッセージを構造化する方法 | 一部の形式ではフィールドがソートされ、順序が破棄されます。 |
GREASE 値にも特別な処理が必要です。 ブラウザーは予約値を追加して、サーバーが将来のプロトコル変更を許容できるかどうかをテストします。 JA3 と JA4 はどちらも、通常のフィンガープリント計算ではこれらの値を無視します。
これらのフィールドは実装の選択を説明します。 同じブラウザ ビルドを実行している 2 台のコンピュータは、同じ正規化された結果を生成できます。
JA3 フィンガープリントとは何ですか?
JA3 は、2017 年に Salesforce 研究者によって導入された手法です。 ClientHello から 5 つの順序付けされたグループを受け取ります。
- TLSまたはSSLのバージョン
- 受け入れられる暗号スイート
- TLS 拡張機能
- サポートされている楕円曲線
- 楕円曲線点フォーマット
JA3 は、これらのグループの 10 進値を 1 つの文字列に結合します。 次に、32 文字の MD5 ハッシュを生成します。 ハッシュはコンパクトな検索キーです。 ここでは、パスワードを保護したり、データの整合性を証明したりするために MD5 は使用されていません。
オリジナル JA3 プロジェクト がアーカイブされました。 JA3 は依然として重要です。なぜなら、長年にわたるネットワーク ツールと脅威インテリジェンスがその価値に依存しているからです。
その弱点は延長命令です。 JA3 はこの順序を維持しますが、Chrome は 2023 年に接続全体でその順序を変更し始めました。 1 つのブラウザは、その主な機能を変更せずに、多くの JA3 ハッシュを生成できます。 ネットワーク全体にわたる影響 を迅速に文書化しました。
JA4 フィンガープリントとは何ですか?
JA4 は、FoxIO の新しい TLS クライアント フィンガープリント形式です。 暗号と拡張子の順序を変更することによって発生するノイズを軽減します。
JA4 値には 3 つのセクションがあります。
| セクション | 主な内容 |
|---|---|
a | トランスポート、TLS バージョン、SNI の存在、暗号数、拡張子数、および ALPN |
b | ソートされた暗号コードの短いハッシュ |
c | ソートされた拡張コードと署名アルゴリズムの短いハッシュ |
唯一の違いが暗号または拡張子の順序である場合、ソートにより JA4 が安定します。 また、その命令は証拠として削除されます。 元のシーケンスが必要なセキュリティ チームは、パケットまたは生のハンドシェイク データを保持する必要があります。
JA4 は、より広範な JA4 ネットワーク フィンガープリンティング プロジェクト に属しています。 JA4 はクライアントこんにちはをカバーします。 JA4S はサーバー応答をカバーします。 JA4H は HTTP クライアントの動作をカバーします。 これらは同じ家族内の別の指紋です。
新しい収集パイプラインの場合、多くの場合、JA4 がよりクリーンな開始点となります。 過去の試合や既存の脅威データが重要な場合には、JA3 がその地位を獲得し続けています。 多くのチームは移行期間中に両方を維持します。
JA3 対 JA4
| エリア | JA3 | JA4 |
|---|---|---|
| 入力 | TLS ClientHello | TLS、QUIC、または DTLS クライアント hello |
| 出力 | 1 つの MD5 ハッシュ | 3 つの構造化されたセクション |
| 暗号の順序 | 保存済み | ソート済み |
| 延長命令 | 保存済み | ソート済み |
| グリースの値 | 無視されました | 無視されました |
| ALPN | 拡張機能の存在が貢献します | 短い ALPN 表現が表示されます |
| ベストフィット | 過去の一致と既存の脅威データ | 最新のグループ化と部分比較 |
一致は、選択されたハンドシェイク フィールドが同じ表現を生成したことを意味します。 ID の一致ではなく、クライアントの分類として扱います。
TLSフィンガープリンティングと HTTP および ブラウザのフィンガープリンティングの比較
実際の検出システムは 1 つの指紋に依存しません。 複数の層からの信号を比較し、各層が異なる質問に答えます。
TLS信号
TLS シグナルは、クライアントが暗号化された接続を開始する方法を記述します。 JA3とJA4がここに属します。 サーバーは、ページ コードを実行する前にそれらを検査できます。
HTTPシグナル
HTTP 信号には、ヘッダー名、ヘッダーの順序、プロトコルの選択、および要求の構造が含まれます。 HTTP/2 では、SETTINGS フレーム、ウィンドウ サイズ、疑似ヘッダー順序が追加されます。 これらの詳細は TLS の検出結果を裏付ける可能性がありますが、リクエストの別の段階から取得されます。
ブラウザシグナル
ブラウザ信号はヘッダーとブラウザ API から送信されます。 フォント、画面の詳細、キャンバス出力、WebGL フィンガープリント、および オーディオフィンガープリンティング によって、ページ環境がネットワーク スタックに適合するかどうかがわかります。 これらのチェックのほとんどは、実行するためにページ コードを必要とします。
行動シグナル
動作シグナルは、クライアントが時間の経過とともに何を行うかを表します。 リクエスト レート、ナビゲーション順序、セッション履歴、マウス入力、繰り返されるアクションが ボットの検出 の中心となります。 正しいハンドシェイクによって不審な動作が正当化されることはありません。
有用な決定は、複数の層にわたる合意から得られます。 Chrome ユーザー エージェント、Chrome スタイルの TLS ハンドシェイク、予想される HTTP/2 設定、および動作するブラウザ API が一貫したストーリーを伝えます。 人間の意図は依然としてセッションとその動作から判断する必要があります。
TLS フィンガープリントから何が分かるのでしょうか?
TLS フィンガープリントは、以下を推定するのに役立ちます。
- クライアントがブラウザ、アプリ、ボット、または一般的な HTTP ライブラリに似ているかどうか
- どの TLS 実装またはアプリケーション ファミリが接続を作成した可能性がありますか
- ハンドシェイクが報告されたユーザー エージェントに適合するかどうか
- 接続パターンが以前に出現したかどうか
- トラフィックが脅威データベース内の既知のグループに属しているかどうか
それは次のような主張の根拠としては不十分です。
- ユーザーの名前または身元
- アカウントの所有権
- ユニークな物理デバイス
- あらゆる場合に正確なオペレーティング システム
- リクエストが有害かどうか
- 2 つの一致するリクエストが 1 つの演算子を共有するかどうか
Cloudflareは、ボット管理内でより大きな信号セットの一部としてJA3とJA4を使用します。 その JA3 および JA4 ドキュメント には、暗号化されていないリクエスト、またはセッションの再開で新しいハンドシェイクが回避される場合にフィンガープリントが失われる可能性があることも記載されています。 デフォルトでは、欠落データを疑わしいものとして扱うべきではありません。
TLSフィンガープリンティングはどこで使用されますか?
TLS フィンガープリントは、反復可能なセキュリティ作業で価値を発揮します。
- 脅威ハンティングでは、既知のマルウェア ファミリからの暗号化された接続をグループ化できます。
- ボット管理は、ブラウザーのクレームと接続スタックを比較できます。
- 詐欺システムは、その結果をアカウントまたはトランザクションのリスク モデルに追加する可能性があります。
- API チームは、予想されるクライアントを珍しいライブラリから分離できます。
- Web アプリケーション ファイアウォールは、既知の指紋グループを監視またはレート制限できます。
- 運用チームは古い TLS 実装や予期しない TLS 実装を見つけることができます。
プライバシーへの懸念も同様に現実的です。 TLS データは Cookie やローカル ストレージに依存しません。 より広範なブラウザー フィンガープリントと組み合わせると、複数の訪問にわたる認識をサポートできます。
VPN またはプロキシは TLS フィンガープリントを変更しますか?
VPN は通常、ルートとパブリック IP を変更します。 ブラウザ ClientHello は再構築されません。 宛先では、ブラウザーによって作成されたハンドシェイクが引き続き表示されます。
標準の HTTP CONNECT または SOCKS トンネルは通常、同じように動作します。 TLS を終了せずに接続を伝送するため、クライアントは引き続きターゲットと直接ネゴシエーションを行います。
仲介者が TLS を終了し、新しいアップストリーム接続を作成すると、結果が変わります。 その場合、宛先は仲介者によって生成された ClientHello を参照します。 企業の検査ゲートウェイと一部の管理されたネットワーク サービスは、この方法で動作できます。
プロキシ、VPN、アンチディテクトブラウザ が環境のさまざまな部分に影響を与えるのはこのためです。 宛先は、受信した TLS セッションを確立したソフトウェアのフィンガープリントを確認します。
シークレットモードの効果も限定的です。 ローカル ストレージと閲覧履歴が変更されます。 通常、ブラウザの TLS 実装を置き換えるものではありません。
TLS フィンガープリント テストを読み取る方法
テスト ページは、独自のサーバーが観察した内容をレポートします。 これは比較ツールであり、合格証明書ではありません。
制御された比較を使用します。
- 同じブラウザ プロファイルで同じテストを 2 回実行します。
- ブラウザのバージョン、プロトコル、JA3、および JA4 の値を記録します。
- プロファイルを再起動し、テストを繰り返します。
- ブラウザまたはオペレーティング システムを更新した後、再度テストします。
- VPN、プロキシ、または検査ゲートウェイによって接続パスが変更されたかどうかに注目してください。
結果は、テスト条件がわかっている場合にのみ役立ちます。
| 結果 | おそらく意味 | 証明されないこと |
|---|---|---|
| プロファイル間で同じ JA4 | 正規化された TLS フィールドが一致しました | プロファイルは同じデバイスです |
| 各接続の新しい JA3 | 延長順序は変更される可能性があります | クライアントが完全に変わってしまった |
| JA3 または JA4 がありません | 適切な新しい TLS ハンドシェイクが利用できませんでした | サイトはリクエストを評価できません |
| ユーザーエージェントとTLSファミリーは異なります | 接続にはさらにコンテキストが必要です | リクエストは悪意のあるものです |
テストサイトが異なれば、値の計算や表示方法も異なる場合があります。 他のサービスからのハッシュを比較する前に、1 つのサービスからの繰り返しの結果から始めます。
TLSフィンガープリンティング とブラウザ プロファイル
ブラウザ プロファイルは、ブラウザ環境、Cookie、プロキシ設定、および関連する構成をまとめて保持します。 MoreLogin ユーザーはブラウザ カーネルを選択し、プロファイル設定 でブラウザ API を通じて公開されるシグナルを管理できます。 これらには、Canvas、WebGL、AudioContext、WebRTC、言語、タイムゾーン、メディア デバイスが含まれます。
TLS はブラウザ API 設定の下にあります。 Canvas の出力を変更しても JA3 は変更されません。 ユーザー エージェント テキストを編集しても、ClientHello は再構築されません。
MoreLogin は、現在のプロファイル設定に個別の JA3 または JA4 コントロールを公開していません。 したがって、すべてのプロファイルが一意の TLS ハッシュを受け取ると主張することは、入手可能な製品情報を超えることになります。 ブラウザのバージョン、ランタイム、プロトコル、プロキシ設計、および接続パスはすべて、サーバーが監視する内容に影響します。
承認されたチーム作業のために、マルチアカウント ブラウザ は Cookie、プロキシ割り当て、ブラウザ環境を分離します。 これにより、プロファイル間の偶発的な重複が減少します。 すべてのサードパーティのセキュリティ システムがトラフィックを分類する方法を制御することはできません。
同じ制限が ブラウザの自動化 にも適用されます。 実際のブラウザで実行されるワークフローは、基本的なスクリプト ライブラリとは異なるネットワーク スタックを使用します。 許可、妥当なリクエスト率、信頼性の高いエラー処理が依然として必要です。
TLSフィンガープリンティングに関するよくある質問
TLS フィンガープリントは 1 つのデバイスに固有ですか?
いいえ。 通常、クライアント アプリケーションまたは TLS 実装グループについて説明します。 同じブラウザ ビルドを実行している多くのデバイスが 1 つの結果を共有できます。 アップデートにより、同じデバイス上のフィンガープリントが変更される場合もあります。
Web サイトは私の TLS フィンガープリントを確認できますか?
はい。 接続を受信するサーバーまたは CDN は、ClientHello を検査できます。 テスト ページには、そのサーバーから返された値を表示できます。
ユーザーエージェントを変更するとJA3またはJA4も変更されますか?
それ自体ではありません。 ユーザー エージェントは HTTP 値ですが、JA3 と JA4 は TLS ハンドシェイクから取得されます。 1 つのヘッダーを編集しても、ネットワーク スタックは再構築されません。
2 つのブラウザが同じ JA4 を使用できるのはなぜですか?
JA4 は、選択されたリストを並べ替えて、類似したハンドシェイクをグループ化します。 同じエンジンと TLS 機能を備えたブラウザは結果を共有できます。 これはブラウザがリンクされているという意味ではありません。
Cookie をクリアすると TLS フィンガープリントが変更されますか?
いいえ。 Cookie は保存されたセッション データですが、TLS フィンガープリントは接続セットアップから取得されます。 サイトでは両方を使用できますが、一方をクリアしてももう一方はリセットされません。
Encrypted Client Hello は TLSフィンガープリンティングを停止しますか?
暗号化された Client Hello は、要求されたサーバー名を含むハンドシェイクの機密部分を保護します。 ネットワークは引き続き外側の ClientHello を認識でき、宛先は引き続き完全な接続を処理します。 ECH は、すべての TLS 信号を削除することなくプライバシーを向上させます。
重要なポイント
TLSフィンガープリンティングは、クライアントが暗号化された接続を開始する方法を示します。 JA3 は依然として履歴マッチングにとって価値があります。 通常、最新のブラウザでリストの順序が変更された場合、JA4 の方が扱いやすくなります。
フィンガープリントは、HTTP、ブラウザ、ネットワーク、セッション、および動作の信号と一致する場合に意味を持ちます。 1 つのハッシュがリスクの決定に役立ちます。 単独でその決定を下すべきではありません。

JP
