【第二章】WordPressの.htaccessが勝手に書き換えられて、しかもパミッションが444になるときは…

  • このエントリーをはてなブックマークに追加

先日の投稿で、管理しているWordPressサイトがマルウェアによって改ざんされたことを書いたが、まことに残念なことに、それだけでは終わっていなかった。
(そうなることはうすうす予想はしていたが……)

あれ、何かおかしい。

ある日、サーバー上のファイル一覧を見ていて、ふと
.htaccess が書き換えられていることに気づいた。

しかも、.htaccess を編集して保存しても、パミッションを404に変えても、
一度サイトにアクセスすると、勝手に .htaccess がデフォルトの内容に書き換わって、パミッションも444になってしまう。

.htaccessをカスタマイズして使いたいのに、これは困った。
.htaccessのパミッションを101にすれば書き換えられることはなくなるが、そもそもサイト自体が表示されなくなるし……
と、途方にくれて、解決策を探し回っていたところ、、、

どうやら、wp-includes の下にある nav-menu.php にマルウェアによってコードが差し込まれており、サイトにアクセスする度に、.htaccess の内容を書き換え、パミッションを444に変える仕組みになっていたよう。

なんてことをしてくれるんだ、マルウェアよ。

で、こんな時、どう対処すればいいか。

難しいことではなく、要はマルウェアに侵されていないWordPressをインストールしなおせば良いだけ。

1.一旦サイトに外からアクセスできないようにする(例:フォルダ名を変える、もしくはindex.phpのパミッションを変える)

2.(マルウェアに侵されていない)WordPressをダウンロード

3.サーバーにあがっているファイルのうち、/wp-includes/ と /wp-admin/ はまるまる削除し、2.でダウンロードした中にある/wp-includes/ と /wp-admin/ をアップロードする。上書きするのではなく、いったん削除したうえでアップロードすることが重要。

4.ルートディレクトリ直下のファイルは、wp-config.php を除くすべてのファイルを削除し、2.の新しいファイルをアップロードする。

以上でOK。

<<追記>>
これだけじゃ、足りなかったことが判明。
詳しくは新しいエントリーにまとめたので、こちらをご覧あれ。

ただ、一番気になるのは、どうやってマルウェアが仕込まれたのかということ。

ファイルを既に削除してしまっているので、さだかではないものの、海外のWordPressのマルウェア関連の記事やブログをいくつかチェックしたところでは、どうやら以下の方法ではないかと。

すなわち、コンタクトフォーム(お問い合わせフォーム)の脆弱性を使って /wp-content/ の下のどこかにphpファイルを仕込み、そのphpファイルをhttpでたたき、/wp-includes/nav-menu.php 等を書き換えたのではないかと。

ということで、マルウェアに自由に動かれないための対策として、もう1つ。

5./wp-content/ の下と /wp-content/uploads/ の下に以下の.htaccessを置いて、phpファイルを外からたたけないようにする

(ただし、↓の追記を要確認)

なお、.htaccessの設置に関し不安があるのであれば、「Sucuri」というプラグインをインストールし、その設定画面で「Hardening」というタブを選び、そこで「Protect uploads directory」「Restrict wp-content access」ついでに「Restrict wp-includes access」を[Harden]すれば、それでも大丈夫。

 
今度こそ。
これで最後でありますように。

 
<<追記>>
/wp-content/ の下と /wp-content/uploads/ に上の.htaccessを設置すると、サーバーによっては、CSSが表示されなくなったり、画像が表示されなくなったりするので注意が必要。

同じく、このブログで使っている「Special Recent Posts」プラグインも挙動がおかしくなったので、一部のプラグインが、正常に動かなくなる可能性がありそう。 →これは勘違いであることが判明

<<さらに追記>>
いろいろと策を施しても、どうしても.htaccessが書き換えられてしまうという場合は……
index.php と /wp-includes/直下の全てのphpファイルのパミッションを101にしてその場をとりあえず凌ぐという方法も。

<<さらにさらに追記>>
上の方法はうまくいかなかった。その代わり.htaccessのパミッションを004にしたら自分の環境ではうまくいった。サーバーの環境によって異なると思うので004の状態でちゃんとサイトにアクセスできるか確認することをお忘れなく。
 
そもそも、ここまで症状がひどい場合、手間を考えると、おとなしくサーバーを変えたほうがいい気はするが、どうしてもサーバーを変えられない事情がある場合は仕方ない。

<<さらにさらにさらに追記>>
上のとおり、1か月以上にわたっていろいろ試してみた結果、最後にようやく正解にたどり着いた。
詳しくは新しいエントリーにまとめたので、こちらをご覧あれ。


前後の記事

サブコンテンツ