web-dev-qa-db-ja.com

どのようにそしてなぜ私のサイトは悪用されていますか?

私は人気のあるWebサイトを所有しています。このWebサイトでは、電話番号を入力して、その電話番号に関する情報(電話会社の名前など)を取得できます。これは無料のサービスですが、クエリごとに費用がかかるため、サイトに広告を表示して支払いを行います。人々がそれを悪用しないようにするために、私たちはキャプチャを用意しており、IPアドレスを使用してクエリの数を1か月あたり30に制限しています。

とにかく私たちは虐待を見てきました。すべての異なるIPアドレスから膨大な数のクエリが突然取得され、クエリが実行され(毎分数百)、キャプチャが正しくなります。したがって、私はキャプチャを変更し続けます-私は単語、数学の方程式、reCAPTCHAなどを使って試してみました。これを行うと、「攻撃」が24時間ほど停止し、その後再び始まります。

私は人々がキャプチャを回避するためにOCRや他の方法を使用できることを理解していますが、それらが多くの異なる無関係なIPアドレスから来ている理由を理解していません。

多分彼らはIPアドレスを偽装していますか?もしそうなら、彼らはクエリから結果を得ることができませんよね?この場合、おそらくデータを必要とするのではなく、金銭的に私たちを傷つけようとすることが目標でしょうか?

彼らがIPアドレスをスプーフィングしていない場合、おそらくそれらは膨大な数の異なるコンピューターをハッキングしており、それらからのクエリを実行していますか?私たちが目にしているIPアドレスの数が膨大であるため(IPアドレスごとに最大30クエリで、1分あたり数百のトランザクションが長期間)、このデータが本当にそれほど価値はありません。

だから私は彼らの動機と彼らがこれをどのように達成しているかを理解して、適切に反撃できるようにしています。

84
Marc

興味深い問題。この問題の解決策は、ユーザーのWebブラウザーに(Webブラウザーで実行されているjavascriptを使用して)解決するのは難しいが、サイトの検証が「簡単」である暗号化の問題を強制的に解決することかもしれません。 「解決するのが難しい」とは、典型的なデスクトップまたはラップトップのリソースで解決するのに最大10秒かかる問題を意味します。新しいブロックがマイニングされたときにビットコインマイナーが解決する問題に似た問題ですが、もちろんはるかに単純な規模です。

あなたのサイトのフォームに記入している間、スクリプトが離れてしまうため、正当なユーザーは違いに気付かないでしょう。しかし、それは悪用者をかなり遅くし、彼らに多くのリソースを割り当てさせ、あなたのサイトへのこれらの投稿を自動化するために彼らが使用しているどんなツールでも再作業を強いるでしょう。

97
mti2935

どうやって?

ボットネットおよびキャプチャファームをレンタルしました。

どうして?

誰かがあなたのデータを求めています。盗むほうが買うより安いです。

何をすべきか?

盗むのは安上がりですが、無料ではありません。これらの攻撃を行うには、「それら」(ボットネットやキャプチャファームではなく、最終的にデータを必要とする人)のコストがかかります。データに見合う価値よりも攻撃に費用をかけます。

  1. スパマーを特定するためのパターンを特定します。

  2. 正当な見た目であるが、偽のデータをスパマーに返す。

特定の数の有効な応答の後、有効なデータで偽のデータを散在させ始めます。次に、データを検証するために追加の手順を実行する必要があります。これらの追加の手順には追加の費用がかかります。

彼らがそれを検証しない場合、彼らのデータはあまり役に立たない、すなわち価値が少ない。彼らはまだそれを使用したり販売したりできるかもしれませんが、それはあまり価値がないので、再びあなたを攻撃するコストは返される値よりも高くなります。

34

CAPTCHAを間違っています。

CAPTCHAの考え方は、コンピュータがそれを解決するのを困難にする(「不可能の次へ」と読む)が、人間がそれを容易にすることです。静的画像を1つだけ使用する場合は、4たとえば、コンピュータは繰り返し入力するのに問題はありません4指示された場合。

代わりに、 reCAPTCHA または同様のテクノロジーの使用を検討してください。これらの問題はすでに解決されており、以下に示すように、ホイールを再発明する必要はありません。

