追記2018/09/27
前回記事を書いた後も色々調べてみると、取りきれていないScriptコードがあったりとわかって来ました。前回の記事を残しつつも、なるべくわかりやすく再編集します。
—————-
もう、最悪でした。勝手に海外のサイトに飛ばされる症状が出るので、同じサーバで管理している他のサイトも調べてみたら案の定やられてました。症状としては、障害が出ているサイトのリンクに行くと、他のサイトにリダイレクトされ、3つか4つのリダイレクトが連続した後に広告のあるサイトにたどり着きます。
不思議なことに、感染しているファイルが違ったり、症状が一定ではないのもあり、探すのに苦労しました。ダッシュボードから確認できる異常は下記の通りです。
・投稿ページの投稿の最後にScriptコードが挿入されている。
・固定ページの最後にScriptコードが挿入されている。
・メディアの説明などのどこかにScriptコードが挿入されている。
投稿、固定ページはこんな感じのコードが最後に挿入される。

これで、「cdn.examhome.net」と言うサイトにリダイレクトされることになってしまう。
メディアの「説明」部分は見つけにくいです。こんな感じ。↓

問題はこれだけではなかったので、Search Regexによる投稿ページなどの文字列の消去だけでは対応できません。
サーバ内の<head>〜</head>の最初と最後に下記のコードが挿入されます。

*対応とは関係ないですが、これはユニコードをデコードすると文字列になります。
まず、やるべきことは、データベースとサーバ内のWordPressファイルに問題と解決を分けて考えることです。
データベース内の対応について
1、レンタルサーバのPHPのところからphpMyAdminにアクセスし、該当のデータベースを選択します。
2、wp_postsを選ぶとデータベースにどんな情報が入っているのかを確認できます。
3、下記の画像のように特定のリンクに飛ぶようなScriptの文字列が確認できます。

5、これを全てこの画面から消すのは現実的ではないので、wp_postsだけをダウンロードして、Atomなどテキストエディタで全て検索して一気に消します。*新しいphpMyAdminの場合はSQL上で消去することができますが、バックアップの意味もありダウンロードファイルから修復します。
やり方は、wp_postsをダウンロードしたら、複製して感染ファイルと改善ファイルの2つに分けます。
Atomの場合は、wp_postsを下記のようにOpenで開いたら

Findのメニューから、Find in Projectを選択します。

すると、下記のように検索するフィールドと置換(Replace)するフィールドが画面右下に現れます。

検索するフィールドに上記のように、投稿ページや固定ページ、メディアに挿入されてしまったScriptコードを消去できます。挿入されたコードをここにコピペしてFind Allし、発見されたかを確認してReplace Allすれば、全て入れ替えられます。
改善したファイルを再度上書きでアップロードすればデータベースは完了です。
*念のため、全てのファイルをダウンロードして検索をかけておくといいとも思います。このファイルだけでも、<script>のみ検索して他にコードが埋め込まれていないか、色々調べてみてください。
もし、wp_posts以外にも不審な書き込みが見つかったら、この記事に書き込みをお願いします。また、一点注意ですが、phpMyAdminのアップロードに容量制限がかかっている場合、重たいファイルだと「ダウンロードして直してアップロード」ができません。容量を確認してからこの作業を行なってください。
サーバ内のWordPressファイルについて
1、まず、下記のファイルか、拡張子の無い怪しいファイルはないかルートフォルダを探してください。もし、あればすぐにローカルにコピーしてサーバにあるものは消去してください。
*ローカルにコピーするのは、この中の文字列をあとで検索にかけて消去するためです。

