CAPTCHAの主要な問題を解決する



提案されたキャプチャを初めて入力できないという事実にどのくらいの頻度で直面しますか? では、「あなたの」コンピューターと話す現代人がどんな困難を抱えているのか考えてみてください。 彼にとって、reCAPTCHAの形の障壁はロボットよりも強くなります。



しかし、人がキャプチャを認識することの難しさは、一見すると思われるかもしれませんが、最も深刻な問題ではありません。 もちろん、キャプチャがさまざまな自動認識システムから私たちを本当に保護していれば、私たちはこれに目を閉じることができます。 しかし、これは事実とはほど遠いです!



そして、これらの問題を解決するツールについてお話したいと思います。






CAPTCHAに適切な保護を作成するには、まず認識のためにメソッドを分類する必要があります。



自動キャプチャ認識



現在、キャプチャの自動認識には主に3つの方法があります。





1.保護アルゴリズムでエラーを使用する



このアプローチは、キャ​​プチャ自体を認識せずにフォームを正しく送信できる論理エラー(脆弱性)を見つけることを目的としています。

これは保護をバイパスする最も簡単な方法ですが、主に単純な自家製のソリューションにのみ適用できます。

最もよくある間違いは、クリアテキスト、base64、またはソルトなしのmd5ハッシュのフォームまたはCookieフィールドを介してキャプチャ検証コードを転送することです。

CAPTCHAアルファベット(ロシア語の5桁の文字のみまたは6桁の数字のみなど)に従って虹表を生成し、比較する必要がある場合でも、攻撃者が取得することは難しくありません。

同じキャプチャを複数回解決できる場合もエラーと見なされます。 これは主に、生成されたキャプチャIDが5〜10分間有効であるが、チェック回数に制限がない場合に適用されます。 それにより、解答を既に知っている攻撃者に、解かれたキャプチャの識別子を再利用する機会を与えます。 同じキャプチャ識別子でブルートフォースを使用できます。これにより、最終的には目的の結果が得られます。





2.自動認識



キャプチャを自動的に正常にキャプチャするには、主に3つの方法があります。





I.オフラインの光学認識(OCR)を使用する


これは、特別なプログラミングスキルを必要としない最も簡単なアプローチです。 そのようなプログラムは主に無料で配布されており、その多くはocropuscuneiformtesseractgocrorcadなどです。

攻撃者はキャプチャ画像をそのようなプログラムに転送するだけでよく、そこで出力で既に認識されているテキストを受け取ります。 通常、このようなソフトウェア製品には、認識をより効率的にするための多くの微調整オプションがあります。

このように認識を防ぐために、さまざまな歪み、ねじれ、ゴミの追加などが使用されます。

この場合、認識率は非常に小さい可能性がありますが(約10%のみ)、攻撃者は依然として成功します。





II。 GD、ImageMagick、およびその他のライブラリを使用した自己記述スクリプト


このようなスクリプトを使用すると、ごみの画像をクリアしたり、背景を削除したり、テキストを垂直に揃えたり、画像をトリミングしたり、テキストのみを残したり、マルチカラーを削除したり、色の平均化を行ったりできます。 実際には、このようなスクリプトを完全に認識することは非常に困難です。

このようなスクリプトは、画像の予備的なクリーニングにのみ使用し、解析プロセスを他の方法に任せる方がはるかに効率的です。





III。 ニューラルネットワーク


現在最大の関心を集めているのはニューラルネットワークです。 多くの人にとって、それはまだ何らかの魔法のように見えます。

攻撃者は、キャプチャを自動的に認識するためにニューラルネットワークを使用し始めました。

彼らは、最も複雑なreCAPTCHでさえ、高い確率で認識できるニューラルネットワークを訓練します。

さまざまなプログラミング言語用のさまざまなライブラリが無料で配布されています。 そのようなライブラリの1つであるFast Artificial Neural Networkは 、以前はHarker誌で取り上げられていました。





3.安価な人的資源を使用した半自動認識



antigate.com、rucaptcha.com、captchabot.comなど、顧客に有益なサービスを提供する多くのサイトがあります。 彼らは、クライアントから自動モードでキャプチャ付きの写真を受け取り、数秒(10〜30秒)後に正しい答えを出します。 この場合、成功した認識の割合は非常に高く、約90〜95%です。

準備ができていない訪問者にとって、この割合ははるかに低いことに注意する価値があります。



このようなサービスのコストは、正しく認識された1000キャプチャに対して約1〜3ドルです。

GMailに1000個のアカウントを登録すると、30ルーブルしかかかりません。