[Reinventing the Wheel]

CC-BY-NC 2.5、Randall Munroe、xkcd.com/2140 /

22
MechMK1

簡単な「この写真の数字を入力する」CAPTCHAを立てて、24時間スティックを使えば、敵はアマチュアであることがわかります。ビスポークコードを含むこの種のプリミティブデバイスは、24時間それらを遅くします。これは楽しいかもしれません:)

私はスタイルシートを多用して、ページコード内の情報を非表示にします。2つの意味では、最初にCAPTCHAを非表示にし、2番目に情報の回答を非表示にします。スクレイパーをサディスティックに誤解させることを目的として。

一見すると信じられるが、簡単に確認されない方法で音声である偽の回答を作成するために、サーバー側で少しコードを記述します。さらに、ランダムシードまたはMD5を使用して、同じ入力が常に同じ音声応答を提供するようにします。

CAPTCHAを誤解させる:

たとえば、使用していた最後のCAPTCHAシステムはそのままにし、スタイルシートを使用して非表示にします。 JavaScriptで難読化された別のCAPTCHAを使用してください。多分別のキーを持つ別のreCaptchaです。

現在、スクレーパーは最初のキャプチャがスタイルシートで抑制されていることに気づきません。それは元気にCAPTCHAを解決し、間違ったキーで答えを返します。 Gotchaただし、エニグマをクラックするのと同じように、コードを無効にしたことを明確にすることはできません。スクレイパーは、コードが機能していると信じ続ける必要があります

答えを誤解させる:

スタイルシートを使用して、通常どおりに回答を提示します。スタイルシートはこの結果を一般の人々に隠します。スクレーパーは、このシートに「非表示」プロパティがあることを認識していません。 ここに提示する答えは偽物です。その後、真の結果を提示します。ボーナスポイントの場合は、結果をグラフィックで表示すると、解読できなくなります。もちろんこれを隠そうとします。

これがスクレイピングクエリであるというテレメトリがある(間違ったCAPTCHAを解決した)場合は、サービスプロバイダーからそのクエリ結果を購入する必要さえありません。サービスプロバイダーがかかる一般的な時間の範囲でsleep(t + random)を挿入し、偽の回答を送り返します。

普通に見える

攻撃者は、物事は正常に機能しており、クエリの成功のみをチェックし、結果のqualityではないことを信じます。運がよければ、攻撃者は各クエリが実行されたときにログに記録することはなく、単に回答をデータベースにダンプします。攻撃者がデータを汚染したことに気づくまでにかなり長い時間がかかる場合があります。その時点までに、データベース全体が破損し、有効なエントリと有害なエントリがわかりません(偽のデータを合法的に見せることの重要性を参照) ?)攻撃者がすべてのエントリにタイムスタンプを付けたとしても、なんとバグハントでしょう!データが悪化した時期を把握するために、毎日複数のエントリを手動で確認する必要があります。

後もう一つ。正しい答えをキャッシュし、ボットネットクエリがキャッシュにある場合は、常にキャッシュから正しい答えを与えます。したがって、スクレーパー(トラブルシューティング)は、ブラウザーで実際のWebサイトにアクセスし、213-456-7890のテスト番号を要求します。非表示が機能し、これは実際のクエリのように動作するため、実際の答えを計算して返します。 次に、スクレイパーはボットネットに213-456-7890を要求するように指示します。ボットが別の結果を取得するかどうかを確認します。ボットクエリを検出します。ここで偽の答えを出すと、スクレーパーはジグが作動していることを認識し、検出を破壊するたびに反復します。だから、あなたはキャッシュに本当の答えを持っているので、隠しフィールドでもそれを与えてください。今、スクレーパーは困惑しています:ボットネットは動作しているようです


理由と方法

明らかに誰かがあなたのデータを貴重だと思っています。彼らはあなたの情報源からそれを手に入れるでしょうが、彼らはそれに対してお金を払いたくないので、あなたをかき集めています。

  • 彼らが実際にあなたがするのと同じことをする競合他社のウェブサイトである可能性があり、彼らは訪問者からクエリを取得したときにあなたにクエリを生成します。本質的にこれはあなたのサービスを利用するためのスキームですが、彼らの広告を載せます。あなた自身がその価値を知っています。すべての競合サイトであいまいで異なるクエリを実行することでそれをテストし、ログにポップアップするクエリを確認できます。

