Verificare l’md5 di WordPress per individuare compromissioni

WordPress non ha integrata la possibilità di calcolare l’md5 dei file di installazione, una funzionalità che, se venisse integrata “built-in”, potrebbe rendere la vita molto più facile a chi voglia effettuare un controllo dell’integrità della propria installazione del blog engine.

L’ideale sarebbe avere una sorta di integrity check in WordPress che attraverso un cron job verifichi periodicamente l’hash md5 dei file e nel caso di variazioni provveda a notificare l’amministratore via mail. Una cosa di questo tipo era stata realizzata con il plugin TTC WordPress Tripwire Tool, purtroppo fermo come compatibilità a WP 2.5.1 e tutto sommato poco preciso e sicuro.

Per questo può essere utile ricorrere a una soluzione manuale che permetta di avere una firma univoca dei file di WordPress tramite hash md5 da verificare a mano in caso si sospetti una compromissione.

La prima soluzione consiste nell’installazione del plugin Hash Checker sulla propria istanza di WordPress. Questo tool consente di verificare manualmente l’integrità dei file attraverso un confronto con gli hash md5.

Di default il plugin contiene hash md5 dei file di WordPress fino alla versione 2.8.1. Gli hash sono contenuti nella directory “wp_version_cfgs” del plugin e hanno nomi come “version-2.8.1.cfg”. I valori contenuti nei file sono “nome file=md5”. Purtroppo, come detto, non è presente un file anche per WordPress 2.9.2 ma si può facilmente generare un file con gli hash md5 dell’ultima versione disponibile di WP, anche includendo il tema che utilizziamo e eventuali plugin. La cosa è facilmente effettuabile sfruttando lo script “generate_hash.php” contenuto nello zip di Hash Checker.

Possiamo utilizzare lo script su Ubuntu seguendo i seguenti passi:

installiamo l’interprete dei comandi PHP

sudo apt-get install php5-cli

scarichiamo i file della nostra installazione di WordPress o una versione non modificata di WP in una cartella chiamata “wordpress”, collocandola in una directory tmp della nostra home directory.

Nella directory tmp andremo a collocare anche il file “generate_hash.php”. A questo punto eseguiamo lo script per generare gli hash md5 e ridirigiamo l’output in un file che chiameremo “version-2.9.2.cfg”:

php -f generate_hash.php > version-2.9.2.cfg

A questo punto potremo caricare via FTP il file version-2.9.2.cfg nella cartella “/wp-content/plugins/hashchecker/wp_version_cfgs” e successivamente verificare l’integrità dei file andando sulla voce Hash Checker presente in “Settings” nel pannello di amministrazione di WordPress.

Se invece non ci fidiamo di una soluzione che si basi sull’uso di un plugin possiamo ricorrere a un’altra strada, montando lo spazio FTP su cui è installato WordPress in una directory locale della nostra distribuzione Linux.

Per la firma dei file tramite hash md5 si potrà ricorrere al programma md5deep, installabile su Ubuntu con:

sudo apt-get install md5deep

Basterà lanciare md5deep ricorsivamente sui file di WordPress (opzione -r) in modo da avere un hash md5 di tutti, facendo in modo di avere path relativi e non assoluti (opzione -l):

md5deep -r -l cartella_contenente_file_wordpress/ > /home/nomeutente/wp.md5

Nel caso l’hashing sia troppo lento su una directory montata da un server remoto FTP (con Dreamhost, ad esempio, la lentezza è esasperante), si possono copiare i file in una “cartella vera e propria” prima calcolarne le firme con md5deep. Successivamente, nel caso si sospetti una compromissione dei file di WordPress basterà confrontare con md5sum il file wp.md5 nel seguente modo:

md5sum -c wp.md5

Ovviamente, “complicando” un po’ le cose, il tutto potrebbe essere realizzato ricorrendo a uno script Bash eseguito come cronjob che non solo verifichi la correttezza degli hash md5 ma generi anche un avviso in caso di incongruenze. Se invece si ha a disposizione un server dedicato o un VPS, il controllo dell’integrità, non solo di WordPress, è effettuabile con sistemi più avanzati come Tripwire o ancor meglio con OSSEC.