web-dev-qa-db-ja.com

私はDDoSの下にいます。私に何ができる?

これは、DoSおよびDDoSの軽減についての 標準的な質問 です。

今日ホストしているWebサイトでトラフィックの急増を発見しました。 1秒間に数千の接続を取得していますが、利用可能な帯域幅の100Mbpsをすべて使用しています。すべてのリクエストがタイムアウトするため、誰も私のサイトにアクセスできません。SSHもタイムアウトするため、サーバーにログインすることもできません。これは数回前に起こり、毎回数時間続き、自然に消えました。

時折、私のウェブサイトには別の明確な関連する問題があります:サーバーの平均負荷(通常は約.25)が最大20以上に急上昇し、他の場合と同じように誰も私のサイトにアクセスできません。また、数時間後には消えます。

サーバーを再起動しても解決しません。サイトに再びアクセスできるようにするにはどうすればよいですか?

これに関連して、1〜2日の間、サービスを開始するたびに、特定のIPアドレスからの接続を取得してクラッシュすることに気付きました。私がそれを再び起動するとすぐに、これは再び起こり、それは再びクラッシュしました。それはどのように似ていますか、そして私はそれについて何ができますか?

180
Falcon Momot

サービス拒否攻撃が発生しています。複数のネットワーク(異なるサブネット上の異なるIP)からのトラフィックが見られる場合は、分散型サービス拒否(DDoS)が発生しています。すべて同じ場所からのものである場合は、単純な古いDoSがあります。可能であれば、確認することをお勧めします。 netstatを使用して確認します。しかし、これは難しいかもしれません。

サービス拒否は通常、トラフィックベースと負荷ベースの2つのカテゴリに分類されます。最後の項目(サービスのクラッシュを伴う)はエクスプロイトベースのDoSであり、かなり異なります。

発生している攻撃のタイプを突き止めようとしている場合は、(wireshark、tcpdump、またはlibpcapを使用して)トラフィックをキャプチャすることができます。可能であれば、できるだけ多くのトラフィックをキャプチャすることにも注意してください。

多くの場合、これらはボットネット(攻撃を行う攻撃者の集中管理下にある、侵害されたホストのネットワーク)から送信されます。これは、攻撃者が(非常に安価に)さまざまなネットワーク上の多数のさまざまなホストのアップストリーム帯域幅を取得し、それらを追跡しながら攻撃するための良い方法です。 低軌道イオンキャノン はボットネットの一例です(マルウェアに由来するのではなく自発的ですが)。ゼウスはより典型的なものです。

トラフィックベース

トラフィックベースのDoSを使用している場合、サーバーに着信するトラフィックが非常に多いことがわかりますインターネットへの接続完全に飽和しています。他の場所からサーバーにpingを実行すると、パケット損失率が高くなり、(使用しているルーティング方法によっては)非常に高い遅延が発生する場合もあります(pingが高い)。この種の攻撃は通常DDoSです。

これは本当に「大きな」攻撃であり、何が起こっているのかは明らかですが、サーバー管理者が軽減することは困難です(共有ホスティングのユーザーが軽減することは基本的に不可能です)。 ISPからの助けが必要になります。 DDoSを受けていることを彼らに知らせてください。彼らはあなたを助けることができるかもしれません。

ただし、ほとんどのISPとトランジットプロバイダーは何が起こっているのかを事前に認識し、サーバーにブラックホールルートを公開します。つまり、サーバーは0.0.0.0を介して、できるだけ少ないコストでサーバーへのルートを公開し、サーバーへのトラフィックをインターネット上でルーティングできなくなります。これらのルートは通常/ 32sであり、最終的には削除されます。これはまったく役に立ちません。目的は、ISPのネットワークを大洪水から保護することです。この間、サーバーは実質的にインターネットアクセスを失います。

ISP(またはあなた自身のASがある場合はあなた)が支援できる唯一の方法は、可能性のあるDDoSトラフィックを検出してレート制限できるインテリジェントトラフィックシェーパーを使用している場合です。誰もがこのテクノロジーを持っているわけではありません。ただし、トラフィックが1つまたは2つのネットワーク、または1つのホストからのものである場合、それらはあなたの前のトラフィックをブロックすることもできます。

つまり、この問題についてできることはほとんどありません。最善の長期的なソリューションは、インターネット上の多くの異なる場所でサービスをホストすることです。サービスを個別に同時にDDoSする必要があるため、DDoSがはるかに高価になります。この戦略は、保護する必要のあるサービスによって異なります。 DNSは、複数の信頼できるネームサーバー、バックアップMXレコードとメールエクスチェンジャーを備えたSMTP、ラウンドロビンDNSまたはマルチホーミングを備えたHTTPで保護できます(ただし、この期間中、ある程度の劣化が目立つ可能性があります)。

