web-dev-qa-db-ja.com

悪意のあるクローラーとスクリプトに苦労する

私のWebサーバーの稼働時間は25時間未満で、/administrator/index.phpという名前を付けるために、さまざまなデフォルトページがすでにクロールされています。

これは非常に一般的なことであり、サーバーを適切な方法で保護しているため、私にとってはそれほど問題ではありません。

次のアイデアのために、結果のトラフィックについて気にしないと仮定しましょう。

通常、管理者インターフェイスまたは一般的なWebサイトの他の攻撃経路を表す、最も要求の多いファイルをいくつか作成するとしたらどうでしょう。

ファイル(/administrator/index.phpなど)は次のようになります。

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>/administrator/index.php</title>
  </head>

  <body>
    content ^1
  </body>
</html> 

しかし、実際の本文の内容については、ランダムな文字列を数GBに詰め込みます。

たとえば、dd if=/dev/urandom bs=10M count=400 | base64 > /tmp/contentの場合、上記のHTMLタグをファイルで囲みます。

このようなイベントでは、典型的なクローラーは何をしますか?

33
SaAtomic

あなたは自分を傷つけています。

「攻撃者」/クローラーは、おそらくトラフィックや処理能力の代金を払っていません(つまり、ボットネットやハイジャックされたサーバーを使用しているか、少なくともトラフィックの代金を支払わせない接続上にいます)。トラフィックとCPU /ストレージ/メモリの料金が請求されるか、サーバーのホスティング業者に「フェアユース」条項があり、短期間のギガバイトのデータまたはストレージ帯域幅を提供する場合、サーバーの接続が抑制または遮断されます。削減されるか、CPU使用率が制限されます。

また、特定のページを探しているだけなのに、なぜギガバイトのデータをダウンロードするのがそれほど馬鹿なのでしょうか。彼らは単にそのページの存在を探しているだけです。その場合、ページのサイズは問題にならないか、タイムアウトと最大サイズの両方が確実に設定されます。他に何百ものサーバーをスキャンする場合、特にグレーリストが攻撃者をスローダウンさせるためのよく知られた技術である場合は、サーバーが応答を完了するようにします。

59
Marcus Müller

/administrator/index.phpのHTTP 404ページ以外のサービスを提供すると、潜在的なターゲットのリストにサーバーが含まれる可能性があることを考慮してください。つまり、将来さらに多くのスキャンが行われることになります。このようなリストに料金を支払うクラッカーは何百万ものIPを自分でスキャンする必要がないため、デフォルトの管理ページをチェックするよりもはるかに高度な攻撃であなたに集中できます。

サーバーが悪意のある活動を誘引する目的で設定されていない限り、潜在的な被害者のように見えることは、あなたにとって何の役にも立ちません。

28

すでに述べたように、おそらくそれだけの価値はありませんが、考えることは非常に興味深いトピックです。 DEF CON 21では、「スクリプトキディとスキャナーモンキーに問題を起こす」と呼ばれる非常に優れた講演がありました。 https://www.youtube.com/watch?v=I3pNLB3Cq24

いくつかのアイデアが提示されていますが、特定のランダムHTTP応答コードを送信するような非常にシンプルで効果的なアイデアもあります。これは、エンドユーザーには影響しませんが、スキャナーの速度を大幅に低下させます。話は一見の価値があります:)

編集:これは、それを見る時間のない人のための話の簡単な要約です:ブラウザは、独立して多くのHTTP応答を同じように解釈します応答コード。もちろん、これはすべての応答コード(302リダイレクトなど)に当てはまるわけではありませんが、たとえば、ブラウザーが404 "not found"コードを受け取った場合、200 "OK"コードの場合と同じようにページをレンダリングします。ただし、スキャナー/クローラーは異なります。それらは主に返された応答コードに依存します。たとえば、404応答コードを受け取った場合、ファイルが存在しないと結論付けますが、200応答コードを受け取った場合、ファイルが存在していると判断し、それを使って何らかの処理を行います(スキャンして、ユーザーに報告します) 、 または、他の何か)。

しかし、(リソースが存在しない場合でも)200コードのみを送信するようにWebサーバーを設定するとどうなるでしょうか。通常のユーザーはおそらく気付かないでしょうが、スキャナーが(たとえばブルートフォースで)アクセスしようとするすべてのリソースが既存のものとして報告されるため、スキャナーは混乱します。または、404応答のみを返す場合はどうなりますか?ほとんどのスキャナーは、アクセスしようとしているリソースがどれも使用できないと考えます。

講演では、さまざまな応答コードとさまざまなスキャナーを取り上げてテストしますが、それらのほとんどはそのように簡単に混乱する可能性があります。

