In internet non si contano gli strumenti che hacker (o meglio cracker) smaliziati mettono a disposizione di malintenzionati per bucare un sito basato su wordpress prendendone il completo controllo.
Wordpress purtroppo non nasce con delle grandi contromisure da mettere in campo per evitare di essere "sfondato". Solo le più recenti versioni si stanno irrobustendo, e quindi mettere in campo delle linee generali di sicurezza utilizzabili indipendentemente dalla versione installata non mi pare una brutta idea.
Si lo so, lo so, è risaputo che non esiste alcun modo di impedire ad un bravo cracker di acquisire il controllo di un server e tantomeno di impedirgli di fare quel che vuole col nostro sito in wordpress, ma certamente possiamo evitare di lasciargli le chiavi sotto lo zerbino e cercare almeno di rendergli le cose difficili al punto da impegnarlo per un tempo a lui sconveniente.
Quindi vediamo quali dovrebbero essere i passi da seguire per ottenere una installazione di wordpress il più possibile sicura:
- Il sistema operativo.
Diamo per scontato che non siate dei masochisti e quindi vogliate un server che gestisce la sicurezza nel migliore dei modi. Non che io abbia qualcosa da dire contro IIS (o meglio ce l'avrei eccome), ma la scelta dovrebbe ricadere su un sistema Unix like, meglio se Linux che gestisce "da sempre" la sicurezza in modo diciamo "diverso".
Supponiamo quindi l'uso di Apache 2 sulla distribuzione Linux che più vi aggrada (Debian, Ubuntu, Centos, ecc..), non mi dilungherò in merito alla scelta perché la questione è ampia e esula da questa guida, l'importante è che tutto sia aggiornato alle ultime versioni. - La versione di wordpress.
Accertiamoci di avere la versione più recente possibile di wordpress. Ogni nuovo rilascio normalmente corregge una serie di bug presenti nel precedente. Questo aumenta di per se la sicurezza della nostra installazione di wordpress. - Il database.
Normalmente il database server utilizzato è MySql ed è bene configurarlo creando uno user dedicato per ogni installazione di wordpress. Lo user deve ovviamente avere una solida password ed è bene settare anche da quale IP questo user può accedere. Se il database server è sulla stessa macchina dove sarà ospitato wordpress useremo "localhost" altrimenti l'IP del server web.
Se si ha accesso al database server si può procedere a riga di comando con le query:
- Creazione dello user:
CREATE USER '<mio_user>'@ 'localhost' IDENTIFIED BY '<mio_user_password>'; - Assegnazione allo user dei privilegi di usabilità massima del database server:
GRANT USAGE ON * . * TO '<mio_user>'@ 'localhost' IDENTIFIED BY '<mio_user_password>' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ; - Creazione del database:
CREATE DATABASE `<mio_db_wordpress>` ; - Assegnazione di tutti i privilegi sul database:
GRANT ALL PRIVILEGES ON `<mio_db_wordpress>` . * TO '<mio_user>'@ 'localhost';
- Creazione dello user:
- La configurazione.
Le nuove versioni di wordpress consentono, non appena installato il software sul server web, di avviare la procedura guidata di configurazione. Questo evita di procedere manualmente duplicando il file wp-config-sample.php col nuovo nome wp-config.php presente nella directory radice della vostra installazione.
La procedura automatica nasconde anche due importanti passaggi che altrimenti dovremmo fare a mano:
- Generare automaticamente le parole casuali da 64 caratteri usate nelle cifrature e da associare alle costanti (le trovate nel file wp-config.php):
AUTH_KEY
SECURE_AUTH_KEY
LOGGED_IN_KEY
NONCE_KEY
AUTH_SALT
SECURE_AUTH_SALT
LOGGED_IN_SALT
NONCE_SALT - Cambiare il valore della variabile $table_prefix da "wp_" in qualcosa di più complesso e casuale tipo "aCmE123_". Questo prefisso è usato da wordpress per generare i nomi di tutte le tabelle del database e l'operazione rende più difficile un attacco di database injection.
- Generare automaticamente le parole casuali da 64 caratteri usate nelle cifrature e da associare alle costanti (le trovate nel file wp-config.php):
- Non usare lo user admin.
Lo user admin è l'amministratore di default di ogni installazione wordpress. Durante un attacco è ovvio supporre che si tenti di indovinare la password di tale utente. Se invece questo utente non esiste e lo user amministrativo è noto solo a pochi allora la sicurezza ne gioverà certamente. Durante la procedura di installazione automatica quando ci viene chiesto lo username dell'account amministrativo si consiglia di inserirne uno che poco abbia a che fare con: admin, administrator, root, amministratore, ecc...
E' ovvio che pure la password deve essere solida e possibilmente non composta di tutte lettere o tutti numeri. - Non usare l'FTP.
Per sua natura l'FTP è un protocollo facilmente bucabile che sconsiglio caldamente di utilizzare per accedere alla nostra installazione di wordpress. Al suo posto possiamo usare SSH e la shell (terminale, riga di comando) o l'FTP su SSH (SFTP). - Permessi ai file e alle directory.
Se lo user col quale abbiamo accesso alla nostra installazione di wordpress ce lo consente dobbiamo modificare il proprietario e i permessi di accesso ai file. Posizioniamoci nella cartella dove abbiamo installato wordpress e diamo questi comandi:
- cambiamo il proprietario di tutti i file e le directory:
chown -R root:root ./* - diamo permesso (755) di lettura ed esecuzione delle directory a chi non è root:
find ./ -type d -exec chmod 755 {} \; - diamo permesso (644) di sola lettura di tutti i file a chi non è root:
find ./ -type f -exec chmod 644 {} \;
- cambiamo il proprietario di tutti i file e le directory:
- Abilitiamo in scrittura solo le cartelle autorizzate.
Questa parte della configurazione è poco definibile, dato che dipende fortemente dagli obiettivi del nostro sito in wordpress e dai plugin in esso installati.
Ad esempio: dopo l'esecuzione del punto precedente la cartella wp-content/uploads non accetta più file (cioè non è possibile "uploadare" files in wordpress) e se necessario va riabilitata in scrittura col comando: chmod -R 777 ./wp-content/uploads - Aggiungiamo delle regole al file .htaccess.
Nella root del sito è conveniente inserire un file .htaccess che contiene le seguenti regole:
<IfModule mod_rewrite.c>RewriteEngine On</IfModule>
RewriteBase /
RewriteRule ^wp-admin/includes/ - [F,L]
RewriteRule !^wp-includes/ - [S=3]
RewriteRule ^wp-includes/[^/]+\.php$ - [F,L]
RewriteRule ^wp-includes/js/tinymce/langs/.+\.php - [F,L]
RewriteRule ^wp-includes/theme-compat/ - [F,L] - Fai indicizzare solo ciò che serve.
Quando il crawler di un motore di ricerca passa nel nostro blog per indicizzarlo legge e si basa sulle istruzioni contenute nel file robots.txt. E' bene che non tutte le directory vengano indicizzate, e quindi ecco un esempio di cosa dovremmo indicare nel file:
User-agent: *
Disallow: /cgi-bin
Disallow: /wp-admin
Disallow: /wp-includes
Disallow: /wp-content/plugins
Disallow: /wp-content/cache
Disallow: /wp-content/themes
Disallow: /trackback
Disallow: /feed
Disallow: /comments
Disallow: /category/*/*
Disallow: */trackback
Disallow: */feed
Disallow: */comments
Disallow: /*?*
Disallow: /*?
Allow: /wp-content/uploads
# Google Image
User-agent: Googlebot-Image
Disallow:
Allow: /*
# Google AdSense
User-agent: Mediapartners-Google*
Disallow:
Allow: /*
# digg mirror
User-agent: duggmirror
Disallow: /
Sitemap: http://www.example.com/sitemap.xml - Conosci i tuoi plugins.
E' il consiglio migliore che posso dare, infatti sono i plugin il veicolo migliore per accedere ai file del sito e possono causare gravi problemi. Dunque fidarsi è bene ma non fidarsi è meglio e quindi cerchiamo sempre di documentarci rigurado ai plugin che installiamo. Attenzione va anche posta alle directory o ai file che dobbiamo nuovamente rendere accessibili in scrittura per consentire al plugin di lavorare senza malfunzionamenti. - Crea solo gli utenti che servono e con permessi limitati.
Altro punto da tenere in considerazione è la creazione degli utenti. Non dovrebbero esistere utenti inutili e soprattutto ognuno dovrebbe avere solo i permessi necessati. Wordpress purtroppo non ha "di serie" una raffinata gestione dei permessi da associare agli utenti. Fortunatamente ci viene in aiuto un plugin "capability manager" col quale possiamo modificare le azioni associate ai ruoli di default ed eventualmente crearne di nuovi. - Plugin consigliati.
Alcuni plugin possono aiutare a migliorare la sicurezza generale della nostra installazione di wordpress.
- Login lockdown
Logga ogni tentativo di accesso e mette in atto delle semplici contromisure impedendo l'accesso da un certo IP o da un certo range di IP quando i tentativi sono troppo ravvicinati o superano un certo numero massimo. - Remove my version
Nasconde la versione di wordpress attualmente installata in modo da rendere più complicato individuare eventuali bug noti. - WP Security scan
Esegue una scansione della directory dove è installato wordpress e fornisce consigli utili per rendere sicuro l'accesso ai file e alle directory
- Login lockdown
- Aggiorare frequentemente.
Ultimo consiglio è quello di tenere frequentemente aggiornata ognuna delle parti che compone una installazione di wordpress: il server web, il database server, wordpress stesso e i suoi plugins.
Nessun commento:
Posta un commento