渡米生活。(日記)

渡米生活。本家から切り離しました。あまり渡米生活に関係のないプログラムネタや音楽ネタなど。

wordpressハッキングされました(涙)adminアカウント消すだけじゃダメ!

とある非営利団体のweb masterになって3日目。
wordpressで作った新サイトがハッキングされました(涙目)

私が作ったサイトではなく、ちょっとセキュリティが甘かったので、管理をひきついですぐに、とりあえずadminアカウントは消したのだけど、簡単に破られました。

理由は、新しく作ったアカウントのニックネーム(web表示名)が、ログインアカウントと同じだったから(爆)

wordpressは、デフォルトで「投稿者名」のページを作ります。同じ投稿者が投稿した記事を集めるページです。
で、ここに表示されるニックネームが、ログインで使うログインアカウントと同じだと、外部にログインアカウントを公表しているのと同じことに!

私もうっかりして、ニックネームを変えるのを忘れていたんですが、コレ、ひとこと注意書きがあってもいいよね……(汗)

ただ、今回のハック、なんかちょっとへんな感じで、新しく作ったアカウントのログイン名がまたadminに書き直されていたんです。(ニックネームじゃなくてログイン名の方)
こんなの、ロボットプログラムには多分できないんじゃないかと思うんだけど、詳しい方、どうなんでしょうね?

アカウントは、私が新しく作ったアカウントしかありませんでした。
手動でこれをやるなら、

1)新しく作ったアカウント(例題として、たとえばdummyadminとかにしときます)のログイン名を、「投稿者」のページで収集、これにパスワードクラッキングのプログラムをしかけてパスワードを取得

2)クラックしたdummyadminでログイン、新たにadminアカウントを作成

3)作成したadminアカウントでログイン、dummyadminを削除し、adminアカウントのニックネームをdummyadminに変更

という形で可能なのだけど、これを自動でやる方法なんてあるのかしら。
最悪の事態は、サーバー上に悪意のあるユーザーがいて、データベースを直接いじられた、というケースですが……。

そうでないなら、うちのwebを狙って手動でハックされたことになるので、これもかなりいやーな感じです。
それとも、最近のハッカーは手動でちまちまハックするのもアリなのか??

まあ、受け継いだパスワードも辞書に乗ってる文字+数字という、いかにもクラックしてください、といわんばかりのものだったんですが(汗)
(さっさと変えればよかった)

当然、パスワードも変えられてしまっていたのでログインできず、myphpadminでwp_userテーブルにアクセスし、ログイン名とパスワードを強制変更という荒技を使ってログインしました(しかもパスワードは暗号化されているから、他に個人で運営しているwordpressにダミーアカウントを作り、そのパスワードをmyphpadminで見てコピー&ペースト)。

それにしても、ある程度アクセス数のあるサイトのセキュリティ対策がどれほど大事か、ホント思い知りました。
個人のブログなんかとは比べ物にならないですね。
私もwpのサイトを他に3つ、何年も管理していますが、いままでこんなことは一度もありませんでした。
その非営利団体の新サイトは、お披露目してから、1ヶ月くらいだったと思います。まあ、非営利団体のウェブページなんてのは、クラッカーにとっていいターゲットなのかもしれないですが……
(それなりに閲覧者数があって、しかも大抵人手不足でwebのセキュリティまで手がまわっていない)


以下、今回導入した対策です。

1)ログイン名、ニックネームの設定と、adminアカウントの削除
ログイン名とニックネーム(及びブログでの表示名)は必ず違うものにする。
要するに、ログイン名が見えるところに書かれてはいけない。
(実は、これをやっても、ある作業をやるとURLからログイン名が割れてしまうのだけど、現状これをWP側の設定で回避するにはそれ用のプラグインが必要な模様です。とりあえず、ログイン名を隠すより強いパスワードを作る事の方が効果があるので、検索に簡単に引っかかってしまう場所にログイン名が出ないようにしておく。)

2)パスワードの設定
ログインが毎回面倒になるけど、ランダムジェネレータで作る。
最低8文字、記号、数字、大文字、小文字を混ぜる。
こちらのページで作らせていただきました。
http://tomari.org/main/java/password.html
(紛らわしい文字を使わない設定にできるのが有り難い)

3)ファイルのパーミッション変更

.htaccess --- 644 から 604 へ
wp-config.php -- 664 から 404 へ

これは、同じサーバに悪意があるユーザがいる場合の対策です。
グループビットにパーミッションがあると、簡単に設定ファイルを読み書きできてしまうことがあります。実は、これが一番怖いパターンで、今回のクラッキングがそうでないことを祈ってるんですが……
今回の対策で、web上からのアタックに関してはほぼ足跡を残さずにやるのは不可能になりましたので、これでまたのっとられたらこのケースの可能性が高い。

4)ログインの回数制限をするプラグインを入れる。
とりあえず、Simple Login lockdownを入れました。
5回間違うと、1時間はログインできない。
あんまり複雑なプラグイン入れても管理しきれないので。

5)Crazy Bone プラグインを入れる。
ログイン履歴を保存してくれるプラグインです。
クラッカーがどんなログイン名とパスワードの組みでトライしたか、IPアドレスを保存してくれます。
勿論正規のログインも記録されるので、「こんなところからログインした覚えない!!」なんてことがあったら、既にパスワード破られている証拠です……。
正直、一度管理パスワード破られたら、証拠隠滅は簡単なので、ホントはサーバーサイドでやった方がいい気もしますが、このサイトが入ってるサーバ、ログインシェルもないしあんまり自由がきかないので、面倒になって入れました。

6)wordpressは最新のものを!!
3.6.1にしろ、とあちらこちらから警告があったので、なんかよほどひどいセキュリティーホールがあったか??

同じ対策を、私が運営している他のサイトにも入れときました。
xrea, coreserverなどは、いろいろ制限が厳しいため、設定をしないと、たとえばwpの管理画面からテンプレートを書き換えるなどはできません。
実は既にパスワード破られてるんだけど、テンプレの書き換えができなかったためハッカーが何もせずに帰った、ってケースもあるかもしれないですね。
ログイン履歴はとっておいた方がいいです。


それにしても、トップページのっとられるとほんとムカツクな〜!