Come ripristinare un’installazione WordPress dopo un attacco Hacker – Parte 2

Questa è la parte conclusiva di una serie di articoli legati alla sicurezza dei siti WordPress. Se vi siete persi le prime due puntate vi consiglio di leggerle, i link li trovate qui:

Guida: Come ripristinare un sito WordPress

Nella guida che segue cercherò di illustrarvi passo per passo la procedura che ho elaborato per ripristinare i miei siti WordPress a seguito degli attacchi hacker che ho descritto nell’articolo precedente. È la mia personale procedura e finora ha sempre funzionato. È chiaro che può essere migliorata e che magari non tiene conto di tutte le possibili casistiche, ma penso sia un ottimo riferimento nella maggior parte dei casi. Anche quelli in cui non si ha la minima idea di cosa possa essere successo.

Il punto è: “fai un respiro profondo, resta calmo e concentrato”, cominciamo.

1. Esegui un backup del database e del sito

Anche se il sito è stato hackerato vale la pena avere una copia della situazione attuale. Sia per analizzare con calma l’accaduto e i file compromessi, sia perché potrebbe salvarvi qualora il ripristino non si completasse al 100% e vi trovaste a ripristinare “singoli pezzi”.

Questo punto deriva da 2 mie esperienze personali che voglio raccontarvi per rimarcare l’importanza di questa prima fase.

Nel primo caso il backup del sito che avevo a disposizione per il ripristino aveva una settimana di vita. Grazie al backup fatto prima di iniziare ho potuto, dopo aver fatto una scansione antivirus, ricaricare nello spazio web la cartella degli uploads di WordPress che conteneva alcune immagini caricate pochi giorni prima dell’attacco.

Nel secondo caso, nel fare il backup del punto 1 della mia procedura mi sono accorto che avevano cancellato tutti i files all’interno dello spazio web ed ho quindi capito che l’unica cosa da fare era ripristinare il backup che avevo :) .

In questa fase potreste inoltre scoprire che hanno cancellato i dati nel database e quindi concentrarvi sul ripristino di quel componente. Insomma può essere un buon punto di partenza per l’analisi del problema che ha causato il malfunzionamento del sito.

2. Procurati una versione di WordPress pulita

Nel mio caso ho sempre una copia dell’intero sito in locale (nel mio computer), perciò sono in possesso di una versione pulita sia di WordPress (quando lo aggiorno lo provo prima nella versione in locale e poi lo carico on-line), sia del tema e dei plugin usati dal sito.

Se così non fosse, o se volete l’assoluta certezza di non tralasciare nessun aspetto dell’accaduto, dovete ripartire da zero. Scaricate quindi una nuova versione di WordPress direttamente dal sito wordpress.org, una copia dei plugin utilizzati dal sito e il tema originale e posizionate i vari “componenti” nella loro struttura di cartelle (i plugin andranno sotto wp-content/plugins, il tema su wp-content/themes).

Potreste in questa fase ripristinare anche la cartella degli uploads dal backup del punto precedente. Fatelo con la dovuta attenzione, perchè “la falla” potrebbe essere proprio qui dentro.

Una scansione antivirus/antispyware potrebbe rilevare eventuali minacce. Se avete la possibilità di provare tutto in locale è il momento di farlo.

A questo punto possedete una copia pulita e completa del vostro sito WordPress.

3. Metti il sito in manutenzione

Questo punto è opzionale e dipende molto dalla vostra situazione. Se il vostro sito è ancora online, in questa fase potreste voler avvisare i visitatori (e gli spider dei motori di ricerca) che il vostro sito è in manutenzione. Potreste creare ad esempio una semplice pagina web index.html in cui avvisate che è in corso una manutenzione del sito.

Nel vostro file .htaccess potreste inserire:

<IfModule mod_rewrite.c>
 RewriteEngine on
 RewriteCond %{REQUEST_URI} !/index.html$ [NC]
 RewriteCond %{REQUEST_URI} !\.(jpe?g?|png|gif|css) [NC]
 RewriteRule .* /index.html [R=503,L]
</IfModule>

Che reindirizza tutte le richieste al sito verso la pagina index.html restituendo un codice di stato HTTP 503 che comunica (soprattutto agli spider) che il sito è temporaneamente non raggiunbile.

Nel mio caso la index.html conteneva delle immagini ed un file css, ecco il motivo della seconda riga RewriteCond.

Alcuni usano dei 302 o 307 in questi casi, ma penso che il 503 sia il più corretto.

