
Googleの音声reCaptchaシステムを85%の精度で破る。 
unCaptchaは概念実証を目的としています。私たちの論文の時点では、reCaptchaの音声チャレンジを85%の成功率で解決できることが確認されました。しかし、その後、reCaptchaにはunCaptchaの成功率を制限する追加の保護機能が含まれているようです。 このコードをreCaptchaに対する効果的な攻撃として維持するつもりはありません。
例えば、Googleはブラウザ自動化の検出も改善しました。そのため、現在の状態ではSeleniumを使ってGoogleからキャプチャを取得することはできません。これにより、Googleが不自然な音声セグメントをエンドユーザーに送信する可能性があります。また、一部の音声チャレンジには数字だけでなく、短い読み上げテキストの断片が含まれていることも観察されています。
この分野で研究を行う際には、地域、州、連邦の法律に注意し、潜在的な脆弱性を責任を持って直ちにGoogleに開示することをお勧めします。
また、必要なすべてのクエリからAPIキーを削除しました。この作業を再現したり、この分野で独自の研究を行いたい場合は、使用された6つのサービスそれぞれからAPIキーを取得する必要があります。これらのキーは、ファイル内で長い 'X' の文字列で区切られています。
インターネット全体で、何十万ものサイトがボット対策としてGoogleのreCaptchaシステムに依存しています(実際、Devpostでは新しいアカウント作成時にreCaptchaを使用しています)。2012年にGoogleの研究チームがテキストreCaptchaのほぼ完全な無効化を実証した後、reCaptchaシステムは音声と画像のチャレンジに進化しました。これらは自動化システムにとって歴史的により難しい課題です。Googleは設計を継続的に改良し、つい今年もより新しく強力なバージョンをリリースしました。このキャプチャシステムの無効化を成功裏に示すことは、何十万もの人気サイトにとって重大な脆弱性を意味します。
unCaptchaは音声キャプチャに対する攻撃機能を備えています。ブラウザ自動化ソフトウェアを使用して、対象のWebサイトと対話し、キャプチャに関与し、攻撃を開始するために必要な要素を解析します。主に音声キャプチャ攻撃に依存しています。読み上げられた数字を適切に識別することで、プログラムによってreCaptchaを通過させ、私たちのボットを人間だとサイトに誤認させます。具体的には、unCaptchaは人気サイトRedditを標的にし、新しいユーザーを作成する手順を実行しますが、Redditへの影響を軽減するためにユーザー作成の直前で停止します。
GoogleのreCaptchaシステムは高度なリスク分析システムを使用して、特定のユーザーが人間かボットである可能性をプログラム的に判断します。Cookie(およびそれによる他のGoogleサービスとのやり取り)、チャレンジが解決される速度、マウスの動き、そして(当然ながら)与えられたタスクの解決成功率を考慮します。システムがますます疑わしくなるにつれて、より難しいチャレンジを提示し、ユーザーにより多くのチャレンジを解決するよう要求します。研究者はすでにreCaptchaシステムの小さな弱点を特定しています。Googleのサービスとの9日間の正当な(に近い)やり取りは、通常、システムの疑惑レベルを大幅に低下させるのに十分です。
音声キャプチャの形式は、可変長の一連の数字が、背景ノイズの中で様々な速度、ピッチ、アクセントで読み上げられたものです。このキャプチャを攻撃するために、ページ上の音声ペイロードを特定し、ダウンロードし、音声の位置で自動的に分割します。
そこから、各数字の音声ビットを6つの異なる無料のオンライン音声文字起こしサービス(IBM、Google Cloud、Google Speech Recognition、Sphinx、Wit-AI、Bing Speech Recognition)にアップロードし、これらの結果を収集します。それぞれの結果をアンサンブルし、所定のヒューリスティックに基づいて最も可能性の高い数字列を確率的に列挙します。これらの数字はキャプチャに有機的にタイプされ、キャプチャが完了します。テストの結果、個々の数字の識別精度は92%以上、音声キャプチャ全体の突破精度は85%以上であることが確認されています。
まず、Pythonの依存関係をインストールします。
$ pip install -r requirements.txt
sox、ffmpeg、seleniumもインストールされていることを確認してください。
$ apt-get install sox ffmpeg selenium
次に、PoCを開始するには:
$ python main.py --audio --reddit
これによりreddit.comが開き、ページと対話してアカウント登録ページに移動し、偽のユーザー名、メールアドレス、パスワードを生成し、音声キャプチャを攻撃します。キャプチャが完了すると(成功したかどうかに関わらず)、ブラウザが終了します。
詳細については、こちらにある私たちの論文をお読みください。また、こちらのウェブサイトをご覧いただくか、元のをご確認ください。