🦁

Bot 対策の基礎技術 : JA3 / 4 Fingerprinting

2024/08/12に公開

Cloudflareは誰でも使えるBot対策を一つの特徴としています。それこそクレジットカード不要でCDN/WAFとセットでBot対策を導入可能です。
これはインターネット上の基本セキュリティは基本的人権と同様にすべての人が必要(ただし不正コンテンツ等犯罪や違法な利用は除く)というCloudflareの基本的思想に基づいています。

  • Bot Fight Mode
  • Super Bot Fight Mode
  • Bot Management for Enterprise
  • Turnstile
  • AIndependence

Bot Fight Mode

ドメイン上のボット トラフィックを検出して軽減するのに役立つよう設計されています。無料を含むすべてのプランで利用可能で、既知のボットのトラフィックマッチングパターンを識別します。
これらのボットに応答して計算コストの高いチャレンジ(人手による操作を要求するパターン)を発行することが可能です、

Super Bot Fight Mode

Proプラン以上で利用可能です。Bot Fight Modeに加えて、静的リソースの保護や分析ダッシュボードが提供されます。
例えばサーバサイドのスクリプトは実行させないが、以下の静的コンテンツへのアクセスは許可する等の制御が可能です。クローラーなどが一番必要とするhtmlはスコアリングによりBotと判断された場合、静的リソースとしてデフォルトで保護されます。

|css|jar|js|jpg|jpeg|gif|ico|png|bmp|pict|csv|doc|docx|xls|xlsx|pdf|ps|pls|ppt|txt|ico|pptx|tif|tiff|ttf|otf|woff|woff2|webp|svg|svgz|eot|eps|ejs|swf|torrent|midi|mid|

特定のウェブサイトのみ、Botの通信を受け付ける等の制御も可能です。

Bot Management for Enterprise

Super Bot Fight Modeに加えて、特定スコア閾値を超えた場合Workersを起動してカスタムアクションを作成したり、フル機能のダッシュボートが利用可能です。



Turnstile


Cloudflareのロゴが掲載されたウィジェットが画面に表示されるモードの場合、回数に関係なく無償でご利用いただけます。バックグランド処理にしたり、Cloudflareロゴを消す場合は有償です。
https://zenn.dev/kameoncloud/articles/cdf8f67bd8ce6f

AIndependence

昨今LLMが学習を行うデータを取得するために、多くのウェブサイトをクローリングしていることがわかっています。Cloudflareの調査によると、以下の通りとなっており


著名LLM用データ収集ボットはすでに検索エンジンボットを上回っています。またrobot.txtをすり抜けるボットが多く存在していることも観測されています。
AIdependeceの機能をオンにすると、これらボットからのアクセスを軽減可能です。この機能は無料を含むすべてのプランで活用可能です。

JA3 / 4 Fingerprinting

セキュリティサービスの性質上すべてのアルゴリズムは公開されていませんが、用いられている技術の中核の一つとなるのが、JA3 / 4 Fingerprinting です。
またEntepriseプラン以上であれば、アクセスしてきたクライアントのJA3 / 4 Fingerprintingの値をWAFと連携してカスタムアクションの作成が可能となります。

JA3 Fingerprinting

2017年にSalesForceによって開発された手法です。
クライアントブラウザがウェブサーバなどとTLS通信を行う際、お互いに利用可能な暗号アルゴリズム、鍵長など(これを纏めて暗号化スイートと言います)を交換し合い優先順位の高いもの(ほとんどのケース一番暗号強度が高く軽量とされるもの)がもちいられます。

この図のClient Helloの時点でブラウザは自身が利用可能な暗号アルゴリズム、鍵長、利用可能なTLSのバージョン、暗号通信鍵用の乱数等の情報をウェブサーバに投げます。
https://www.howsmyssl.com/ にアクセスしてみて下さい。

