Il tuo sito wordpress ha subito un attacco? Ecco come ripristinarlo

Per rendere alcuni siti in Wordpress compliant alle nuove regole sulla privacy, e in particolare all'informativa legata all'utilizzo dei cookies, in vigore dal 2 Giugno 2015, abbiamo messo mano ad alcuni siti in Wordpress che da qualche tempo non venivano più aggiornati.

Visitando la pagina "Plugins" di alcuni di questi abbiamo notato uno strano messaggio, ripetuto per la maggior parte dei suoi plugin:

The plugin has been deactivated due to an error: The plugin does not have a valid header.

Sono bastate alcune ricerche sul web per capire che il motivo era legato al fatto che questi siti hanno subito un attacco da parte di un malware.

Infatti una buona parte dei file php di wordpress e dei plugin installati iniziavano con una riga di codice assai sospetta, del tipo:

?php if(!isset($GLOBALS["\x61\156\x75\156\x61"])) { $ua=strtolower($_SERVER["\x48\124\x54\120\x5f\125\x53\105\x52\137\x41\107\x45\116\x54"]); if ((! strstr($ua,"\x6d\163\x69\145")) and (! strstr($ua,"\x72\166\x3a\61\x31"))) $GLOBALS["\x61\156\x75\156\x61"]=1; } ?...

In alcuni casi anche i file nei backup riportavano lo stesso problema, rendendo pertanto impossibile il ripristino del sistema ad una versione precedente.

 

Ecco la procedura che abbiamo adottato per ripristinare i siti Wordpress compromessi dall'attacco

Come prima cosa abbiamo analizzato il codice del malware. In tutti i file abbiamo notato un pattern ricorrente all'inizio della stringa (, verso metà (7860msvd) e alla fine (fklweyuxit-1; \?>)

Abbiamo innanzitutto verificato che l'utente corrente avesse i permessi di scrittura in tutti i file nella root del sito compromesso, ed abbiamo eseguito (sempre nella root, via terminale ssh), il seguente comando:

find . -type f -exec sed -ri '1 s/.*<\?php if\(\!isset\(\$GLOBALS.*7860msvd.*fklweyuxit-1; \?>//g' {} +

La prima parte del comando (find) ricerca nella cartella corrente, e ricursivamente nelle sottocartelle, tutti i file e ritorna una lista che viene passata al comando successivo (sed) che effettua una ricerca all'interno di ogni file una stringa che inizia, contiene e termina con i catarreri incriminati. Quando questa viene trovata, viene rimossa dal file.

In questo modo il malware è stato rimosso da ogni file.

Questo già è stato sufficiente per risolvere il problema originale: il fatto che i plugin venivano disattivati visitando la pagina "Plugins".

Ma per un'ulteriore verifica abbiamo installato su ogni sito il plugin GOTLMS e lanciato una scansione del sito. In alcuni casi il comando lanciato precedentemente è stato sufficiente a risolvere il problema. In altri casi il plugin ha riscontrato ulteriori criticità che sono state risolte dallo stesso plugin. Ovviamente  l'utente apache (o www-data se siete su Ubuntu) doveva avere accesso in scrittura a tutti i file presenti nella root del sito per apportare il fix.

 

GOTLMS scansione avvenuta con successo

 

A questo punto è stato quindi possibile aggiornare Wordpress e tutti i plugin all'ultima versione per prevenire il rischio di nuovi attacchi.

Per finire abbiamo apportato una politica di permessi sui file più stringente. Riportiamo nel seguito la sequenza di comandi che abbiamo utilizzato per settare i permessi sui file e cartelle di ogni sito Wordpress.

 

# cd /var/www/html/

# chown -R filippo:filippo root_del_sito

# chmod -R 755 root_del_sito //solo l'utente "filippo" può scrivere nella root del sito e cartelle sottostanti

# cd root_del_sito/wp-content

# chown -R filippo:apache uploads

# chmod -R 775 uploads //nella cartella "uploads" può scrivere anche Apache

se ci fossero altre cartelle particolari in cui certi utenti devono poter scrivere, impostare i permessi

# cd /var/www/html/root_del_sito //torniamo nella root del sito

# find . -iname "*.php" | xargs chmod 755

# find . -iname "*.php" | xargs chown filippo:filippo //se fossero rimasti file php "scoperti" dopo aver alterato i permessi nelle sottocartelle della root, in questo modo li proteggiamo

# find . -iname ".htaccess" | xargs chmod 744

# find . -iname ".htaccess" | xargs chown filippo:filippo //stessa cosa per i file di configurazione di Apache

 

In questo modo abbiamo ripristinato i siti compromessi e, con una politica di permessi sufficientemente "stringente" abbiamo fatto in modo che in futuro i file php non possano più essere manomessi da malware.

Il passo successivo è stato verificare che non vi fossero utenti sconosciuti col ruolo di amministratore (ne abbiamo trovato uno col nome "backup") e cambiare le password agli utenti col ruolo di amministratore.

 

Avete subito attacchi simili ai vostri siti Wordpress? Che procedure avete adottato per ripristinare i siti compromessi?

Fateci sapere come avete ripulito i vostri siti in Wordpress da malware!