4. Cambia le password

Se ne avete la possibilità, penso sia una buona pratica cambiare le password di accesso FTP, cPanel (o simili) e le credenziali del vostro database MySql in questa fase del nostro percorso. Se non potete farlo in autonomia sicuramente potete richiederlo al vostro hosting provider.

Aggiornate di conseguenza anche il vostro file wp-config.php (dove risiedono le configurazioni del vostro sito). Già che ci siete cambiate anche i valori delle chiavi di salatura, soprattutto la SECRET_KEY.

5. Cancella tutti i files nello spazio web

Ora viene la parte divertente. Cancella, tramite il tuo client FTP o dal pannello di controllo del tuo hosting, tutti i files presenti nello spazio web (tranne l’index.html e l’htaccess eventualmente inseriti al punto precedente!).

È una misura drastica, ma se non si conosce la precisa causa del problema o si vuole essere sicuri al 100% di avere una copia pulita del sito è l’unica soluzione.

6. Controlla e ripristina il database MySql

Finché aspetti che vengano cancellati i files puoi procedere con il ripristino del database. Qui ci sono due possibili strade da percorrere:

  1. ripristinare l’ultimo backup

  2. controllare lo stato del database attuale

Nel primo caso non vi resta che sovrascrivere l’attuale database con la copia del vostro backup più recente. Potete usare strumenti come phpMyAdmin per cancellare e poi importare il nuovo database.

Fate attenzione, perchè anche la vostra copia di backup potrebbe essere corrotta. Quindi se sospettate un problema legato al database potreste scegliere di ripristinare un backup fatto in una data non sospetta oppure procedere con alcuni controlli.

Questi “controlli” sono utili anche nel caso in cui non abbiate un backup recente e vogliate tentare di recuperare il database che avete online in quel momento.

La prima cosa da fare è cambiare le password degli utenti. Nello scorso articolo spiegavo come.

La seconda cosa è controllare che i contenuti di pagine ed articoli non abbiano subito alterazioni o che vi siano state iniettati script o codici malevoli.

Potreste ad esempio voler cercare:

  • iframes

  • javascript

  • link esterni

  • contenuti nascosti (es. div con display:none)

Se il sito è piccolo potete fare questo controllo anche dopo la sua pubblicazione, analizzando l’html generato o le richieste http fatte dal sito.

In caso contrario ecco qualche idea di query SQL che potreste voler eseguire per verificare la consistenza dei vostri dati e cercare occorrenze degli elementi sopracitati:

SELECT * FROM wp_posts WHERE post_content LIKE '%<iframe%'
SELECT * FROM wp_posts WHERE post_content LIKE '%<noscript%'
SELECT * FROM wp_posts WHERE post_content LIKE '%<script%'
SELECT * FROM wp_posts WHERE post_content LIKE '%display:%'
SELECT * FROM wp_posts WHERE post_content LIKE '%visibility:%'
SELECT * FROM wp_posts WHERE post_content LIKE '%http://%'

Quest’ultima potrebbe ritornare molti risultati, ma è utile per identificare eventuali risorse caricate da siti esterni sospetti.

Chiaramente, per far funzionare queste query SQL, dovete sostituire wp_posts con il nome della tabella in base alle vostre configurazioni sul prefisso delle tabelle del db (file wp-config.php).

Se rilevate risultati sospetti, potete rimuoverli “manualmente” agendo direttamente in modifica della riga incriminata oppure eseguire una query SQL simile a questa:

UPDATE wp_posts SET POST_CONTENT = replace(POST_CONTENT, 'codice-malevolo', 'quello-vuoi-o-lascia-vuoto-per-cancellare');

6. Pubblica nuovamente tutti i files nello spazio web

È giunto il momento di ricaricare (via FTP) tutti i files che abbiamo preparato al punto 2.

Rimuovete il file index.html e l’htaccess (anche se probabilmente lo avete già sovrascritto con quello nella vostra copia locale) che abbiamo inserito al punto 3 per mettere il messaggio di “sito in manutenzione”.

7. Verifica il funzionamento del tuo sito WordPress

A questo punto, se tutto è andato a buon fine, dovreste essere in grado di loggarvi nell’area di amministrazione di WordPress.