あなたはおそらく、そのようなばかげたお金のために誰が手動で認識に従事するのか尋ねますか? これらは、インド、中国、ベトナム、パキスタン、カンボジアなど、世界の最貧国の市民です。



もちろん、captchaの作成者が最初に思い浮かぶのは、ロシア語のアルファベットを導入し、英語を完全に除外することです。

番号を削除するものもあります。 しかし、ご存知のように、これらの半分の対策では適切な保護を提供することができず、近い将来、サービス所有者はそのようなキャプチャからのトラフィックをロシア語を読める人にのみリダイレクトします。

他の人は、キャプチャ自体を複雑にし、ロボットがそれらを認識していると考えて、さまざまなフィルター、歪み、ゴミなどを課そうとします。

したがって、これらのサービスやあらゆる種類のスクリプトに関係する人々だけでなく、トレーニングが何倍も低い一般ユーザーの読み取りと認識を複雑にします。 これはすべて現代医学に似てきており、病気の原因と戦うのではなく、症状のみと戦うため、患者だけが苦しんでいます。



このようなサービスの主な消費者は主に大規模なSEO企業であり、キーワードの検索に関する統計、検索結果の位置、検索結果自体などに関する情報を自動的に受信するさまざまな種類の情報アグリゲーターです。 ソーシャルネットワークでメッセージを送信したり、メールサービスやフォーラムなどでアカウントを自動的に登録したりするすべての種類のスパマーは、サービスを使用します。



私の意見では、スパム目的のキャプチャ認識の数はマイナスではありますが、それでもこのようなサービスをマーケティングする主な方向ではなく、氷山の一角にすぎません。 氷山そのものですが、それは統合された情報へのアクセスを提供することに他なりません。

以下に例を示します。 わが国では、ロシア連邦の領土にある郵送(追跡)に関する情報は、州のウェブサイトのロシア郵便でのみ入手できます。 1年前、彼らはcaptchaを貨物追跡フォームに追加しました。これにより、関心のあるアイテムに関する情報を自動的に受信することができなくなりました。

次に、 これらのサイトのアイテムの情報がどこから来たのかを考えますが、キャプチャはありませんか?



そのようなサービスに立ち向かうのは簡単ではありません。 これにはいくつかの要因が寄与します。

例外なく、すべてのサービス所有者は、画像を自分でクライアントにダウンロードする責任を移しましたが、最終的に、その後のブロックのために、自分自身または認識自体に関与しているIPアドレスを計算することはできません。

そのようなサービスのクライアントが必要な知識を持っている場合、可能性のあるロックをバイパスするために、プロキシサーバーデータベースに簡単に接続できます。



また、これに効果的に対処できるreCAPTCHAを含む単一のサービスがなかったことにも注目してください。





簡単なユーザー認識



ユーザーにとって最適なソリューションは、画像内のプレーンテキストで、自動認識方法の使用がより複雑であることを確認します。

gifまたはpng画像形式の透明度プロパティが役に立ちます。 画像の複数の部分が互いに重なり合っている場合、ユーザーは歪みのないテキストを見ることができることを確認する必要があります。 絶対にすべてのブラウザーがこの機能をサポートし、IE6もサポートします。

少し複雑になりました。 最初に、元の画像とサイズが似ているいくつかの透明な画像を作成し、ソース画像全体をこれらの事前に準備されたレイヤーにピクセルごとに広げます。 個々のレイヤーを表示するとき、元の画像に正確に表示されているものを正確に言うことはできません。 そのようなソリューションを自動的にアセンブルすることは、同様に簡単です。

複雑化を続けて、元の画像のランダムな場所からランダムなサイズのレイヤーを作成します。

次に、レイヤーに関するすべての情報を個別のcssスタイルファイルに取り出します。このファイルには、元の画像の左上隅に対する各レイヤーの位置が記述されます。 ただし、何らかの方法でレイヤーを識別し、互いに区別する必要があります。 これを行うには、すべての画像にランダムな識別子を割り当て、それらを記述します。



生成されたhtmlページの例:

