08 February 2012

MediaWikiを使ったウエブサイト「title=http://...」クエリを送りつける攻撃を防ぐ

MediaWikiでページ管理しているウエブサイトのApacheログを見ていると、どうも連続攻撃を受け続けているようだ。

つぎのような設定で、ログオンしていないユーザは、記事を「編集」できないようにしているので、今のところ防御は破られていないようだが…

LocalSettings.php

$wgGroupPermissions['*' ]['createaccount'] = false;
#$wgGroupPermissions['*' ]['read'] = true;
$wgGroupPermissions['*' ]['edit'] = false;
$wgGroupPermissions['*' ]['createpage'] = false;
$wgGroupPermissions['*' ]['createtalk'] = false;

Apacheに記録されているエラーは

access_log

p32113-ipngn100102yosemiya.okinawa.ocn.ne.jp - - [07/Feb/2012:09:01:37 +0900] "GET /mw/index.php?title=http://210.1.60.156:2082/index.html? HTTP/1.1" 301 5 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)"
p32113-ipngn100102yosemiya.okinawa.ocn.ne.jp - - [07/Feb/2012:09:01:37 +0900] "GET /mw/index.php?title=Http://210.1.60.156:2082/index.html%3F HTTP/1.1" 404 5781 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)"
host-92-9-199-86.as43234.net - - [07/Feb/2012:09:16:35 +0900] "GET /mw/index.php?title=http://210.1.60.156:2082/index.html? HTTP/1.1" 301 5 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)"
host-92-9-199-86.as43234.net - - [07/Feb/2012:09:16:36 +0900] "GET /mw/index.php?title=Http://210.1.60.156:2082/index.html%3F HTTP/1.1" 404 5778 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)"

とにかく、1日に何百回と連続攻撃がやって来る。サーバにも負荷が掛かるのでこの辺りで反転攻勢に出るべきだろう。

ApacheのRewrite機能を使って、httpサーバの段階でアクセスを拒否することにする。MediaWikiルートフォルダにある .htaccess にちょこっと追加

.htaccess

# 通常、外部からアクセスする必要性のないファイルは接続拒否
<Files ~ "(AdminSettings.php*|LocalSettings.php|StartProfiler.sample|api.php*|img_auth.php*|opensearch_desc.php*|profileinfo.php|redirect.ph*|thumb.php*|trackback.php*|wiki.phtml|COPYING|CREDITS|FAQ|HISTORY|INSTALL|README|UPGRADE)">
Deny from all
</Files>

RewriteEngine on

# http://xxxx のキーワードを感知した場合は、接続拒否する
RewriteCond %{QUERY_STRING} title=http: [NC,OR]
RewriteCond %{THE_REQUEST} index.php/http: [NC]
RewriteRule index.php - [F]


こんな感じで…  多分うまく行くだろう。