CAPTCHA なしのボット検知:実際に効くもの
チャレンジがなぜ防御でなくなったのか、代わりに何のシグナルが立ったのか、そして誠実なインビジブル検知の構成は実務でどう見えるのか。
チャレンジは、使われなくなる前に効かなくなっていた
CAPTCHA は、解くことが機械にとって高価で人間にとって安価だと前提するテストです。この前提は、両方の半分とも崩れました。
いまや機械にとって解くのは安価です。商用の解答代行サービスは API 経由でチャレンジを受け取ってトークンを返し、千件単位で値付けされています。あなたのサイトを狙う事業者は、その項目をとうに予算に入れています。画像グリッドの大半は、人手をまったく借りずに機械視覚が処理します。
そして人間にとって解くのはもう安価ではありません。グリッドが難しくなったのは、まさに機械が強くなったからで、その費用は攻撃者ではなくあなたの顧客に着地しました。決済画面では、その費用は放棄された注文として測れます。
つまりチャレンジは、いまや実在の利用者に課される税であり、その気のあるボットは 1 セントの何分の一かで回避します。よそを見るべき理由は、これに尽きます。
代わりに立つもの:テストではなくシグナル
インビジブル検知は、訪問者に何かを証明させるのをやめ、代わりにセッションがすでに語っていることを読みます。シグナルの大半は 3 つの層が担います。
行動。セッションがページとどうやりとりするか——ポインタの動きの形、イベント間のタイミング、フォームの中をフォーカスがどう移るか。自動化は人間とは異なる分布を生み、しかも人間らしく見せようと努力しているところほど、その差は大きくなります。
トランスポート。TLS ハンドシェイクと HTTP/2 設定は、クライアントスタックを言い当てます。JA3 や JA3N のフィンガープリントは、どのライブラリが接続してきたかを教えてくれます。本物の TLS スタックを動かすヘッドレスブラウザでさえ、Windows 上の本物の Chrome が出さない組み合わせを名乗ってしまいます。ヘッダーを書き換えるのではなく、本物のクライアントの暗号スタックを揃えることが要求されるため、user-agent 文字列よりはるかに偽装が困難です。
レピュテーション。このアドレスが以前に何をしたか——あなたのサイトで、そして任意で他社のサイトで。アドレスは、目の前のセッションだけで裁かれるわけではありません。
どの層も単独では足りません。着地してすぐ送信するセッションでは行動シグナルは薄く、トランスポートのフィンガープリントは同じライブラリを使う全員——正当な利用者も含めて——で共有され、レピュテーションはアドレスが初めて現れたときには空です。判定は、それらを組み合わせたところから出てきます。
知っておくべき失敗のしかた
インビジブル検知の誠実な説明には、それがどこで外すのかも含まれます。CAPTCHA の失敗より静かで、だからこそ見落としやすいからです。
- プライバシーを固めた実在の利用者が、自動化のように見えること。VPN 経由で固めたブラウザを使う人は、行動シグナルが薄く、フィンガープリントも珍しいものになります。許可リストはそのために存在し、実際に手入れされている必要があります。
- 共有された出口アドレス。企業 NAT、モバイル回線の CGNAT、VPN の出口は、無関係な何千人もを 1 つのアドレスの後ろに置きます。この種のアドレスのレピュテーションは重み付けを変えねばならず、さもなければ社内の一人がスクレイパーを走らせただけで会社ごと遮断することになります。
- 悪く見える良いボット。決済事業者の webhook 再送、稼働監視、パートナーの連携——どれも自動化されており、どれも必要です。それらは遮断を入れる前に許可リストへ入れるべきもので、誰かが障害を報告してからではありません。
- 初めての登場。真新しいアドレスには履歴がありません。共有ブロックリストはまさにこのためにあり、また、レピュテーションだけでセッション解析をしないシステムが初日に弱い理由でもあります。
- 静かなドリフト。壊れた CAPTCHA は騒がしいものです。しかし、新しいボットのパターンを静かに通し始めた検知器は、静かな一週間と見分けがつきません。ダッシュボードの稼働状況だけでなく、トラフィックに対する遮断率を見てください。
擁護できる構成とは
各ステップが結果をどれだけ左右するか、その順に並べます。
観察モードから始めること。遮断をオフにしたまま、週の一巡り——最も静かな夜と、最も忙しい販促を含めて——が見えるだけの期間、検知を走らせます。探しているのは、あなたがすでに事実だと知っていることと食い違う判定です。
遮断の前に許可リストを埋めること、後ではなく。決済 webhook、監視、パートナー連携、自社のオフィス回線、インデックスしてほしいクローラー。ここは人が飛ばしがちで、そして午前 3 時に気づく段です。
ページ内ではなくゲートウェイで遮断すること。JavaScript で適用される判断は、攻撃者が飛ばせる判断です。遮断は、リクエストが応答される場所に属します。
プラットフォームには fail open、自分のルールには fail closed。判定サービスに到達できないなら、トラフィックは流れるべきです——サイトごと落とす障害は、すり抜けるボット 1 匹より悪い結果です。自分の拒否リストは別扱いで、それは明示的な指示なので、生き残るべきです。
判定を説明可能に保つこと。誰かが遮断に異議を唱えたとき、どのシグナルがそれを生んだのかを見られる必要があります。数字しか返さないシステムは、顧客を前にしたあなたを黙らせます。
Karma の立ち位置
Karma はこの設計を製品にしたものです。非同期のスニペット 1 本、TLS でコレクターへ送られる行動シグナルとトランスポートシグナル、自社専用のテナント別レピュテーション基盤に照らした判定、そして——任意参加なら——他のテナントが見たものから作られた共有ブロックリスト。
遮断はあなたのゲートウェイで起こり、判断はローカルにキャッシュされるので、コレクターの障害がサイトを道連れにすることはありません。許可リストと拒否リストは、常にプラットフォームの判定より優先されます。
無料の Detect プランが、その観察モードです。月 25,000 判定を恒久的に、カード登録も遮断もなしで。上に書いた構成そのものであり、最終的に何を選ぶにせよ、正しい始め方です。