lunedì 17 gennaio 2011

Joomla security base

Premessa: questo post è in fase di revisione ed aggiornamento; vedrò di migliorarlo col tempo lasciando la data di prima pubblicazione.

Si, lo so, è già uscita la 1.6 stable, ma il processo di migrazione sarà lungo (ci sono addirittura moltissimi siti ancora in 1.0) e presumibilmente non doloroso, specie per i template.
Quindi, non è male intanto rivedere, assemblare e possibilmente completare in un unico post le varie checklist sui requisiti e le procedure di sicurezza minimi che un sito in Joomla 1.5.x DEVE possedere od attuare.
Tenete conto che molte di queste impostazioni possono essere ottenute sia sulla versione 1.5.x che sulla versione 1.6 caricando sul sito l'ottima estensione gratuita (nella versione base) Akeeba, sia nelle funzionalità Back up che Admin Tool
NB L'admin tool consente anche di effettuare l'aggiornamento fino all'ultima versione della 1.5.x. Nel caso della versione italiana, akeeba non riesce a fare l'aggiornamento in quanto punta ai server di Joomla.org.
Se volete usare questa funzionalità del tool dovete quindi aver installato la versione inglese da Joomla.org ed il package corrispondente alla lingua italiana per il back end.


INSTALLAZIONE

Prova locale
Effettuare sempre una prova in locale del sito per verificarne la funzionalità. Installare, sul proprio PC, LAMP/XAMPP od analoghi

Hosting
Nella scelta dello spazio web, nel caso di hosting condiviso, scegliere hoster:
  • che non siano troppo a buon mercato;
  • che forniscano spazio gestito da server *nix Red Hat / CentOS / Debian;
  • in grado di fornire servizi SFTP (secure FTP), cioè sistemi di scambio dati tra locale e remoto in condizioni di sicurezza, al fine di uploadare e downloadare i dati in modo più controllato
  • che abbiano impostato la direttiva PHP register_globals su OFF; ciò al fine di poter utilizzare le proprie specifiche impostazioni di .htaccess e php.ini (NB con php6 questo problema non si presenterà più);
  • che garantisca la disponibilità dell'ultimo aggiornamento dei sistemi operativi e dei servizi server side (apache, php, mysql, ecc.);
  • che informi correttamente sulla policy di sicurezza e sugli eventi, anche negativi, che lo riguardano, e che intervenga rapidaente anche per problemi che ci riguardano da loro individuati e ci informi adeguatamente;
  • che consentano l'accesso ai log di sistema, utile in caso di problemi al nostro sito;
  • che gestisca direttamente il centro dati e garantisca adeguata ridondanza e backups;
  • accertarsi di non utilizzare hoster che facciano condividere lo spazio a troppi siti, soprattutto se questi sono siti di spammers o di porno ad intenso traffico ( Verificare con http://www.robtex.com/dns/ )
  • che possano offrire soluzioni di server dedicato a costi ragionevoli ed alta qualità, utile in caso di crescita del sito e del traffico annesso;
Installazione core
Utilizzare sempre, ove possibile, la versione più aggiornate di Joomla e delle estensioni/plugins aggiuntivi che si intende utilizzare

Non usare jos_ come tag delle tabelle del database (feature Akeeba)
Non usare "jos_" come prefisso delle tabelle. Il prefisso è richiesto in fase di installazione di Joomla, per cui basterà modificarlo.
Se è già stata eseguita l'installazione seguire le seguenti istruzioni:
b) (browser) entrare in phpmyadmin --> selezionare il database da modificare --> selezionare "export" --> assegnare un nome specifico al database (file name template) --> dare "esegui" --> il file .sql verrà salvato nella cartella scelta
a) (browser) entrare nel sito come amministratore --> configurazione --> server
Nel riquadro "configurazione database" alla voce "prefisso database" modificare il prefisso con quello scelto (ad es pippo_ ) e salvare. Verrà (ovviamente) segnalato un errore di lettura del database
NB!! attenzione a riportare correttamente il nuovo prefisso nella fase successiva!!;
c) (window manager) selezionare il file .sql salvato e farne una copia di riserva (non si sa mai)
d) aprire il file .sql con gedit o simili  --> selezionare "sostituisci" --> inserire nel campo "cerca" il valore jos_ e nel campo sostituisci il nuovo prefisso (ad es pippo_) --> dare "sostituisci" --> ripetere l'operazione per verificare che tutto sia stato effettivamente sostituito --> uscire dalla finestra "sostituisci" --> salvare
d) (browser) tornare in phpmyadmin --> selezionare il database originario --> selezionare tutte le tabelle --> selezionare "elimina" (drop) --> dare "yes"; a questo punto avremo una scatola vuota, cioè un database privo di tabelle;
f) selezionare importa --> selezionare il file .sql modificato --> dare "esegui".

Qui un video che descrive la procedura

