Come rimuovere malware da WordPress: Guida tecnica passo dopo passo

Rimuovere malware da WordPress

Il malware su WordPress non si comporta sempre allo stesso modo. A volte il sito reindirizza i visitatori verso farmaci contraffatti. A volte inietta pagine in giapponese invisibili all’occhio umano ma perfettamente visibili a Google. A volte installa una backdoor silenziosa e aspetta. Capire che tipo di malware ha infettato il sito non è un esercizio accademico: è il primo passo per rimuoverlo nel modo corretto e non lasciare tracce che permettono la reinfection.

In questa guida trovi la procedura completa: dall’identificazione del tipo di infezione fino alla verifica finale prima di riaprire il sito al pubblico. È più tecnica dell’articolo sulla gestione di un sito WordPress già compromesso — se stai cercando una panoramica iniziale, parti da lì.

La procedura in sintesi: identifica il tipo di malware dai sintomi → isola il sito e fai un backup forense (anche del sito infetto) → scansiona con Sucuri SiteCheck e Wordfence → rimuovi manualmente file infetti, plugin e temi compromessi, backdoor → pulisci il database → verifica con otto controlli prima di riaprire → richiedi revisione a Google Search Console.

Che tipo di malware ha infettato il tuo WordPress?

Non tutto il malware si rimuove allo stesso modo. Prima di aprire Wordfence o connetterti via FTP, vale la pena capire con cosa stai lavorando — perché la procedura cambia, e usare quella sbagliata lascia tracce che portano alla reinfection entro giorni.

Redirect hack

Il sito reindirizza i visitatori verso altri domini — spesso siti di spam, phishing o contenuti per adulti. Il redirect è quasi sempre condizionale: si attiva solo da mobile, solo per chi arriva da Google, o solo al primo accesso. Il codice malevolo è quasi sempre in .htaccess o iniettato via JavaScript nei file del tema.

Pharma hack (SEO spam farmaceutico)

Il sito viene trasformato in un distributore silenzioso di spam farmaceutico — link e pagine relative a farmaci come Viagra e Cialis, visibili solo ai crawler di Google e non ai visitatori normali. È quasi sempre eval(base64_decode()) offuscato per eludere i plugin di sicurezza.

Japanese SEO spam

Variante del pharma hack: il sito genera centinaia o migliaia di pagine con testo in giapponese — solitamente contenuti e-commerce per prodotti contraffatti. Queste pagine appaiono nell’indice di Google e nel sitemap. La tabella wp_posts contiene le pagine generate automaticamente dall’attacco.

Backdoor e webshell

Non sempre il malware causa danni visibili immediatamente. Una backdoor è un file PHP che permette all’attaccante di eseguire comandi sul server in modo remoto — una webshell. Spesso è camuffata con un nome che imita il core (class-wp-cache.php con codice aggiunto, o file con nomi casuali in cartelle dove non dovrebbero esserci PHP). La sua presenza rende qualsiasi pulizia parziale inutile: l’attaccante può rientrare in qualsiasi momento.

Defacement

La homepage o altre pagine vengono sostituite con contenuti estranei — messaggi politici, rivendicazioni di hacker, pagine vuote. È l’attacco più visibile ma spesso meno pericoloso tecnicamente: l’obiettivo è la visibilità, non l’accesso persistente.

Prima di tutto: isola il sito e crea un backup forense

Qualunque tipo di infezione tu abbia trovato, i primi due passi non cambiano: metti il sito in manutenzione e fai un backup dell’installazione compromessa — sì, anche del sito infetto. I log di server conservati nell’archivio ti dicono come è entrato l’hacker. Se durante la pulizia rompi qualcosa, hai ancora uno stato a cui tornare.

Disattiva la cache e qualsiasi CDN attiva (Cloudflare, Bunny, ecc.) prima di procedere: le versioni cached del malware vengono servite ai visitatori anche dopo che hai ripulito il sito originale, creando confusione durante la verifica.

Regola ferma

Non eliminare nulla prima di avere il backup. Non importa quanto ovviamente malevolo sembri un file: cancellarlo senza backup potrebbe renderti impossibile capire come è avvenuta l’infezione — informazione essenziale per non riaprire la stessa porta.

Strumenti per la scansione del malware

Scanner online (nessun accesso richiesto)

Sucuri SiteCheck è il punto di partenza quando non hai accesso alla dashboard o vuoi una verifica esterna prima di intervenire. Analizza il codice HTML pubblicamente accessibile del sito, cerca firme di malware note, e controlla se il dominio è in blacklist. Non vede i file PHP interni — ma è gratuito e non richiede installazione.

Plugin di scansione

Con accesso alla dashboard, Wordfence Security (versione gratuita) è lo strumento più completo per un’installazione self-hosted. Confronta ogni file del sito con il repository ufficiale di WordPress e segnala qualsiasi discrepanza — file modificati, file estranei, codice iniettato.

Sucuri Security Plugin aggiunge il monitoraggio dell’integrità dei file e un log delle attività sospette. MalCare è un’alternativa valida se vuoi la rimozione automatica con un clic, ma il servizio costa e ha i limiti descritti nell’ultima sezione.

