WordPressを運用するサーバーでマルウェアに感染してからサイト復旧まで試した方法
2024.07.22更新
記事の背景
WordPressブログを複数運用するサーバーでマルウェアに感染しました。
感染してからサイト復旧まで試した方法をご紹介します。
主な事象
- 管理画面にログインできない、または、管理画面が正常に表示されない。
- 運営する10個のサイトのうち、8個は正常に表示されているように見えたが、2個は正常表示されず、海外の謎のサイトにリダイレクトされていた。
- Xserverでの対処後は2個のサイトは「access denied」の表示になった。
- 正常に表示されているように見えるサイトでも管理画面にログインできない、またはログインできても正常表示されず403エラーとなる事象が発生。
事象の例
サイト自体は以下のように一見問題なく表示されます。
一見問題なくサイトは表示されますが・・・
管理画面に入ることができません。
管理画面に入ろうとすると以下のような画面になったり・・・
以下のような画面が表示されます・・・
また、管理画面に入れても正常に表示されず、各リンクをクリックすると403エラーとなります。
時系列
- 2022年4月19日 Server上で運営していた10個ほどWordpressのブログのうち、1つがマルウェアに感染
- 2022年4月28日 エックスサーバーより連絡あり/サーバーがウイルスに感染したため、10個のドメインのうち9個のドメインに対して不正なプログラムファイルの実行権限を000にする・海外からの接続を遮断するなどの対策をしたとの連絡あり。この時点で初めてウイルス感染に気づく
- 2022年4月28日 ■対応その1/権限を000にしたファイルを全ドメインで削除/その後、自動バックアップからの戻しを検討するも、最古のバックアップファイルがクリーンではないことを確認/いったん復旧手順の検討に入る
- 2022年4月29日 ■対応その2/手動で復旧作業を実施し、サイトを復旧
原因
- 「.htaccessファイル」の改竄
- 1つのドメインでWordpressの脆弱性(パスワードが弱い、プラグインが最新ではないなど)をつかれ、「.htaccessファイル」の改ざんがされた
- その後、そのドメイン経由で同一サーバーに格納される他のドメインもマルウェアに汚染された
「.htaccessファイル」とは?
.htaccessとはWebサーバーの基本的な動作を、ディレクトリ単位で制御するためのファイル
引用元:【基本】.htaccessとは?何ができるの?書き方は?(LINK)
復旧作業
復旧作業手順は以下の通り。
- エックスサーバー案内の手順を実施
- 管理画面のパスワードをセキュアなものに変更
- 「.htaccessファイル」を復旧し、管理画面を復旧させる
- WordPressとプラグインを最新にアップデート
- ウイルス対策プラグインを導入→マルウェアを駆除
- 脆弱性の診断をして問題ないことを確認し復旧完了
1. エックスサーバー案内の手順を実施
まず、エックスサーバーからの案内に従い、以下の手順を実施しました。案内内容や手順はとても分かりやすかったです。
ただし、案内された手順だけではサイトを復旧することができませんでした。
理由は手順[3]で自動バックアップファイルからファイルを戻すことができればサイトを楽に復旧できるのですが、筆者のサーバーの場合はたまたま移行期間のためかバックアップが1週間分しかなく、最古のバックアップも汚染されていたからです。
そのため、サイトを復旧するために手動で対応せざるを得なくなりました。
以下はエックスサーバーからの復旧案内手順
【2】お客様に行っていただきたい対応内容について
お客様のPCや運用中のサイトのセキュリティ対策は
お客様ご自身にて管理を行っていただく責任がございます。
〜中略〜
[1] ご利用のPCにてセキュリティチェックを行ってください。
〜中略〜
[2] 検出されているすべてのファイルの完全削除 または、該当ドメイン名を「初期化」してください。
〜中略〜
下記、ケース1、ケース2のうち【いずれか一方のみ】を実施してください。
※いずれの対応を行った場合でも、後続[3] ~ [5]の作業は必須となります。
ケース1■検出されているすべてのファイルの完全削除する場合 (※推奨)
ケース2■該当ドメイン名を「初期化」する場合 ※該当ドメイン名のウェブ領域に設置されたすべてのファイルが削除されます
〜中略〜
[3] FTPソフトによるデータアップロードなど、
ホームページ再開のための作業を行ってください。
〜中略〜
[4] 該当ドメインにて設置されていたプログラムにおいて、
脆弱性の調査を必ず行ってください。
—
〜中略〜
[5] 設置されているWordPress等の設置プログラムについて管理パスワードを変更してください。
〜以下略〜
※引用元 エックスサーバーの案内メール「エックスサーバー】■重要■お客様のサーバーアカウントにおける不正なアクセスの検知および制限の実施について」より
2. 管理画面のパスワードをセキュアなものに変更
まず、Wordpressの管理画面のパスワードが脆弱だったため、強固なものに変更しました。
パスワード生成に利用したサイト
ただし、管理画面が使えない状態だったため管理画面からのパスワード変更ができず、ひと手間かかりました。具体的な手順は以下の通り。
パスワード変更手順
- FTPを使って「config.php」を開く(エックスサーバー→ファイルマネージャー→該当フォルダ→「public_html/config.php」)
- 「config.php」でMySQL データベースのユーザー名とパスワードを確認する
- エックスサーバーのサーバーパネルを開く
- 「phpmyadmin」をクリック
- MySQL データベースのユーザー名とパスワードを使ってログイン
- データベースで『wp_users』を表示させる
- パスワードを書き換える(この時に関数に『MD5』を選択して、『user_pass』の値に直接変更するパスワードを入力)
参考手順
>> WordPressのパスワードがわからなくてもconfig.phpは確認できる時の対処方法
上記の手順で、管理画面が正常に使えない状態でしたが、管理パスワードは変更できました。
3. 「・htaccessファイル」を復旧し、管理画面を復旧させる
つづいて、「・htaccessファイル」を復旧しました。手順は以下の通り。
1. Xserver → サーバーパネル → 左メニュー → .htaccess編集 → 該当サーバーを選び、「選択する」をクリック
2. 「.htaccess編集」をクリック
3.感染した「.htaccess」ファイル。明らかに変ですね。
4. マルウェア感染の影響で編集権限が444となり、「.htaccess」ファイルが編集できない場合があります。その場合はファイルマネージャーから編集権限を付与(444→644に変更)します。
パーミッション変更手順
まず、「ファイルマネージャー → 該当ドメイン → public_html」を開きます。
次に、「.htaccess」をクリック → 「パーミッション変更」 → 「644」に変更します。
5. 正しい内容を貼り付け → 「確認画面へ進む」をクリック
筆者が使用した正しい「.htaccess」ファイル
筆者はまっさらなWordpressをインストールし、その「.htaccess」ファイルを流用しました。
# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress
6. 対象ドメインに間違いがないことを確認 → 「実行する」をクリック
7. 「完了しました」とメッセージが出ればOK
8. この時点でいったん問題なく管理画面にログイン可能になります。
以上で「.htaccess」ファイルの復旧は完了です。
4. WordPressとプラグインを最新にアップデート
次に、Wordpressとプラグインをアップデートしていきます。以下はプラグインをアップデートする手順例です。
WordPressの管理画面 → 左メニュー → プラグイン をクリックし、プラグインを更新していきます。
プラグインが更新されたことを確認します。
ウイルス対策プラグインを導入→マルウェアを駆除
次にウイルス対策プラグインを導入します。
事前に公式サイトから「wpdoctor」をダウンロードします。
wpdoctorのダウンロードページ(LINK)
WordPressの管理画面 → 左メニュー → プラグイン → プラグインのアップロード → 「choose file」をクリック
ファイルを選択 → 事前にダウンロードした「wpdoctor」をZIPファイルのまま選択
「いますぐインストール」をクリック
「プラグインを有効化」をクリック
プラグインを有効化すると左メニューに「マルウェアスキャン」が出現しますので、「マルウェアスキャく」をクリック
「今すぐスキャン開始」をクリック
マルウェアが検出されたことを確認
「ファイル削除」→「OK」を繰り返し、マルウェアを削除していく
マルウェアが表示されなくなればOK
脆弱性の診断をして問題ないことを確認し復旧完了
最後に「脆弱性診断」のボタンをクリックし、問題がないか確認して作業終了しました。