Edit2:私が得た別のアイデア。スキャナーだと思っている人に10Gbのデータを送信する代わりに、値が10000000000のContent-Lengthヘッダーを含むHTTP応答を送信するだけでなく、HTTP応答本文に数バイトのデータのみを追加するのはなぜですか?ほとんどのクライアントは、接続がタイムアウトするまで、残りの応答を待ちます。これはスキャナーを大幅に遅くします。しかし、繰り返しますが、それはおそらくそれだけの価値はありません。スキャナーとして検出した人にのみそれを行うようにしてください。

16
stanko

ギガバイトを忘れてください。数分または数時間の遅延を使用します。多くのWebサーバーには、人工的な遅延(別名tarpits)を導入するモジュールがあります。サーバー上のスレッド/プロセスを占有しますが、その間調査されていたであろうインターネット上の他のいくつかのサーバーを快適にします。もちろん、他のボットやこのボットの他のスレッドは作業を続けているため、煩わしさは軽微です。

12
kubanczyk

これは私の心の近くで重要なトピックであり、ボットなどと長い間戦ってきました。私の結論は、あなたの最善の戦略は、それほど満足できるものではありませんが、単にトラフィックを吸収することです。つまり、ボットであることを検出し、その後、そのプログラムに対する明確な指示を与えることなく、ボットであることをさらに中和します。そうします(htmlページのリクエストに応答して大きなファイルを送信します;それらが不適切で許可されていないことを伝えるページを提供します-私が長年に渡って犯した間違いであり、それはソフトウェアではなく人ではないことに気づきませんでした)。プログラム的に明白ではないということは、自動化されたボットスパイダーソフトウェアにとって、応答は正常に見え、内部でレッドフラグを立てないことを意味します。

プログラムで明確でないページがどのように見えるかを理解するには、たとえば、Google検索で表示されるseoで構築されたスパムWebサイトを調べてみてください。これらのページは、Googleボットフィルターを回避するように設計されています。つまり、内部のGoogleスパイダーレッドフラグをトリガーしないため、検索でSERP結果として提供されました。悪い。ボットはプログラミングの洗練度の点でそれほど複雑ではありません(ボットアクティビティにとって速度/効率がより重要です)。つまり、ページまたは応答を「読み取る」能力は非常に基本的であり、何かを与えることはそれほど難しくありませんこれは通常の応答のように見えます。

ここでの回答のいくつかは、個人的に経験するまでは、ボットマスターの重大度を理解できず、リソースや考えられる正当性を過小評価しているという問題を指摘しています。ここで考えられる種類のトリックに従事する場合、いくつかのことが起こります:

  1. 理由もなく利益もなくサーバーリソースを使用する

  2. ボットオペレーターを悪化させます。ボットオペレーターは、グローバルに配布されるリストに追加することができます。このリストは、基本的には多くのサイトを対象とするデータベースですが、通常は適切なターゲットですが、サイトをこのリストに簡単に追加することもできます。これは以前私にも起こりました。DDOSに似ていますが、実際にはそうではなく、単にマスターリストを使用するさまざまなボットソフトウェアオペレーターであるため、攻撃をプログラムするのに数か月かかりました。

私はある時点で違反者に大きなファイルを送信しようとしましたが、それは単なる時間の無駄ではなく、一般的に逆効果です。

また、ボットソフトウェアの動作に関する根本的な誤解もいくつかあります。ボットソフトウェアは非常にシンプルで、迅速なアクションを目的として設計されているため、サイズ制限に達するとすぐに停止する可能性は非常に高くなります。

ボットとその仕組みに関する一般的な誤解を解消するために、簡単なボットを作成しましょう。

wget --spider -t 1 --read-timeout=5 -U "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0" [target url]

これは、初期のURLデータベースビルダーボットコンポーネントです。これは、HEADを要求すること、つまり、ファイルが存在するかどうかを確認することだけを要求しています。これにより、サーバー応答コードが生成されます。ここで一部の人々が示したように、ボットが検出されたら、優れた戦略の1つは、この手順を使用して404を送信することです。ボットは人間ではなくソフトウェアであるため、仮想肩をすくめて、ページが存在しない、次のURLに移動します。これは非常に優れた戦略であり、レッドフラグアラートを生成する可能性が最も低いものです。また、Windows 10上のFirefoxであること、またはサーバーがそこに入力することを選択したものである可能性があることをサーバーに伝えていますが、切り替えまたは回転されるユーザーエージェントの偽のリストは、きちんと設計された不良ボットの一般的な機能です。

ただし、特に404ページがcmsで構成されている場合は、404を提供するためにサーバーリソースが必要です。デフォルトのサーバー404を使用するだけの場合、それは簡単ですが、404をヒットした可能性がある実際のユーザーにとっては醜いです。

301は、要求を他の場所に送信するだけです。あなたが何をしても、それを既知のスパム対策/ボットWebサイトに送信しないでください。彼らはそれらを知っているか、あなたより優れています。存在しない場所に送ってください。

