Bonifica malware WordPress: il metodo che usiamo davvero
Come affrontiamo concretamente una bonifica WordPress: dall'analisi iniziale al congelamento, dal confronto file alla sostituzione del core, fino al post-intervento. Senza scorciatoie.

Cercando online "rimuovere malware WordPress" si trovano principalmente due categorie di consigli: installare un plugin di sicurezza e aspettare che pulisca tutto, oppure ripristinare un backup e sperare che vada bene. Entrambi gli approcci, in produzione, sono insufficienti nella maggior parte dei casi.
Una bonifica fatta bene è soprattutto un esercizio di rigore. Non ci sono scorciatoie: serve un metodo, log scritti, e la disciplina di non dichiarare chiuso un caso finché non si è davvero capito da dove è entrato l'attaccante. Questo articolo descrive il metodo che applichiamo internamente, semplificato per essere leggibile.
Per riconoscere i segnali prima di arrivare alla bonifica, leggi 10 segnali che il tuo sito WordPress è compromesso. Se sei nelle prime ore dopo aver scoperto il problema, inizia da cosa fare nella prima ora. Per una lettura meno tecnica dei sintomi, parti dalla guida malware WordPress. Se il problema è già attivo su un sito reale, il percorso principale è rimozione malware WordPress e la pagina di servizio è bonifica malware WordPress.
Fase 0: contatto e prima qualifica
Prima ancora di vedere il sito, raccogliamo informazioni. Ci servono:
- URL del sito
- da quanto tempo è il problema, e cosa ha fatto pensare alla compromissione
- chi ha accesso al sito, all'hosting, al dominio
- ultima modifica intenzionale (un aggiornamento di plugin? un trasloco?)
- se esistono backup recenti utilizzabili
- se il sito vende, raccoglie lead, fa newsletter; quanto traffico ha; quanto costa una giornata di down
L'ultimo punto è critico: la priorità di un intervento spot dipende da quanto costa al cliente avere il sito compromesso o offline.
Fase 1: congelamento ed evidenze
La tentazione di pulire subito è forte, ma è una pessima idea. Una volta sovrascritto il sito, perdi le evidenze e non saprai mai com'è entrato l'attaccante. Le compromissioni che ritornano sono quasi sempre quelle in cui non si è capito il vettore di ingresso.
Quello che facciamo in concreto:
- backup completo file system (
tarda SSH, escludendo cache e tmp) - dump completo del database con
mysqldump --single-transaction --quick --routines --triggers - snapshot dei log Apache/Nginx degli ultimi 30-60 giorni
- copia dei file
wp-config.php,.htaccess,php.inise presente - export della tabella
wp_optionscome baseline rapida - export utenti via WP-CLI:
wp user list --format=csv
Fase 2: lettura dei log
I log dicono molto, anche quando il sito sembra muto. Cerchiamo:
- richieste POST verso file PHP non standard
- pattern di scansione su path tipo
/wp-content/plugins/<plugin>/readme.txt(ricognizione versioni) - POST con payload molto grandi su
xmlrpc.php,wp-login.php,admin-ajax.php - IP che fanno migliaia di richieste in pochi minuti
- User-Agent palesemente falsi o automatici
Su Apache, un comando come questo elenca i 20 IP più attivi:
zcat /home/site/logs/site.it.access_log.* \
| awk '{print $1}' | sort | uniq -c | sort -rn | head -20
Spesso spiccano subito. Una variante con grep mostra POST recenti verso percorsi sensibili.
Fase 3: confronto core, temi, plugin
WordPress è open source: la versione installata è disponibile pubblicamente. Scarichiamo la stessa versione da wordpress.org, la decomprimiamo in una cartella separata, e diffiamo:
diff -r /tmp/wordpress-x.y.z/ /home/site/public_html/ \
--exclude=wp-content --exclude=wp-config.php
Tutto quello che è "differente" nei file core è sospetto. WordPress non si tocca. Se trovi un file modificato in wp-includes/ o wp-admin/, la modifica è quasi certamente malevola.
Stesso discorso per temi e plugin. Per i plugin scarichiamo dalla repo ufficiale la stessa versione installata. I plugin commerciali si confrontano con la versione fornita dal vendor.
Quello che troviamo più spesso:
- file
index.phpaggiunti in cartelle plugin - modifiche minime a
wp-includes/load.phpowp-includes/post.php - backdoor in
wp-content/themes/<theme>/functions.php - aggiunte nascoste in fondo a
wp-config.phpcon stringhe codificate in base64 e funzioni di esecuzione dinamica - file mai esistiti nel core (tipo
wp-includes/class-wp-utility.php, oppure file PHP randomici dentrowp-content/uploads/)
Fase 4: pulizia iterativa, non distruttiva
La logica di pulizia deve essere sistematica, non pirotecnica. In ordine:
- Sostituzione del core: cancelliamo tutto in
wp-admin/,wp-includes/e i file PHP della root (trannewp-config.php), quindi copiamo i file dalla versione pulita. - Pulizia plugin: per i plugin presenti nella repo ufficiale, eliminiamo la cartella e reinstalliamo. Per i premium, sostituiamo con il pacchetto del vendor. Plugin che non si trovano da nessuna parte vanno disabilitati e analizzati.
- Pulizia temi: lo stesso, considerando le child theme: lì potrebbe esserci codice legittimo del cliente da preservare.
- wp-config.php: rigeneriamo la sezione SALT chiamando
https://api.wordpress.org/secret-key/1.1/salt/. Riveriamo le variabili custom. Cancelliamo qualsiasidefine()che non riconosciamo, dopo averne preso nota. - .htaccess: lo sostituiamo con la versione standard di WordPress, o lo riscriviamo manualmente preservando solo regole legittime documentate.
- wp-content/uploads/: rimuoviamo tutti i file
.php, che lì non hanno motivo di esistere. Verifichiamo a campione i file caricati di recente: a volte i file immagine contengono payload PHP nel binario.
Fase 5: pulizia del database
Il database va trattato con la stessa attenzione del file system. Operazioni tipiche:
- esportare la tabella
wp_usersewp_usermeta, diffare con la baseline pre-compromissione se esiste; eliminare utenti chiaramente non legittimi - cercare in
wp_optionsopzioni con valori serializzati che includono codice eseguibile, decoder base64, URL sospetti, JavaScript esterno - controllare la tabella
wp_postsper articoli pubblicati con statopublishma slug strano (spesso pagine SEO spam pubblicate massivamente) - analizzare meta
_transient_*molto pesanti che alcune backdoor usano come canali di persistenza
Fase 6: rotazione credenziali e contromisure
Una volta che il sito è pulito a livello di file e database, ruotiamo:
- password di tutti gli utenti admin
- password FTP, SSH, hosting cPanel/Plesk, database
- chiavi API di plugin che hanno accesso a servizi esterni (SMTP, Stripe, gateway pagamento, sincronizzazioni)
- token di servizi connessi (Cloudflare, S3, CDN)
Se qualcuna di queste credenziali era custodita su una macchina sospetta o in un manager non sicuro, vale la pena anche una scansione antimalware del client.
Fase 7: hardening minimo prima di rimettere online
Prima di togliere eventuali maintenance e considerare il sito di nuovo "a regime":
- aggiornare WordPress, temi e plugin all'ultima versione compatibile
- rimuovere temi e plugin non utilizzati
- disabilitare l'editor file da Bacheca
- limitare i tentativi di login
- applicare 2FA a tutti gli admin
- impostare permessi corretti (
644file,755cartelle,wp-config.phpa600) - configurare alert sui log di accesso
- riattivare backup automatici verificati
Per una checklist completa delle contromisure post-bonifica, leggi hardening WordPress essenziale.
Fase 8: monitoraggio post-intervento
La fase più trascurata. Il rischio di reinfezione nelle prime due settimane è alto: spesso restano dropper minori o credenziali compromesse di cui non sapevamo. Per questo:
- monitor giornaliero su modifiche file con tool tipo
aideo WP-CLI checksum - scansione DNS/blacklist (Google Safe Browsing, MXToolbox, Spamhaus)
- verifica indicizzazione SEO via Search Console
- check periodico della lista utenti
Per i clienti in Manutenzione WordPress è automatico. Nel percorso Urgenza lo offriamo come finestra di 30 giorni inclusa quando il caso è una bonifica malware.
Riepilogo onesto
Una bonifica fatta seriamente è un lavoro di ore o giorni, non di minuti. Non è una scansione automatica né un click su "rimuovi malware". Per questo costa, e per questo dura.
Se hai un sito compromesso, richiedici una valutazione. Diamo una valutazione iniziale prima di accettare l'intervento e siamo trasparenti quando il caso è troppo grosso o troppo piccolo per il nostro intervento standard. Per capire i costi prima di contattarci, leggi quanto costa rimuovere malware da WordPress.
Scritto dal team WPsec.it
Team WPsec.it
Bonifica malware, hardening, performance e manutenzione WordPress.
Continua a leggere
Articoli correlati.

WordPress hackerato: guida al recupero del sito in 11 fasi
Recuperare un sito WordPress hackerato in 11 fasi: dalla conferma alla bonifica, dalla chiusura del vettore all'hardening finale. Sequenza operativa con comandi e checklist.

Utenti admin sconosciuti WordPress: cosa fare subito
Trovato un admin WordPress che non hai creato? Verifica backdoor, utenti, log e database prima di rimuoverlo in sicurezza.

Hosting sospeso per malware WordPress: cosa fare prima di chiedere la riattivazione
Come gestire un hosting sospeso per malware, spam o abuso su WordPress: evidenze, backup, bonifica, comunicazione al provider e rientro online.