WordPressの改ざんを見つける|見た目に出ないものを、どこで探すか

WordPressサイトに仕掛けられた不審なファイルを探す手順を表したイメージ図 ITライフハック
この記事は約9分で読めます。
当ページはプロモーションが含まれています

前回は、管理画面に入れなくなったときの復旧でした。

そして最後に書いたとおり、入れるようになっても終わりではありません。

入られた経路が残っていれば、また同じことが起きます。そして多くの場合、戻ってこられるようにする仕掛けが置かれています。

今回は、それを見つける方法です。

WordPressサイトで不審なものが仕掛けられる4つの場所を示した図

スポンサーリンク

見た目には、出ません

先に、いちばん大事なことを書きます。

サイトを開いて、いつもどおりに見えても、それは何の証明にもなりません。

改ざんの多くは、持ち主に見えないように作られています。

管理者としてログインしている人には普通に見せて、初めて来た人にだけ別のものを見せる。 検索エンジンにだけ違うページを返す。そういう作りが珍しくありません。

「自分で見て問題なかった」は、確認になっていないということです。

スポンサーリンク

症状から疑う

とはいえ、表に出てくることもあります。

検索結果に、知らないページが出る

前回も書いた確認方法です。

site:自分のサイトのドメイン

身に覚えのないページが混ざっていたら、そこが手がかりです。

日本語以外のページ、通販らしきタイトル、意味の分からないURL。

訪問者だけが、別のページに飛ばされる

自分では再現しないのに、他の人から「変なサイトに飛ばされた」と言われる。

この場合、ログインしていない状態で確認してください。 シークレットウィンドウで開くか、スマートフォンの回線で開く。

検索結果からクリックして入ると再現することもあります。

ブラウザや検索から警告が出る

Google が危険と判断すると、検索結果に警告が付いたり、開くときに赤い画面が出たりします。

ここまで来ると、かなり進んだ状態です。

サーバーから連絡が来る

大量のメール送信や、異常な負荷を検知して、サーバー会社から警告が届くことがあります。

この場合、すでに他人に迷惑をかけている可能性があります。 急いでください。

サイトが急に重くなった

別の用途に使われていることがあります。

ただし、重い原因は他にもたくさんあるので、これだけで判断はできません。

探す場所は、4つ

どこを見ればいいかを整理します。

1. ファイル       置かれたもの、書き換えられたもの
2. データベース   投稿、設定、ユーザー
3. 設定ファイル   wp-config.php、.htaccess
4. 外からの見え方 検索エンジン、外部のスキャン

1か所だけ見て終わりにしないでください。 複数に置かれていることが普通です。

1. ファイルを見る

更新日時で並べ替える

いちばん基本の方法です。

FTPソフトやサーバーのファイルマネージャーで、更新日時の新しい順に並べてください。

自分が何もしていない日に更新されているものがあれば、そこを見ます。

ただし、日時は書き換えられることがあります。 古い日付になっていても、安心はできません。

コマンドが使えるなら

SSHでサーバーに入れる場合、まとめて探せます。

find . -name "*.php" -mtime -7 -ls

心当たりのない結果が出てきたら、そこを確認してください。

あってはいけない場所のファイル

これは、分かりやすい手がかりです。

画像を置くフォルダに、プログラムのファイルがある。

find wp-content/uploads -name "*.php"

ここに結果が出たら、まず異常です。

アップロードのフォルダには、画像やPDFなどが入ります。プログラムが置かれる理由がありません。

見慣れないファイル名

意味のない文字の並びになっていることがあります。

逆に、本物そっくりの名前のこともあります。正規のファイルに1文字足しただけ、といった形です。

名前だけでは判断できません。 だから、次の方法が必要になります。

本体のファイルを、公式と比べる

これが、いちばん確実な方法です。

WordPress の本体ファイルは、公式が配布しているものと1バイトも違わないはずです。

違っていれば、誰かが書き換えたということになります。

コマンド1つで確認できます

WP-CLI が使えるなら、こう打つだけです。

wp core verify-checksums

公式のファイル一覧と照合して、違いを教えてくれます。

Success: WordPress installation verifies against checksums.

書き換えられていると、こうなります。

Warning: File doesn't verify against checksum: wp-includes/xxxxx.php
Warning: File should not exist: wp-includes/yyyyy.php

2種類の警告があります。

「中身が違う」は、正規のファイルが書き換えられたということ。

「あるはずのないファイル」は、新しく置かれたということ。

プラグインも確認できます

wp plugin verify-checksums --all

公式ディレクトリで配布されているプラグインについて、同じ照合ができます。

有料のプラグインや、自分で作ったものは対象外です。そこは目で見るしかありません。

コマンドが使えない場合

手作業でも、同じことができます。

WordPress の公式サイトから、いま使っているのと同じバージョンをダウンロードします。

そして、手元のファイルと比べます。

とくに、`wp-admin` と `wp-includes` の中身。 ここは自分で触る場所ではないので、差があれば異常です。

ファイルの数が違っていないかも見てください。

2. データベースを見る

ファイルだけ直しても、こちらが残っていることがあります。

サイトのアドレスが変わっていないか

いちばん先に見るところです。

管理画面の「設定」→「一般」を開いて、2つのアドレスを確認してください。

WordPress アドレス (URL)
サイトアドレス (URL)

知らないドメインになっていたら、書き換えられています。

ここが変わっていると、訪問者が別のサイトに飛ばされます。

ユーザーを確認する