ロードバランサー自体が同じ問題の影響を受け、単にボトルネックを作成するため、ロードバランサーがこの問題の効果的な解決策になることはめったにありません。問題はパイプが飽和していることなので、IPTablesまたはその他のファイアウォールルールは役に立ちませんファイアウォールで接続が確認されたので、もう遅すぎます;サイトへの帯域幅が消費されています。接続をどうするかは関係ありません。着信トラフィックの量が通常に戻ると、攻撃は軽減または終了します。

それができる場合は、Akamai、Limelight、CDN77などのコンテンツ配信ネットワーク(CDN)の使用を検討するか、CloudFlareなどのDDoSスクラビングサービスを使用してくださいまたはProlexic。これらのサービスは、これらのタイプの攻撃を軽減するために積極的な対策を講じており、非常に多くのさまざまな場所で利用可能な帯域幅が非常に多いため、フラッディングは一般に実現できません。

CloudFlare(またはその他のCDN /プロキシ)を使用する場合は、サーバーのIPを非表示にしてください。攻撃者がIPを見つけた場合、CloudFlareをバイパスして、サーバーを直接DDoSすることができます。 IPを非表示にするには、サーバーが安全でない限り、他のサーバー/ユーザーと直接通信しないでください。たとえば、サーバーはユーザーに直接メールを送信しないでください。これは、すべてのコンテンツをCDNでホストし、独自のサーバーがない場合は適用されません。

また、一部のVPSおよびホスティングプロバイダーは、他の攻撃よりもこれらの攻撃を緩和するのに優れています。一般的に、彼らが大きいほど、彼らはこれでより良いでしょう。非常によくピアリングされており、多くの帯域幅を備えているプロバイダーは、当然、より弾力性があり、アクティブで十分なスタッフが配置されたネットワーク運用チームを持つプロバイダーは、より迅速に対応できます。

負荷ベース

負荷ベースのDDoSが発生している場合、負荷平均が異常に高い(または、CPU、RAM、またはディスクの使用状況に応じて)プラットフォームと詳細)。サーバーは何の役にも立たないようですが、非常にビジーです。多くの場合、異常な状態を示す大量のエントリがログに記録されます。多くの場合、これはさまざまな場所から発生し、DDoSですが、必ずしもそうであるとは限りません。 多くの異なるホストである必要はありません

この攻撃は、サービスに多くの高価なものを実行させることに基づいています。これは、膨大な数のTCP接続を開いて、それらの状態を維持するように強制する、サービスに過度に大きいまたは多数のファイルをアップロードする、またはおそらく非常に高価な検索を実行する、または本当に処理にコストのかかる処理を実行します。トラフィックは、計画した範囲内で実行できますが、行われる要求のタイプは、あまりにも多くの処理にコストがかかります

まず、このタイプの攻撃が可能であることは、多くの場合、サービスの構成の問題またはバグを示しています。たとえば、過度に詳細なログが有効になっていて、書き込みが非常に遅いものにログを保存している可能性があります。誰かがこれに気づき、大量のログをディスクに書き込む原因となる多くのことを行うと、サーバーの速度が低下します。また、ソフトウェアが特定の入力ケースに対して非常に非効率的なことをしている場合もあります。原因はプログラムの数だけありますが、2つの例としては、サービスが終了していないセッションを閉じない状況と、子プロセスを生成して終了する状況があります。状態を維持するために何万もの接続が開いた状態で追跡したり、何万もの子プロセスを追跡したりすると、問題が発生します。

あなたができるかもしれない最初のことはトラフィックを落とすためにファイアウォールを使うことです。これは常に可能であるとは限りませんが、着信トラフィックで見つけることができる特性がある場合(トラフィックが軽い場合、tcpdumpはこれに適しています)、ファイアウォールでドロップすることができ、問題が発生しなくなります。もう1つのことは、サービスのバグを修正することです(ベンダーに連絡して、長いサポートエクスペリエンスに備える)。

ただし、構成の問題である場合は、そこから開始してください。本番システムのロギングを適切なレベルに下げます(プログラムによって異なりますが、これが通常はデフォルトであり、通常は「デバッグ」および「詳細」レベルのロギングがオフになっていることを確認する必要があります。ユーザーが行うすべての操作が正確に記録され、詳細、ロギングが冗長すぎます)。さらに、チェック子プロセスとリクエスト制限、おそらくthrottle着信リクエスト、 IPごとの接続、および許可された子プロセスの数(該当する場合)。

言うまでもなく、サーバーの構成とプロビジョニングが優れているほど、この種の攻撃は困難になります。 RAMおよび特にCPUでけちをすることは避けてください。バックエンドデータベースやディスクストレージなどへの接続が高速で信頼できることを確認してください。

エクスプロイトベース

