WordPressが改ざんされた!事例から学ぶ中小企業や個人ができる復旧方法
公開日: 最終更新日:
見出し
ホスティング会社から「不正なファイルを検知しました」というメールが届いたり、Googleのサーチコンソールを使っていればそちらから通知が来るなど、webサイトの改ざん被害に遭うとサイトが正常表示できなかったり、危険なサイトにリダイレクトされたりと驚かれるかもしれません。
「うちのサイトなんかハッキングしても何にも出てこないよ!」という中小企業経営者の方も多いですが、これはそもそもそのサイトを狙っているわけではありません。
そのサイトやそのサイトがあるサーバーを利用して、大手サイトへの攻撃の踏み台にしたり、スパム配信をしたり、フィッシング詐欺に利用したりするのが目的です。
つまり、小さな会社のサイトが改ざんされたら、それはまさに今その会社が(被害者にもかかわらず)加害者になってしまう瞬間であると考えてまず相違ありません。
まず何から対処すべきでしょうか。
始めにGoogleの指針を見る
Google Developersに、ハッキングされたときとして指針が掲載されています。
https://developers.google.com/web/fundamentals/security/hacked
完了までに必要とされるものとしてGoogleが挙げているのは以下の通りです。
ホスティング業者に連絡する能力
ウェブサーバーでページの配信を停止できる(または、ホスティング業者とこの方法について検討できる)こと。なお、後のステップで、サイトを短期間オンラインに戻す必要があります。
アカウントの管理権限(すべてのユーザーの表示、ユーザーの削除、アカウントに関するすべてのパスワードの変更を行える権限)。
ルート ディレクトリへのファイルの追加、メタタグの作成、サイトの Google アナリティクス管理者アカウントの所有などの方法で、サイトの所有権を確認できること。
サイトのサーバー(ウェブ、データベース、ファイル)へのシェルまたはターミナルの管理者アクセス権限。
シェルまたはターミナルのコマンドの知識。
データベースに対して SQL クエリを実行する能力。
コードの理解(PHP や JavaScript など)
2つのウィルス対策スキャナを実行する能力
サイト(ファイル、データベース、画像など)のバックアップを作成するためのストレージ
実際、コードの理解やシェルやターミナルでのコマンドの理解などは必須です。
まずはご自身のスキル水準と照らし合わせてみましょう。
1.サイトを非公開にする
まずやるべきことは、サイトを非公開にすることです。
メンテナンスモードプラグインで構いません。非公開にしたくないという方は多いですが、非公開にした方が良い事情があります。
まず、サイトを訪問したユーザーに被害が及んでしまう可能性です。改ざん目的としてフィッシング詐欺も多い昨今、ユーザーが万が一詐欺被害に遭えば、サイトの管理責任が管理者にある以上端的に言って損害賠償を請求される危険があります。
また、「なんかこんな画面になったんだけど・・・」とSNSに投稿されてしまうケースも。
こうなると、危険なサイトと認識されてしまいブランド価値も毀損します。
さらに、サーバー内にあるメールのディレクトリを閲覧されてしまったというケースもありました。
この場合、やり取りしたメールの内容が流出してしまうことになります。取引先とのメール流出などは、大きな問題になり得ます。
またgoogleによるとサイトの改ざん被害から対処完了までの期間は平均でおおよそ3週間。
すでに、外部に被害が及んでいる可能性もあるわけです。
2.非公開にする方法
外部からのアクセスを遮断するのが目的ですから、WordPressであればいくつかの方法があります。
2-1.htaccessを編集して、IP制限をかける
スパムメールが自動配信されている場合はプロセス自体を止めなければなりませんが、レンタルサーバーの場合そうした操作ができない可能性があります。
2-2.メンテナンスモードプラグインを利用する
2-3.新しいディレクトリを一つ作り、そこにすべてのファイルをまとめて移動したうえでパーミッションを0000に設定する
2-4.すべてのファイルとデータベースをダウンロードし、バックアップを確保したうえでサーバー上から削除する
2-5. 404 や 503 などのステータスコードを返すよう設定する
緊急度が高い場合、ユーザーに被害を与えないよう、安全を最優先にすべきです。また単にファイルを削除する、あるいは再インストールするというのは被害の概要が分からないままになりますから、必ずファイルとDBを残す、つまりバックアップを取ります。
3.自分でWordPressの改ざん被害を復旧する方法
事業者に委託した場合費用が掛かりますから、皆さんがまず考えるのはご自身での復旧かと思います。
しかしながら再被害の発生率というのは非常に高いものがあり、Googleによるとおおよそ30%から40%の間で推移しています。
Google透明性レポート:セーフ ブラウジング: 不正なソフトウェアとフィッシング
よって、再感染しないために調査すべき項目があります。
3-1.ファイルからの不正なコードの削除
各種ファイルから不正なコードを削除します。主にphpファイルの改ざんが主体ですが、この数年はフィッシング詐欺などに悪用されることが多く、不正なページをどのように取り込むかにも変化が出ています。
実際の改ざん事例で被害が認められた主なファイル類
■PHPファイル
サーバー内を自由に操作できるバックドア(shell)、ユーザーを不正なページにリダイレクトさせるコードなどがあります。これらは、セキュリティソフトに反応するものもあります。
逆にセキュリティソフトで発見できないものとして、不正なファイルをアップロードするためのシンプルなアップローダーなどがあります。
アップローダー自体は単に「ファイルをアップロードする」ためのもので、正規の利用目的である場合も多いためセキュリティソフトでは反応しません。
■jsファイル
特にjquery関連のファイルの改ざんが多く見受けられます。
前半は本来の内容、最下部に追加で挿入された不正なコードといった事例もありますし、中身がそっくり入れ替えられている事例もあります。
■HTMLファイル
静的なHTMLファイルも改ざんの対象となります。
動的なページを構成するファイルのみが対象となるわけではありません。
またこうした静的なファイルで外部のjsファイルを読み込むように細工されている事例もあります。
■XMLファイル
不正なページの情報を取り込むために用いられているケースがあります。
■jsonファイル
XMLファイル同様、不正なページの情報を取り込むために用いられているケースがあります。
■TXTファイル
テキストファイルは例えば各種ライブラリのreadme.txtなどもあります。
不正な利用がなされるケースでは、新たに不正な.txtファイルがアップロードされていたり、既存の.txtファイルの内容が削除されphpのコードが挿入されている例があります。
■CSSファイル
CSSファイルも見落としが多いファイルです。
これも新たに不正な.cssファイルがアップロードされていたり、既存の.cssファイルの内容が削除されphpのコードが挿入されている例があります。
また、1px×1pxのiframeを埋め込まれ、CSSによって画面外に設定されるケースもあります。
また各種の不正なリンクを目視できなくさせるためにCSSが利用されています。
■jpg,gif,png等の画像ファイル
画像ファイルをテキストエディタで開くと、phpが埋め込まれているケースがあります。
サーバー内を自由に操作できるバックドア(shell)、ユーザーを不正なページにリダイレクトさせるコードなどがあります。
■icoファイル
ファビコンなどのicoファイルです。
画像ファイルですが、icoファイルを偽装したバックドアは大変に多く、多くの事例で遭遇します。
このように、事実上すべてのファイルの検査が必要です。
これらのファイル類をすべてチェックする必要がありますが、wordpressの場合平均すると5,000ファイル以上あるため見落としが出やすく、これが再被害につながっているケースがあります。
新しいファイルで上書きするときれいになりそうな気もしますが、不正に追加されたファイル類は当然上書きされませんので残留してしまい再被害のきっかけとなってしまいます。
また、ダウンロードしたファイルをセキュリティソフトにかける方も多いですが、
1.ファイルごと削除するのでアップロードしなおしても正常動作しない
2.不正なコードは通常複数のファイルにまたがるため、セキュリティソフトですべてを見つけることができない
3.正規のコードを「悪用」する場合、そもそもセキュリティソフトが反応しない
4.テーマやプラグインの脆弱性をついた攻撃の場合、入り口となるその部分自体はセキュリティソフトにかからない
などの問題があります。
攻撃者もそうしたことは承知の上ですので、これらを踏まえたファイル設置がなされていることが多くあります。
ほとんどの事例において、ダウンロードしたファイルをセキュリティソフトにかけても不正なファイルは残留します。
偽装された不正なプラグイン
偽装された不正なプラグインにも注意が必要です。
wp-content/pluginsディレクトリには様々な利用プラグインのファイルがあります。
この中に、プラグインを偽装したバックドアが存在していることがあります。
こうした偽装プラグインも削除が必要です。
キャッシュファイルの削除
プラグインなどでキャッシュファイルを生成している場合、不正なコンテンツが残っている可能性があります。
このため、感染・改ざんされた状態で生成されたキャッシュファイルは原則として削除します。
タイムスタンプはあてにならない
ファイルの変更日などがタイムスタンプとして残りますが、これを使って検索することはあります。
しかしながら、最初の改ざん日が分からないとどこから検索するべきか分かりません。
また、攻撃者はタイムスタンプ自体も変更していきますので、実際にはタイムスタンプは参考程度にはしますがあてになるものではありません。
暗号化(難読化)されたコードの扱い
不正なコードの多くが難読化(便宜上以下暗号化と呼びます)されています。
つまりぱっと見には分からないようになっています。
過去にはbase64という形式を利用したパターンが多かったですが、昨今は減少しつつあります。
こちらでもいくつか事例を紹介しています。
3-2.データベース内の不正コードの削除
データベース内にも不正なコードが多く見受けられます。
WordPressの場合、投稿された記事やページのコンテンツ、また設定情報などはすべてデータベースに保存されます。
たとえば、wp_optionssテーブル内のsiteurlにはサイトのURLが入っていますが、これを他のURLに書き換えるとそちらにリダイレクトされてしまうためWordPressへのログインも出来なくなります。
こうしたケースでは記事やページ内に多量のjsコードが埋め込まれていることがほとんどで、外部のjsを読み込んだ上でそれぞれ他の不正なサイトやページにリダイレクトされるようになっています。
コンテンツへの挿入はwp_postsテーブル内に一括して行われるため、下書き保存してあるコンテンツやリビジョンについても汚染されます。
これらをすべて削除する必要があります。
経験上、DBの汚染が進行している事例ではsearchreplacedb2.phpやSearch-Replace-DB-master の削除し忘れが大変多いです。
WordPressのDB移行で良く用いられるツールですが、これはwp-config.phpの情報を取り込んで動作するため、原則として何も情報を知らなくてもsearchreplacedb2.phpやSearch-Replace-DB-masterにアクセスするだけでDBに接続、操作できてしまいます。
全テーブルの一括操作もできてしまうため、容易に全ページ、全コンテンツの情報を書き換えられてしまいます。
こうしたデータベース内の不正コードを削除する際、一記事に数百の外部jsファイルへのリンクが挿入されることもありますので、一記事ずつ手作業で実行するのは現実的ではありません。
このため原則としてSQLクエリを実行していきます。
ユーザーのチェック
ユーザーのチェックも必要です。
wp_usersテーブルを見るとそのWordPressに登録されているユーザーの一覧があります。
ここに不正に追加されたユーザーが存在する事例が多くあります。
身に覚えのないユーザーや、登録日時がおかしいユーザー、メールアドレスが存在しないユーザーなどは不正なユーザーの可能性があり、こうしたユーザーがあれば削除する必要があります。
3-3.復旧したファイルとDBの再アップロード、設置
感染・改ざんされたファイルをすべてサーバー内から削除し、復旧したファイルとデータベースを再設置します。
感染・改ざんされた不正なファイルをサーバー内に残してはいけません。
この際、新しくアップロードするwp-config.phpのSALTキーを書き換えておきます。
またDBパスワードを変更し、wp-config.php内にあるDBパスワードを書き換えておきます。
3-4.ユーザーパスワードの変更
すべてのユーザーパスワードを変更します。
3-5.コア、プラグインのアップデート
WordPressコアファイル、プラグインのアップデートを行います。
3-6.FTPパスワード変更
普段更新に使用しているパソコンがマルウェアに感染し、ftpのパスワードが漏えいしている可能性があります。
このため、ftpのパスワードも変更しておく方が安全です。
また使用しているパソコン自体も念のためセキュリティソフトにかけておきましょう。
4.改ざん被害事例から考える注意点
たとえば何らかのページにリダイレクトさせる改ざんの被害に遭ったとします。
この際にリダイレクトさせるコード自体を追いかけていっても、復旧しない事例が多くあります。
これは、たんに一種類の一連のコードだけではなく、複数のパターンの不正コードがあったり、違う手法のものが存在するためです。
被害が進行している場合、そうしたサイトのURLはいわゆるアンダーグラウンドなハッカーコミュニティで共有されているケースがあり、複数の攻撃者が複数の攻撃や複数の不正ファイルパターンを投入していることがあります。
またコアやプラグインの脆弱性をついた攻撃の場合、実証コードが公開されていれば様々な攻撃者がそうした脆弱性を持つサイトを機械的に発見・攻撃します。
このため、攻撃者は一人、攻撃パターンは一つといった先入観を持つと、再被害に遭いやすくなります。
すべてのファイルとDBを調査し、すべての不正コードを削除する必要があります。
5.バックアップを単にアップロード(置き換え)すれば済むのか
感染・改ざんされていないバックアップファイルを単に置き換える形でアップロードすれば、再被害には遭わないのでしょうか。
残念ながらそうではありません。
1.バックアップで再構築しても、脆弱性は残る
2.バックアップに悪用できる正規のファイルがあれば再度入り口を提供することになる
よって、バックアップファイルがすべて健全な状況で残されている、また脆弱性は存在しない、あるいは直ちに修正できるという前提が必要になります。
またバックアップの世代数の問題があります。
WordPressは記事投稿で更新が進んでいく都合上、日々のバックアップを取っている方もいらっしゃいますが、Googleによるとサイトの不正利用を通知してから実際に管理者が対応するまでの期間は30日近くなります。
もちろん、Googleがそれを検知するまでの期間もあります。
よって、バックアップは通常数世代では足りないということになりますが、かといって大型サイトだったり、あるいは画像が多用されている、画像ファイルがデジカメやスマホ撮影から直接取り込みなど容量が多い場合、世代数を増やすとサイト内の容量を圧迫していきます。
一般の方がバックアップを取る場合は30世代程度、もしくは改ざん検知と併用で数世代の取得とするのが安心です。
6.WAFを活用しよう
昨今のレンタルサーバーではWAFが無料利用できるサーバーも多くなっています。
WAFがあれば完璧というわけではありませんが、それでも大幅にセキュリティを強化できます。
利用できるのであれば、できるだけWAFの設定をしておくようにしましょう。
7.復旧事業者、セキュリティ会社という選択
長く書いてきましたが、実際のところこれらの作業すべてを行うには非常に多くの時間がかかります。
また多くの時間をかけても再改ざんされないとは限りません。
このため、多くの復旧実績を持ち、各種事例に対応し、早ければ数時間で復旧が完了する改ざん復旧事業者への依頼も十分検討の余地があります。
といっても、復旧事業者も様々ですから、その選びかたを次回は解説します。
本来改ざんの被害者なのに、結果的に加害者となってしまうことのないようWebRepairはバックドアやマルウェアを削除し被害を早期復旧いたします。
営業時間内であればフリーダイヤルでもご利用頂けます。
関連記事
カテゴリ:Web改ざん
タグ:WordPress,復旧方法,改ざん,改ざん事例