Dopo un incidente di sicurezza piuttosto esteso capitato al sito, ho deciso di buttar giù i requisiti per un plugin minimale che mi avvertisse in caso di ripetersi dell’evento, o di uno simile.
A cosa serve
I requisiti per la stesura erano:
- Estrema semplicità d’uso, quindi poche opzioni di configurazione
- Minimo impatto sulle risorse di elaborazione. Molti hosting, al di là dello spazio, offrono realmente poco in termini di tempo processore, spazio database e banda Internet, per cui il plugin deve pesare il meno possibile, soprattutto sul database.
- Funzioni limitate e ben precise. Lo scopo è quello di rilevare modifiche ai file con contenuto in origine “attivo”, lato server o client, quindi solo PHP, HTML e Javascript, sui soli file di cui il webmaster ha conoscenza. Inoltre nessun controllo, voluto, agli uploads, per evitare messaggi ripetitivi ed inutili ad ogni singolo upload di qualsiasi file contenuto nei post.
Il plugin funziona calcolando gli hash SHA1 di tutti i file PHP, HTML e Javascript contenuti nello spazio di hosting di WordPress, ossia a partire dalla directory in cui è installato WordPress e tutto l’albero sottostante, tipicamente subito dopo l’installazione del plugin stesso, e memorizzandoli in una opzione della tabella wp_options di WordPress (quindi niente tabelle aggiuntive, con tutti i problemi che ne conseguono). Di questo database degli hash, il plugin calcola un ulteriore hash, chiamato hash primario, e lo manda via e-mail all’indirizzo dell’amministratore del blog. Questo hash serve a capire se il database degli hash è integro.
Per una installazione media come questo sito, il database degli hash prende circa 60k nel database. Appena disponibile il database degli hash, si può avviare un controllo ad intervalli dell’integrità, ogni ora, due volte al giorno o una volta al giorno a scelta. Se qualcosa non quadra, viene spedito un messaggio all’e-mail configurata.
C’è anche la possibilità di fare un check “a comando” dalla pagina di configurazione. Il plugin è internazionalizzato, ed ha già i file per italiano e inglese.
Il tipo di intrusioni rilevate appartiene alla categoria degli attacchi massicci all’intero hosting, o ad una parte di esso, in cui viene iniettato del codice (di solito PHP o Javascript) in tutti i file con contenuto attivo (PHP e Javascript, appunto) o HTML.
Non è in grado di rilevare un attacco mirato al blog, ossia se l’intruso trova il plugin installato ed attivo, può disabilitarlo, cambiarne il codice, insomma fare il suo comodo.
Installazione
Esplodere il pacchetto zip in una directory apposita dentro il deposito dei plugin, come qualsiasi altro plugin. I file necessari sono solo due:
- wp-autocheck.php
- wp-autocheck-it_IT.mo
Gli altri due sono il template per le traduzioni ed il sorgente per quella italiana, e non servono, a meno che non si intenda creare altri
file di lingua.
Uso
Appena installato, attivarlo nella pagina dei plugin, poi andare nel menu delle impostazioni, come amministratore del blog.
Ci sarà una pagina in più dal nome “WP-Autocheck”. Premere il pulsante “Ricalcola database degli hash”, poi scegliere una cadenza di
controllo, e verificare l’e-mail a cui spedire gli allarmi. Come valore predefinito viene usata quella dell’amministratore del blog, ma
si può cambiare. Al ricalcolo del database degli hash viene inviato l’hash primario per posta elettronica all’indirizzo indicato.
L’hash primario è calcolato sul database completo degli hash, quindi è un check di integrità del database. Ogni tanto conviene andare nella
pagina di impostazioni del plugin e controllare che non sia cambiato. Se è cambiato, qualcuno ha pasticciato con i file, il database o il
plugin.
Disabilitazione e rimozione
Per rimuoverlo conviene prima disabilitarlo, dato che alla disabilitazione vengono rimosse tutte le impostazioni ed i record dalla tabella del database wp_options, per cui non ne rimane traccia e si libera lo spazio occupato. Poi si può procedere alla rimozione dei file dallo spazio di hosting.
Download del plugin
Il plugin, completo di tutto, è qui:
wp-autocheck-0.1.0.zip