サービスが不思議なことに起動後、非常に速くクラッシュする場合、特に、クラッシュの前にリクエストのパターンを確立でき、リクエストが非定型であるか、予想される使用パターンと一致しない場合、エクスプロイトベースのDoSが発生している可能性があります。これは、1つのホスト(ほとんどすべての種類のインターネット接続)から、または多くのホストから取得できます。

これは多くの点で負荷ベースのDoSに似ており、基本的に同じ原因と軽減策があります。違いは、この場合、バグによってサーバーが無駄になるのではなく、死ぬことです。攻撃者は通常、サービスにnull逆参照または何かを引き起こす文字化けした入力などのリモートクラッシュの脆弱性を悪用しています。

不正なリモートアクセス攻撃と同様にこれを処理します。 ファイアウォールは、元のホストおよびトラフィックのタイプを固定することができる場合は、それらに対するものです。 該当する場合は、検証リバースプロキシを使用します。 法医学的証拠を収集します(トラフィックの一部を試行してキャプチャします)。ベンダーにバグチケットを提出し、不正使用の苦情(または法的苦情)の提出を検討します。起源に対しても。

これらの攻撃は、エクスプロイトが見つかれば、かなり安価にマウントでき、非常に強力ですが、追跡して停止するのも比較的簡単です。ただし、トラフィックベースのDDoSに対して役立つテクニックは、通常、エクスプロイトベースのDoSに対しては役に立ちません。

191
Falcon Momot

あなたが企業であるならば、あなたは多くのオプションを持っています。あなたが私のような小さな男なら、小さなウェブサイトを提供するためにVPSまたは専用サーバーを借りると、コストはすぐに法外になりかねません。

私の経験から、ほとんどの専用プロバイダーとVPSプロバイダーは、サーバー専用の特別なファイアウォールルールを設定しないと思います。しかし、今日では、いくつかのオプションがあります。

CDN

Webサーバーを実行している場合は、CloudFlareやAmazon CloudFrontなどのCDNの背後に配置することを検討してください。

CDNは高価です。コストを抑えておくには、CDNではなくサーバーから直接大きなファイル(大きな画像、オーディオ、ビデオ)を提供します。ただし、これによりサーバーのIPアドレスが攻撃者に公開される可能性があります。

プライベートクラウド

プライベートクラウドは通常、高額なエンタープライズソリューションですが、Amazon VPCのコストは設定するものにほとんど変わりません。ただし、Amazonの帯域幅は一般的に高価です。余裕がある場合は、Amazon VPCのセキュリティグループとネットワークACLを設定して、インスタンスに到達する前にトラフィックをブロックできます。 TCPサーバーポートを除くすべてのポートをブロックする必要があります。

攻撃者は引き続きあなたのTCPサーバーポートを攻撃する可能性があります。それがWebサーバーの場合は、ノンブロッキングを使用するnginxのようなものを使用することを検討してくださいIOサーバーソフトウェアの最新バージョンを確実に実行する以外にできることは多くありません。

TCPポートが攻撃され、その他すべてが失敗した場合

これは私が開発したソリューションであり、WebSocket、メディアコンテンツ/ストリーミングサーバーなど、CDNの背後に隠れることができない非Webサーバーに適用されます。 CloudFlareはWebSocketをサポートしていますが、現時点ではエンタープライズ向けのみです。

TCPリスニングポートをボットネットが追いつけないほど速く(たとえば10秒に1回)変更することが目標です。これは、ポートローミングを実行する単純なプロキシプログラムを使用して実現されます。ポートのシーケンスは疑似ランダムですが、サーバー時間に基づく必要があります。サーバー時間とポートを計算するアルゴリズムは、クライアントのJavaScript /フラッシュコードで非表示にする必要があります。プログラムは、リスニングポートを変更するときにファイアウォールも変更する必要があります、ファイアウォールはステートフルである必要があります。誰かが興味を持っている場合は、Amazonで動作する私のnode.jsスクリプトをGitHubにアップロードします。

8
Hai Phan

ドメインを変更して、短時間0.0.0.0のようなブラックホールに移動します。

サーバーに話しかけて、サーバーにアクセスするための一時的な方法として別のIPアドレスを発行できるかどうか、またはサーバーがリモートコンソールにアクセスできるかどうかを確認します(サーバーの前に座っているように)。ここから、それが単一のIPアドレスであるかどうかを確認し、サイトまたは分散型攻撃からブロックできます。

4
John Fox

DDoS攻撃を受けている場合は、ISPが最も役に立ちますが、DDoS保護がない場合は、攻撃が停止するまでサービスを停止する可能性が高くなります。通常、攻撃されたIPアドレスが表示され、上流のルーターでネットワークが無効になります。トラフィックが少ない場合、DDoS保護のための多くのオンラインサービスがあり、トラフィックが再ルーティング、フィルタリングされ、サーバーに送り返されます。

1