Introduzione
In questo articolo cercheremo di comprendere come rendere Joomla più resistente agli attacchi di utenti malintenzionati. Come tutti sappiamo Joomla è un CMS sviluppato in PHP, pertanto la sua messa in sicurezza non può prescindere dal rendere meno vulnerabile anche l'interprete PHP, il server web in cui è in esecuzione (il più delle volte Apache) ed il DBMS (solitamente MySql).
Chi ha installato almeno una volta Joomla ha potuto costatare come la procedura sia semplice, ciò purtroppo non ci garantisce una sufficiente affidabilità in termini di sicurezza.
Prime semplici mosse
Se si ha la possibilità di scegliere la versione di PHP su cui si dovrà far girare il nostro CMS, si opterà per l'ultima release disponibile, al momento della scrittura di quest'articolo siamo arrivati a Php
5.2.10. Ogni volta che viene rilasciata una nuova versione è perché sono state introdotte nuove funzioni, ma soprattutto sono stati corretti dei bug, tale considerazione è valevole sia per il server web che ospiterà l'interprete, sia per il DBMS e naturalmente per il nostro Joomla. Il tenere aggiornate le versioni dei software utilizzati è una regola fondamentale in ambito di sicurezza informatica.
Operazioni post installazione
Molti utenti, dopo aver ultimato la procedura d'installazione, tralasciano alcuni piccoli ma essenziali particolari per la messa in sicurezza del proprio sito web. La prima operazione consiste nel rendere il file configuration.php, contenuto all'interno della web root di Joomla, di sola lettura. I passi per compiere questa operazione variano a seconda del client FTP che si è scelto di utilizzare.
configuration.php non è l'unico file su cui porre l'attenzione, infatti, occorrerà assegnare i permessi chmod per tutti i file a 644, mentre per le cartelle a 755, lasciando le cartelle cache e temporanee riscrivibili. La spiegazione dei permessi chmod esula da quest'articolo, ma brevemente possiamo dire che sono i valori utilizzati dai sistemi Unix/Linux, per specificare quali operazioni (lettura, scrittura, esecuzione) sono permessi sui singoli file e cartelle dai vari tipi di utenti (proprietario, gruppo e user).
Occorre precisare che alcuni moduli potrebbero aver bisogno di particolari permessi, di conseguenza potrebbe essere necessario settare dei permessi ad hoc su alcune cartelle.
Altri piccoli accorgimenti da adottare al fine di rendere il nostro Joomla più sicuro, potrebbero essere la modifica dell'username admin con uno più complesso, accoppiandolo ad una password alfanumerica complessa, di almeno otto caratteri, a cui sia difficile risalire.
Per eseguire questa operazione, occorrerà loggarsi come amministratori di sistema al pannello di controllo di Joomla e selezionare dal menù sito la voce Gestione utenti, successivamente si selezionerà l'utente Administrator e si procederà cliccando il tasto modifica. Nel form si provvederà quindi ad inserire uno username appropriato (es. SuperAdministrat0r) ed una password abbastanza complessa.
Mettiamo in sicurezza PHP
Compiuti i piccoli accorgimenti del paragrafo precedente, passiamo ad una protezione più avanzata, nello specifico andremo a porre in sicurezza l'interprete PHP, da diverse tipologie di attacchi. Per renderlo sicuro occorrerà operare sul file php.ini, questo file racchiude tutte le direttive concernenti, il motore PHP, è opportuno effettuare una precisazione, molti hosting non ci consento l'accesso diretto al file, ma per aggirare questa limitazione, possiamo crearne uno "tutto nostro" posizionandolo all'interno della web root di Joomla, in questo file andremo ad inserire delle direttive personalizzate, secondo le nostre esigenze.
Per chi volesse approfondire l'argomento sicurezza in PHP, segnalo un'ottima guida pubblica sul nostro portale.
La prima modifica da compiere, è disattivare il register_globals, per evitare che gli script possano creare variabili globali. Al fine di evitare attacchi di tipo Query inject, occorrerà abilitare il magic_quotes_gpc, altro importante accorgimento sarà quello di non permettere l'accesso diretto agli oggetti tramite URL (come ad esempio ai file), utilizzando la direttiva allow_url_fopen e disabilitare alcune funzioni non essenziali di PHP, come phpinfo, system, shell_exec, exec ed in fine proc_open. In definitiva all'interno del nostro personale file php.ini avremo qualcosa del genere:
- register_globals = Off
- magic_quotes_gpc = On
- allow_url_fopen = Off
- disable_functions = system, shell_exec, exec, phpinfo, proc_open
Proteggiamo le risorse con .htaccess
Se il nostro Joomla è in esecuzione sotto Apache ed il mod_write è attivo, utilizzando il file .htaccess abbiamo l'opportunità di gestire diverse funzioni, generalmente esso viene utilizzato per gestire gli URL, il redirect, impostare le pagine d'errore ed anche, per definire i permessi d'accesso alle cartelle. Per i nostri scopi, sfrutteremo il file per preservare l'accesso alla cartella adminsitrator del nostro web site, naturalmente tale operazione può essere ripetuta per tutte le cartelle o file che desideriamo proteggere. All'interno della cartella administrator creeremo un file .htaccess, dove andremo ad aggiungere le seguenti direttive:
AuthUserFile /percorsoMiaWebRoot/administrator/.htpasswd
AuthGroupFile /dev/null
AuthName "Protezione directory administrator di Joomla"
AuthType Basic
Require valid-user
La sintassi del file è intuitiva. Tramite la riga 1, indichiamo al server web Apache, dove reperire il file contenente le password, mentre nella riga 2 potremo indicare un file d'autenticazione che faccia riferimento ai gruppi d'utenti. Il tipo di autenticazione scelta è quella base, come si evince dalla riga 4. La linea require valid-user è la più importante, infatti, indica al server web che solo gli utenti cui è associata una password corretta possono accedere alla risorsa. A questo punto, andremo ad inserire gli user e le password all'interno del file .htpasswd. Tramite il nostro client FTP, creeremo un file con tale nome nella posizione indicata precedentemente alla riga 1, ed al suo interno inseriremo tutti gli utenti autorizzati all'accesso alla risorsa desiderata (nel nostro caso la cartella administrator), il file dovrà seguire la seguente sintassi:
nome:password
dove nome indica il nome dell'utente, e password la password criptata dell'utente, per criptare le password possiamo servirci di diversi tool di encryption disponibili in rete.
Conclusioni
Esistono altri accorgimenti da adottare per salvaguardare il nostro sito web, come ad esempio utilizzare codici CAPTCHA all'interno delle form e predisporre una form mail più tosto che rendere pubblico un indirizzo email nella sezione contatti ad esempio. Sicuramente il nostro sito non sarà a prova di bomba, ma avremmo reso un po' la vita difficile ai malintenzionati del web.