ただし、ボットは一般に一貫性のある301を尊重していません。プログラミングに依存している場合もあれば、そうでない場合もあります。

したがって、スパイダーの段階でボットを処理する方法についていくつかの決定があります。 404は非常に優れたソリューションですが、実際のサーバーの応答コードを実際にテストして、送信された応答が実際の404であることを確認してください。404ページへのリダイレクトだけでなく、ほとんどのボットはこれが失敗したことを認識しません。テスト。

これでファイルを取得できます。

wget -t 1 -Nc --read-timeout=5 -U "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0" [target url]

もう一度注意してください。タイムアウトが再度発生するため、大きなファイルのアイデアが終了し、サーバーリソースが無駄になり、偽のユーザーエージェントが送信されます。

明らかに、ボットは通常、wgetリクエストやカールを送信するよりもはるかに効率的に作成されますが、適切なボットについては、wgetと組み込みオプションを使用してボットを記述しているので、ここでほとんどのアイデアを回避するのは簡単です。ソフトウェア、もちろんこれははるかに洗練された、または少なくとも、より洗練された、使いやすいでしょう。

もちろん、自尊心のあるボットの作成者は、このようなグーグルスレッドに時間をかけて、人々が現在何をしているのかを確認し、スパイダー/ダウンローダー保護を追加してそれらのアイデアを処理します。そのため、それらを使用しません。ボットの作者は、真面目で有能な専門家であることが多く、その仕事はボットの成功に焦点を合わせています。これは彼らの仕事です。そのため、ボットを悪化させないように少し尊敬する価値があります。これは、警官の前を歩くジェイのようで、意味のない挑発です。

ダウンロードフェーズでは、検出の事実を再び使用して、コンテンツのない偽のページ、またはサーバーにほとんど負荷がかからないものを提供することができます。何をするにせよ、偽のコンテンツを提供するために多くのリソースを使いたくありません。

インターネットの周りにはかなりばかげたアイデアがたくさんあります。たとえば、IPアドレスのブロックに時間を費やしているなど、それらをフローティングしている人々の経験の欠如を一般的に示しています。ほとんどのボットは、ランダムなIPアドレスから実行され、ボットネット上にある、データセンターにある、AWS一時サイト/ IPがセットアップされてから破棄される、など、ボットをブロックする生産性の低い方法はIPをブロックすることよりも少なくなります。これは、タイマー、スケジュール、またはデバイス構成に基づいてIPv6が標準になり、パブリックIPアドレスをランダムに再割り当てできるようになると、さらに大きくなります。

IPデータの分析は、処理しているものを知るのに役立ちます。たとえば、ほとんどがルーマニアや中国から来たものであり、それは何かを教えてくれますが、それらは1つから別の1つに切り替えることができます。 datacenter/botnetを別のものに変更するため、IP分析は、対処しているボットの問題の種類を確認できる優れたバックエンドツールです。

スパイダーツール(別名、ボット)ソフトウェアの作者の知性を尊重し、彼らが愚かであると思い込まないこと、またはそのソフトウェアのユーザーに不必要に敵対することは、常にビジネスを行い、ボットを処理して、問題を登録せずに次のサイトに移動します。

また、ボット自体は存在せず、通常は単一目的のボットが存在することを理解することが重要です。 「ボット」自体は、ほとんどすべての場合にデータベース内のURLを自動的に要求するソフトウェアの一部です。また、その機能の一部として、URLのデータベースを作成したり、市販のデータベースを使用したりすることもできます。一部のボットはインターネットのIP範囲全体を自動的にスキャンします。ボットは単に物事を探しているだけで、他のボットはターゲットにされており、検索ボットと同様にリンクをたどります。 robots.txtですべての管理者タイプのページ/ディレクトリをブロックしていない場合は、どのボットが正常でどのボットが正常でないかを判別できないため、それが最初のステップです。ファイル全体のパスは必要ありません。ファイルの最初の部分だけで、次のようにパスとして一意にできます。

  1. 正規の検索ボット
  2. 通常は正当なふりをするseoボット。 robots.txtでユーザーエージェントをブロックし、その後のリクエストのログファイルを分析すると、実際のスカムと実際のスカムを確認できます。
  3. 連絡先ページの自動送信/入力ボット
  4. ブログ自動投稿ボット
  5. フォーラムの登録/投稿ボット
  6. ワードプレス、phpmyadmin、drupalなどの安全でないツールや更新されていないツールなど、一般的に簡単に悪用可能なアプリケーションのURLを検索するブラックハットボット。通常、これらは通常リンクされていない特定のURLのリクエストを確認することで、統計で検出できます。
  7. サイト稼働時間ボット。実際に確認する方法については、#2を参照してください。基本的に、サービスにサインアップしなかった場合、それはグレーまたはブラックハットです。
  8. 実験的なボット、新しい検索エンジン、Webサービス、大丈夫、時にはひどく書かれた、通常悪意はないが調査する価値がある。
  9. たとえば、ボットのインデックス作成は、サイトのインデックスを他のさまざまなボットオペレーターに販売することです。