CAPTCHAを解決する方法は無数にあります。競合他社のWebサイトが顧客のデータを取得している例では、CAPTCHAを顧客に渡すだけの可能性があります。 「CAPTCHAは無料ポルノを取得する」などのように人間をだましてCAPTCHAを実行させる方法や、何らかの理由で匿名の掲示板などのCAPTCHAを必要とする無関係なサービスを提供する方法もあります。誰かが投稿するたびに、クエリを送信し、キャプチャを解くための投稿者を取得します。 CAPTCHAは、第三世界で本質的に奴隷制を解決することもあります。

なぜ?
電話番号、名前、電子メールアドレスに関連するデータは、合法的市場と地下市場の両方で非常に貴重です。

方法?
誰かがボットネットを使用してあなたからのデータをマイニングしているようです。これは、数十のグローバルに分散したIPから数千のIPへの接続を意味する可能性があります。個人的に、私は彼らがreCapchasをどのように回避しているかを知りませんが、capcha解決サービスを提供するサイトからの手作業を使用します。これらはすべて、何らかの形でお金がかかります。

ソリューション?
免責事項:私はセキュリティの専門家ではありません。
一部の無料サービスは、一定量のクエリの後にキューシステムを使用します。システムに過負荷をかけたくない場合、一度に最大30のリクエスト(またはシステムが簡単に管理できる同時リクエストの数)を許可します。キューがいっぱいの間に入れられた要求は、サーバーがビジーであり、後で再試行する必要があるか、自動的にキューに入れられることを説明するメッセージを受け取ります。この解決策には問題がないわけではありません。正当なクライアントが、特にピーク時や攻撃中に、サービスを受けるのを待たなければならない場合があるからです。

Capchaメソッドを変更すると、しばらくの間攻撃を抑制できるとおっしゃいました。おそらく、すべてのリクエストでランダムに各訪問者のcapchaメソッドを代替する方法はありますか?少なくとも、攻撃者は一部のメソッドを書き換える必要があります。最良のシナリオは、攻撃が成功した場合は、組み込むさまざまな方法の量で分けられます。

12
phLOx

彼らの動機は、彼ら自身が同様のサービスを構築していてデータを必要としているという単純なものかもしれません。あなたのサービスは、彼らが見つけてこすり取る必要があるそのようなデータソースの1つである可能性があります。

リクエストをレート制限してみましたか? (同じIPアドレスからの仮定で)毎分数百になるとすると、それらのリクエストをログに記録し、妥当な期間内にリピーターを検出して、一時的に一時的にIP禁止することができませんでしたか?

「ハニーポット」フォーム要素をフォームに追加することもできます。ハニーポットフォーム要素はgeniuneユーザーから隠されていますが、ボットによって自動入力されます。これらのフィールドにデータが含まれるリクエストは自動的に破棄され、場合によっては禁止されることもあります。

3
Stephen Bailey

1つのキャプチャソリューションを使用しないでくださいすべて使用してください

すでに複数の異なるものを配置しているので、それらを(ランダムに)2時間またはリクエストごとにローテーションしてみませんか?攻撃者が理論的にすべてをクラックしたとしても、キャプチャの種類を検出する必要がある攻撃者は、それ自体がコンピュータに対して解決する別のキャプチャです(人間にはまったく影響しません)。

また、「何の電話番号をもう一度調べているのか」などのように、ばかげた質問を含めることもできます。ランダムなものほど、ボットで行うのが難しくなります。

特に、異なる分野(画像認識、数値の読み取り、数学、一般知識など)を使用している場合、ボッターはフォローアップに苦労します。

そして、あなたは彼らを完全に裏切る必要はありません、あなたはもはや彼らの時間にもはや価値がないようにする必要があります。

編集:これも定期的に新しいキャプチャタイプを投入する必要があります

2
Hobbamok

だから私は彼らの動機と彼らがこれをどのように達成しているかを理解して、適切に反撃できるようにしています。

