スローリード攻撃およびその他の標的型攻撃からApache Webサーバーを保護する

ご挨拶。

Apache Webサーバーを低速読み取り攻撃から保護した経験を共有したいと思います。 この攻撃がここ (英語)とここ (ロシア語)で読めるという事実。



考慮された方法では、mod_evasiveおよびmod_securityの拡張機能を使用してサーバーを保護できます。最も重要なことは、30分未満の実装時間です。 設定はUbuntuバージョン12.04 + Apache 2.2で行われました。 Webサーバーの他のバージョンと他のオペレーティングシステムの設定は、主にソフトウェアパッケージのインストール機能と、実際にインストールされたプログラムとモジュールのバージョンが異なります。







パッケージのインストール

保護されたサーバーはUbuntuにインストールされるため、Apacheに必要なモジュールのインストールは1つのコマンドで実行されます。

sudo apt-get install libapache2-mod-evasive libapache-mod-security







mod_evasiveパッケージアプリケーションレベルの DDOS フラッド攻撃に対する保護提供しますがmod_securityは、スローリード攻撃などの標的型攻撃に対する保護を提供します。



mod_securityは、Webサーバーを保護するオープンソースソフトウェアファイアウォールであり、 Trustwave SpiderLabsによって開発されています



mod_evasiveの構成

モジュールを機能させるには、Apacheを書き込む権限を持つログを保存するためのフォルダーが必要です(Webサーバーはwww-dataユーザーから起動されることを前提としています)。

sudo mkdir /var/log/mod_evasive

sudo chown www-data:www-data /var/log/mod_evasive/








設定を使用してファイルを作成します。

sudo nano /etc/apache2/conf.d/modevasive

<ifmodule mod_evasive20.c>

DOSHashTableSize 3097

DOSPageCount 2

DOSSiteCount 50

DOSPageInterval 1

DOSSiteInterval 1

DOSBlockingPeriod 90

DOSLogDir /var/log/mod_evasive

DOSEmailNotify EMAIL@DOMAIN.com

DOSWhitelist 127.0.0.1

</ifmodule>






電子メールは、検出された攻撃に関する情報の受信者のアドレスに置き換える必要があります(手紙を送信するに sendmail / postfixが必要です)。

これでmod_evasiveのセットアップが完了しました。



mod_securityの構成

mod_securityはファイアウォールであるため、機能するには一連のルールが必要です。

SourceForgeのページから最新バージョンのルールをダウンロードできます。 さらに、ルールの自動更新を設定することもできます。これについては、 ここで詳しく説明します

ダウンロードしたアーカイブには、いくつかのフォルダーがあります。 base_rulesフォルダーにある基本的なルールに興味があります。

ルール用のフォルダーを作成し、SourceForgeからダウンロードして解凍したファイルからルールをコピーします。

sudo mkdir /etc/apache2/mod_security_rules

sudo mv base_rules/* /etc/apache2/mod_security_rules

sudo chown -R root:root /etc/apache2/mod_security_rules






次の内容でmod_securityの構成ファイルを作成します。

sudo nano /etc/apache2/conf.d/modsecurity

<ifmodule mod_security2.c>

Include mod_security_rules/*.conf

SecWriteStateLimit 100

</ifmodule>






この構成は、コピーしたばかりのルールを接続し、さらに、個々のIPのストリーム数に制限を設定します。これは、 SERVER_BUSY_WRITEモードにすることができ、 Slow Loris / SlowHttpなどの攻撃の可能性を防ぎます。



Ubuntuの32ビットバージョンの場合、設定はここで終了します。

x64には、libxmlの接続を妨げるライブラリパスの違いに関連するmodsecurityのバグがあります。 これを修正するには、最初に行うことは、libxml2.so.2ライブラリの場所を特定することです。

locate libxml2.so.2



2つのオプションがあります:/usr/lib/x86_64-linux-gnu/libxml2.so.2または/usr/lib/i386-linux-gnu/libxml2.so.2 次に、/ etc / apache2 / mods-enabled / mod-security.loadファイルを編集し、接続されたライブラリが存在するパスを/usr/lib/libxml2.so.2でシステム上のライブラリパスに置き換えます。



モジュールが接続されていることを確認します。

sudo a2enmod mod-evasive

sudo a2enmod mod-security






Apacheを再起動して構成を適用します。

service apache2 restart







テスト中

テストには、 slowhttptestユーティリティを使用します。 プロジェクトのページでその構成とインストールについて読むことができるので、すぐにアプリケーションに移りましょう。

slowhttptest -c 65539 -B -g -o my_server_stats -i 110 -r 200 -s 8192 -t FAKEVERB -u DOMAIN.COM -x 10 -p 3





プログラムの出力を信じている場合、すでに5秒でサーバーが利用できなくなります。

Sat Jun 2 16:41:37 2012:slow HTTP test status on 5th second:

initializing: 0

pending: 564

connected: 217

error: 0

closed: 0

service available: NO






そして、ここに私がApacheログに書いたものがあります:

tail /var/log/apache2/error.log

[Sat Jun 02 16:41:38 2012] [warn] ModSecurity: Access denied with code 400. Too many threads [101] of 100 allowed in WRITE state from xxx.xxx.xxx.xxx - Possible DoS Consumption Attack [Rejected]








そのため、サーバーは遅い読み取り攻撃の影響を受けにくくなり、 IPアドレスによって攻撃ユーザーを一時的にブロックします



この保護方法の主な利点は、構成のシンプルさと速度、オープンソースソリューションの使用です。

弱点は、さまざまなIPアドレスからの分散攻撃です。



All Articles