Web事業部実績紹介_Webサービス
Web事業部実績紹介_Webサービス
2012.11.16

脆弱性によるWordPressの改竄からの復旧方法と対策

tetsu

こんにちは「社内なんでも屋」のtetsuです。

最近、WordPressの改竄に関する対応が多かったので、改竄から復旧までの手順を軽く紹介しておきます。

改竄されているかのチェック

設置しているWordPressが改竄されているかをチェックする場合、
現時点で多かったパターンは次のパターンです。

①ダウンロードしたファイルをウィルスソフトが検知してダウンロードできない
②「wp-app.php」と同階層に「wp-apps.php」が置かれている
③「plugins」ディレクトリに「theme-inc.php」または「thumbs.php」が存在する

今回多かったのが「②」のケース。
とにかく復旧までに時間がかかったパターンでした。

特徴

それぞれのパターンでは次のような特徴があります。

①ウィルスソフトによる検知パターン
ソフトウェアの検疫ログにダウンロードができなかったファイルと
その理由が記載されています。

 

例)

 

 

②③はほぼ同じパターンですが、ファイルのソースコード内に
「$OOO000000=urldecode(~」や「preg_replace(“/.*/e”,”x65~」
「error_reporting(0);」などが挿入されているのが特徴です。
また、ファイルの変更日時が日本時間の深夜帯に行われてることが多いです。

 

挿入されている文字列の例)

復旧

②③の復旧には、Grepと置換ができるソフトウェアを利用して、知らずに挿入されたコードを一括で削除する方法になります。

 例として

「error_reporting(0);」や「$OOO000000=urldecode(~」などの文字列を一度検索し、必要に応じて一括削除を行うと不正な実行を止めることが可能です。
この作業を行った後、「wp-apps.php」や「theme-inc.php」などのファイル名をキーワードにして、全ファイルを検索します。
すると、「include」から始まる文字列内にキーワードが含まれるソースコードが発見できるかと思いますので、そのコードも削除しましょう。
つまり、そのソースコードを発見したファイルでイタズラされている可能性が高い、という意味です。

大抵の場合、1つのファイルに記述されている場合が多いですが、
「wp-apps.php」の場合は全てのPHPファイルに記述されているケースがほとんどでした。(復旧に時間がかかったのはこのためです・・・)

①の場合はサーバ上から削除し、さらにファイル名でソースコードを検索し、それが「include」から始まる文字列であった場合に削除、で復旧できました。

最後に

ここでの復旧方法は全ての改竄に適用できるものではありません。
いくつかのサイトで作業を行いましたが、パターンが一緒でもPHPコードで記述されているので、ある程度のPHPとSHELLの知識が必要になりますので、復旧の参考としてご利用ください。

こういった改竄を事前に防ぐ為に、WordPressのバージョンアップをこまめにしておく事は大切です。

ちなみに

WordPressの新しいバージョンを毎回管理画面で確認するのが手間がかかると思われる方には、Googleの「ウェブマスターツール」の「設定」でメール通知をしてくれる機能があります。
これで毎回、管理画面で確認せずとも、バージョンアップが必要か判断できます。

 

例)

注意)
WordPressで構築したサイト上に、WordPressのバージョン情報となるソースコードが出力されている場合のみ機能します。