Quattro cose da fare subito:

  1. cambia la password dei tuoi utenti, soprattutto del tuo utente admin (se non l’hai già fatto). Se usi ancora l’utente admin ti consiglio di cambiare anche quello.

  2. Accedi alle impostazioni dei Permalink e salva nuovamente la tua configurazione. Questo passaggio serve per rinfrescare le regole di riscrittura degli url ed assicurarsi di avere la giusta versione del tuo file .htaccess (generato appunto con questa operazione).

  3. Controlla le impostazioni del tuo tema. Spesso, quando si importa un nuovo database si perdono ed è necessario salvarle nuovamente.

  4. Controlla che tutti i plugin che avevi siano attivi e che le loro configurazioni siano corrette. In caso riattivali e salva nuovamente le giuste configurazioni.

Naviga il sito e controlla che sia tutto ok.

Per farlo, soprattutto in siti con moltissime pagine, puoi usare degli spider online oppure dei programmi come Xenu (http://home.snafu.de/tilman/xenulink.html) o Screaming Frog (http://www.screamingfrog.co.uk/seo-spider/) che ti permetteranno di scovare eventuali errori, pagine mancanti, link rotti, link esterni non tuoi, ecc

Consiglio inoltre una scansione con Sucuri (http://sitecheck3.sucuri.net/) che è una specie di antivirus on-line che effettua una scansione del vostro sito alla ricerca di malware. La versione base è gratuita, mentre le versioni a pagamento sembrano molto interessanti (non le ho provate) qualora abbiate budget da investire nella sicurezza.

8. Analisi a freddo

Dopo che avete rimesso online il vostro sito e tutto funziona alla perfezione è bene spendere un pò di tempo (se già non le avete scoperte) sull’analisi delle cause che hanno permesso agli hacker di entrare nel vostro sito WordPress.

È una fase molto importante perchè vi permette di chiudere definitivamente la faccenda, con la “sicurezza”, che quel particolare attacco non avrà più possibilità di successo.

Come raccontavo nel post precedente in uno degli attacchi che ho subito l’hacker era riuscito ad entrare nel mio spazio web sfruttando una vulnerabilità nota di una libreria php chiamata TimThumb ed usata dal tema Wp per fare il resizing dinamico delle immagini.

Questo significa che se non avessi indagato ulteriormente sul problema, ripristinando il backup del sito che avevo, avrei inserito nuovamente la versione della libreria con il bug di sicurezza. Questa consapevolezza mi ha permesso di sostituire la libreria con la sua versione aggiornata e di dormire sonni più tranquilli :)

Ammetto che non è facile indentificare problemi come questi e ci saranno altre 99 magagne che magari mi sono lasciato per strada. Cercate di usare un po’ ad intuito, sicuramente (come nel mio caso) non sarà tempo sprecato.

Conclusioni

L’argomento è davvero vastissimo e se ne potrebbe parlare per giorni, anche perchè i casi che si possono presentare sono davvero tanti. Spero che questa guida possa essere di aiuto a qualcuno… anche se l’augurio migliore è forse quello che non debba mai servire a nessuno! :)

Se vi interessa approfondire l’argomento, ho trovato degli ottimi spunti sulla pagina ufficiale nelle FAQ di WordPress:

http://codex.wordpress.org/FAQ_My_site_was_hacked

Ci trovate anche numerosi link ad articoli in lingua inglese che descrivono nei particolari alcuni attacchi che hanno subito. Potrebbe aiutarvi nell’ultima parte della procedura (analisi a freddo) per individurare eventuali problemi o codici malevoli inseriti nei vostri files.

Bene, attendo i vostri feedback. Che ne pensate della guida? Ho dimenticato qualcosa? Possiamo migliorarla insieme? Parliamone nei commenti.

Master per Web Designer Freelance
In tutti questi anni abbiamo ricevuto centinaia di richieste di approfondimento sulle numerose tematiche del web design vissuto da freelance. Le abbiamo affrontate volta per volta. Ma ci siamo resi conto che era necessario fare qualcosa di più. Ecco perché è nato One Year Together, un vero e proprio master per web designer freelance che apre finalmente le porte al mondo del lavoro.
Scopri One Year Together »

L'autore

Niki Rocco è Senior Web Developer e Seo Specialist presso Quag. Ha una passione sfrenata per il web e WordPress. Lo trovi su Google+

Sito web dell'autore | Altri articoli scritti da

Articoli correlati

Potresti essere interessato anche ai seguenti articoli:

6 commenti

  1. Anna

Trackback e pingback

Non ci sono trackback e pingback disponibili per questo articolo

Lascia un Commento

Current day month ye@r *