Come scovare il malware nascosto nel Database di WordPress
Quando un sito WordPress viene compromesso, l’istinto è quello di cancellare file sospetti e pulire i plugin. Tuttavia, molti malware moderni sono progettati per la “persistenza”: si nascondono nel database per rigenerarsi o per reindirizzare i visitatori anche dopo che avete pulito i file.
Se state affrontando una bonifica, ignorare il database (o limitarsi a sovrascrivere i file del core) è un errore fatale. Ecco una guida pratica su come interrogare il vostro database MySQL/MariaDB per individuare tracce di infezione, senza perderci in tecnicismi inutili.
Premessa fondamentale
Prima di eseguire qualsiasi operazione o query di modifica, fate un backup completo del database (esportatelo in formato .sql).
1. Caccia agli “Amministratori Fantasma”
La prima cosa che fa un hacker è crearsi una porta di servizio. Spesso inseriscono un nuovo utente con privilegi di amministratore per poter rientrare se cambiate la vostra password.
Cosa fare: Aprite phpMyAdmin e controllate la tabella wp_users.
Query SQL rapida:
SQL
SELECT * FROM wp_users;
Cosa cercare:
- Utenti che non avete creato voi.
- Email con domini strani o temporanei.
- Nomi utente generici come
wp_support,admin_help, o stringhe casuali. Se ne trovate uno, non limitatevi a cambiare la password: eliminatelo immediatamente.
2. Iniezioni nei contenuti (SEO Spam e Redirect)
A volte il sito sembra pulito, ma le vecchie pagine contengono link a siti di scommesse, farmaci o materiale per adulti. L’hacker inietta script o iframe direttamente nel testo dei vostri articoli.
Cosa fare: Controllate la tabella wp_posts.
Query SQL per trovare script sospetti:
SQL
SELECT ID, post_title FROM wp_posts WHERE post_content LIKE '%<script%';
SELECT ID, post_title FROM wp_posts WHERE post_content LIKE '%iframe%';
SELECT ID, post_title FROM wp_posts WHERE post_content LIKE '%display:none%';
Nota: Se usate plugin che inseriscono legittimamente script negli articoli, verificate i risultati uno per uno.
3. Il cuore dell’infezione: la tabella wp_options
Questa è la tabella più critica. Qui vengono salvati l’URL del sito e le configurazioni dei plugin. Gli hacker spesso modificano le opzioni siteurl e home per reindirizzare il traffico mobile, oppure nascondono codice malevolo dentro opzioni apparentemente innocue che vengono caricate automaticamente (“autoload”).
Query SQL di controllo:
SQL
SELECT * FROM wp_options WHERE option_value LIKE '%<script%';
Inoltre, cercate manualmente l’opzione active_plugins. A volte gli hacker attivano plugin “fantasma” che non esistono nella cartella plugin, ma che WordPress cerca di caricare, generando errori o vulnerabilità.
4. Il metodo “Chirurgico” (Analisi offline)
Se non siete esperti di SQL, c’è un metodo ancora più efficace e sicuro per un’analisi profonda.
- Esportate tutto il database in un file
.sqlnon compresso. - Aprite il file con un editor di testo evoluto (come Notepad++, Sublime Text o VS Code).
- Usate la funzione “Trova” per cercare queste stringhe tipiche dei malware PHP offuscati:
base64_decode(spesso usata per criptare il virus)eval((comando per eseguire codice PHP arbitrario)gzinflateshell_exec
Se trovate queste stringhe all’interno di blocchi di testo incomprensibili (una lunga serie di lettere e numeri senza senso logico), avete trovato l’infezione.
Conclusione
Un database pulito è essenziale quanto un file system pulito. Se state ripristinando un sito dopo un attacco, assicuratevi che le tabelle siano “bonificate” prima di riconnetterle a una nuova installazione di WordPress. Spesso, la soluzione migliore è ripartire da un database pulito importando solo i contenuti essenziali, lasciando indietro le tabelle di configurazione corrotte.