web-dev-qa-db-ja.com

DOS攻撃からの保護

現在のサイトは簡単にDOS化されています。 ApacheからABテストを実行でき、約5〜10分間消えます。私たちは他の人がサイトをDOSで使用することで問題を抱えています-それまで8時間シャットダウンしなければならなかったところまで(サーバーホストによって推奨されます)。

サーバーはRackspaceによってホストされています。彼らはそれを8時間シャットダウンすることを推奨しました。

DNSのクラウドフレアをセットアップしましたが、58,000のリクエストを送信したABテストの後で、サイトは(もともとではなく)再びオフラインになりました。

Rackspaceはこれ以上の提案を提供しておらず、当面は何をすべきかを理解する必要があります。サーバーホストの切り替えは現時点ではオプションではありません(リードデベロッパーは新しいポジションに1週間で出発します)。

この特定の攻撃により、mysqlデータベースにsleepコマンドを使用して多くの接続が作成されました。

DOS攻撃を再度防御する方法についての提案や推奨事項はありますか?

仮想ホストのRAM=を増やすと、まったく役に立ちますか?

8
Jeff

攻撃がsleepコマンドを使用して多数のデータベース接続を作成している場合、DoSは直接的な問題ではなく、問題の結果であると思われます。つまり、データベースが非常にsleepingしているということです。

ここには2つの可能性があると思います。

  • 最初の可能性は、これが組み込み関数であり、特定の状況では、アプリケーションが明示的にデータベースをスリープ状態にしていることです(@Roryが言及したとおり)。これが事実である場合、これは非常に悪いパターンであり、削除する必要があります。他の解決策があり、これは絶対に避けてください。
  • より可能性が高く、さらに悪いことに、Webサイトに SQLインジェクション の脆弱性があります。 良いニュースは、これまでのところ、攻撃者はのみのようですそれを使用してサイトをDoSします。その悪いニュースは、それはおそらくそれよりはるかに悪いということです。
    しかし、より良いニュースです。これは、有能なプログラマが簡単に見つけて修正できるコード内の特定のバグであり、不定形で匿名の「DoS」(実際にはさまざまなものになる可能性があります)ではありません。

是正?
まず、上記のどれが当てはまるかを考えます。簡単なはずですが、プログラマーにsleepコマンドを意図的にデータベースに送信するかどうかを尋ねることから始めます。また、関連するsleep文字列をコードベースで検索するのに十分簡単なはずです。
それが最初のシナリオの場合-コードをリファクタリングして問題のコマンドを削除します。
それ以外の場合-そしておそらくあなたはとにかくこれを行うべきです-SQLインジェクションについて少し読んで、すべてのプログラマーに同じようにしてもらいます。欠陥を見つけて修正してから、集中的な侵入テストを実行します。 (経験豊富なセキュリティ専門家をここで手に入れることができます)。次に、このような重大なセキュリティバグの根本的な原因を検討し、トレーニング、コードレビュー、SDL、ペンテストなどを使用して、セキュリティの全体的なレベルの強化を開始します(セキュリティの専門家もこれに役立ちます)。

6
AviD

DOS/DDOSを防ぐためにできることがいくつかあります。
まず、autobanファイアウォールの使用をお勧めします。 Fail2Ban をしばらく使用しています。 SSH、FTP、BINDなどへのDDOS/DOS攻撃に関する私の問題のほとんどは解決されました。 fail2banが実際に行うことは、ログファイルをスキャンすることであり、正規表現パターンがX回一致すると、ユーザーを禁止します。もう少し作業することで、ほぼすべてのタイプのログファイルを読み取ることができます。

第二に、DDOS/DOS攻撃を防ぐために、Apacheにいくつかのmodがありました。それらの1つは mod_evasive でした。私はしばらくそれを使用しましたが、fail2banは(今のところ)一番うまくいきました。

別の可能性は、Nginxをフロントエンドとして使用して、Apacheサーバーへの接続要求をプロキシ転送することです。次に、NginxのHttpLimitZoneModuleinfo )を必要な数に設定します。これにより、単一のIPからの最大着信接続が減少しますが、DDOSが妨げられることはありません。

最後に、未使用のポートをすべて閉じます。ポート21、53、80、443などとして公開する必要があるポートのみを残します。これにより、攻撃者が標的とする可能性が制限されます。

編集:
icmpを制限するいくつかのiptablesルールを設定して、pingフラッドが発生しないことを確認してください。これは、pingフラッドがどのように機能するかを説明する link です。最初に写真を見てみてください。そうすれば、テキストがわかりやすくなります。
iptablesを使用している場合、このコマンドはping/icmpフラッドを防ぐのに役立ちます:

iptables -A INPUT -p icmp -m limit --limit 6/s --limit-burst 1 -j ACCEPT
iptables -A INPUT -p icmp -j DROP

最初のものは、icmpリクエストを1秒あたり最大6リクエストに制限します。あとがきその人はそれ以上の返事をもらえません。これにより、循環しているボットが排除されます。

for(i=0; i<1000000; i++){ 
   some evil code that will bring your server down 
   either by pinging or just connecting to random ports. 
};
16
tftd

これ 記事は素人にとって良いスタートです。最終的には、セキュリティの専門家を雇うことをお勧めします。

それが選択肢ではない場合(エキスパートになることが期待される場合)、効果的なDOS緩和戦略には次のものが含まれることを読みました。

  • DOS攻撃の開始(トラフィックの突然の急上昇など)を検出するための最先端のIDSツール(サードパーティまたは自社開発)を持っている。そして
  • 誰かを(少なくともしばらくの間)フルタイムでネットワークトラフィックを監視し、サーバーに冗長的に(複数回)接続されているIPアドレスをブロックする->詳細は this の記事を参照

あなたが誰であるか、または誰のために働いているかを知らなければ、あなたが同じ当事者によって一貫して再攻撃されているかどうかを推測することは困難です。あなたが大企業の場合、おそらく複数の(異質な)グループがあなたをシャットダウンしようとしています。あなたが小さければ、それはおそらくあなたを攻撃している同じエンティティ/グループです。その場合は、違反したIPをこの方法で数週間積極的にブロックすることを約束すると、時間の経過とともに攻撃者を粉砕して阻止する可能性があります。

セキュリティの大きな点は、資産の取得コストを資産自体の価値よりも高くすることです。

そして、あなたが大企業なら、私よりもリーグを知っている真の専門家/コンサルタントを雇う余裕があります;-)

6
Adam Tannon

DoS攻撃の仕組みに関する詳細については、この質問を参照してください。

この特定のケースでは、データベースが応答しなくなるまで強制的に待機サイクル(sleep)を許可する関数を攻撃が使用しています。

必要な場合を除き、sleepコマンドを完全に禁止することで解決できる場合があります。より良い解決策は、ストアドプロシージャを除くデータベースへのすべての接続を防ぎ、アプリケーションの実行に必要なコマンドのみが許可されるようにすることです。これにより、攻撃者がホールを見つけて悪用することがはるかに困難になります。

4
Rory Alsop