2006/03/11

掲示板の荒らし対策


4年間の書き込みが200件にも満たない超マイナーな私の掲示板ですが、1週間ほど前から、掲示板攻撃用CGI PerlDUCK を使用したと思われる執拗な書き込み攻撃を受けています。

私の場合は、backup.bat を作成し、毎日、2週間分の掲示板ログ とアクセスカウンタデータ を Windows のTask機能を使用して 元ログとは別のドライブ/フォルダーに書換保存していますので、荒らされてもマウスを2回クリックするだけで元に戻せるのですが、書き換え頻度が一晩に400アクセス位と異常だったため、手動では追いつかなくなってしまいました。

最初は、アダルト系の書き込みと同様に簡単に考えていたのですが、どうも様子が違うことに気付きました。

既に攻撃を受けている状態ですので、自分で一から勉強しながら防御用CGIを作っている時間がなく、掲示板のCGIを提供いただいている Kent Web さん のHomepage からリンク先を辿り、 Grand Cru(zddbbsさんのページ) から LQアクセス制限ライブラリ を入手して 掲示板CGI wforum.cgi に組み込みました。

LQアクセス制限ライブラリ の使用方法は、zddbbsさんのページ に詳細が記載されていますので、ここでは詳細を省略して、簡単に組み込み方だけを記載します。

LQアクセス制限ライブラリ を全てダウンロードして、掲示板CGI の wforum.cgi と同じフォルダーに放り込みます。次に、lqxxxxxx.cfg、lqxxxxxx.dat、lqxxxxxx.log、lqxxxxxx.tmp、lqxxxxxx.lck という名前の0バイトファイルを新規作成します。

xxxxxxの部分は、LQアクセス制限ライブラリ からDownload した時に、変数として自動的に与えられていますので、そのファイル名に合わせます。

0バイトファイルは、フォルダーを開き、マウスを右クリックして新規作成 => テキスト文書 でファイルを作成してから、ファイル名のみを変更することで簡単に作成することが出来ます。

そして、LQアクセス制限ライブラリの各種初期設定を zddbbsさん のページに従い設定します。

次に掲示板CGI wforum.cgi をテキストエディタで開きます。外部ファイル取込みの最後の行にrequire './lqxxxxxx.pl'; を追記します。作業はこれだけです。

#!c:/perl/bin/perl

#┌─────────────────────────────────
#│ Web Forum v4.5 <wforum.cgi>
#│ Copyright (c) KentWeb
#│ XXXX@kent-web.com (メールアドレスは伏せさせて頂きます/by takajun)
#│ http://www.kent-web.com/
#└─────────────────────────────────

# 外部ファイル取込み
require './jcode.pl';
require './fold.pl';
require './wf_init.cgi';
require './lqxxxxxx.pl';

組み込みが完了すれば、一度掲示板に入り動作を確認した後、ブラウザ上のアドレスを http://wwwhogohoge/cgi-bin/wforum.cgi の赤字部分を lqxxxxxx.cgiに書き換えてアクセスします。

パスワードを入力して lqxxxxxx.cgi に入ったら、設定変更をクリックして、アクセス制限のレベルを最強にします。

これで大丈夫かな? と思ったのですが、掲示板攻撃用CGI は、しっかりLQアクセス制限ライブラリ の盲点を突いてきて、アクセス拒否率は大体 60% から 80% 程度でした。

導入時点では、下記LQアクセスログを使用して、すり抜けられた IP や ホスト名を 都度 手動でアクセス禁止にしていましたが、モグラたたき状態できりがありません。(アクセス禁止条件を開示したくないため、アクセス制限のない例を掲載します。)