中身はこんな感じで、重要なファイルのヘッダー(<head></head>で囲まれた最初と最後の2箇所)にユニコードの文字列を埋め込んで来ます。不具合のあるサイトの中でも、これがあるものとないものがあります。
*クリックで拡大します。
2、次に同じ階層の下記の2つのファイルを確認してください。
・wp-config.php
・wp-login.php
wp-config.phpの中身をみると、以下の部分は、’put your unique phrase here’が明らかにおかしいコードに書き換えられています。*これは正常なもの。
* @since 2.6.0
*/
define('AUTH_KEY', 'put your unique phrase here');
define('SECURE_AUTH_KEY', 'put your unique phrase here');
define('LOGGED_IN_KEY', 'put your unique phrase here');
define('NONCE_KEY', 'put your unique phrase here');
define('AUTH_SALT', 'put your unique phrase here');
define('SECURE_AUTH_SALT', 'put your unique phrase here');
define('LOGGED_IN_SALT', 'put your unique phrase here');
define('NONCE_SALT', 'put your unique phrase here');
/**#@-*/
「wp-login.php」内には、中にscriptが挿入されて
(118, 97, 114, 32, 115, 111, 109, 101, 115, 116, 114, 105, 110, 103, 32, 61, 32, 100, 111, 99, 117, 109, 101, 110, 116, 46, 99,
から始まる数列がびっしり追加されていました。他にもいろんなフォルダ内のファイルにおかしな文字列が追加されていました。
もし、上記のような文字列がある場合は、他の階層のファイルにも書き込まれている場合が考えられるので、FTPソフトで一旦全てダウンロードして、データベースの修復と同じように対応します。
3、WordPressファイル内の修復
ルートフォルダに入っているファイルとフォルダを全てダウンロードして、一つのフォルダにまとめます。これを複製して感染バージョンと改善バージョンに分けます。
改善バージョンをこれまでと同じく、Atomで修復します。1ファイルではなく、フォルダを一気に選択したいので、Atomのメニューから下記を選択します。そのまま、改善バージョンのフォルダごと選択します。

そうすると、指定フォルダないのファイルをすべて検索できます。Find Allのフィールドに、<head></head>内にある不具合を起こしているコードをFind Allで検索して見つかれば、そのうちの一つの詳細を調べます。その中の<script>〜</script>までをコピーして、Find Allの中に改めてペーストしReplace Allで消去していきます。

また、同じように文字列の一部をFind Allで検索して、検索に引っかかったものの詳細を表示して、<script>〜</script>の部分を消去していきます。
なぜ、このようにするかというと、
(118, 97, 114, 32, 115, 111, 109, 101, 115, 116, 114, 105, 110, 103, 32, 61, 32, 100, 111, 99, 117, 109, 101, 110, 116, 46, 99,
から始まる文字列にいくつかパターンがあり、一回のReplaceでは消去しきれないためという理由と、
eval(String...
から始まる文字列もあり、何回かにわけて確実に不審なコードを消すためです。
4、改善バージョンの入れ替え
このように、改善バージョンが出来上がったら、その中でローカル上で更新できるフォルダを最新のものに入れ替えます。例として下記のようなものです。
・プラグイン
・テーマ
これらは元のフォルダを一度消去してから新しい最新のフォルダを入れ替えます。
これで、改善バージョンのサイトが一つのフォルダにまとまりました。FTPソフトでサーバにアップロードして、一旦修復は完了です。
今後の対応として
この次に、今後の対応として、
・サーバへのアクセスを国内のみに限定する(レンタルサーバのコントロールパネルから設定)
・Wordfenceプラグインの導入(エラー原因を特定して知らせてくれる)
・miniOrange 2-Factorプラグインの導入(2段階認証の導入)
まずは、アクセスを国内に限定すれば大抵の攻撃は収まるでしょう。ただ、国外からのアクセスが必要な場合も多々あるので、その場合は、WP-Banのような特定の国からのアクセスを防げるプラグインの導入を考えるか、他の特定のIPアドレスからのアクセスを防ぐ手段を講じる必要があります。
Wordfenceは、データベースとサーバ内の対策をする前に導入すると、プラグインごと感染するので綺麗にしてから入れましょう。
出典:https://ja.wordpress.org/plugins/wordfence/
綺麗になるまで、Scanを繰り返し怪しいファイルを見つけましょう。無料機能で検知できます。
miniOrange 2-Factorは、スマホのアプリと連携して、いつものパスワードの他に、ログインパスワードを生成できるようになるため、ブラウザを介したログインをより強固にできます。
————————————–
調べてみると、まだほとんど情報がなく、ホスティングサービスのサポートに連絡しても、そもそも「外部からの攻撃への対応は全部消して、データベースも綺麗にしてから再構築してください。」とのこと。
最終手段を最初に言うのね。。。