次に、ゾンビネットPCを通常使用するDDOSアタッカーやハイジャックされたサーバーなどの非ボットタイプのものがあります(#6を参照、これがスパイダーされる1つの理由です-既知のセキュリティ問題があるソフトウェアを実行しているサイトを見つけるため、またはゼロ日。通常、特定の一般的なソフトウェアのURLへのリクエストを探すだけで、セキュリティの問題がブラックハットの世界に現れたときにそれを発見できます。ハイジャックされたサーバーは、通常のパーソナルPCデバイスよりもはるかに多くの帯域幅とCPU/RAMにアクセスする傾向があるため、アンダーワールドではプレミアム製品です。

もちろん、これは完全なリストではなく、さまざまなボットとその種類のボットのサンプルにすぎません。

正しく設定されていない場合、一部の検索ボットは悪いボットのように動作する可能性があることに注意してください。robots.txtでディレクティブを指定し、それらが従うかどうかを確認できます。従わない場合は、ブロックを尊重し、ブロックを尊重していません。 、さまざまな選択肢があります。

ボットのアクティビティが非常に多いのは、ほとんどのユーザーがサイトのウェブマスターになるための完全かつ完全な装備がなく、基本的にはアヒルに座っており、セキュリティが不十分な不適切に作成されたソフトウェアを使用している、または保護に失敗する不適切なプログラミングを使用しているためです。 SQLインジェクションのような一般的な攻撃ベクトルに対抗するため、継続的なボットスキャンアクティビティには大きなメリット/メリットがあります。もちろん、使用するすべてのソフトウェアを常に更新することで少し軽減することもできますが、phpmyadminなどの不要で非常に安全でないツールを最初から排除して、攻撃対象全体を削除することもできます。または、少なくともファイルを含むフォルダをパスワードで保護します。

私は自分のIIS webserverを実行するというひどい考えを持っていたクライアントがいました。それは当時非常に安全ではなかったため、OPの場合のように、2番目にオンラインにしたとき、インスタントボットは一般的なIISアクセスポイントをプローブしますが、IPへのリンクはありませんでした。翌朝クライアントにIISインスタンスとあきらめました。彼が安全なローカルシステムを維持することができなかったので、幸運にも彼はそうしました。

私はほとんどの分析にgrep、sed、awkを使用していますが、いくつかのことを行うためのguiツールが必要だと確信しています。

あなたはログファイルの何万ものアクセスを調べているのではなく、ところで、そのジョブ用に作成されたツール(awk/sed/grepなど)を使用してパターンを検索し、パターンを検出できるかどうかを確認しています。プログラミング応答で解決できます。特定のルールに適合するリクエストをブロックするようにプログラムできるファイアウォールツールもありますが、それらを正しく構成するのはより困難です。

6
Lizardx

プロジェクトハニーポットはすでにこれを行っています。おそらく、プロジェクトハニーポットに参加する必要があります。あなたが「彼らに苦労を与えたい」ならば、404はすでにそれをします。あなたが彼らとデジタル小説に従事することを決めた場合、あなたは彼らと同じビジネスにいるようです。

すでに数え切れないほど述べたように-彼らはあなたよりも多くのリソースを利用できるので-私の意見では、それはあなたが失う損耗の戦争です。

私ではない正当なトラフィックをほとんど受信しないIoT(Intel Galileo)ベースのサーバーがあります。それはあなたが言及するトラフィックのかなりの量を取得します。私はそれらのIPを収集し、それらを報告しました。

0
Michael

攻撃者を攻撃しようとすると、あなたは自分を傷つけます。彼らは無限ですが、彼らは無限のリソースを持っています。

すべてのボットネットがISPの制限を使い尽くすのに十分なデータを出荷する場合、私はあなたが勝ったと思います。しかし、リソースが限られている場合、これは不可能です。

あなたができることは、コレクターが使用可能なソケットを使い果たすまでターピットすることですが、Webサーバーからこれを行うと、Apache HTTPd/nginx/varnishはかなり重いメモリであるため、メモリを使い果たす可能性があります、特にいくつかのモジュールがロードされたApache。

ファイアウォールを使用して、特定のURLをターピットするシンプロキシのようなものにトラフィックを振り向けることができますが、それ以外はすべて実サーバーに行きます。これは最小限の利益のために多くの作業を必要とします。

ところで、どうしてそんなにたくさんのクローラートラフィックを手に入れましたか?私はハニーポットを長い間消費するようにしてきましたが、トラフィックはほとんどありません!ラッキーな人。

0
Ed Neville