プロキシを使用してサービスにアクセスすることも可能です。 「open proxy list」をGoogleで検索すると、クライアントのIPアドレスをマスクするために使用できるオープンプロキシを表示するいくつかのサイトが返されます。

HTTPヘッダーX-Forwarded-ForViaをサーバー側でしばらくログに記録し、そのようなプロキシがシステムの悪用に使用されている可能性があるかどうかを確認することをお勧めします。 X-Forwarded-Forには通常、クライアントのIPアドレスが含まれ、Viaにはチェーン内のプロキシ(存在する場合)のIPが含まれます。一般にプロキシを使用することは合法ですが、いくつかの興味深いパターンがあることに注意してください。攻撃期間内に同じプロキシが何度も使用されているのを見た場合。

2
mottek

私はこれを完全な答えとは考えていません。私はどういうわけか似たような状況で何をすべきかを言っています。

  1. クエリをログに記録します。クエリにパターンはありますか?たとえば、特定の国や特定の地域。実際に結果を使用している場合は、パターンがあるはずです。そうでない場合は、2番目を検討します。

  2. キャプチャタイプとテクノロジーを変更すると、攻撃は約24時間停止します。私はこれをこのように読みました:

    私は10分の作業時間で戦うと、24時間の作業で相手にダメージを与えます。

    ですから、あなたがする必要があるのは、彼らの時間にダメージを与え続け、その中で持続することです。それはこれをしている誰でも疲れさせ、そして彼らが戦いを止める最初の人であると確信することができます。勝つ本当の確率は-> 1-(10/1440)

    これは実際の解決策ではなく、3に進む前に検討する必要のあるものです。

    彼らが来月または6か月後に戻ってくるかもしれないことを覚えておいてください。

    たとえば、1日に3つ以上のクエリを使用する場合、ユーザーに2種類のキャプチャを入力するように要求することもできます。 10日以降、実際の訪問者が気付かないような方法で、システムはさらにハードコアになります。

  3. 残念ですが、承認を使用してください。オプションで最初のn(n <10)クエリを匿名で使用可能にすることもできますが、それ以上の場合はログインが必要です。

1
FarhadGh

私は、虐待者が1年以上にわたって虐待を試みており、一貫して失敗している連絡フォームを作成しました。

私のアプローチには次の組み合わせが含まれます。

  1. 必須フィールドがそれぞれ検証されると、フォーム検証DBテーブルに一時的に格納されているランダムに生成された新しい32〜48文字のフィールド名を取得するajax呼び出しがトリガーされます。次に、フォームが送信されると、サーバーによって生成されていない名前または元のフィールド名を持つフィールドがフィールドの送信にトリガーされ、フォームの送信に関連して送信されたものと同様に、データベースのリモートIPアドレスにログインします。フィールド名が変更されると、元のフィールド名を持つ送信は不正行為として検出され、それに応じて処理されます。
  2. 必須フィールドごとにフォームが少なくとも1.3秒間ページ上にある必要があり、送信ボタンの無効化プロパティが削除され、少なくとも送信入力の名前が新しいajaxで変更される前に、すべてのフィールドを検証する必要があります。呼び出し、または前のajaxフィールド名の呼び出しから受け取った名前と値。ボタンの名前と値は、サーバーでのフォーム検証中に一致する必要があります。そうでない場合、不正行為が検出されて処理されます。
  3. 私はすべての送信をdbに記録し、悪用のフラグをDENYターゲットで設定します。フォームが悪用されると、フォームページへのアクセスも永久にブロックされ、試行されたアクセスのログ記録後に403応答に直接リダイレクトされます。
  4. Ajax呼び出しの1つ中に、送信前にフォームに追加され、存在する必要がある新しいフィールドと値がランダムに生成される場合があります。そうしないと、送信が検証されず、不正行為として検出されます。
  5. ハニーポットフィールドを含めることはできますが、検出されるフィールドオブジェクトを非表示にしないでください。フィールドを非表示にする場合は、親オブジェクトを非表示にします。また、絶対に配置して、遠くに配置することもできます。任意の種類の値でサーバーに送信されるハニーポットフィールドは、乱用として検出され、そのように処理されます。

セキュリティを回避するための新しいパターンを監視できるように、すべての送信をログに記録してください。

1
Dan Stepaniak