WordPressクラックプラグインに注意!そしてセキュリティ対策

突然ですが、管理しているWordPressサイトの1つがクラックされました\(^o^)/ 私は、自分が管理しているサイトをクラックされるのがジャンプが合併号な時ぐらいイラつきます。というかロリポップのあの件以外ではじめてクラックされたので結構ショックな感じです。

症状

環境はさくらのレンタルサーバー、スタンダードです。

何らかの形でプラグインディレクトリにwpppmというディレクトリが作成され、インストールされていました。管理パネルからは見られないので、ファイルマネージャー、SFTP、SSHなどで確認することができます。

症状としては404エラーを汚染するマルウェアという感じで目につきにくいものです。
通常404エラーは見ることはありませんが、最近アップデートされたCutom Post Type Permalinkのバグのお陰で把握することができました。

原因

慢心・環境の違い

私が基本的に使っているfunction.php、.htaccessなどを流用・使っていなかった。
そのサイトは私が常駐して管理していたので、家にあるメインPC用に入ってる基本設定用ファイルを使っていませんでした。個人情報保存してないし、使わなくてもという気持ちがどこかにあったことは否めないので反省してます。

原因としては、ブルートフォースアタックだと思います。(多分) WordPressテーブルはプリフィックス付、ソルトも設定済みでした。

対策

function.phpでセキュリティ対策

私が使っているfunction.phpからセキュリティ部分を抜粋して掲載します。

ユーザーページを表示しない。

[crayon-52f106e5aae53201193592/] WordPressは、
/?author=1
で、おそらく管理者であろうユーザーを把握できます。
このページが邪魔なので削除します。

RSSフィードからcreator(著者名)を削除

[crayon-52f106e5aae5f590621418/] WordPressは
/feed
でRSSフィードを出力します。その中に著者情報という欄でニックネームが表示されるのですが、ニックネームとログイン名が同じユーザーの場合がほとんどだと思います。(変えればいいだけの話だけなのですが忘れる)

フィードをまるごと削除してもよいのですが、ECサイトや企業サイトの新着情報などでRSSがあると便利なサイトの場合は削除はおすすめできません。

その場合は、
/include/feed-rss2.php をテンプレートの場所にコピーし、

[crayon-52f106e5aae65895027957/] dc:creatorで囲まれてる所をdc:creatorごと削除、もしくは何かニックネームします。 その後、上のコードをfunction.phpに追加することで消すことができます。

しかし、これだけじゃ完璧じゃないので、

/include/feed-atom.php
/include/feed-rdf.php

もテンプレートの場所にコピーし、同じようにcreatorの部分を抹消するか何かに変更してください。

なぜこの2つも変えないといけないかというと、

/feed=atom
/feed=rdf

でRDFなどのフィードに変換してアクセスすることができ、著者情報を見ることができてしまうからです。
変更したら、下記コードをfunction.phpに付け加えれば著者情報は出力できません。

[crayon-52f106e5aae6b739641677/] #### テンプレートから消す

テンプレートでソース上に管理者の名前が出力されていないか確認します。

[crayon-52f106e5aae70016843666/] とかテーマに入っていないかチェックします。

[crayon-52f106e5aae75810050188/] を使っている場合はフィルターをかけると強固ですが、上でauthorパーマリンクごと消去していれば大丈夫でしょう。

.htaccessでセキュリティ対策

.htaccessの設定は以下のとおり

[crayon-52f106e5aae7a704062767/] プロバイダがOCNの場合、OCNのホスト以外を遮断。これをwp-adminに置きます。

[crayon-52f106e5aae7f985781213/] これをWordPressをインストールしたディレクトリに置きます。 私はローカル環境に構築することが多いのでlocalhostを残していますが、いらない場合はそれぞれlocalhostの部分を削除しても構いません。

プラグインはCrazy Boneというログイン履歴プラグインを置いておくと良いと思います。WordPress、プラグインの脆弱性にあたったら運が無いと思って諦めるしか無いです。 本当はサーバーが複数あり、かつリバースプロキシが組めれば良いのですが、レンタルサーバーの場合は他にセキュリティ関連プラグインを導入するぐらいしかないのではないのでしょうか。

まとめ

WordPressは便利ですが、クラックされる恐れもやっぱりあります。
アクセス数が多い少ないではなく、公開した以上はクラックの恐れがあるという前提でセキュリティ対策を怠らないほうが良いと実感しました。ご迷惑をお掛けした方々には申し訳なく感じています。

参考サイト

以下のサイト様などを参考にさせて頂いています。
悪意のあるプラグイン、wpppmによる攻撃 | クロスアンドクラウンポータル
WordPress Malicious Plugin – WPPPM – Abusing 404 Redirects with SEO Poisoning | Sucuri Blog
WordPressで作成者(投稿者)アーカイブを作らない方法(リライトルールの勉強) | Gatespace's Blog   [解決済み] セキュリティ向上:ログインIDをURLにしたくない   WordPress | 投稿記事から「(ログイン)ユーザー名」がバレるのを防ぐ
rss - Remove or Edit in Feeds - WordPress Answers