サーバーにログインしたら、見たことないファイルがあった日のこと
結論から言うと、WordPressのコアファイルを改ざんから守るには、自動監視ツールと手動チェックを組み合わせた多層的なアプローチが不可欠だ。
ある日の夕方、クライアントから「サイトがおかしい」って連絡が来た。何がおかしいのか聞いたら、「Googleで検索すると変なタイトルが表示される」という。これは深刻な問題だと思って、すぐにサーバーにログインした。
そしたら、wp-includesディレクトリの中に「wp-plain.php」っていう、見たことないファイルがあるわけだ。最初は「あれ、こんなファイルあったっけ?」って思ったんだけど、中身を見たら完全にマルウェアだった。サーっと血の気が引く感じ、あれ、何回経験しても慣れない。
コアファイルの改ざんは、WordPressのセキュリティインシデントの中でも最悪の部類に入る。なぜかというと、コアファイルはWordPress全体の動作を制御してるから、ここを乗っ取られると本当に何でもできてしまう。サイトの表示を変えるのはもちろん、管理者アカウントを勝手に作られたり、訪問者を悪意のあるサイトにリダイレクトさせたりできる。
今回は、そんなコアファイルの改ざんをいち早く検知して、被害を最小限に抑えるための監視方法について、実践的なノウハウをお伝えしていく。
そもそもコアファイルの改ざんって何が怖いの?
WordPressのコアファイルっていうのは、wp-admin、wp-includes、それからルートディレクトリにあるwp-config.phpやwp-load.phpなんかのことだ。これらのファイルは、WordPressが動作するための心臓部みたいなもので、ここに不正なコードを埋め込まれると、サイト全体が攻撃者の支配下に置かれてしまう。
実際に改ざんされると、どんなことが起こるのか。僕が過去に対応した案件だと、こんな被害があった。
まず一番多いのが、SEOスパムだ。検索結果に表示されるタイトルやディスクリプションが、勝手に「激安ブランド品」とか「オンラインカジノ」みたいな内容に書き換えられてしまう。サイトの信頼性がガタ落ちになる。
次に多いのが、バックドアの設置。これが本当に厄介で、一度駆除しても、バックドア経由で何度でも再感染するんだ。まるでゾンビ映画みたいに、倒しても倒しても復活してくる。あれ、本当に精神的にキツい。
それから、フィッシングサイトへのリダイレクト。訪問者が知らないうちに偽のログインページに飛ばされて、個人情報を抜き取られる。これ、サイト運営者の責任問題にもなりかねないので、非常に深刻だ。
さらに怖いのが、管理画面の機能を無効化されるパターン。.htaccessファイルを改ざんされて、プラグインの更新もできない、テーマの編集もできない、って状態にされることがある。こうなると、復旧作業自体が困難になる。
Wordfenceプラグインで自動監視する方法
コアファイルの監視で、僕が一番よく使ってるのがWordfence Securityっていうプラグインだ。これ、無料版でも十分に使えるし、設定も比較的簡単なので、初心者の方にもおすすめできる。
Wordfenceのインストールと初期設定
まず、管理画面から「プラグイン」→「新規追加」で「Wordfence」って検索してほしい。「Wordfence Security – Firewall & Malware Scan」っていうのが出てくるので、これをインストールして有効化する。
有効化すると、セキュリティアラートの通知先メールアドレスを入力する画面が出てくる。ここには、確実にチェックできるメールアドレスを入れてほしい。僕は過去に、普段使わないメールアドレスを設定してしまって、改ざんの通知に気づくのが遅れたことがある。あれは本当に後悔した。
スキャンの設定をカスタマイズする
Wordfenceをインストールしたら、次はスキャンの設定をカスタマイズしよう。管理画面の「Wordfence」→「Scan」→「Scan Options and Scheduling」をクリックしてほしい。
ここで重要なのが、スキャンタイプの選択だ。Wordfenceには3つのスキャンタイプがある。
Limited Scanは、サーバーのリソースが限られてる場合に使う。共用サーバーで、あまり負荷をかけたくないときはこれだ。
Standard Scanは、標準的なスキャン。WordPressサイトの安全性を確認するために必要なチェックが一通り含まれてる。普通はこれで十分だと思う。
High Sensitivityは、不正アクセスの疑いがあるときに使う、超厳密なスキャンだ。画像ファイルやPDFの中に悪意のあるコードが隠されてないかまでチェックする。その分、時間もかかるし、サーバーリソースも食うので、日常的に使うのはおすすめしない。
僕は基本的にStandard Scanを使ってるが、一つだけ手動で設定を追加してる。それが、テーマとプラグインのファイル整合性チェックだ。
デフォルトだと、以下の2つの項目にチェックが入ってない。
- Scan theme files against repository versions for changes
- Scan plugin files against repository versions for changes
これにチェックを入れると、WordPress公式ディレクトリに登録されてるテーマやプラグインが、公式のバージョンと比較して改ざんされてないかをチェックしてくれる。これは非常に重要なので、絶対にチェック入れておいてほしい。
スキャンを実行して結果を確認する
設定が終わったら、「START NEW SCAN」をクリックしてスキャンを実行する。サイトの規模にもよるが、だいたい数分から十数分くらいかかる。
スキャンが終わると、結果が表示される。Wordfenceは問題の深刻度を4つのレベルで分類してくれる。
Criticalは、今すぐ対処しないと危険なやつ。プラグインに既知の脆弱性があって、修正版がリリースされてるのにアップデートしてない、みたいなケースだ。
Highは、できるだけ早く対処すべき問題。僕が以前遭遇したのは、wp-includesディレクトリの中に、本来存在しないはずのPHPファイルが置かれてるっていう警告だった。「VIEW FILE」をクリックすると、ファイルの中身を確認できるので、明らかに不正なコードだったら「DELETE FILE」で削除する。
Mediumは、中程度の問題。テーマやプラグインが最新バージョンじゃないときに出ることが多い。
Lowは、比較的軽微な問題。例えば、パスワードが推測されやすいものになってる、とか。
Wordfenceの無料版だと、クイックスキャンが毎日、フルスキャンが72時間ごとに自動実行される。これは本当に便利だ。自分で毎回スキャンを実行する手間が省けるし、改ざんがあったらすぐにメールで通知が来るので、早期発見につながる。
WP-CLIでコマンドラインから監視する方法
Wordfenceは便利なんだけど、複数のサイトを一括で管理したい場合は、WP-CLIを使った方が効率的なこともある。WP-CLIは、WordPressをコマンドラインから操作できるツールだ。
WP-CLIでコアファイルの整合性をチェックする
WP-CLIを使ってコアファイルの整合性をチェックするには、以下のコマンドを実行する。
wp core verify-checksums
このコマンドは、現在インストールされてるWordPressのコアファイルが、公式のチェックサムと一致してるかどうかを確認してくれる。何も問題がなければ、こんなメッセージが返ってくる。
Success: WordPress installation verifies against checksums.
もし改ざんされてるファイルがあると、こんな感じで警告が出る。
Warning: File doesn't verify against checksum: wp-login.php
Error: WordPress installation doesn't verify against checksums.
これが出たら、該当するファイルを詳しく調べる必要がある。
改ざんされたコアファイルを修復する
もし改ざんが確認されたら、WP-CLIで簡単に修復できる。以下のコマンドを実行すると、WordPressのコアファイルを最新版で上書きしてくれる。
wp core download --force
--forceオプションを付けることで、既存のファイルを強制的に上書きする。修復が終わったら、もう一度wp core verify-checksumsを実行して、正常に戻ったか確認してほしい。
プラグインの整合性もチェックする
WP-CLIは、プラグインの整合性チェックもできる。特定のプラグインをチェックするには、こんな感じでコマンドを打つ。
wp plugin verify-checksums akismet
すべてのプラグインを一括でチェックしたい場合は、--allオプションを使う。
wp plugin verify-checksums --all
もし改ざんされてるプラグインがあると、該当するファイルが表示される。プラグインの修復も、コアファイルと同じように--forceオプションで再インストールすればOKだ。
wp plugin install akismet --force
ただし、WP-CLIには一つ大きな注意点がある。それは、公式のコアとプラグインしかチェックできないってことだ。テーマファイルや、独自にカスタマイズした部分は対象外なんだ。なので、WP-CLIだけに頼るんじゃなくて、Wordfenceみたいな包括的なスキャンツールと併用するのがベストだと思う。
手動でファイルをチェックする方法
プラグインやコマンドラインツールも便利なんだけど、最終的には人間の目でファイルをチェックするのが一番確実だったりする。特に、マルウェアが感染しやすいファイルっていうのがあるので、そこを重点的にチェックするといい。
サイトにアクセスがあるたびに実行されるファイル
マルウェアが一番好んで感染するのが、サイトにアクセスがあるたびに実行されるファイルだ。ここに不正なコードを埋め込んでおけば、確実に実行されるし、バックドアとして機能させることもできるからだ。
具体的には、こんなファイルが狙われやすい。
- wp-config.php: WordPressの設定ファイル。データベースの接続情報とかが書いてあるので、ここを改ざんされると本当に危険だ。
- index.php: サイトのエントリーポイント。ここに不正なコードを埋め込まれると、すべてのアクセスで実行されてしまう。
- テーマファイル: header.php、footer.php、functions.php、single.php、page.phpあたりは要注意。特にfunctions.phpは、テーマの機能を拡張するためのファイルなので、ここに不正なコードを埋め込まれても気づきにくい。
これらのファイルは、定期的にバックアップと比較して、不審な変更がないかチェックしてほしい。
一般的なファイル名に偽装したマルウェア
ハッカーは、けっこう巧妙だ。WordPressのコアファイルに似た名前で、マルウェアを設置することがある。
例えば、こんなファイル名だ。
- wp-signups.php: 本物のWordPressには存在しないファイル。でも、ぱっと見、正規のファイルっぽく見える。
- wp-plain.php: これも偽物。僕が最初に書いた事例で見つけたのが、まさにこれだった。
- wp-conflg.php: wp-config.phpのタイポに見せかけたマルウェア。よく見ると「i」が「l」になってる。
- xmIrpc.php: xmlrpc.phpに似せたファイル。大文字の「I」を使ってるのがポイント。
こういうファイルを見つけたら、まず間違いなくマルウェアだ。中身を確認して、不正なコードだったら即座に削除してほしい。
ランダムな名前のPHPファイルと.htaccessの改ざん
もっと露骨なのが、完全にランダムな文字列のファイル名だ。「1dyrU7.php」や「hU67jl.php」みたいな、意味不明なファイル名のPHPファイルがWordPressのディレクトリにあったら99.9%マルウェアだ。特に、wp-includesやwp-contentの直下にこういうファイルがあったら、即削除でOKだ。
また、.htaccessファイルの改ざんも見落としがちだ。このファイルは、Apacheサーバーの設定を制御するファイルで、改ざんされると管理画面が使えなくなったり、勝手にリダイレクトされたりする。FTPクライアントで「隠しファイルを表示」をオンにして、RewriteRuleやRedirectの行が不自然に追加されてないかチェックしてほしい。
定期的な監視を習慣化するためのコツ
ここまで、いろんな監視方法を紹介してきたけど、一番大事なのは継続することなんだ。一回だけスキャンして終わり、じゃ意味がない。
僕が実践してるのは、こんな感じのルーティンだ。
まず、Wordfenceの自動スキャンを有効にしておく。これで、最低でも72時間ごとにフルスキャンが実行されるので、基本的な監視はカバーできる。
次に、月に一回、WP-CLIで手動チェックする。これは、Wordfenceでカバーしきれない部分を補完する意味合いだ。特に、複数のサイトを管理してる場合は、シェルスクリプトを書いて一括でチェックすると効率的だ。
それから、WordPress本体やプラグインをアップデートする前後に、必ずスキャンを実行する。アップデート作業中に何かおかしなことが起きてないか確認するためだ。
最後に、バックアップと監視をセットで考える。どんなに監視を徹底しても、100%防げるわけじゃない。万が一改ざんされたときに、すぐに復旧できるように、定期的なバックアップは絶対に取っておいてほしい。
よくある質問
Q1: Wordfenceの無料版と有料版、どっちがいいですか?
個人的には、まず無料版から始めてみるのがいいと思う。無料版でも、ファイル整合性チェックやマルウェアスキャンの基本機能は使えるので、小規模なサイトなら十分だ。有料版の一番のメリットは、リアルタイムでの脅威情報の更新と、より頻繁なスキャンができることだ。ECサイトとか、会員情報を扱ってるサイトみたいに、セキュリティが特に重要なサイトなら、有料版を検討する価値はある。
Q2: 改ざんを発見したら、どうすればいいですか?
まず、落ち着いてほしい。パニックになって、いきなりファイルを削除したりすると、状況が悪化することがある。最初にやるべきは、サイトをメンテナンスモードにすること。これで、訪問者への被害を防げる。次に、改ざんされたファイルのバックアップを取る。復旧作業で何か問題が起きたときのために、現状を保存しておく。それから、クリーンなバックアップから復元するか、WP-CLIで修復するか、どちらかの方法で対処する。最後に、なぜ改ざんされたのか原因を調査する。脆弱なプラグインを使ってたのか、パスワードが漏れてたのか、原因を特定して対策しないと、また同じことが起きる。
Q3: テーマファイルの改ざんは、どうやって検知すればいいですか?
テーマファイルは、公式ディレクトリに登録されてるテーマなら、Wordfenceのスキャンでチェックできる。さっき説明した「Scan theme files against repository versions for changes」にチェックを入れておけば、公式バージョンとの差分を検出してくれる。ただ、独自に開発したテーマや、カスタマイズしたテーマの場合は、自分でバックアップと比較するしかない。Gitでバージョン管理してると、こういうときに便利だ。
まとめ: コアファイルの監視は、WordPressセキュリティの要
改めて結論を言うと、WordPressのコアファイルを改ざんから守るには、Wordfenceのような自動監視ツール、WP-CLIによるコマンドラインチェック、そして手動でのファイル確認を組み合わせた多層的なアプローチが最も効果的だ。
ここまで、WordPressのコアファイルを改ざんから守るための監視方法について、いろいろお伝えしてきた。
Wordfenceプラグインを使った自動監視、WP-CLIを使ったコマンドラインでのチェック、手動でのファイル確認。どの方法も、それぞれメリットとデメリットがある。
大事なのは、一つの方法に頼りすぎないことだ。Wordfenceで自動スキャンしつつ、月に一回はWP-CLIで手動チェックして、重要なファイルは目視でも確認する。こういう多層的なアプローチが、一番効果的だと思う。
それから、監視だけじゃなくて、バックアップとセットで考えるのも忘れないでほしい。どんなに監視を徹底しても、完璧に防げるわけじゃない。万が一のときに、すぐに復旧できる体制を整えておくことが、本当に重要なんだ。
僕自身、過去に何度もコアファイルの改ざん案件に対応してきたけど、早期発見できたケースは、ほぼ例外なく監視体制がしっかりしてた。逆に、被害が拡大してしまったケースは、改ざんに気づくのが遅れたケースばかりだ。
WordPressのセキュリティは、一度対策したら終わりじゃなくて、継続的に監視して、アップデートして、改善していくものなんだ。面倒だと思うかもしれないけど、サイトを守るためには絶対に必要な作業だ。
この記事が、皆さんのWordPressサイトを守る一助になれば嬉しい。お互い、安全なサイト運営を心がけていこう。
WordPressのセキュリティ、不安に思っていませんか?
「自分のサイトは大丈夫だろうか…」
「何から手をつければいいか分からない…」
もしあなたが少しでもそう感じているなら、専門家によるセキュリティ診断を受けてみることを強くお勧めする。
上記のサイトでは、WordPressのプロがあなたのサイトの脆弱性を無料で診断してくれる。問題が見つかれば、具体的な対策方法についてもアドバイスをもらえる。手遅れになる前に、一度プロの目でチェックしてもらい、安心を手に入れよう。