WordPress tricks & treats, malware & fixes

WordPress e’ una delle piattaforme di blog piu’ utilizzata, spesso pero’ ci si imbatte in bugs, malware e attacchi. Come riportato da HNS, molti siti che girano sulla piattaforma WP sono diventati bersaglio di attacchi di vario tipo, non ultimi alcuni ISP come DreamHost, MediaTemple, BlueHost e GoDaddy.

Al momento non e’ chiaro quale falla di sicurezza sia stata utilizzata per lanciare gli attacchi – attacchi che collocano scripts di natura malevola, simulando l’installazione di antivirus gratuiti nel computer dei visitatori; per non essere rilevati questi malware evitano di far comparire l’avviso della visita ad un sito potenzialmente dannoso, soprattutto nei browser Firefox e Google Chrome; peraltro Google stesso non e’ capace di individuare il malware.

David Dede di Sucuri Security offre una vasta gamma di teorie a riguardo, proponendo le sue elucubrazioni a proposito di password rubate, bachi della piattaforma e dei plugin (che sarebbe meglio tenere sempre aggiornati) assieme ad una soluzione efficace per coloro che avessero trovato il proprio sito inaccessibile a causa di un malware o che sospettino di avere qualche script installato.

Il procedimento e’ davvero semplice, innanzitutto identificate il tipo di accesso a voi piu’ conveniente (via SSH, via Web e per utenti di Network Solution); la costante di tutti i siti attaccati si e’ rivelata essere questo javascript installato:

http://www.indesignstudioinfo.com/ls.php

http://zettapetta.com/js.php

Questo javascript deriva da una lunga stringa codificata in base 64 che viene aggiunta al file footer.php o, in rari casi, a tutti i files con estensione .php presenti sul webserver.

Via SSH

Eseguite l’accesso sul vostro webserver via SSH e poi lanciate i seguenti comandi:

Via Web

Se non avete accesso al vostro webserver via SSH agite via web; scaricate questo file
http://sucuri.net/malware/helpers/wordpress-fix_php.txt e rinominatelo in .php indi fate l’upload (via FTP) nella root directory di installazione WordPress. Una volta su, puntate il vostro browser all’indirizzo: http://www.dominio.ext/wordpress-fix.php.

Se il sito e’ pulito, in pochi attimi il report generato vi avvertira’ di aver fatto una scansione completa e di non aver trovato niente; in caso di scripts malevoli ci vorra’ qualche minuto perche’ la scansione sia completa.
Leggete il report poi semplicemente cancellate il file wordpress-fix.php dal server.

Se dopo qualche minuto lo script non genera che linee vuote dovrete ripetere l’operazione, probabilmente la scansione non e’ andata a buon fine. Se ancora non doveste riuscire provate a caricare il file nelle varie sottodirectories dell’installazione di WordPress come wp-admin o wp-content o wp-includes.

Un’altra piccola hint: se utilizzate dei plugin come SuperCache o WPCache, svuotateli del tutto (dopo un backup di sicurezza – ma attenzione, il malware potrebbe risiedervi ancora) e avviate la scansione.
In caso di siti di grandi dimensioni non allarmatevi se la scansione va in timeout.. provate a fare le scansioni dalle sottocartelle dell’installazione.

Network Solution

Gli utenti possono rimuovere facilmente il malware virtual-ad.org in due passi: loggatevi via FTP al vostro account e rimuovete il file cgi-bin/php.ini.
Potrebbero rimanere alcuni files di estensione .nts che comunque non possono venire eseguiti senza il file php.ini; potete rimuoverli in tutta sicurezza.

Per una ulteriore sicurezza personale potete controllare la lista dei files presenti sul server, direttamente via web puntando il browser su questo URI: http://www.dominio.ext/.files/; se vedete dei files di cui non conoscete l’origine significa che potreste essere infettati; in caso di dubbio usate Google per avere delucidazioni sui files presenti.

Sempre in tema di sicurezza va ricordato che molti plugin sono composti solo da codice .php e spesso hanno un accesso diretto che potrebbe garantire accesso ai malintenzionati, senza contare che costituisce una grave falla di sicurezza; come evitare questo inconveniente?
Semplicemente piazzando una riga di codice nel file .htaccess:

<Files ~ "\.(js|css)$">
  order allow,deny
  allow from all
</Files>

In tema di .htaccess c’e’ da dire che si puo’ ulteriormente migliorare: dopo aver fatto una copia di backup del file stesso bastera’ inserire le seguenti righe:

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
RewriteRule ^(.*)$ index.php [F,L]

La caratteristica di queste stringhe e’ quella di impedire che alcuni injection scripts e script capaci di modificare i parametri, possano modificare i  _REQUEST e PHP GLOBALS.

Ma possiamo fare di piu’: grazie a WPRecipes ho scoperto questo piccolo plugin-fai-da-te in grado di eseguire delle ricerche per controllare le richieste http verso il nostro sito; queste stringhe di richiesta in generale sono molto lunghe e sono quasi sempre presenti malware che cercano di fare breccia nelle funzioni PHP.
Basta scaricare questo file in formato testo (blockbadqueries.php) e rinominarlo in blockbadqueries.php, caricarlo nella directory dei plugin e attivarlo dal pannello principale.
Che cosa fa in sostanza questo file? Una volta compresa la natura della query (oltre i 255 caratteri di lunghezza) provvede a bloccarne l’esecuzione e il ritorno evitando a script malevoli di intraprendere azioni poco simpatiche.

Se vogliamo anche bloccare e richieste che innocentemente e innocuamente WordPress manda verso Automattic (ad esempio) possiamo agire direttamente sul file wp-config.php (nella directory principale) inserendo questa riga:

define('WP_HTTP_BLOCK_EXTERNAL', true);

Facciamo pero’ attenzione: bloccando tutte le query verso l’esterno si rischia di impedire ad alcuni plugin di funzionare correttamente, in quanto possono aver bisogno di richiamare informazioni esterne al database, quindi possiamo aggiungere questa riga alla precedente, in cui www.dominio.ext sara’ l’URI esatto che dovremo far passare in questa whitelist:

define('WP_ACCESSIBLE_HOSTS', 'www.dominio.ext');

full-stack graphic designer | social media manager | blogger, autrice e saggista | appassionata di Giappone, poker e pianoforte | mai senza occhiali da sole | attaccabrighe per natura