WordPressサイトにて以下のような現象が発生したら、ウィルスに感染しているので、すぐに対処が必要です。
・ページが書き換えられている。
・Google検索結果の表示タイトルがおかしくなっている。
・Google検索結果からサイトに飛ぶと 懸賞当選ページのような画面になる。
こんな時に比較的簡単に直せる方法をまとめました。
実際私が対応した内容です。
※作業前にデータベースと全ファイルのバックアップは必ずとっておきましょう。
ウィルスが埋め込まれたファイルを探して、その部分を消す
この際、検索範囲は wp-contentフォルダ配下です。(直下ファイルとwp-includes/wp-adminフォルダは次の処理で全書換えを行います。)
ウィルス部分は、ソースコード上に 以下のような明らかにおかしい文字列が入っていることが多いので、その文字列で検索をかけます。
1 2 3 |
@include "\057ho\155e/\ eval($raPo_rZluoE($_POST rawurldecode/*zyl*/ |
以下のような形でgrepをかけて探します。 evalはかなり高頻度で使われています。正常なファイルでも使われていますが、実際にファイルの中身を見れば、怪しい部分は一目瞭然です。
1 2 3 |
grep '@include "\\' -rl /var/www/example.com/wp-content/ grep 'eval(' -rl /var/www/example.com/wp-content/ grep 'rawurldecode' -rl /var/www/example.com/wp-content/ |
以下のようにevalが記述されているファイルと、その箇所をみつつ確認するのも効率的です。
1 |
grep -n 'eval' -R /var/www/example.com/wp-content/ --include=*.php | less |
ウィルス箇所を、目視しつつ消していきます。
◆uploads
アップロードフォルダのuploadsにも ファイルが作成されていることがあるので、削除していきます。
uploadsフォルダには通常phpファイルは存在しないはずなので、存在した場合はファイル毎削除します。.icoという拡張子にphpプログラムが書かれていたりすることもあるので、それも削除です。
1 |
find /var/www/example.com/wp-content/uploads -name *.php |
◆plugins
pluginsにも結構入っていますので、不要なプラグインはついでに整理しましょう。
漏れがあると、また同じようにウィルスファイルが作成されてしまう可能性があるので、漏れがないように対応します。
最新WordPressファイルに、書き換える
最新のWordPressプログラムをダウンロードし展開しておきます。
/var/www/wordpress
↓
以下のような形でwp-includesとwp-adminをクリアにし、最新ファイルに置き換えます。
※この時上書きだと ウィルスが埋め込まれたファイルが残ってしまうことが発生するので、フォルダ毎削除した後コピーです。
直下のphpファイルも上書きします。直下に上書きされない怪しいphp ファイルが存在した場合は、削除します。
1 2 3 4 5 6 7 8 9 10 |
//古いファイルを削除(wp-includesとwp-admin) $ rm /var/www/example.com/wp-includes -Rf $ rm /var/www/example.com/wp-admin -Rf //最新ファイルをコピー(wp-includesとwp-admin) $ cp /var/www/wordpress/wp-admin /var/www/example.com/ -Rf $ cp /var/www/wordpress/wp-includes /var/www/example.com/ -Rf //直下のファイルも上書き $ cp /var/www/wordpress/*.php /var/www/example.com/ -f |
以上で終了です。
ページが問題なく、動作するか確認します。wordpress管理画面に ログインした時に、ファイル自体が最新wordpressファイルになっているため、
「データベースの更新が必要です」という画面になることがあるので、その際は実行します。
後日、ウィルスファイルが作成されていないか確認
翌日くらいに、新たにウィルスファイルが作成されていないか確認します。削除するときと同じ要領でgrepです。
この時、できれば、webアクセスログのPOSTをgrepして、怪しいログがないかチェックしておきます。
1 |
# grep 'POST /wp-content/' /var/log/httpd/example.com.access_log |
例えば 以下のようなログがあり、404エラーになっているなら このウィルスファイルは削除したという流れです。
1 |
"POST /wp-content/plugins/lightbox/js/sew343gsx.php HTTP/1.0" 404 |
ログもみつつ、サイト上も問題なければ、無事終了です。
今回やった方法は、サーバー自体のphpバージョンが古すぎて うまくwordpressの自動更新がかかっていないwebサイトにて、ウィルスを削除して欲しいと依頼をうけ対応したときの作業内容です。
サーバーのバージョン更新と、Wordpressの自動更新はしっかりと行って、脆弱性が出ないように気を付けましょう。