アンチボットシステムとは、ウェブサイトの前面に配置され、すべてのリクエストについて、それが自動化によるものか人間によるものかの可能性を推定し、その推定に基づいて通過、低速化、チャレンジ、ブロックなどのアクションを実行するソフトウェアです。 この推定は単一の事実に基づいて行われるわけではありません。これは、リクエストの送信元(IP)、接続の確立方法(TLSおよびHTTPフィンガープリント)、ブラウザが自身について明らかにする情報(JavaScriptフィンガープリント)、そして訪問者が時間をかけて行う行動(ビヘイビア)という4つのレイヤーから組み立てられたスコアです。レイヤーを理解することで、プロキシユーザーが最も混乱する2つの点が説明できます。それは、「完璧な」住宅用IPがなぜチャレンジを受けるのか、そして同じ設定が一方のサイトでは機能し、他方では機能しないのはなぜか、ということです。

ベンダーと製品

保護されたサイトのほとんどは、Cloudflare Bot Management(およびそのTurnstileチャレンジ)、DataDome、Akamai Bot Manager、HUMAN(旧PerimeterX)、Imperva(Incapsula)、Kasada、AWS WAF Bot Controlなどの製品のいずれかを使用しています。これらは重点の置き方やデフォルトの攻撃性が異なりますが、同じ4つのレイヤーに基づいて構築されており、この記事の主題はそのレイヤーです。以下の内容は、すべての製品に何らかの形で当てはまります。

レイヤー1:IPレピュテーション

最初で最も安価なチェックです。リクエストが解析される前に、IPがルックアップされます:

  • ASNとタイプ — これはホスティング会社(データセンター)、消費者ISP(住宅用)、またはモバイルキャリアですか?ホスティングASNはほとんどのサイトでペナルティから始まります。その理由は住宅用プロキシとデータセンター、モバイルの比較で説明されています。
  • 脅威インテリジェンス — IPが悪用リストに載っているか、VPN/プロキシの出口として知られているか、同じベンダーの他の顧客を攻撃しているのが見られたか。ベンダーは顧客ベース全体からシグナルをプールするため、あるDataDome保護サイトで燃やされたIPは、他のすべてのサイトでも疑わしいものになります。
  • 速度 — このIPが最近このサイトにどれだけのリクエストを送り、どれだけの異なるパスにアクセスしたか。IPごとのカウンターは最も古いボットシグナルであり、今でも最も効果的なものの1つです。
  • 地理 — 国はサイトのオーディエンスと一致していますか?ブラウザが後で報告する言語やタイムゾーンと一致していますか?

これはプロキシが直接制御する唯一のレイヤーです。ターゲット上で履歴のない住宅用またはモバイルIPはこれを通過します。しかし、レイヤー1を通過することは、リクエストが中立のスコアでレイヤー2〜4に進むことを意味するだけで、良いスコアを得ることを意味しません。

レイヤー2:ネットワークフィンガープリント(TLS、HTTP/2、TCP)

ページコンテンツが提供される前に、サーバーは接続がどのように開かれたかをすでに確認しており、その開き方はクライアントソフトウェアを識別します:

  • TLSフィンガープリント(JA3/JA4)— ClientHelloはTLSライブラリを明らかにします:Chrome、Firefox、PythonのOpenSSL、Go。詳細はTLSフィンガープリンティングで説明されています。
  • HTTP/2フィンガープリント — SETTINGSフレームの値、初期ウィンドウサイズ、優先度フレーム、およびヘッダーと疑似ヘッダーの順序。ブラウザは特徴的で安定したパターンを持ち、HTTPライブラリは異なるパターンを持ちます。Akamaiの研究でこの技術は有名になりました。
  • TCP/IPフィンガープリント — ウィンドウサイズ、TTL、オプション。オペレーティングシステムを区別し、「Windows」のUser-AgentとLinuxのTCPスタックの不一致は問題です。

ここでのスコアリングロジックは一貫性です:ネットワークレベルのアイデンティティはHTTPヘッダーが主張するものと一致していますか?プロキシはこれらのフィンガープリントには触れません — それらを転送するだけです — したがって、住宅用IPの背後にあるスクリプトは、IPの品質に関係なく、このレイヤーでスクリプトとして識別されます。ここで「なぜクリーンなプロキシがブロックされるのか」という質問のほとんどが答えられます。

レイヤー3:ブラウザフィンガープリントとJavaScriptチャレンジ