Limite importante

In circa il 14% dei siti compromessi, secondo i dati Sucuri, il malware manomette i file di Wordfence stesso per restare nascosto. Se dopo la scansione il sito sembra pulito ma i sintomi persistono, non fermarti allo scanner — procedi con la scansione manuale.

Scansione manuale da riga di comando

Se hai accesso SSH al server, questi comandi cercano i pattern più comuni di malware offuscato nelle cartelle PHP:

  • grep -rn “eval(base64_decode” /path/to/wordpress/ — individua il pattern classico dell’offuscamento
  • find /path/to/wordpress/wp-content/uploads/ -name “*.php” — PHP nella cartella uploads è quasi sempre malware
  • find /path/to/wordpress/ -name “*.php” -mtime -7 — file PHP modificati negli ultimi 7 giorni

Il terzo comando è particolarmente utile: confronta le date di modifica con la data approssimativa dell’attacco per isolare i file toccati dagli hacker.

Rimozione manuale: dove si nasconde il malware in WordPress

File del core e file di configurazione

Scarica una copia pulita di WordPress dalla versione esatta che stai usando (disponibile su wordpress.org/download/releases) e confronta i file del core con quelli del tuo sito. Sovrascrivi wp-admin/ e wp-includes/ completamente — non c’è nulla di personalizzato lì dentro che potresti perdere.

.htaccess e wp-config(.)php: fai un confronto riga per riga con una copia pulita. Cerca codice prima del tag di apertura <?php in wp-config(.)php, o regole RewriteRule verso domini esterni in .htaccess. In .htaccess le regole di redirect malevolo spesso hanno condizioni che le rendono invisibili ai normali visitatori — le trovi cercando HTTP_USER_AGENT nelle condizioni.

Plugin e temi

Disinstalla tutti i plugin non utilizzati — non disattivarli, disinstallarli completamente. Per quelli attivi, scarica ogni plugin direttamente dal repository ufficiale di WordPress e sostituisci l’intera cartella con la versione pulita.

Se stai usando un tema nulled — una copia non ufficiale di un tema premium scaricata gratuitamente — la bonifica non è sufficiente. Il codice malevolo è integrato nel tema stesso e ritornerà dopo qualsiasi pulizia. L’unica soluzione è sostituirlo con una versione ufficiale o un tema alternativo.

Cartella /wp-content/uploads/

Questa cartella non dovrebbe contenere mai file PHP eseguibili — serve solo per immagini, PDF e altri media caricati dagli utenti. Qualsiasi file .php qui dentro è quasi certamente malware. Elimina tutti i PHP trovati nella cartella uploads e aggiungi un file .htaccess in quella directory con questa regola per bloccare future esecuzioni:

<Files *.php>
	deny from all
</Files>

Database

Apri phpMyAdmin e cerca nella tabella wp_posts eventuali pagine create automaticamente dall’attacco — riconosci quelle del Japanese SEO spam dal contenuto in caratteri giapponesi, quelle del pharma hack dai riferimenti a farmaci. Controlla wp_options per valori anomali nei campi siteurl e home e per task cron non standard. Rimuovi eventuali utenti admin non autorizzati dalla tabella wp_users.

Come identificare ed eliminare le backdoor

Una backdoor non rimossa è come non aver fatto nulla. L’attaccante rientra, reinfetta, e ti ritrovi al punto di partenza — spesso entro 24 ore. Il problema è che le backdoor vengono nascoste deliberatamente dove non guardi: non nella cartella plugin principale, ma nei temi inattivi, nelle mu-plugins, nelle cartelle nascoste con il punto davanti.

I posti più comuni dove cercare backdoor, oltre ai file PHP nelle uploads:

  • Cartella /wp-content/mu-plugins/: i plugin in questa cartella vengono caricati automaticamente ad ogni richiesta, senza apparire nella lista plugin. Un file PHP qui è quasi sempre una backdoor.
  • Temi non attivi: gli attaccanti iniettano backdoor nei temi inattivi sapendo che vengono ignorati durante la pulizia. Controlla anche il tema Twenty Twenty predefinito se non lo stai usando.
  • File con nomi che imitano il core: come class-wp-cache.php nella root o in cartelle di plugin noti. Confronta ogni file sospetto con l’installazione originale.
  • Cartelle nascoste: le cartelle che iniziano con un punto sono invisibili nei normali file manager FTP. Abilita la visibilità dei file nascosti nel tuo client FTP prima di procedere.

Il segnale più affidabile di una backdoor è la presenza delle funzioni PHP eval() e base64_decode() usate in combinazione. Da sole queste funzioni non sono necessariamente malicious, ma il loro utilizzo combinato in un singolo blocco di codice è un segnale inequivocabile di offuscamento malevolo.

Dopo la pulizia: cosa verificare prima di riaprire il sito

Il sito sembra pulito. Prima di riaprirlo al mondo, otto verifiche — nell’ordine:

  1. Esegui una nuova scansione completa con Wordfence — il report dovrebbe essere pulito.
  2. Verifica il file .htaccess: deve corrispondere al formato standard di WordPress senza regole aggiuntive non riconoscibili.
  3. Controlla tutti gli utenti admin nella dashboard — rimuovi chiunque non sia riconoscibile.
  4. Rigenera le secret key e i salt in wp-config(.)php tramite il generatore ufficiale WordPress.
  5. Cambia le password di WordPress, FTP, database e hosting.
  6. Verifica che wp-content/uploads/ non contenga PHP ed abbia il file .htaccess di protezione.
  7. Disattiva la cache e ricarica il sito da un browser in incognito su mobile — verifica che non ci siano redirect.
  8. Controlla Google Search Console nella sezione Problemi di sicurezza. Se l’attacco è stato rilevato da Google, invia la richiesta di revisione.

La rimozione automatica è sufficiente?

MalCare e Wordfence Premium funzionano per riconoscimento di firma — malware noto, catalogato, già visto. Per infezioni semplici e ben documentate vanno benissimo. Il problema arriva con attacchi che usano offuscamento avanzato o backdoor personalizzate: lo strumento non trova nulla, ti dice che il sito è pulito, e tu ci credi. Finché non ti attaccano di nuovo.

La rimozione automatica non sostituisce capire da dove è entrato l’hacker. Senza quello, stai trattando il sintomo e lasciando la causa intatta. Il sito viene reinfettato attraverso la stessa falla, a volte nel giro di ore.

Se la scansione automatica non trova nulla ma i problemi persistono, o se vuoi essere certo che la bonifica sia completa senza rischiare di lasciare backdoor attive, contattami: lavoro in modo diretto e risolvo il problema nel minor tempo possibile.

Esperto WordPress

In sintesi

Prima di toccare qualsiasi file, devi sapere con che tipo di infezione hai a che fare. Redirect hack, pharma hack, Japanese SEO spam, backdoor, defacement — la procedura di rimozione cambia in modo significativo tra una categoria e l’altra, e usare quella sbagliata lascia tracce che portano alla reinfection entro giorni. L’identificazione del tipo non è un passaggio opzionale.

Il backup forense viene prima di tutto. Anche del sito infetto. I log di server nell’archivio rivelano il vettore di attacco — senza questa informazione, puoi ripulire il sito completamente e lasciare aperta la stessa vulnerabilità che ha permesso l’accesso.

Sui tool automatici: MalCare e Wordfence Premium funzionano per riconoscimento di firma, quindi individuano malware noto e catalogato. Il 14% circa dei siti compromessi — dato Sucuri — presenta malware che manomette gli stessi file di Wordfence per restare nascosto. Quando lo scanner dice che va tutto bene ma i sintomi persistono, non fermarti allo scanner: passa alla scansione manuale da riga di comando.

La backdoor è il componente che rende inutile qualsiasi pulizia parziale — cercala in /wp-content/mu-plugins/, nei temi inattivi e nelle cartelle nascoste con il punto davanti, non solo nella cartella plugin. E la rimozione automatica non sostituisce capire da dove è entrato l’hacker: senza quella risposta, stai trattando il sintomo e lasciando la causa intatta.

Domande frequenti (FAQ)

Significa quasi certamente che il malware utilizza tecniche di offuscamento avanzate che Wordfence non riesce a rilevare per firma. Succede nel 14% circa dei casi secondo i dati Sucuri. In questi casi la scansione manuale da riga di comando è l’unico modo per trovare il codice malevolo — cerca in particolare la combinazione eval() + base64_decode() nei file PHP.

Sì, nella grande maggioranza dei casi. La pulizia riguarda i file PHP del core, dei plugin e dei temi — non i contenuti caricati. Le pagine, gli articoli e le immagini restano intatti. Solo nel caso di Japanese SEO spam o pharma hack, dove l’attacco ha creato centinaia di pagine fittizie nel database, è necessario identificare e cancellare quelle voci da wp_posts.

Dopo aver inviato la richiesta di revisione tramite Google Search Console, Google impiega solitamente tra 24 e 72 ore per esaminare il sito e rimuovere gli avvisi di sicurezza dai risultati di ricerca. Il ranking organico può richiedere settimane per tornare ai livelli precedenti, dipendentemente da quanto tempo il sito è rimasto compromesso.

Sì, se la vulnerabilità originale non viene chiusa. La reinfection è uno dei segnali più chiari che la bonifica è stata incompleta — o che è rimasta una backdoor attiva. Per questo identificare il vettore di attacco dai log del server è fondamentale: senza quella informazione, non sai quale porta chiudere dopo la pulizia.

Dipende dal tipo di infezione. Se il malware ha raccolto dati personali o di pagamento dei visitatori — più probabile in attacchi su WooCommerce o siti con form di contatto — hai obblighi legali di notifica secondo il GDPR entro 72 ore dalla scoperta della violazione. Se l’infezione era di tipo SEO spam o redirect senza raccolta dati, la notifica non è obbligatoria ma può essere opportuna per trasparenza.

Guide alla Sicurezza WordPress

Indice di questa guida