WordPress Plugin : loginぺージアクセスのたびに管理者にEメールを送信してくれるWP Login Alerts by DigiP


- Old Counter



WordPressのログインページにBrute Force攻撃して、進入しようとしているハッキングがはやっているそうですね。
Massive botnet using brute force attack to target WordPress sites – 2013年4月13日

Brute Force攻撃とはハッカーが、良く使われる簡単なパスワードリストを全部試してみてログインできるかどうかを試したり、アルファベットと数字の組み合わせを全部試してみてログインできるかどうかをやってみたり、すること。
当然のことですが、一度では「推測」が当たらないので、同じ時間帯に違う推測パスワードで何度もログインをトライします。
何回(何十回、何百回)かでうまくログインできれば、シメシメ。だめだったら、次のサーバーへ犠牲者を求めて移ります。

まあ、これを防ぐには、パスワードを簡単に推測できないようなものに変えることです。大文字・小文字・数字の組み合わせ。長い文字列。
筆者は、意味の無い4文字大文字、5文字小文字、3桁数字の合計12文字を組み合わせています。
したがって、第三者が簡単に筆者のパスワードを推測できない自信は、あります。
しかし、ひとつのサイトでそのパスワードが知られると、他のサイトでも同じパスワードを使っているところは不正侵入される可能性は、ありますが。

これまでもサーバー管理やWordPressサイト管理の経験から、管理者ログイン名でのBrute Force攻撃は十分経験していますので、このサイトでも数ヶ月に一回、そのような痕跡があることはアクセスログで見つけています。しかし、どうしても対策が後手に回ってしまいます。
アクセスログを解析して気が付いた時には、もう、ハッカーはBrute Force攻撃を諦めて終了していた後だったりします。
100数十回で諦めてくれるハッカーも居れば、1000回以上もログインページをアクセスして(当然1000個以上の推測パスワードでログインをトライする)いる形跡も、後でわかったりします。

このBrute Force攻撃とか、スパムコメントへの筆者の対策は、そのIPアドレスをOSレベル(ウェブサーバーレベル)で永久ブロックすることです。
最近は中国からのスパムコメントが多く、毎回IPアドレスが違うことが多い(しかし、近い)ので、IPアドレスの下位ブロック(範囲)で全部ブロック(接続拒否)しています。
一応ブロックする前には、そのIPアドレスの割り当て地域を調べて、日本やアメリカ国内だと、単一IPアドレスのブロックだけにします。中国からのスパムコメントはしつこくて多すぎるので、IPアドレスの下位ブロック(範囲)で全部ブロック(接続拒否)させていただきます。
筆者のサーバーはWindowsなので、IIS(ウェブサーバー)の設定に拒否IPアドレスを登録し、IISを再起動します。
アパッチ系サーバーだと、「.htaccess」ファイルにブロックするIPアドレスを登録できるようですね。

で、Brute Force攻撃を受けたときに対策が後手になるのは嫌なので、つい最近(1ヶ月ほど)前ですが、ググって新しいプラグインを探してみました。
そしたら、「Wordpressのログインページがアクセスされたら、事前登録したEメールアドレスに通知してくれる」プラグインを見つけました。

いくつか候補はあったのですが、
WP Login Alerts by DigiP
を入れてみました。
これを選んだ根拠は、
● 評価が高い
● 他の同様な機能のプラグインよりも、バージョン数が高い。
他のはバージョン0.2とか、そんな感じ・・・バージョンが0.xだと、完成度が不安だったので・・・でも、よく見たら、このプラグインのバージョンはリリースの年月日になっているので、それだけでは完成度は分からないですかね。

このプラグインはインストールして有効化するだけで、設定は特にありません。
このプラグインは、
1.「/wp-admin」のログインページがアクセスされたときに、WordPressに設定された管理者Eメールアドレスに、即、Eメール通知を送ります。
2.「/wp-admin」のログインページでログインが成功または失敗したときに、WordPressに設定された管理者Eメールアドレスに、即、Eメール通知を送ります。
の2つの通知が行われます。
Eメールの内容は、日時・アクセスしたクライアントのIPアドレス・DNS名が出ます。ログイン結果は、ログイン名(例:admin)と成功・失敗が出るようです。

このプラグインでは、Eメール送信は、PHP関数の「mail()」を使っています。
筆者の場合はWindowsサーバーを使っており、SMTPサーバーをインストールしているため、この部分は変更が必要でした。
まず、Windowsサーバーに筆者はプラグイン「WP-Mail-SMTP」をインストールしています。このプラグインをインストールすると、「wp_mail()」関数がSMTPサーバーを使用できるようになります。

次に、「WP Login Alerts by DigiP」プラグインの「編集」をクリックすると、ソースコードの中ほどに

mail($to,$subject,$message,$headers);

という行がありますが、これを

/*
mail($to,$subject,$message,$headers);
*/
@wp_mail($to,$subject,$message,$headers);

に変えてみましたが、その際にログインページをアクセスされたときの通報は問題無く来ましたが、正常にWordPressのボルグページにログインしたときに、その後のページが白紙ページになってしまったので、更にカスタマイズして、

if(isset($_POST[‘log’])) {
mail($to,$subject,$message,$headers);
} else {
@wp_mail($to,$subject,$message,$headers);
}

としました。
これにより、Windowsサーバーの場合にはログインが成功・不成功したとき【if(isset($_POST[‘log’])) 】のEメール(mail())は飛んでくれなくなりましたが、ログインページをアクセスしたときにはちゃんとEメールを送信してくれます。

時間があれば、Windowsサーバーの環境でなぜログインが成功・不成功したとき【if(isset($_POST[‘log’])) 】にEメールは飛んでくれないのか調べたいと思いますが、今現在の目的にはそこまでは必要としていないので、カット。ログインするのは、自分しか居ないはず、・・・だからです。サイトへの投稿者が複数居るようなシステムの場合には、「誰がログインしたか」を知りたい場合があるかもしれませんね。

送信されるメールの文章の内容は、こんな感じです。
侵入者のIPアドレスと、DNS名が表示されます。

WordPress Login Attempt Page Has Been Reached but not tried to login yet.
Date: 04/09/13 08:16:33
IP: 31.6.71.84
Hostname-Resolved: hosted-by.slaskdatacenter.pl
Browser: Mozilla/5.0 (Windows NT 5.1; rv:16.0) Gecko/20100101 Firefox/16.0 2013-04-09 10:16:33
Referral:

自分がログインする場合にも、このEメールは送信されますよ。
あと、GoogleBotとか、BingBotとか、検索エンジンのロボットも時々、他のページからリンクを辿ってWordPressのログインページをアクセスして、単発でこのEメールを発信します。
Eメールが単発のときは、心配御無用ですね。

連続して多発するときは、ログインページへのBrute Force攻撃の被害になっている可能性があるので、すぐに対策が必要です。

注意:
WP Login Alerts by DigiPのEメール送信者名(From)は、デフォルトでは「[email protected]」になっています。最初知らないと、全く身に覚えのない送信者からEメールが来て、ちょっと気持ち悪いですね。

その場合は、

$from = “[email protected]”; //$admin_email;

 

の行を、

$from = $admin_email;

 

に変えたら良いと思いますが、開発者の意図では、$admin_email(管理者Eメールアドレス)と受信メールアドレスが同じ場合には、メールサーバー側でEメールが送信されないことがあるので、変更したとのことです。
Support Forum : WP Login Alerts by DigiP : Email From!
 
 



――<●>――
関連すると思われる記事: