Spesso tutto comincia in modo innocuo. Un cliente ti scrive che, aprendo il tuo sito, si è ritrovato all'improvviso su un casinò online. Il tuo provider di hosting ti manda una mail per dirti che il tuo pacchetto è stato bloccato per invio di spam. Oppure su Google, sotto il tuo risultato di ricerca, compare la frase «Questo sito potrebbe essere compromesso». A quel punto è chiaro: qualcuno è entrato nel tuo WordPress. È una bella seccatura, ma non è la fine del mondo. Adesso conta soprattutto fare le cose nell'ordine giusto. Chi in preda al panico cancella tutto e ripristina un vecchio backup qualsiasi, spesso una settimana dopo si ritrova con lo stesso problema. Questa checklist di emergenza ti accompagna nelle prime ore, nella pulizia e nel periodo successivo.
Come capire se il tuo sito WordPress è stato hackerato?
Non tutti gli attacchi si notano subito. Anzi, a molti aggressori interessa proprio che tu non ti accorga di nulla. Preferiscono sfruttare il tuo server in tutta tranquillità per inviare spam, per i reindirizzamenti o per far salire le proprie pagine su Google. Questi segnali vanno presi sul serio:
- Reindirizzamenti verso siti estranei: i visitatori finiscono su pagine di gioco d'azzardo, di incontri o su negozi falsi. Spesso succede solo da smartphone oppure solo quando qualcuno arriva da Google.
- Avvisi di Google o del browser: al posto del tuo sito Chrome mostra una pagina di avviso rossa, nei risultati di ricerca compare «Questo sito potrebbe essere compromesso» oppure Search Console segnala un problema di sicurezza.
- Pagine estranee nell'indice: una ricerca di
site:tuodominio.itfa saltare fuori pagine con caratteri giapponesi, farmaci per l'impotenza o prodotti di marca a prezzi stracciati che non hai mai creato. Gli addetti ai lavori parlano di Japanese keyword hack o di pharma hack. - Utenti sconosciuti: nell'elenco degli utenti c'è un amministratore che nessuno conosce. A volte è persino nascosto e lo vedi solo nel database.
- Una mail dal tuo hosting: il tuo provider segnala invio di spam o un carico del server insolitamente alto, oppure ha già bloccato il tuo pacchetto.
- File e modifiche strane: file dai nomi incomprensibili, codice estraneo all'inizio del file
index.php, plugin che non hai mai installato o un login in cui all'improvviso la tua password non funziona più.
C'è un aspetto che spiazza molti: spesso tu non vedi proprio nulla. Un malware fatto bene riconosce dal cookie gli amministratori che hanno effettuato l'accesso e mostra loro il sito del tutto normale. Per fare la prova, quindi, apri il tuo sito in una finestra in incognito, meglio ancora dallo smartphone con la rete mobile. Aprilo una volta direttamente e una volta passando dalla ricerca di Google.
Sito WordPress hackerato: cosa fare nella prima ora?
Nella prima ora non devi ancora trovare il codice malevolo. L'obiettivo è limitare i danni senza distruggere le tracce. Segui questi punti nell'ordine:
- Respira e non cancellare ancora niente. L'istinto di cancellare subito tutto o di ripristinare un backup alla cieca è comprensibile. Così però distruggi proprio le tracce che più avanti ti diranno come sono entrati gli aggressori.
- Documenta quello che vedi. Fai screenshot dei reindirizzamenti e degli avvisi, annota gli orari e conserva le mail del provider di hosting e di Google. Ti servirà per cercare la causa e, più avanti, per un'eventuale notifica all'autorità per la protezione dei dati.
- Salva lo stato infetto. Scarica tutti i file e un export del database e conservali a parte, segnandoli chiaramente come infetti. Questa copia non la ripristinerai mai. Serve solo come prova e per fare confronti.
- Metti il sito offline. È d'obbligo soprattutto se i visitatori vengono reindirizzati su pagine truffaldine o se il tuo shop gestisce dati di pagamento. Un plugin di manutenzione qui serve a poco, perché gira proprio dentro il WordPress compromesso. Meglio bloccare il sito a livello di server e lasciar passare solo il tuo IP. Se il sito gira su Apache, bastano tre righe in cima al file
.htaccess:
Sostituisci l'indirizzo con il tuo IP. Il codice di stato 503 dice a Google che il sito è irraggiungibile solo temporaneamente. Per un breve periodo non danneggia il tuo posizionamento. Se il tuo server usa nginx o non sei sicuro, chiedi aiuto al tuo provider di hosting.RewriteEngine On RewriteCond %{REMOTE_ADDR} !^203\.0\.113\.10$ RewriteRule ^ - [R=503,L] - Cambia gli accessi più importanti. Imposta nuove password per l'account di hosting, per SFTP o SSH e per il database. Fallo da un dispositivo di cui ti fidi. Se le credenziali sono state rubate dal tuo computer, per esempio da un trojan che legge le password salvate in FileZilla, le nuove password non servono a nulla finché il computer resta infetto. Cambia anche la tua password di WordPress. Gli altri utenti e le chiavi di sicurezza vengono dopo la pulizia, perché finché resta aperta una backdoor l'aggressore può semplicemente leggere anche le nuove password.
- Avvisa il tuo provider di hosting. Molti provider hanno un proprio team di sicurezza, scanner antimalware e soprattutto i log di accesso del server. Chiedi esplicitamente i log delle ultime settimane e i backup. Alcuni provider li conservano più a lungo di quanto pensi.
- Informa chi deve saperlo. Se sei un'agenzia, avvisa il tuo cliente. Se altre persone hanno accesso al sito, vanno informate anche loro. E appena potrebbero essere coinvolti dati personali, scatta una scadenza prevista dalla legge. Ne parliamo più avanti.
Come entrano gli hacker in WordPress? Ecco come trovare il punto d'ingresso
Molti saltano questo passaggio, ed è proprio per questo che così tanti siti vengono hackerati due volte. Se non trovi la falla, fai pulizia e qualche giorno dopo l'aggressore rientra dalla stessa porta. Spesso nemmeno di proposito, ma perché un bot scandaglia automaticamente il web in cerca proprio di quella falla.
I punti d'ingresso più comuni sono:
- Plugin e temi non aggiornati: è di gran lunga la via più frequente. Secondo i report annuali di Patchstack, la stragrande maggioranza delle vulnerabilità note nell'ecosistema WordPress riguarda i plugin, una piccola parte i temi e quasi nessuna il core di WordPress. Sono particolarmente a rischio i plugin che nessuno mantiene più o che sono stati rimossi dalla directory dei plugin di WordPress.org.
- Plugin e temi nulled: copie pirata di plugin premium scaricate da portali poco raccomandabili. Non costano nulla, ma sorprendentemente spesso contengono una backdoor già pronta.
- Password deboli o rubate: i bot provano giorno e notte combinazioni di nomi utente e password. Se usi la stessa password anche su altri servizi, alla prossima fuga di dati sei nei guai.
- Vicini nello stesso pacchetto di hosting: se nello stesso pacchetto c'è ancora una vecchia installazione di prova, uno shop dimenticato o il sito del 2016 in una sottocartella, da lì l'aggressore può raggiungere tutti gli altri siti del pacchetto.
- Computer infetti: un malware sul PC di un amministratore può leggere le credenziali salvate e inviarle agli aggressori.
Ecco come risalire alla causa:
- Confronta i tuoi plugin e temi con un database di vulnerabilità, per esempio Wordfence Intelligence, Patchstack o WPScan. Quello che conta è se esiste una vulnerabilità nota proprio per la versione che hai installato.
- Dai un'occhiata ai log di accesso del server. Sono sospette le richieste POST verso file che in WordPress non esistono affatto, oppure verso file nella cartella
wp-content/uploads. Gli orari spesso ti rivelano quando è cominciato tutto. - Controlla quando sono stati creati i file sospetti. La data è un indizio, non una prova, perché gli aggressori amano falsificare i timestamp.
Come rimuovere il malware da WordPress?
Ora si passa alla pulizia. Le strade sono due.
Ripristinare un backup pulito è la via più veloce. Funziona però solo se sai con certezza che il backup è precedente all'intrusione, e non è facile come sembra. Tra l'intrusione vera e propria e i primi effetti visibili passano spesso settimane, a volte mesi, perché gli aggressori prima piazzano una backdoor e la usano solo più tardi. Inoltre perdi tutti i contenuti, gli ordini e i commenti arrivati dopo il backup, e la falla resta comunque aperta. Se scegli questa strada, subito dopo il ripristino aggiorna tutti i plugin e i temi e segui comunque i punti qui sotto.
Ripulire il sito a mano richiede più tempo, ma è più accurato. La cosa più sicura è lavorare su una copia e non sul sito online. Ecco come procedere:
- Sostituisci WordPress per intero. Elimina le cartelle
wp-adminewp-includese sostituiscile con copie nuove della stessa versione scaricate da WordPress.org. Lo stesso vale per i file nella directory principale, trannewp-config.php. Per verificare che sia tutto a posto, usa la riga di comando di WordPress:
Il comando confronta ogni file con i checksum ufficiali di WordPress.org e segnala anche i file che lì non dovrebbero proprio esserci.wp core verify-checksums - Reinstalla plugin e temi. Elimina ogni plugin e ogni tema e reinstallali da zero da una fonte affidabile. Quello che non usi non lo rimetti proprio. Anche per i plugin della directory ufficiale esiste una verifica:
I plugin premium il comando non li può verificare, perché WordPress.org non ha i loro checksum. Quelli scaricali di nuovo direttamente dallo sviluppatore.wp plugin verify-checksums --all - Passa al setaccio la cartella uploads. Lì vanno immagini, PDF e altri file multimediali, ma non file PHP. Con questo comando trovi quelli che lì non c'entrano nulla:
Fanno eccezione i file vuoti chiamatifind wp-content/uploads -type f -name "*.php"index.php, che alcuni plugin creano per impedire che si possa elencare il contenuto di una cartella. Tutto il resto va controllato con attenzione. - Controlla tutto quello che non puoi reinstallare. Cioè
wp-config.php,.htaccess(un nascondiglio molto amato per i reindirizzamenti che scattano solo per chi arriva da Google o da smartphone), il tuo tema personalizzato con il suofunctions.phpe la cartellawp-content/mu-plugins. Tutto ciò che si trova lì WordPress lo carica automaticamente, e dalla bacheca non si può disattivare. Tipiche del codice malevolo sono funzioni comeeval,base64_decodeogzinflateinsieme a stringhe lunghe e illeggibili. Per una prima ricerca basta questo comando:
Un risultato non è ancora una prova, perché anche plugin seri usano alcune di queste funzioni. Ti indica però dove guardare più da vicino.grep -rlE "eval\(|base64_decode\(|gzinflate\(|str_rot13\(" wp-content/ - Ripulisci il database. Il codice malevolo non si nasconde solo nei file. Per prima cosa fatti mostrare tutti gli amministratori:
Le due opzioni finali fanno sì che WordPress non carichi né i plugin né il tema, e quindi non esegua codice malevolo che potrebbe ancora nascondersi lì. Elimina ogni account che non sai ricondurre a qualcuno. Controlla inoltre nella tabellawp user list --role=administrator --skip-plugins --skip-themeswp_optionschesiteurlehomepuntino ancora al tuo dominio. Gli script iniettati in articoli e pagine li trovi così:
Se la tua installazione usa un prefisso diverso daSELECT ID, post_title, post_type FROM wp_posts WHERE post_content LIKE '%<script%';wp_, adatta i nomi delle tabelle. Anche i widget, tra l'altro, sono salvati inwp_optionse meritano un'occhiata. - Controlla le attività pianificate. Gli aggressori amano impostare cron job che ricreano il codice malevolo a intervalli regolari. Guarda sia nei cron job di WordPress sia in quelli del pannello di controllo del tuo hosting.
Scanner come Wordfence o il gratuito Sucuri SiteCheck trovano molti malware noti e sono un buon complemento. Non affidarti però solo a loro. Uno scanner esterno vede solo quello che arriva al browser, e anche un plugin trova solo quello che conosce già. Le backdoor nuove o ben nascoste sfuggono.
Come mettere in sicurezza WordPress dopo un attacco?
Il sito è pulito? Allora arriva la parte che decide se resterà tale.
- Tutte le password nuove: per ogni utente di WordPress, per il database (il nuovo valore poi lo inserisci in
wp-config.php), per SFTP e per l'account di hosting. Pensa anche alle chiavi di accesso per servizi esterni salvate nei plugin, per esempio per l'invio delle mail o per i sistemi di pagamento. - Nuove chiavi di sicurezza: sostituisci i salt in
wp-config.phpcon nuovi valori presi dal generatore ufficiale di WordPress.org. Così tutti i login attivi vengono invalidati, anche quelli che un aggressore potrebbe ancora avere in un cookie. - Chiudi la falla: aggiorna WordPress, tutti i plugin e tutti i temi. Sostituisci i plugin che non vengono più mantenuti. Come tenere la situazione sotto controllo nel tempo te lo spieghiamo nella guida Come mantenere i plugin WordPress aggiornati e sicuri.
- Proteggi i login: attiva per tutti gli amministratori un secondo fattore di autenticazione (cos'è la 2FA e come funziona) e riduci il numero di amministratori allo stretto necessario.
- Disattiva l'editor dei file: con questa riga in
wp-config.phpnessuno può più modificare il codice di plugin e temi dalla bacheca:
Trovi altre impostazioni nelle nostre guide Mettere in sicurezza wp-config.php in WordPress e Impostare correttamente i permessi dei file in WordPress.define( 'DISALLOW_FILE_EDIT', true ); - Un firewall davanti: un Web Application Firewall blocca molti attacchi a vulnerabilità note prima ancora che arrivino a WordPress.
- Backup che funzionano davvero: automatici, giornalieri, salvati fuori dal server e con uno storico di almeno 30 giorni. E ripristinati almeno una volta per prova, prima di averne bisogno in caso di emergenza.
Nelle settimane successive tieni d'occhio il sito con attenzione. Se il codice malevolo ricompare dopo qualche giorno, ti è sfuggita una backdoor oppure la falla è ancora aperta. Una panoramica di tutte le misure di protezione la trovi nella nostra checklist di sicurezza per WordPress.
«Questo sito potrebbe essere compromesso»: come rimuovere l'avviso di Google?
Google non toglie l'avviso da solo appena hai finito di ripulire. Devi muoverti tu:
- Accedi a Google Search Console. Se non hai ancora aggiunto lì il tuo sito, fallo adesso.
- Apri il report «Problemi di sicurezza», che trovi nel menu insieme alle azioni manuali. Lì vedi cosa ha trovato Google, spesso con alcuni URL interessati come esempio.
- Controlla nelle impostazioni chi risulta registrato come utente o proprietario. A volte gli aggressori si aggiungono da soli per far indicizzare più in fretta le loro pagine di spam. Rimuovi chi non conosci e il relativo file di verifica nella directory principale del tuo sito.
- Fai clic su «Richiedi esame» e descrivi brevemente cosa hai trovato e corretto. Secondo Google, l'esame richiede di solito qualche giorno per il malware, circa un giorno per il phishing e a volte diverse settimane per le pagine di spam inserite dagli hacker.
Dopo la pulizia, le pagine di spam dovrebbero restituire il codice di stato 404 o 410. Così spariranno poco a poco dall'indice. Se hai fretta, puoi usare lo strumento per le rimozioni di Search Console. Poi invia di nuovo la tua vera sitemap. Se il tuo server ha inviato spam, controlla anche se il tuo IP è finito in una blacklist per le email. Per fartelo togliere puoi chiedere aiuto al tuo provider di hosting.
Devi notificare un attacco hacker secondo il GDPR?
Dipende da una domanda: potrebbero essere coinvolti dati personali? Con uno shop online, un'area riservata agli iscritti o le richieste salvate dal modulo di contatto è facile che sia così. Persino la tabella degli utenti di WordPress contiene nomi e indirizzi email.
In base all'art. 33 del GDPR devi notificare una violazione dei dati di questo tipo entro 72 ore all'autorità di controllo competente, in Italia il Garante per la protezione dei dati personali. Il termine decorre dal momento in cui ne vieni a conoscenza. La notifica non è necessaria solo se è improbabile che ci sia un rischio per le persone interessate. Se il rischio è elevato, per esempio perché potrebbero essere stati sottratti dati di pagamento o password, in base all'art. 34 del GDPR devi informare direttamente anche le persone interessate.
Anche se alla fine decidi di non notificare, devi documentare l'incidente e la tua decisione: lo prevede l'art. 33, paragrafo 5. La maggior parte delle autorità di controllo mette a disposizione un modulo online per la notifica. Se hai un responsabile della protezione dei dati (DPO), coinvolgilo subito. Questa sezione non sostituisce una consulenza legale.
Quando conviene affidare la pulizia a un professionista?
Molte cose di questa checklist puoi farle in autonomia, se te la cavi con file, database e server. In alcuni casi, però, l'aiuto di un professionista resta la scelta migliore:
- Il tuo shop gestisce dati di pagamento e c'è il sospetto che siano stati rubati i dati delle carte.
- Il sito viene reinfettato dopo ogni pulizia.
- Non hai un backup utilizzabile e la riga di comando non fa per te.
- Si tratta del sito di un cliente e più avanti dovrai poter dimostrare con precisione cosa è successo.
Spesso il primo a cui rivolgersi è il tuo provider di hosting. Molti offrono la pulizia come servizio a pagamento. Ci sono poi servizi specializzati, per esempio quelli di Wordfence o di Sucuri. Chiedi prima se la ricerca del punto d'ingresso è compresa nel prezzo. Limitarsi a rimuovere il codice malevolo ti aiuta solo fino al prossimo attacco.
Come InspectWP ti aiuta dopo un attacco hacker
Mettiamolo subito in chiaro: InspectWP non è uno scanner antimalware e non sostituisce la pulizia. Il report però ti aiuta in due punti che nella fretta spesso passano in secondo piano: trovare la falla più probabile e fare i controlli dopo.
Già il report gratuito elenca i plugin e i temi che rileva sul tuo sito e segnala quelli rimossi dalla directory dei plugin di WordPress.org o che non ricevono aggiornamenti da oltre un anno. Ti mostra se usi una versione obsoleta di WordPress e se dall'esterno sono raggiungibili file che lì non dovrebbero stare, per esempio un debug.log pubblico, backup del database o un file chiamato .env. Controlla inoltre se il tuo login è protetto contro i tentativi automatici di indovinare le password e se i nomi utente si possono leggere dall'esterno.
Nei piani Premium e Agency vedi anche le versioni installate dei tuoi plugin e le relative vulnerabilità note. Così spesso trovi la causa più probabile in pochi minuti. Con l'InspectWP WordPress Connector scopri inoltre se i file del core di WordPress sono stati modificati (il Connector li confronta con i checksum di WordPress.org), quanti amministratori ci sono e se cartelle importanti sono scrivibili.
Dopo la pulizia conviene attivare i report automatici. InspectWP controlla così il tuo sito a intervalli regolari e, se vuoi, ti avvisa via mail. Confrontando due report vedi a colpo d'occhio cosa è cambiato, per esempio un nuovo plugin che a quanto pare nessuno ha installato. Il tuo primo report gratuito lo ottieni in pochi minuti.