WP-CLI で WordPress 本体の改ざんをチェックする

WP-CLI を使用すると以下のコマンドで、WordPress 本体のファイルが改ざんされていないかをチェックすることができます。

$ wp core verify-checksums

ためしに WordPress の wp-settings.php を適当に書き換えてこのコマンドを実行してみると以下のようにファイルが書き換えられていることが検出できると思います。

$ wp core verify-checksums
Warning: File doesn't verify against checksum: wp-settings.php
Error: WordPress install doesn't verify against checksums.

で、このコマンドにはコツというか正しい付き合い方があります。

もし、みなさんがなんらかの違和感を感じて、このコマンドを実行したいシチュエーションにあったら、他のコマンド、たとえば wp plugin list とかなんでもいいんですが、それらを 実行する前に wp verify-checksums でチェックをすることを強くお勧めします。

なぜかというと、他の多くのコマンドは WordPress 本体が実際に実行されます(WP-CLI によって WordPress が require される)ので、悪意があるプログラムが埋め込まれた場合、それ自体を動作させてしまう可能性があるからです。

一方で wp core verify-checksums は、WordPress を実行させずに(WordPressrequire せずに)静的にファイルを解析しています。

なので、まずはじめに wp core verify-checksums を使用することをおすすめします。

まあ、実際にはとっくの昔にあれこれされているとは思いますが、コマンドラインで悪意があるプログラムを実行することでさらに大きな被害を受ける可能性は十分にありますので気をつけましょう。

あと、前回の記事で書きましたが、このシチュエーションで root で WP-CLI コマンドを実行することは絶対に避けてください。

WP-CLI の –allow-root オプションは非推奨です!

もしファイルが改ざんされていることを確認したら

もし WordPress 本体のファイルが改ざんされていることを確認したら、以下のコマンで元のファイルに戻すことはできるといえばできます。。。

$ wp core download --force

ただし、これで元に戻るのはあくまでも WordPress 本体のファイルのみです。

もしバックドアが仕込まれていた場合、改ざんの範囲はデータベースやプラグイン、テーマ、アップロードディレクトリなど、ほぼ全てが信用できない状態になります。

そもそも WordPress 本体を元に戻しても、WordPress 本体が書き換えられた根本的な原因が解決されませんので、最終的には専門のサービスに依頼することが懸命になると思います。

Cronでまわすと便利

wp core verify-checksums は、書き換えられたファイルを検出するとコマンドの終了ステータスが 1 になりますので、Cron で定期的にまわしておくと書き換えを検出した際にメール等の方法で通知をうけとることもできます。