リクエストがHTMLの提供に達した場合、ベンダーのJavaScriptが訪問者のブラウザで実行され、結果を報告します。ここでは2種類のことが起こります。

フィンガープリンティング

スクリプトは、アンチディテクトブラウザが制御するように作られたのと同じプロパティを収集します:canvasとWebGLハッシュ、フォント、画面とウィンドウの寸法、ハードウェア並列性、タイムゾーン、言語、オーディオコンテキスト、WebRTCで見えるIP、プラグインリスト、その他数十の小さなシグナル。また、自動化の痕跡もプローブします:navigator.webdriverがtrueに設定されている、Chrome固有のオブジェクトが欠落または不整合、ヘッドレスモードのレンダリングの癖、特定のAPIが異常に多くオーバーライドされている(ステルスプラグインがブラウザをパッチしている兆候)。そして、一貫性をチェックします:JavaScriptが報告するプラットフォームはTCPフィンガープリントのOSと一致していますか?タイムゾーンはIPの国と一致していますか?アンチディテクトブラウザが制御するものを参照してください。

チャレンジ

ベンダーはまた、プルーフ・オブ・ワークまたはプルーフ・オブ・ヒューマニティタスクを発行します。CloudflareのTurnstileと「ブラウザを確認しています」というインタースティシャルは、結果をポストバックする必要があるJavaScriptワークロードを実行します。JavaScriptをまったく実行できないクライアント — すべてのプレーンなHTTPライブラリ — は単に失敗し、ページを見ることはありません。可視CAPTCHAは最後の手段であり、スコアが悪いが完全にブロックするほどではない場合に表示されます。チャレンジに合格すると、通常、一定期間有効なクッキーまたはトークンが発行されます。リクエストごとにクッキーをクリアする自動化は、毎回チャレンジに直面することになり、それ自体がシグナルとなります。

レイヤー4:ビヘイビア

セッション中 — およびベンダーがフィンガープリントやIPでリンクできるセッションをまたいで — システムは訪問者が何をするかを監視します:

  • リクエストパターン:1分あたりのページ数、ページが参照する画像やスクリプトが取得されるか(人間のブラウザは取得しますが、素朴なスクレイパーは取得しません)、ナビゲーションがリンクをたどるか、深いURLに直接ジャンプするか、同じパスが毎回同じ順序でヒットするか。
  • タイミング:リクエスト間の均一な間隔は機械的です。人間はバースト的で不規則です。
  • インタラクション:マウスの動き、スクロール、キーイベント — それらの存在、およびその形状(実際のマウスパスは曲線でオーバーシュートします。スクリプト化されたものは直線または完全な円弧です)。
  • セッションの形状:ログイン直後に一括アクション、閲覧なしのチェックアウト、昨日5つのアカウントを作成したフィンガープリントからのアカウント作成。

ビヘイビアは、技術的に完璧な設定 — 実際のブラウザ、一致するプロキシ、クリーンなフィンガープリント — でも、機械のように動作すれば捕まる可能性がある理由です。また、蓄積されたレピュテーションが存在するレイヤーでもあります:数週間正常に動作してきたアイデンティティは、新しいものには与えられない許容度を得ます。これが実際の「ウォームアップ」の意味です。

レイヤーの組み合わせ:スコア

各レイヤーは証拠を提供し、製品はそれをボットスコアに組み合わせます(Cloudflareは1〜99で公開していますが、他は内部に保持しています)。サイト所有者はしきい値を設定します:X以上は許可、XとYの間はチャレンジ、Y以下はブロックまたはデコイを提供。この設計の2つの特性は、プロキシを使用する人にとって重要です:

  1. レイヤーは一致しなければなりません。 スコアは独立した良いマークの合計ではありません。矛盾は重く重み付けされます。住宅用IP(良い)とPythonのTLSフィンガープリント(悪い)とChromeのUser-Agent(矛盾)は、データセンターIPと正直なpython-requests UAの組み合わせよりも悪いスコアになります。なぜなら、後者は少なくとも一貫しているからです。
  2. 何も単独でチェックされません。 IPレピュテーションを通過することは、次のチェックへの入場を買うだけで、合格を買うわけではありません。IP、ハンドシェイク、ヘッダー、JavaScript、ビヘイビアによって行うすべての主張は、他のすべての主張と相互に検証されます。

プロキシ選択への影響

