« | Home | »

2007.02.10

コメントスパム攻撃

攻撃、そう正に攻撃です。

昨年暮れに、HDDがおかしくなり、大急ぎで新しいHDDでサーバを立て直し、やれやれと安心していたら、年が明けてしばらくしてから、どうも調子が悪い。
日に2?3回、外からWebページにアクセスしても無応答で、サーバがダウンしたかと思っていると1時間ぐらいで回復することが繰り返されていた。 最初のうちは、外からアクセスするばあいのproxy serverがbusyかなにかだろうと思っていたが、どうもそうでは無いらしいと気づいた。 が、しばらくすると回復するので忙しさにもかまけて放っておいたが、終に我慢の限界に達して、本格的に調べる決心をして待ち構えていた。

そして、それは起こった。 HDDのアクセスランプは点きっぱなしでなにやら激しくアクセスしている音が聞こえる。
早速、ログインしてtopでプロセスを見ようとしたが、ログインも出来ない。 pingには応答する。
以前にDOS攻撃やられたこともあり、とにかく、何かの攻撃らしいとみて、LANケーブルを抜いて、Localでログインしようとするが、一向に回復しない。 30分ぐらい経過して何とかログインできてtopコマンドを打って驚いた。
wwwが起動するperlプロセスのオンパレードで、まだキューに350ほど溜まっている。
もちろん、メモリーは全部食いつぶされて、HDDのswapを使って必死に実行しようとしているのだ。

1. 対策

ここで、ブログに対するコメントスパムの攻撃だろうと気づいたが、どう対策するか考える必要に迫られた。
MTに対するコメントスパムに対する対策はネットで調べると、沢山引っかかり、日本語文字の含まれていないコメントはリジェクトするとか、コメントの投稿formにhidden属性でキーワードを仕込んでおき、それをチェックすることで、ちゃんと投稿欄に書き込んだかをみるなどの方法が書かれている。

これらは有効な方法で過去には見事にスパムを撃退することも出来たが、今回はこれらは役に立たない。
何故なら、以前に取った対策は有効に機能していて、まったくコメントの投稿を防いでいるのだが、あまりのも激しい攻撃で、コメントの妥当性をチェックするに要する時間より短い間隔での攻撃だからだ。
ログを見ると1秒間に30回ぐらいの攻撃が延々と続く。

最初に思いつくのはコメント処理のcgiのファイル名を変えることであるが、ネットで調べると1週間ぐらいしか持たないらしい。 たしかにブログページを解析すれば、直ぐにcgiの新しいファイル名は知れるのだから、そうかも知れない。 1週間に1回の割合でファイル名を変え、mt-config.cgiのScript名を、それに直してすべてのブログを再構築するなどやっていられないですよね。

ここで、見つけたのが、
Junk Slowdownというページです。
mt-comment.cgiの名前を変えると同時にmt-comment.cgiにアクセスしてきたら.htaccessのredirect機能で別のところに飛ばし、受け付けない旨のメッセージを返し、また30秒のDelayを入れることだ。

具体的に方法は、
(1) Movabletypeがインストールされているディレクトリーの.htaccessに次の2行を追加

RewriteEngine on
RewriteRule ^(mt-comments|mt-tb|mt-comcom|mt-tbtb)\.cgi$ /xyz/sand-trap.php [LAST]

/xyz/sand-trap.phpは、飛ばし先である。
(2) comments.cgiとmt-tb.cgiの名前を変更
ここでは、comments.cgi → mt-koment.cgi, mt-tb.cgi → mt-back.cgi として例示する。
mt-config.cgiのコメントとトラックバックのScriptを変更。 もし、コメントとトラックバックに関するScript指定の記述がmt-config.cgiに無ければ、下記の2行を追加する。

CommentScript mt-koment.cgi
TrackbackScript mt-back.cgi

そして、全てのブログページを再構築
(3) sand-trap.phpを作って /xyz/ディレクトリーに入れる。 もちろん、phpの実行環境がない場合は、perlで記述してもよい。 下記はphpの例である。

<body>

<div style="font-size:200%;
            text-align:center;
            background:#822;
            color:white;
            border:2px solid red;
            padding:1ex;
            margin-bottom:1ex;
            ">
Sand Trap
</div>

<p style="border:2px solid red;
          padding:1ex;
          ">
You have been redirected to this script because
you have used an obsolete resource to which
no references exist on this website. This makes
you presumably a junker, and therefore your
session has been bogged down with this webpage.
</p>

<?php
ob_flush();
flush();
sleep(30);
?>

<p style="text-align:center;
          border:2px solid red;
          padding:1ex;
          margin-top:1ex;
          ">
If you are going to abuse me, I will abuse you right back.
</p>

</body>

適用したら、効果テキメン。 やっとサーバを安定稼動状態に保つことができた。
どうも、スパム対策は、妥当性のチェックの精度を上げることに血道をあげてもダメで、DOS攻撃ライクの集中攻撃に対する対策を考える必要の段階にきたようだ。
今回の方法も破られる時がくるのではと心配である。 次の対策もいまから策を練っておく必要がありそうだ。

コメント

コメントはありません

コメントフィードを購読する

コメント投稿





コメント本文に次の(X)HTMLタグを使えます:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)