久々のWP関連の投稿。
それも、あまり楽しくないやつ。
そう。
数年ぶりに管理しているサイトのいくつかが改ざんされてしまった。。。
(このブログは被害に合っておりません。ご安心を)
対応が一段落したので、同じ目にあってしまっている方の助けに少しでもなればと思い、対処した内容を残しておこうと思う。
それは、突然やってきた。
あれ? 投稿の最後に変な記述がある……これって…
<a style="text-decoration:none" href="/hogehoge-0-hoge">.</a>
差し込まれていたのは、上のようなaタグ1行(URLの部分はこちらで変えてある)。
うーーーーん、こんなリンクをはるわけないし、誰かのテストのようでもないし。。。
これは、間違いなく、、やられてるやつや。
同じサーバーに乗せてる別のWordPressサイトを確認すると
同じようにやられてる。。。
これは、どこが破れられたを確認するより前に、まずはパスワード変えねば!ってことで
手順1.サーバーのFTPパスワード、DBパスワード、WordPressのパスワードを全て変更
では、落ちついて、どこが変えられてしまっているかの確認を
すぐに気づくのは、REVISIONや自動保存を含めたWPの全ての投稿、固定ページの本文の最後に、上のaタグが挟まれていること。
なお、URLの部分(上の例でいうところの/hogehoge-0-hogeの部分)は全ページで異なっているっぽい。
WordPressにログインされて投稿を編集されているとすれば、最終更新の日付データが変わっているはずだが、それは変わっていない。
ということは、MySqlに入りこまれている可能性が高い。
とりあえず、全記事から忌まわしいaタグを削除してなくてはってことで、スマートにやるならばsql文で削除させるのだろうが、知識が足りないのと、1件1件確認しながら削除したかったので以下の方法をとった。
手順2.phpmyadminにログインし、WPのデータをファイル形式でエクスポート。そのファイルをテキストエディタで開き、該当箇所を削除して保存し、もう一度phpmyadminからインポート
もちろんWordPressにログインし、各投稿を開いて該当箇所を削除して保存しても同じ結果にはなる。しかし、REVISIONもあるため時間がかかってしまうので、特に記事が多い場合はsqlを使うか、エクスポートするほうが良いだろう。
これで、記事からaタグは削除された。
しかし、まだ作業は終わっていない。
というのも、上の差し込まれたタグの例でいうと
「/hogehoge-0-hoge」というURLにアクセスすると
本来はそんなページはないはずなのだが、
仕込まれたテキストが書き込まれたページが表示されてしまうのだ。
これは、データベースだけでなく、サーバーのファイルも改ざんされている可能性が大であることを示す。
そこで、WPのデータベースとファイルシステムに変なものが混入されていないかをチェックするプラグイン「Exploit Scanner」をインストール。
スキャンしてみると、危険性が高いものから低いものまで、レベル別に、ずらずらっと怪しい可能性があるファイルリストが表示される。しかし、ほとんどのファイルは実際は問題ない。
その中のLevel Warningに、、、
おーまいがっ! 本丸のindex.phpが編集されとるぞというメッセージが。
中身を見ると、確かに変な記述が。
define('FILES_BASE', dirname(__FILE__)); if (file_exists(FILES_BASE.'/hoge/defines.php')) { require_once FILES_BASE.'/hoge/defines.php'; }
普通、index.phpが編集されていたら、その最終更新時間が新しくなるからすぐに気づきそうなものだが、今回の奴らは、ファイルの更新時間を2014年の日付に設定しており、気づかなかったのだ。
上の「hoge」の部分は、サイトによって変わっていた。
新しくディレクトリを作ることはなく、既に存在しているディレクトリが使われている。例えば/css/だったり、/wp-content/だったり、/wp-includes/だったり。
そして、そのディレクトリの下を見ると
確かにdefines.phpなるファイルが作成されている。
さらに、同じディレクトリの下に「/cache/」というフォルダが作成され、中に得体の知れないファイルやフォルダが詰め込まれている。
ということで、やるべき事は……
手順3.index.phpを開きどのディレクトリが使われているかを確認した上で、差し込まれた記述を削除
手順4.index.phpで指定されているディレクトリの下にある「defines.php」と「cacheディレクトリ」を削除
で、終了!
のはず。。。
うーーん、まだ気づいてないだけで、やられてるところがあるかもしれないが、今日はこのぐらいにしといてやるぜ。。(最後にしてください)
<<非常に残念な追記>>
やはり、これでは終わっていなかったことが判明。
詳しくは、別の投稿『WordPressの.htaccessが勝手に書き換えられて、しかもパミッションが444になるときは』でまとめた。。。(とほほ)
<<追い打ちをかける残念な追記>>
この投稿と上の投稿の対策だけではマルウェアは駆除できておらず、最終的に『うへっ!悪名高きバックドア系マルウェアの「FilesMan」が仕込まれていたことが判明』を書く羽目に。。。(涙)