がクライアントブラウザがサポートしている暗号化スイートの一覧です。通常のユーザーはこの値を変更しません。この記事の執筆に用いているChrome127ではその確認方法や変更方法が見つかりませんでした。
このためこの値をみれば高い確率でどのブラウザのどのバージョンがアクセスしてきたか?がわかります。ただしそのままでは文字列が長すぎるためMD5ハッシュ計算を行い128ビット文字列で計算を行っています。言い換えればCloudflare側では、どのMD5ハッシュ値がどのバージョンのブラウザから生成されるかの一覧を持っているということになります。ハッシュ値の取得および比較は高速な処理が可能なことで知られています。

JA4 Fingerprinting

JA3がさらに改良されたバージョンです。JA4ではコンピュート能力の向上を受けハッシュだけに頼らず比較を行うため可読性が向上しています。またJA3がTLSのみだったものに対してJA4は多くのレイヤーにその技術が横展開されています。これらを総評してJA4+と呼ばれます。

名称 コードネーム 説明
JA4 JA4 TLS クライアント フィンガープリンティング
JA4サーバー JA4S TLS サーバー応答 / セッション フィンガープリンティング
JA4HTTP JA4H HTTP クライアント フィンガープリンティング
JA4レイテンシー JA4L クライアントからサーバーまでのレイテンシ測定 / 光距離
JA4レイテンシーサーバー JA4LS サーバーからクライアントへのレイテンシ測定 / 光距離
JA4X509 JA4X X509 TLS 証明書フィンガープリント
JA4SSH JA4SSH SSH トラフィック フィンガープリンティング
JA4TCP JA4T TCP クライアント フィンガープリンティング
JA4TCPサーバー JA4TS TCP サーバー応答フィンガープリンティング
JA4TCPスキャン JA4TScan アクティブ TCP 指紋スキャナ

JA4 Fingerprint は以下のように値をとります。

t13d191000_9dc949149365_e7c285222651

このサンプルから読み取れる情報はいかです。
t13 : TCPのTLS1.3を用いた通信
d : SNI TLS用証明書を用いた通信
19 : サポートしている暗号化スイートの数
10 : TLS接続における拡張機能のサポート数(SNIとかApplication-Layer Protocol Negotiation 等)
00 : ALPNが用いられたかを判別するフラグ
また9dc949149365e7c285222651はそれぞれJA3と似ていて、暗号スイート一覧のハッシュ値の先頭部分、拡張機能一覧のハッシュ値の先頭部分となります。

Application-Layer Protocol Negotiation(ALPN) とは

詳細はこの記事では割愛しますが、ブラウザが指定したHTTP通信のバージョンなどを示す情報が格納されます。先日別の記事でまとめたHTTPレコードの情報もそれにあたります。
https://zenn.dev/kameoncloud/articles/194fb014562ef7

"h2" = HTTP/2, "h1" = HTTP/1.1, "dt" = DNS-over-TLS 

例えばIoTのデバイスでもh2のみをサポートしているケースが多く、この場合h2と指定する必要はなくALPN情報は空欄で00になります。つまり高い確率でブラウザではない、と判別できます。

このような情報の組み合わせによりJA3より多くの情報を入手することが可能となり、クライアントがブラウザかどうかを判別しています。

運用上の留意点

JA3 / 4 Fingerprinting は非常に強力な防御を提供しますが以下の理由で完璧ではありません。他の手法と組み合わせて使うことが必要です。

  1. オープンなアルゴリズム
    JA3 / 4 の計算アルゴリズムは公開されています。このため特定のブラウザバージョンと同じ暗号化スイートや拡張機能をサポートした場合、同じ値の生成が可能と言われています。

  2. プライバシーに配慮したアルゴリズム
    このアルゴリズムはプライバシーに配慮するため個別の個体識別を行いません。このため、IPアドレスが計算に組み込まれていない点を知っておく必要があります。つまり、同じ環境の別ユーザーは同じ計算結果となります。このため、個体識別を行うためにはクッキーなどの技術が必要になります。

Discussion