レイヤー決定要因プロキシで修正可能か?
1. IPレピュテーションIPタイプ、履歴、速度、地理はい — これがプロキシの役割です
2. ネットワークフィンガープリントHTTPクライアント/ブラウザいいえ — そのまま転送されます
3. ブラウザフィンガープリント/JSチャレンジブラウザとその設定いいえ — ただし、地理/タイムゾーンはプロキシと一致する必要があります
4. ビヘイビア自動化ロジックとペーシングいいえ — ただし、ローテーションはIPごとの速度に影響します

つまり、ターゲットのレイヤー1ポリシーが要求するプロキシタイプを選択し(許容される場合はデータセンター、そうでない場合は住宅用またはモバイル)、その後、プロキシが触れないレイヤー2〜4に労力を費やします。実際には、保護されたターゲットには実際のブラウザまたは偽装ブラウザを使用し、アイデンティティごとのフィンガープリントの一貫性、IPに一致する地理/タイムゾーン、人間らしいペーシングを確保します。ローテーション戦略は、レイヤー1の速度とレイヤー4のセッション形状の両方に同時に影響します — ローテーション間隔の選択を参照してください。

どのレイヤーがブロックしているかを判断する方法

  • 同じIPの実際のブラウザからでも、HTMLなしで即座にブロックされる → レイヤー1:IPまたはASNが問題です。プロキシタイプまたはプロバイダーを変更してください。
  • ブラウザは通過するが、同じIPのスクリプトは通過しない → レイヤー2:TLS/HTTPフィンガープリント。実際のブラウザまたは偽装クライアントに移行してください。
  • 解決しないインタースティシャル、または訪問ごとにCAPTCHA → レイヤー3:JavaScriptチャレンジの失敗またはフィンガープリントの不一致。自動化フラグ、WebRTC、タイムゾーンとIPの一致を確認してください。
  • しばらくは機能するが、その後劣化する、またはアクション後にアカウントが死ぬ → レイヤー4:ビヘイビアまたは速度。速度を落とし、パターンを変え、アイデンティティをウォームアップしてください。

ベンダーは特徴的な応答を返します(Cloudflareの403ページ、DataDomeのx-datadomeヘッダーとCAPTCHAエンドポイント、Akamaiの_abckクッキー)。したがって、サイトがどの製品を使用しているかを特定することは、通常、ヘッダーとクッキーを確認するだけで済みます — そして、どの製品かを知ることで、どのレイヤーを重視しているかがわかります。

よくある質問

ボットスコアとは何ですか?

IPレピュテーション、ネットワークおよびブラウザフィンガープリント、行動シグナルを組み合わせて、リクエストが自動化されている可能性を推定したものです。サイト所有者はこれにしきい値を設定して、許可、チャレンジ、ブロックを行います。

住宅用プロキシでもCAPTCHAが表示されるのはなぜですか?

IPレピュテーションは4つのレイヤーのうちの1つにすぎないからです。TLS/HTTPフィンガープリントが「スクリプト」を示す場合、ブラウザが失敗するかJavaScriptチャレンジを欠いているか、ビヘイビアが機械的である場合、IPに関係なくスコアは低くなります。

アンチボットシステムはウェブサイト間でデータを共有しますか?

ベンダー内では、はい:ある顧客のサイトでフラグが立てられたIPまたはフィンガープリントは、他の顧客のサイトでのリスクを高めます。そのため、あるCloudflare保護ターゲットに対して多用されたプロキシプールは、無関係なCloudflare保護ターゲットではうまく機能しない可能性があります。

プレーンなHTTPライブラリはJavaScriptチャレンジを通過できますか?

いいえ。チャレンジはブラウザのような環境でJavaScriptを実行する必要があります。選択肢は、実際の自動ブラウザを使用するか、チャレンジを代行して結果のクッキー/トークンを返すソルバーサービスを使用することです — これにはコストと検出リスクがあります。

チャレンジとCAPTCHAの違いは何ですか?

チャレンジは多くの場合、目に見えません — ブラウザが自動的に完了するJavaScriptワークロードまたはアテステーションです。CAPTCHAは人間のための可視パズルであり、スコアが悪くて明示的な証明が必要な場合に表示されます。

完全に検出されないことは可能ですか?

保証としては不可能です。検出は確率的であり、ベンダーは常に更新しています。達成可能なのは、4つのレイヤーすべての一貫性と人間らしいビヘイビアであり、これによりスコアがほとんどの場合「許可」範囲に保たれます。プロキシだけで検出されないことを約束する人は、レイヤー1だけを売っているのです。