前回も書きましたが、もう一度見てください。

復旧の作業をしているあいだに、また増えていることがあります。 相手がまだ入れる状態なら、そうなります。

増えていたら、経路がまだ塞がっていません。

投稿や固定ページ

身に覚えのないものが増えていないか。

管理画面の一覧で、「すべて」の件数を見てください。覚えている数と違えば、そこを調べます。

下書きやゴミ箱も見てください。 公開されていないところに置かれていることがあります。

見た目に出ない書き込み

投稿の本文に、目に見えない形で何かが埋め込まれていることがあります。

疑わしい投稿は、編集画面で「コード」の表示に切り替えて中身を見てください。

ビジュアルの表示では、隠されているものが見えません。

3. 設定ファイルを見る

.htaccess

ここは、よく使われます。

WordPress が自動で書く内容は、決まった形をしています。

# BEGIN WordPress
(この間はWordPressが管理する部分)
# END WordPress

この外側に、身に覚えのない記述がないかを見てください。

とくに、特定の条件で別の場所へ飛ばすような記述。訪問者だけがリダイレクトされる原因は、ここにあることが多いです。

各フォルダにも .htaccess が置けます。 一番上だけ見て終わりにしないでください。

wp-config.php

ファイルの最初と最後を、とくに見てください。

正規の内容の前後に、まったく関係のない記述が足されていることがあります。

ファイルの末尾に、大量の空行があったら注意です。 スクロールした先に何か書かれている可能性があります。

4. 外から見る

自分で探すのには限界があります。 外の目も使ってください。

Google Search Console

登録していれば、無料で使えます。

「セキュリティの問題」という項目を見てください。Google が問題を検出していれば、ここに出ます。

そして「インデックス作成」の項目で、登録されているページ数を確認してください。

覚えている数より極端に多ければ、知らないページが作られています。

登録していない方は、この機会に登録することを勧めます。 無料ですし、こういうときに効きます。

外部のスキャンサービス

URLを入れるだけで、外から診断してくれるサービスがあります。無料で使えるものもあります。

ただし、外から見える範囲しか分かりません。 サーバーの中に隠れているものは、検出できません。

セキュリティのプラグイン

サーバーの中をスキャンしてくれるものがあります。

ファイルの照合、不審な記述の検出、変更の検知。自分で全部を見るより、はるかに速いです。

ただし、注意があります。 感染した状態のサイトに新しくプラグインを入れると、そのプラグイン自体が妨害されることがあります。

結果が出ない、途中で止まる。 そういう場合は、それ自体が手がかりです。

見つからなくても、安全とは限りません

ここは、はっきり書いておきます。

全部確認して何も出てこなくても、「侵入されていない」という証明にはなりません。

理由が3つあります

隠すのが上手なものがあります。 正規のファイルの中に紛れ込ませたり、暗号のように変換して読めなくしたり。

時間を置いてから動くものがあります。 仕掛けたあと、しばらく何もしない。忘れたころに動き出します。

そして、自分が見た場所にあるとは限りません。

だから、こう考えています

「見つかったものはなかった」というだけです。

そのうえで、次の回で書く「取り除いて復旧する」作業をどこまでやるかを判断します。

疑いが濃いなら、探すのをやめて、まるごと作り直すほうが早いこともあります。

探しているあいだの注意

見つけても、すぐ消さない

2回目になりますが、大事なので書きます。

控えを取ってから消してください。 経路を調べる手がかりになりますし、1つ消して安心すると、残りが動き続けます。

中身を実行しない

不審なファイルを見つけても、ブラウザでそのURLを開かないでください。

開くと、実行されます。

中身を見たい場合は、FTPでダウンロードして、テキストエディタで開いてください。

公開を止めるかどうか

状況によっては、いったん止める判断が要ります。

訪問者に被害が及んでいる場合や、迷惑メールの送信元になっている場合は、止めるべきです。

サーバーの管理画面から、一時的に非公開にする方法があります。

自分でやらない判断

探しても見つからないのに、症状が続く。

消しても、また出てくる。

顧客の情報を預かっている。

こういう場合は、専門の業者に相談してください。

時間が経つほど、被害は広がります。

まとめ

  • 見た目には出ない。 持ち主にだけ普通に見せる作りが多い
  • 症状は、検索結果の知らないページ/訪問者だけのリダイレクト/警告/サーバーからの連絡
  • 探す場所は4つ。ファイル/データベース/設定ファイル/外からの見え方
  • ファイルは更新日時で並べる。 ただし日時は書き換えられることがある
  • アップロード用のフォルダにプログラムのファイルがあれば、まず異常
  • 本体のファイルは、公式と照合できる。 `wp core verify-checksums`
  • 公式ディレクトリのプラグインも、同じ方法で照合できる
  • データベースでは、サイトのアドレス/ユーザー/投稿の件数/下書きとゴミ箱
  • .htaccess は、各フォルダにも置ける。 一番上だけ見て終わらない
  • Search Console のセキュリティの問題とページ数を確認する
  • 見つけても、すぐ消さない。 控えを取ってから
  • 不審なファイルを、ブラウザで開かない。 実行されます
  • 見つからなくても、安全の証明にはならない

探し方を知らないと、見つかりません。 そして、見つけたところで、まだ半分です。

次回は、取り除いて、復旧する話を書きます。バックアップから戻すか、いまの状態から取り除くか。その判断の基準と、戻すときの落とし穴を扱います。

タイトルとURLをコピーしました