«

»

9月 05

Apacheに mod_antiloris を導入して、Slowloris の攻撃に耐えることができるようにしてみる。

さて、わたし自身の手によって閲覧不可能に陥ってしまったこの code.zobe.jp ブログ。

復活することはできるのか!?

 

いや、攻撃を停止したから復活してるんですけど…。

 

 

さて

攻撃を受けたらどうすればいいのか?

 

pound による reverse proxy を経由して通信させると防衛できる

http://www.drk7.jp/MT/archives/001527.html

 

mod_antivirus, mod-pacify-slowloris による対処

http://d.hatena.ne.jp/port445/20090626#p1

 

mod-pacify-slowloris による対処

http://kikuz0u.x0.com/blog/?p=123

 

などの先人たちの苦労を発見しました。大変だねぇ。いや自分もだけど。

 

いろいろ見て回った結果を総合的に直感的に怠惰に判断した結果

今回は mod_antiloris だけを試してみることにしました。

 

まずはソースコードを落としてきます。FTPがめんどいので、w3mコマンドで落としてきました。

今回落としてきたファイルは mod_antiloris-0.4.tar.bz2 です。最新版を拾えばよろしいでしょう。

[root@code.zobe.jp]# w3m http://sourceforge.net/projects/mod-antiloris/files/

 

そして、解凍して、コンパイルします。

コンパイルには apxs です。事前に用意しましょう。

CentOSならば「yum install httpd-devel」で入ります。

[root@code.zobe.jp]# tar -xjvf mod_antiloris-0.4.tar.bz2
[root@code.zobe.jp]# cd mod_antiloris-0.4
[root@code.zobe.jp]# apxs -a -i -c mod_antiloris.c

これで一気にインストールが終わってくれました(CentOS5の場合です)。

/usr/lib64/apr-1/build/libtool --silent --mode=compile gcc -prefer-pic -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -fno-strict-aliasing  -DLINUX=2 -D_REENTRANT -D_GNU_SOURCE -pthread -I/usr/include/httpd  -I/usr/include/apr-1   -I/usr/include/apr-1   -c -o mod_antiloris.lo mod_antiloris.c && touch mod_antiloris.slo
/usr/lib64/apr-1/build/libtool --silent --mode=link gcc -o mod_antiloris.la  -rpath /usr/lib64/httpd/modules -module -avoid-version    mod_antiloris.lo
/usr/lib64/httpd/build/instdso.sh SH_LIBTOOL='/usr/lib64/apr-1/build/libtool' mod_antiloris.la /usr/lib64/httpd/modules
/usr/lib64/apr-1/build/libtool --mode=install cp mod_antiloris.la /usr/lib64/httpd/modules/
cp .libs/mod_antiloris.so /usr/lib64/httpd/modules/mod_antiloris.so
cp .libs/mod_antiloris.lai /usr/lib64/httpd/modules/mod_antiloris.la
cp .libs/mod_antiloris.a /usr/lib64/httpd/modules/mod_antiloris.a
chmod 644 /usr/lib64/httpd/modules/mod_antiloris.a
ranlib /usr/lib64/httpd/modules/mod_antiloris.a
PATH="$PATH:/sbin" ldconfig -n /usr/lib64/httpd/modules
----------------------------------------------------------------------
Libraries have been installed in:
   /usr/lib64/httpd/modules

If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR'
flag during linking and do at least one of the following:
   - add LIBDIR to the `LD_LIBRARY_PATH' environment variable
     during execution
   - add LIBDIR to the `LD_RUN_PATH' environment variable
     during linking
   - use the `-Wl,--rpath -Wl,LIBDIR' linker flag
   - have your system administrator add LIBDIR to `/etc/ld.so.conf'

See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------
chmod 755 /usr/lib64/httpd/modules/mod_antiloris.so
[activating module `antiloris' in /etc/httpd/conf/httpd.conf]

 

そして httpd を一度再起動かけて…

[root@code.zobe.jp]# service httpd restart

 

mod_antiloris が Apache に組み込まれたかどうか、確認してみると…

[root@code.zobe.jp]# httpd -M
Loaded Modules:
 core_module (static)
 mpm_prefork_module (static)
 http_module (static)
 so_module (static)
...(中略)
 version_module (shared)
 antiloris_module (shared)
 xsendfile_module (shared)

 

これで設置から設定まで完了しちゃったようです。いいのかなー。こんなに簡単で。

 

 

よし試してみよう!!

 

 

[root@attacker]# perl slowloris.pl -dns code.zobe.jp -port 80

↑そのまま使わないでね。うちのサーバが泣いちゃうから。

 

 

そしてブラウザで開いてみると…

1秒でちゃんと表示できたという記録

おー。ちゃんと1秒で表示できました。

 

耐えきったようです。

 

 

接続数を確認してみると…

    424 192.168.256.257 (←このサーバ自身)
    385 256.257.258.259 (←これ攻撃元)

 

攻撃直後はこうで…

 

     44 192.168.256.257 (←このサーバ自身)
     12 256.257.258.259 (←これ攻撃元)

 

3秒後には、しぼみます。

mod_antiloris大勝利です。Slowloris敗れたり。

 

 

ハイになりながらその後

 

接続数1000

perl slowloris.pl -num 1000 -dns code.zobe.jp -port 80

 

接続数3000

perl slowloris.pl -num 3000 -dns code.zobe.jp -port 80

 

接続数3000 + 別サーバ(別グローバルIP、別ネットワーク)からも攻撃1000

Server1# perl slowloris.pl -num 3000 -dns code.zobe.jp -port 80
Server2# perl slowloris.pl -num 1000 -dns code.zobe.jp -port 80

 

といろいろ試しましたが、問題なしでした。

 

 

というわけで、現状のApache(少なくともCentOS5のApache)では、mod_antilorisを導入すると、

Slowlorisの攻撃に耐えることができそうなカンジでした。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次の HTMLタグおよび属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>