<html> <head> ... <link rel="stylesheet" href="/captcha/954f836a78de1d510d28ce70fa7b6a4a.css"> ... </head> <body> ... <div> <img id="ppaas-org-666ebb41ddda5d4ed6ca4a305ef26aa3" src="/captcha/5cd345e1be7b576c628f0fea59c771a7.gif" alt=""> <img id="ppaas-org-032a6f45b6215a130227c13d93d9243b" src="/captcha/3bae7faafef0fce7dd606e6076fcb491.gif" alt=""> <img id="ppaas-org-1ab330864b702c47f0cb87f436624f04" src="/captcha/639def2a37662dc524977eb23521470d.gif" alt=""> <img id="ppaas-org-d494ac99950d983bef6a5a396100d69a" src="/captcha/9077a2f8a464dd2b54c929133df5f916.gif" alt=""> <img id="ppaas-org-6316b3bc6d6f366eed48f32f6624b396" src="/captcha/607bcc4f9573d7591bddba72820f4460.gif" alt=""> <img id="ppaas-org-b22da7a9fc15987c5ae825e736591d03" src="/captcha/2e37508352cc31227adfd6ac0dfc5eb0.gif" alt=""> <img id="ppaas-org-048a808a9f2f6a88736c212f83c7a23a" src="/captcha/fbe29561657ab6e6f45969a4f208356d.gif" alt=""> <img id="ppaas-org-9416599dcb5540a858d9ed3eb8aaa6bd" src="/captcha/347c4ce6ff64ba6a6af0374ccea286c8.gif" alt=""> <img id="ppaas-org-d7eb49d155684558196821fdb03c608d" src="/captcha/88d31395d0024972f14125996d335529.gif" alt=""> <img id="ppaas-org-10c40dc3fbf7e1dc6a675cec03261105" src="/captcha/fab44113c2a37510d829114796d0fabb.gif" alt=""> <img id="ppaas-org-69f1bac3c78d00bf529d8aa518c4a7c3" src="/captcha/6cc4c1417c1844892dfdf73491cd99d6.gif" alt=""> <img id="ppaas-org-8041ac42a7f1d9fb21d959dd78fd0512" src="/captcha/3afcef8223bcf0771f5c11c93737534a.gif" alt=""> <img id="ppaas-org-d812b3fd1537b3852e8645979c8ce531" src="/captcha/d47a2fc0fac782964d4f57bae5c8e13f.gif" alt=""> <img id="ppaas-org-7830d62c3f648536431ef1ef8522ff4e" src="/captcha/14bd31e6112391aed8f9b45d3fbadf34.gif" alt=""> <img id="ppaas-org-0bb897e2fde54b338eec83c27f913170" src="/captcha/575834849cb528079840be97d77a31d3.gif" alt=""> <img id="ppaas-org-2d2a15cb75aa8fb806fc4c79c2fb559d" src="/captcha/a2f623a5fdfe46efdb3e5410a7c90b98.gif" alt=""> <img id="ppaas-org-1612c676e0333d9742913572ec60aee7" src="/captcha/aade2c5b4f5cbae1d2df9df3fc7c3dec.gif" alt=""> <img id="ppaas-org-34fa4c5d386ddb7b4cf48ce59b9cdc8d" src="/captcha/ddf335c0c060c87c362fd70f06a705aa.gif" alt=""> <img id="ppaas-org-e9747f4f8219bd8cb22d4592fbdfe677" src="/captcha/7605f696aa21366a9f870dcf26fb3788.gif" alt=""> </div> ... </body> </html>
      
      







cssファイルの例/captcha/954f836a78de1d510d28ce70fa7b6a4a.css:

 #ppaas-org-666ebb41ddda5d4ed6ca4a305ef26aa3 {position: absolute; z-index: 371; margin: 0px 0 0 2px;} #ppaas-org-032a6f45b6215a130227c13d93d9243b {position: absolute; z-index: 138; margin: 1px 0 0 24px;} #ppaas-org-1ab330864b702c47f0cb87f436624f04 {position: absolute; z-index: 321; margin: 0px 0 0 80px;} #ppaas-org-d494ac99950d983bef6a5a396100d69a {position: absolute; z-index: 320; margin: 4px 0 0 3px;} #ppaas-org-6316b3bc6d6f366eed48f32f6624b396 {position: absolute; z-index: 196; margin: 1px 0 0 74px;} #ppaas-org-b22da7a9fc15987c5ae825e736591d03 {position: absolute; z-index: 92; margin: 0px 0 0 49px;} #ppaas-org-048a808a9f2f6a88736c212f83c7a23a {position: absolute; z-index: 501; margin: 6px 0 0 11px;} #ppaas-org-9416599dcb5540a858d9ed3eb8aaa6bd {position: absolute; z-index: 733; margin: 0px 0 0 7px;} #ppaas-org-d7eb49d155684558196821fdb03c608d {position: absolute; z-index: 54; margin: 0px 0 0 0px;} #ppaas-org-10c40dc3fbf7e1dc6a675cec03261105 {position: absolute; z-index: 634; margin: 3px 0 0 13px;} #ppaas-org-69f1bac3c78d00bf529d8aa518c4a7c3 {position: absolute; z-index: 543; margin: 1px 0 0 38px;} #ppaas-org-8041ac42a7f1d9fb21d959dd78fd0512 {position: absolute; z-index: 506; margin: 1px 0 0 44px;} #ppaas-org-d812b3fd1537b3852e8645979c8ce531 {position: absolute; z-index: 67; margin: 0px 0 0 0px;} #ppaas-org-7830d62c3f648536431ef1ef8522ff4e {position: absolute; z-index: 247; margin: 0px 0 0 20px;} #ppaas-org-0bb897e2fde54b338eec83c27f913170 {position: absolute; z-index: 350; margin: 3px 0 0 2px;} #ppaas-org-2d2a15cb75aa8fb806fc4c79c2fb559d {position: absolute; z-index: 149; margin: 3px 0 0 45px;} #ppaas-org-1612c676e0333d9742913572ec60aee7 {position: absolute; z-index: 429; margin: 1px 0 0 33px;} #ppaas-org-34fa4c5d386ddb7b4cf48ce59b9cdc8d {position: absolute; z-index: 404; margin: 1px 0 0 2px;} #ppaas-org-e9747f4f8219bd8cb22d4592fbdfe677 {position: absolute; z-index: 153; margin: 2px 0 0 9px;}
      
      