045: 2006年03月11日(土) 00時11分27秒 (GET METHOD)
処理結果 IPアドレス ホスト名 ID
アクセス制限しない xxx.xxx.xxx.xxx msnbot.msn.com -
現在設定での検査結果 現在登録での検査詳細
アクセス制限しない (該当登録なし)
環境変数 環境変数の値
HTTP_USER_AGENT msnbot/1.0 (+http://search.msn.com/msnbot.htm)
QUERY_STRING mode=find&page=10&list=tree
HTTP_FROM msnbot(at)microsoft.com
[HELP]
 ホスト名
[HELP]
 IPアドレス [xxx.xxx.xxx.xxx] の
[HELP]
 アクセス禁止の有効期限
  30日 90日 180日 360日
[HELP]
 IPアドレス [xxx.xxx.xxx.xxx] の

とはいえ、1週間近くもお付き合いをしていますと、ログの解析から攻撃者特有の攻撃パターンが読めてきますので、この条件とこの条件でアクセスした場合はアクセス禁止 という風に、lqxxxxxx.pl のアクセス認可条件を書き換えます。

(この条件部分は、現在も攻撃を受けていますので開示できません。また、個別にご質問を頂いても、攻撃者が異なれば条件が変化しますので、お答え致しかねます。悪しからずご了承の程お願い致します。)

攻撃者から掲示板に入られる度にCGIの修正をします。3 回程、条件構文の修正をしたところで全ての攻撃アクセスを弾いてくれるようになりました。最終修正から2日経ちましたが、今のところは大丈夫なようです。(^_^)/

「こんな事(荒らし)をして楽しいの?」という素朴な疑問は、初心者のためのセキュリティ対策/荒らし対応失敗例 に「(攻撃者は)楽しい」という回答をみつけましたから、そうなんでしょうね。私には理解できませんが。

私の掲示板が無防備だった事は事実で、警鐘を鳴らしてくれた事や、修正したアクセス制限CGI がうまく動作するか 無料でしかも長時間あの手この手でチェックをしてくれていると考えると、当初の憂鬱さが楽しみに変わりました。アクセスログを見ていて、改良したCGI が次々と攻撃アクセスを弾いていく様子を見ているとむしろ楽しく感じてしまいます。

簡単なCGIであれば作れる程度のスキルがあったので、今回の事件をプラス思考で捉えることが出来ましたが、CGI なぞ書いたことがないという方が管理されている掲示板でPerlDUCK 攻撃を受けた場合は、掲示板ログ を Linux であればパーミッションを、Windows であれば 属性を読み取り専用にし、掲示板を閲覧専用にして攻撃が止むのを待ちつつ、標準状態でもいいのでLQアクセス制限ライブラリを導入することをお薦めします。

決して掲示板を閉鎖しようなどとは思わず、対策を講じていきましょう。ネット上には検索すれば山ほどの情報があります。自分のスキルに合わせて、対応できる手段から順に手を打てば必ず封じる事ができるはずです。(多分・・・)

私は 被掲示板攻撃を喜ぶような被虐思考はありませんし、その種の人たちを挑発している訳でもありませんので、これを読まれて、防御CGIを破ってやろうなどとは決してお考えにはならないで下さい。(^^ゞ

尚、書き込み時に、クッキーによる選別を行なう場合は、wf_regi.cgi もテキストエディタで開き、外部ファイル取込みの最後の行にrequire './lqxxxxxx.pl'; を追記します。

#!C:/perl/bin/perl

#┌─────────────────────────────────
#│ Web Forum v4.5 <wf_regi.cgi>
#│ Copyright (c) KentWeb
#│ XXXX@kent-web.com (メールアドレスは伏せさせて頂きます/by takajun)
#│ http://www.kent-web.com/
#└─────────────────────────────────

# 外部ファイル取り込み
require './jcode.pl';
require './fold.pl';
require './wf_init.cgi';
require './lqxxxxxx.pl';

この行を追加すると、クッキーをOFFにしておられる方は、書き込みができなくなってしまいますので、掲示板の最初の部分に
「尚、クッキーがONになっていませんと書き込みが出来ませんのでご注意下さい。」
というコメントを追記しておきます。


追記:2006/03/11 23:20

あらら? このページをアップロードしたのが 20:00 ですが、21:30 のアクセス攻撃失敗後 約2時間もアクセスがありません。今まで 2時間も間隔が空くことが無かったのですが・・・・。パソコンのメンテでもしているのかな?

と思ったら、23:21 に来てくれました。逆にホッとしたような変な感じです。勿論、しっかりとアクセスを弾いてくれています。


追記:2006/03/12 10:30

少し攻撃アクセス件数が減ったようです。昨日 22:30 以降 現在までの攻撃アクセス件数は 58回 でした。全件 アクセスを弾いています。(^_^)/

掲示板攻撃者は、当然プロクシを使用してきますが このIPを元に、whoisでサーバ管理者への連絡方法を調べているところです。でも whois に引っかからないプロクシ も多いですね。

取り敢えず、whois で連絡先が分かったサーバーに対しては、アクセスログをメールで請求中です。初心者のためのセキュリティ対策 のページに アクセスログの請求の仕方が掲載されていますので、今回はこちらを参考にさせて頂きました。

Subject: abusing your proxy server

Dear Master,

I am the webmaster of "Welcome to Takajun's Video Room"(http://www.takajun.net/).
12/Mar/2006, from 01:43 to 01:45 (GMT),
our server was cracked.

This cracker used your HTTP proxy server "xxx.xxx.xxx"
Our server was damaged seriously.
I must locate this cracker to pursure a restitution.
Then, please offer your proxy server access log of paris.upf.edu.

I need your collaboration, and wait your reply.

Thank you.

ログが入手できたら、元IPを検索して、糸を手繰っていきます。2重串の場合も同じ方法で元IPを入手できます。犯人の割り出しは、ちょっとした探偵気分で結構 暇つぶし 且つ 楽しめます。

あとは、 初心者のためのセキュリティ対策/アクセスログの求め方 の手順で対応する予定です。

しかし、マメにアクセスしてきても、CGI で全て弾いているから良いようなものの、普通の方は1ヶ月も続けられるとめげるでしょうね。 まあ、こんなことでもないと、真面目にCGI / perl の勉強なんてしないので、これを機にもう少し勉強してみます。この次は、画像認証コード方式でも導入してみようかな?

(でも攻撃が終わると、のど元過ぎれば何とかになりそう・・・)

掲示板の荒らし対策 関連 Page
2006/03/11 掲示板の荒らし対策
2006/03/14 掲示板荒らし顛末
2006/03/17 掲示板荒らし顛末(その後)










当 Page への Link は自由ですが、Auction 等の商品説明や補足のために Link を張る事は堅く禁じます。(詳細はこちら

Copyright (c) 1999 - 2006 takajun. All rights reserved.