Utilizzare nomi utente e password diversi e complessi per sito e database
Nome utente e password del database, e nome utente (di default admin, modificabile in seguito) e password dell'amministratore del sito, devono essere molto diversi tra loro e complessi (sequenze non intuitive di caratteri maiuscoli e/o minuscoli e simboli e numeri), al fine di rendere più complicati eventuali attacchi brute force


POST INSTALLAZIONE

Usare estensioni fidate
Non utilizzare estensioni non fidate, o perlomeno di cui non si può essere certi dei requisiti di qualità e sicurezza con cui sono state scritte, specie se provenienti da repository non ufficiali di Joomla.

Aggornamenti periodici
Mantenere sempre aggiornate la versione di Joomla in uso e quelle dei componenti aggiuntivi utilizzati e da utilizzarsi, ed effettuare gli upgrade appena disponibili.


Cancellare superadmin userid 62 e rinominare l'utente amministratore (feature Akeeba)
Andare in Sito --> Gestione utenti
Creare un nuovo utente con un suo nome, un suo nome utente e una sua password (ricordatevi tutto: sarà il nuovo login di amministratore) utilizzando termini insoliti e non riconoscibili (ad es non usate admin :-D ); inserite la mail di amministrazione, selezionate Super Administrator, mettete su NO il blocca utente e su SI ricevi le mail di sistema.
--> (NB se per caso avete la necessità di utilizzare la stessa mail del vecchio administrator, inserendola qui il sistema vi impedirà di salvare a causa della presenza dello stesso parametro nell'utente già presente.
A questo punto è necessario tornare nel menu utente, selezionare administrator (quello attualmente loggato) e modificare i parametri (basta aggiungere una lettera a caso in quelli di questo amministratore) che vi interessa riportare nel nuovo amministratore, in modo che non risultino identici). Create quindi il nuovo utente con i parametri che vi interessano<--
A questo punto avete due super amministratori, ma NE VEDRETE SOLO UNO, cioè quello con cui vi siete loggati.
Date esci in modo da tornare al login e loggatevi con i nuovi parametri che avete impostato (nuovo nome utente e nuova password)
Andate in Sito --> Gestione utenti e vedrete il vostro amministratore (quello con cui vi siete loggato) con user id 63 e quello precedente, che in questo momento ha i privilegi di administrator e non di super administrator, con l'user id 62.
A questo punto potete eliminare il vecchio amministratore o ridurne i privilegi a quelli di semplice utente.
Ripetendo la procedura otterrete un amministratore con user id 64, 65 ecc.


Permessi (feature Akeeba)
Impostare a file e cartelle i giusti permessi al fine di incrementare la sicurezza; normalmente sono: file = 644 e directory 755

Disabilitare componenti inutili
Pannello di controllo --> gestione Estensioni --> disabilita

Back up sito e database (feature Akeeba)
Effettuare back up sistematici del sito e del database e conservare le subversion !
Installare l'estensione akeebabackup e akeeba site admin

Abilitare htaccess
Entrare nella cartella del sito con i privilegi di aministratore e rinominare htaccess.txt in .htaccess
Verificare che sussistano i permessi per il server web (apache o www-data)
(browser) entrare nel sito come amministratore --> configurazione --> sito e nel modulo Configurazione SEO selezionare l'opzione "utilizza mod_rewrite"

Eliminare template position (tp=1)
Inserire in .htaccess :

# Start ?tp=1 prevention #
RewriteCond %{QUERY_STRING} tp=(.*)
RewriteRule ^(.*)$ index.php [F,L]
# End ?tp=1 prevention #

Disabilitare ricerca immagini dal file robots
Se non esiste, creare nella directory principale un file chiamato "robots.txt"
“...
User-agent: *
Disallow: /administrator/
Disallow: /cache/
Disallow: /components/
Disallow: /images/
Disallow: /includes/
Disallow: /installation/
Disallow: /language/
..."

Rimuovere Generation tag
templates/name-template/index.php :
riportare nell'header
<?php
// Remove the generator meta tag
$this->setGenerator(null);
?>

o, in modo più divertente (ma attenzione ad eventuali conflitti)  :-)
<?php
// Remove the generator meta tag
$this->setGenerator(Drupal);
?>

Nascondere la versione
Nel file .htaccess inserire:
<Files ~ "\.xml$">
Order allow,deny
Deny from all
Satisfy All
</Files>
E' probabile che queste linee siano già presenti entro il file sotto la voce :
## Deny access to extension xml files (uncomment out to activate)
Basta quindi eliminare il # iniziale per decommentarle e renderle attive

Settaggi Joomla e Php (feature Akeeba)
Impostare i parametri del sito in modo da incrementarne al massimo la sicurezza

Ricostruzione totale in caso di defacciamento od altro hackeraggio
Controllare i logs di sistema, modificare le password, rimuovere l'intera directory e ricostruire l'intero sito a partire da un back up "pulito"

Nessun commento:

Posta un commento