hashdos対策にModSecurity2いれてみた


新年あけましておめでとうございます。
今年もよろしくお願いします(・ω・)

さて、2011年の暮れに気になる記事を発見。
徳丸浩の日記: Webアプリケーションに対する広範なDoS攻撃手法(hashdos)の影響と対策
お手軽にDoS攻撃できちゃう方法が見つかった&発表された。対策しましょう!
というお話。

またやっかいなモンが…とりあえずどんなもんか試してみよう。
攻撃のデモができるサイト(PHP向け)が公開されていたので、それを使って試してみる。
パラメーター数:65536
データ量:約1.4MB
攻撃対象:テスト用に立ち上げたEC2マイクロインスタンス。Apache2 + PHP5.3.5のみ搭載。
PHP:白紙phpファイル (<?phpだけ書いたファイル)
攻撃内容:POST処理1発のみ

んでは…攻撃!!

結果(各画像クリックで拡大):

POSTが完了するまでの時間:4.7分
CPU:4.7分の間、CPUはずっと99%

Σ( ゚Д゚ ) …うーわー…

ちょっとシャレにならないので、上記記事で紹介されていたmod_securityをいれてみました。
結果、
POST完了までの時間:6秒ちょい
CPU:使用率上がる気配なし (瞬間的には上がってる?)

で済むように。

HashDos対策済の言語&バージョンを使えるなら問題はありませんが、それができない場合はmod_security導入が役に立つのではないでしょうか。

んでは、以下導入した記録:

必要なツールを入れておく
[shell]
yum install pcre-devel
yum install libxml2
yum install libxml2-devel
yum install curl
yum install curl-devel
[/shell]

ModSecurityインストール。…の前に、Apacheは止めておく。
ModSecurity公式サイトから最新版を取ってきてビルド。

[shell]
wget http://sourceforge.net/projects/mod-security/files/modsecurity-apache/2.6.3/modsecurity-apache_2.6.3.tar.gz/download
tar xzvf modsecurity-apache_2.6.3.tar.gz
cd modsecurity-apache_2.6.3

# オプション無しの ./configure したらmake時にcurl関連ツールが無いよ、と怒られた。
# 下記ならOKだった。
./configure – -with-curl=/usr/bin/curl-config
make
make install
[/shell]

Apacheのmoduleディレクトリにmod_security2.soができているのを確認。
次に、ModSecurity用ルールファイルを作成。(空でOK)
ルールはこのファイルに追加していく。
[shell]
touch conf/modsec/modsecurity_basic.conf
[/shell]

httpd.confに設定を直接追加…してもいいけど、 conf.d/modsecurity.conf に設定を追加。
[shell]
LoadModule unique_id_module modules/mod_unique_id.so
LoadModule security2_module modules/mod_security2.so
<IfModule mod_security2.c>
SecRuleEngine On
SecAuditEngine On
SecAuditLog logs/modsec_audit_log
SecRequestBodyAccess On
Include conf/modsec/modsecurity_basic.conf
</IfModule>
[/shell]
※<IfModule mod_security2.c> ←「2」がついているので注意。

Apacheをスタート。
SecAuditLogで指定した場所にログファイルができていればひとまず動作確認OK。
Webページを読みこむと、このログファイルに色々記録されるはず。

ログの動作確認ができたら
SecAuditEngine ON から SecAuditEngine RelevantOnly にするのがオススメ。
(ONは全ての通信を記録。RelevantOnlyはエラー時のみログ記録)

ModSecurityはデフォルトで色々な設定がなされている様子。
空のルールファイルでもHashDos攻撃を防いでくれた!

これで導入はOK。
あとは自分のルールを追加していけばいいかと。

あ、ModSecurityをいきなり本番へ導入するとPOST処理など様々な通信に影響を及ぼす可能性アリ。
テストサイトでじっくり動作検証してから本番導入するべし(。・ω・)ノ

ModSecurityはフィルタリングやログ記録など色々できるっぽいので、色々勉強してみよう。
参考:ModSecurity公式マニュアル

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください