セキュリティ
CAPTCHAは20年間失敗し続けてきた
CAPTCHAs have failed for 20 years (browserbase.com)
要約
歪んだテキスト、複雑な画像グリッドといったCAPTCHAの各世代は、最終的に機械によって突破されてきました。現在、多くのユーザーが実際のエージェントを使ってワークフローを実行しているため、課題はブラウザの能力をテストすることから、それが誰であるかを確認することへと変化しています。このため、Browserbaseは「Verified」と「Web Bot Auth」を通じてエージェントのアイデンティティを構築しており、最高のCAPTCHA「ソルバー」はCAPTCHAそのものを見ることすらないという状態を目指しています。
全文翻訳
TL;DR: CAPTCHAのあらゆる世代(歪んだテキスト、より難解なテキスト、画像グリッド)は、最終的に機械に打ち破られてきました。今や、誰もがエージェントを使って実際のワークフローを実行しているため、ゲームはブラウザができることのテストから、それが誰であるかの検証へと変化しています。だからこそBrowserbaseは、VerifiedとWeb Bot Authでエージェントのアイデンティティを構築しています。最高のCAPTCHA「ソルバー」は、CAPTCHAを全く見ることがないからです。
CAPTCHAの軍拡競争:歪んだテキストからブラウザのアイデンティティへ
もしあなたが、ぼやけた画像グリッドの中で信号機、バス、横断歩道をすべてクリックしたことがあるなら、インターネットで最も長く続くセキュリティ実験の一つに参加したことになります。これらのクリックはCAPTCHAを解決すること、つまりあなたが人間であるかをテストすることでした。
1990年代後半にウェブサイトが普及するにつれて、それらを悪用するインセンティブも増加しました。スパマーは何千もの偽アカウントを作成し、ボットは検索エンジンをスクレイピングし、スクリプトはフォーラムに広告を氾濫させました。すべての人気サイトは同じ問題に直面しました。人間と機械をどうやって区別するか?
CAPTCHAは、2003年にカーネギーメロン大学のLuis von Ahn、Manuel Blum、Nicholas Hopper、John Langfordによる論文で造られた「Completely Automated Public Turing test to tell Computers and Humans Apart(コンピュータと人間を区別するための完全に自動化された公開チューリングテスト)」のバクロニム(頭字語に意味を持たせたもの)です。
これは逆チューリングテストです。オリジナルのテストは、人間が会話を通して機械を見破ることを求めますが、CAPTCHAはそれを逆転させ、機械が質問し、応答者が人間のように振る舞えばテストに合格します。目標は知能を証明することではありません。自動化のコストを攻撃の価値よりも高くすることです。
20年以上にわたり、すべてのCAPTCHAは最終的に欺かれてきました。そして、各世代は同じサイクルをたどります。
防御側が新しいチャレンジを構築 → しばらく機能する → 攻撃側が解決方法を学ぶ → 防御側が新しいものを構築 → 繰り返し。
それは終わりのない猫と鼠の追いかけっこです。
では、アリーナに飛び込んでみましょう:猫(コンピュータ) vs 鼠(CAPTCHA)。
レベル1:これを読めるか?
最初の答えは驚くほどシンプルでした:コンピュータに読ませる。
初期のCAPTCHAは歪んだテキスト(歪んだ文字、不均一な間隔、ランダムな線、ノイズの多い背景)を表示しました。人間にとっては通常些細なことでした。私たちの脳は、欠けたピクセルや歪みを通してパターンを認識するのが非常に得意です。
しかし、コンピュータはそうではありませんでした。
当時の光学文字認識(OCR)は、きれいな印刷テキストにはうまく機能しましたが、文字が回転、引き伸ばされ、重なり合ったり、隠されたりすると苦戦しました。主な仮定は、知覚が難しい部分であるということでした。コンピュータが文字の始まりと終わりを区別できなければ、その単語を読むことはできません。しばらくの間、それは機能しました。歪んだ単語は自動化されたスクリプトを停止させ、人間をほとんど減速させませんでした。AltaVistaやYahooは初期のシステムを採用し、このアプローチは十分に機能したため、カーネギーメロンの研究者は正式にこの用語を造語しました。
その後、OCRは進化しました。🐈
攻撃者は、CAPTCHA全体を一度に解決する必要はないことに気づきました。ほとんどのテキストCAPTCHAは段階的に生成されていました:テキストをレンダリング、歪みを適用、ノイズを追加、難読化する線を描画、画像を生成。もしCAPTCHAが段階的に作成されるなら、段階的に打ち破ることもできる、と。攻撃者は、背景ノイズを除去し、画像を白黒に閾値処理し、文字を個々の領域に分割し、それらの領域をOCRに供給するコンピュータビジョンパイプラインを構築しました。AI問題に見えたものが、画像処理問題になったのです。
セグメンテーションが信頼できるようになると、認識精度は飛躍的に向上しました。書籍をデジタル化し、道路標識を読むことを可能にしたのと同じ進歩が、コンピュータをCAPTCHAの強力なソルバーに変えました。鼠は動きましたが、猫は適応しました。繰り返しの時です。
レベル2:テキストをより難しくする
防御側は、攻撃者が文字をセグメント化できるなら、セグメンテーションを不可能にすればよいと考えました。CAPTCHAは攻撃的になり(文字の重複、不自然な形状、ノイズの多い背景)、一部は抽象芸術のように見えるほど歪んでいました。
この頃、von Ahnはあることに気づきました。何百万人もの人々が毎日数秒間CAPTCHAを解くことに費やしており、それは膨大な量の視覚認識作業でありながらすぐに消えてしまうものでした。その努力が何かに役立つとしたらどうだろうか?
このアイデアがreCAPTCHAとなりました。
ランダムなテキストの代わりに、OCRでは自信を持って読めない書籍やアーカイブからスキャンされた単語を表示しました。解決された各チャレンジは、印刷された資料のデジタル化に役立ちました。しばらくの間、ウェブサイトは保護され、図書館はデジタル化され、誰もが利益を得ました。その後、機械学習が登場しました。🐈
従来のOCRは、デザイナーが歪みを変えるまで機能する手作りのルール(エッジ検出器、文字テンプレート、セグメンテーションヒューリスティック)に依存していました。機械学習はハードコーディングを不要にしました。コンピュータに文字を認識する方法を教える代わりに、研究者は何百万もの例でモデルを訓練し、パターンを学習させました。ニューラルネットワークは、完璧なセグメンテーションなしで、非常に歪んだ文字を認識しました。なぜなら、従来のOCRを混乱させたノイズでさえ、答えを回復するのに十分なシグナルを持っていたからです。
機械を阻止するために設計されたCAPTCHAは、最終的に人間よりもモデルにとって解決が容易になりました。鼠は賭け金を上げましたが、猫はより速く学習しました。
レベル3:信号機を見つける
2010年代初頭までに、基礎的な仮定(コンピュータは読めない)を擁護することは困難になりました。そこでデザイナーはテキストを捨て、代わりにユーザーにオブジェクトの識別を求めるようになりました。
テキストCAPTCHAが文字認識をテストしたのに対し、画像CAPTCHAは意味理解をテストしました。人間は、自転車を横から、車に半分隠れて、夜に、あるいはフレームの隅に切り取られていても、苦労せずに認識します。コンピュータにとって、これは以前と同じ手作りの問題であり、今度は2次元になりました。従来のビジョンシステムは、エッジ、コーナー、グラディエント、テクスチャを検出し、それらをオブジェクトに組み立てようとしました。
# Traditional computer vision features = combine(detect_edges(image), detect_corners(image), compute_gradients(image)) if matches_bicycle_template(features): return "bicycle"
現実世界はテンプレートに従いません。自転車は何千もの角度から、部分的に隠れて、変化する光の下で現れます。エッジケースは無限です。
その後、ImageNetが登場しました。🐈
2009年のデータセットは、研究者に何千ものカテゴリにわたる何百万ものラベル付き画像を提供し、オブジェクト認識を大規模に tackle するのに十分なものでした。2012年には、AlexNetと呼ばれるディープニューラルネットワークが、ImageNetベンチマークで従来のビジョンシステムを劇的に上回る性能を発揮しました。再び、問題は「コンピュータは自転車を認識できるか?」から「モデルにどれくらいのラベル付きデータを与えることができるか?」へと変化しました。畳み込みニューラルネットワークは、初期の層でエッジやテクスチャのような視覚的特徴を直接学習し、中間層で形状やパーツ、深い層でオブジェクト全体を学習しました。テンプレートは不要でした。
このタイミングはデザイナーにとってかなり不運でした。信号機、バス、横断歩道、店先は一般的なCAPTCHAカテゴリであり、大規模なビジョンデータセットでも最も一般的なカテゴリの一部でした。コンピュータには見えないことを証明するためのチャレンジが、まさにコンピュータがそれらを見えるようになるタイミングで登場したのです。鼠は新しい隠れ場所を見つけましたが、猫は見る方法を学びました。
レベル4:ブラウザがCAPTCHAになる
パターンはもはや無視できませんでした。
あらゆる世代が、人間が持っていてコンピュータが持たない何らかの能力を仮定しました。防御側はそれに基づいてチャレンジを構築しました。攻撃側はそれを自動化しました。繰り返し。
正解があるあらゆるチャレンジは最適化の標的となりました。開発者が人間と同じ能力を再現しようと積極的に構築している中で、人間の知能をテストすることはできません。
そのため、現代のアンチボットシステムは、ブラウザがチャレンジを解決できるかどうかを尋ねるのをやめ、そもそもチャレンジされるべきかどうかを尋ねるようになりました。
それらは確率論的になりました。一つのチャレンジではなく、セッション全体で信号を収集し、それらをリスクスコアに結合します。これらの信号は、ブラウザのフィンガープリント、インストールされているフォント、CanvasとWebGLのレンダリング、TLSフィンガープリント、クッキー履歴、ネットワークレピュテーション、リクエストのタイミング、インタラクションパターンなど多岐にわたります。個々では弱いですが、これらを合わせると詳細な全体像が形成されます。実際のノートパソコン上の実際のChromeブラウザは、データセンターで新しく起動されたブラウザとは異なる振る舞いをします。
これがreCAPTCHA v3とCloudflare Turnstiの哲学です。