将来、このプロセスは無限に複雑になる可能性があります-いくつかのレイヤーに余分なピクセルを描画し、後続のレイヤーにペイントするなど



独創的なものはすべて単純であるというのは本当ではありませんか?!













自動認識保護



私の意見では、大きな間違いは、キャプチャ値を誤って繰り返し入力したIPアドレスをブロックすることです。

誰でも必要な回数だけ間違った値を入力できますが、これは何にも影響しません。 CAPTCHAは、このようなフィルタリング用に設計されています。

すでに正しい値でXを指定している人だけがブロックされるべきです。 N分以内にこのユーザーが正しい値を入力しなくなった場合は、ロックを解除します。

つまり、直近N分間にX captchaを正しく入力することで気付いたサイト訪問者のIPアドレスは、自動的に拒否されるはずです。



また、単一の集中型サービスの場合、このアプローチが効果的に機能し始めることにも注意してください。



理想的な解決策は、このような制限が必須ではなく、要件に合わせてこれらのパラメーターを変更することです。

30分ごとに1つのキャプチャを制限したい人もいれば、5時間で5つのキャプチャを望んだ人もいれば、チェックを完全に無効にしたい人もいるでしょう。

この制限を使用する場合、キャプチャの自動認識がどのように発生するかはまったく関係ありません。

それらのいずれも効果的な解決策ではなくなります。



あなたはおそらく尋ねる:膨大な数のプロキシサーバーの使用を妨げるものは何ですか?

すべてのプロキシサーバーは、世界中の同じサイトからの無料アクセスから取得されます。 前回それらを使用する必要があったとき、約20,000台のサーバーが実際に機能しており、3,000台のサーバーが常に機能していました。

独自のプロキシサーバーを見つけて作成するプロセスは、ほとんどの場合困難です。 このリストには、ブルートフォースによってハッキングされたサーバー、ウイルスに感染したサーバーなどが含まれます。 これは、ごく少数の人だけが実際にアクセスできる特定のニッチです。

1人の攻撃者だけが20,000個のIPアドレスのデータベースを独占的に所有している場合、1時間ごとに40,000個のキャプチャを認識すると主張できます。

これは1日あたり960,000個のキャプチャです-すばらしい結果です!



ここで、すべての攻撃者がこの基地を完全または部分的に所有していると想像してください。 その分散使用は、それらすべてに対して永続的なサービス拒否につながります。

例を考えてみましょう。 何らかの方法でキャプチャを正常に認識するために1つのIPアドレスを使用しましたが、今度はブロックされないように約30分待機して、2回目の試行を行います。 しかし、あなたが待っている間、他の誰かがこのアドレスを使用して、関心のある別のリソースのキャプチャを入力しました。

このIPアドレスは数分前に既に使用されていたため、そのような試みは彼を断ります。 時間がなくなるまで待っていたあなたは、もう一度キャプチャを認識しますが、拒否されます。

そして、すべてが円を描くようになり、無限になります。





サービスとしてのプライバシー保護



その瞬間まで、それは単なる理論でした。 しかし、これが実際にどのように機能するかを見ることができます-http://ppaas.org

このサービスでは、メールアドレス、電話番号などのテキスト情報を保護できます。







UPD :投稿を注意深く読んでください、グラフィックデザイン、これは読みやすいように、自動認識に対する主な保護は異なります。



ご清聴ありがとうございました。 一緒にこの世界をより良い場所にします。



All Articles