Come aumentare la sicurezza della propria installazione TYPO3 e delle proprie estensioni! Le slide del mio intervento al t3CampItalia 2011 dove ho parlato di come configurare al meglio TYPO3 in fase di installazione, su quali tecniche adottare per evitare gli attacchi più diffusi (es. sql injection e cross site scripting) e su quali estensioni possono aiutare a difendersi dagli attacchi (es. PHPIDS Intrusion Detection System).
1. Aumentiamo la
sicurezza in
TYPO3
Mauro Lorenzutti
T3Camp Italia Bologna 28/29 Ottobre 2011
Il secondo evento italiano dedicato a TYPO3
2. Mauro Lorenzutti
CTO di Webformat
Sviluppatore e consulente TYPO3 dal 2004
TYPO3 Certified Integrator dal 2009
Sviluppatore di numerose estensioni, tra cui:
DB Integration (wfqbe)
Webformat Shop System (extendedshop)
TYPO3-Alfresco Connector (alfresco)
Contacts:
mauro.lorenzutti@webformat.com
www.webformat.com
Pag. 2 http://www.t3campitalia.it/
3. Sicurezza?
Cosa si intende per sicurezza informatica?
Confidenzialità
la protezione dei dati e delle informazioni scambiate tra un mittente e uno o
più destinatari nei confronti di terze parti.
Disponibilità
l'attitudine di un’entità ad essere in grado di svolgere una funzione richiesta
in determinate condizioni ad un dato istante, o durante un dato intervallo di
tempo, supponendo che siano assicurati i mezzi esterni eventualmente
necessari.
Integrità del dato
la protezione dei dati e delle informazioni nei confronti delle modifiche del
contenuto, accidentali oppure effettuate da una terza parte, essendo
compreso nell'alterazione anche il caso limite della generazione ex novo di
dati ed informazioni
Pag. 3 http://www.t3campitalia.it/
4. Voglio un sito sicuro!
La sicurezza al 100% non esiste!
Un'applicazione non potrà mai essere *sicura*, ma solo non
insicura in un dato momento temporale
la sicurezza ha un costo e va valutata in relazione ai possibili
rischi
Pag. 4 http://www.t3campitalia.it/
5. Vulnerabilità
Una vulnerabilità è una mancanza o una debolezza
nell’applicazione che consente ad un intruso di causare danni o
disagi
Una vulnerabilità può essere causata da un errore di
progettazione o da un bug
OWASP: Open Web Application Security Project
(http://owasp.org) – un’organizzazione no-profit che ha lo scopo
di migliorare la sicurezza nelle applicazioni
Pag. 5 http://www.t3campitalia.it/
7. Di cosa parleremo
Configuriamo TYPO3 correttamente
Proteggiamo le nostre estensioni
Estensioni utili
Aaahhh, mi hanno bucato, e adesso???
Pag. 7 http://www.t3campitalia.it/
8. Di cosa NON parleremo
Configurazioni di:
Sistema Operativo
Apache / IIS
PHP
Mysql
Firewall
Ecc…
Pag. 8 http://www.t3campitalia.it/
10. 1. Permessi sui file
Abilitare la struttura su:
fileadmin
typo3conf
typo3temp
uploads
NON abilitare la scrittura su:
t3lib
typo3
index_php
.htaccess
Pag. 10 http://www.t3campitalia.it/
11. 2. Dummy
Usare il pacchetto Dummy quando si inizia lo sviluppo di un
nuovo sito
Non usare i pacchetti “Introduction package”, “Quickstart” o
“Testsite” per nuovi siti
Almeno ricordarsi di eliminare tutti gli utenti di frontend e di
backend…
Pag. 11 http://www.t3campitalia.it/
12. 3. Admin user
Cambiare la password dell’utente “admin”
Rinominare lo username dell’utente “admin”
Meglio ancora: cancellare l’utente
“admin” e create un nuovo utente
amministratore
Configurare il lockToDomain di utenti
e gruppi di backend
Ricordarsi anche di cambiare
la password dell’Install Tool
Pag. 12 http://www.t3campitalia.it/
13. 4.1 Configurazioni dedicate
[strictFormmail]
Impedisce l’invio di email mediante il modulo mailform a indirizzi inputati dagli utenti
(default=1)
[encryptionKey]
Viene usata in diversi punti per la generazione di codici univoci (da settare!)
[warning_email_addr]
Indirizzo email che riceve notifiche di accessi faliti a backend e install tool
[lockIP]
blocca la sessione utente ad un determinato IP
[lockRootPath]
filtro per verificare eventuali percorsi autorizzati al di fuori dal PATH_site
[fileCreateMask]
permessi usati per la creazione dei file
Pag. 13 http://www.t3campitalia.it/
14. 4.2 Configurazioni dedicate
[fileDenyPattern]
tipologie di file che gli utenti di backend non possono caricare / modificare (es. php,
htaccess, ecc.)
[folderCreateMask]
permessi usati per la creazione di cartelle
[warning_mode]
specifica quando viene inviata la warning_email a seguito di accessi al backend
[IPmaskList]
maschera IP autorizzati ad accedere al backend
[lockBeUserToDBmounts]
limita le modifiche al solo dbmount da parte degli utenti di backend (default=1)
[lockSSL]
abilita il backend solo via HTTPS
Pag. 14 http://www.t3campitalia.it/
15. 4.3 Configurazioni dedicate
[enabledBeUserIPLock]
blocca la sessione utente di backend ad un determinato IP
[disable_exec_function]
disabilita la funzione PHP exec()
[usePHPFileFunctions]
gestisce i file mediante funzioni PHP invece che mediante la funzione exec()
[noPHPscriptInclude]
impedisce l’inclusione di script PHP via TypoScript (utile se altri utenti hanno accesso ai
template)
[lockHashKeyWords]
lista di parametri coi quali bloccare la sessione utente di frontend
[devIPmask]
lista di IP ai quali vengono mostrati i messaggi di debug
Pag. 15 http://www.t3campitalia.it/
16. 5. config.baseURL=1
Evitare l’uso di:
config.baseURL=1
Preferire l’uso di:
config.baseURL=http://www.mysite.org/
In vecchie versioni di TYPO3 questa configurazione poteva
essere sfruttata per iniettare pagine “malevole” nella cache
Pag. 16 http://www.t3campitalia.it/
17. 6. SSL
Considerare l’uso del protocollo
HTTPS per il backend
Considerare l’uso del protocollo
HTTPS per la form di login degli utenti di frontend
Pag. 17 http://www.t3campitalia.it/
18. 7. Policy password
Le password degli utenti di backend sono già cifrate in md5
md5 = sicuro? NO md5.rednoize.com
Usare password complesse:
Almeno 9 caratteri
Mescolare minuscole, maiuscole e numeri
Usare almeno un carattere speciale
Ovviamente: non usare la stessa password di altri servizi
Pag. 18 http://www.t3campitalia.it/
19. 8. Cifratura password
TYPO3 salva la password degli utenti di frontend in chiaro!!!
Attivare la cifratura delle password:
rsaauth
saltedpasswords
Anche per gli utenti di backend
(algoritmo di cifratura più sicuro)
Pag. 19 http://www.t3campitalia.it/
20. 9. Aggiornamenti continui
Aggiornare costantemente il core di TYPO3
Aggiornare costantemente tutte le estensioni
Iscriversi al feed del security team per ricevere le notifiche:
http://news.typo3.org/news/teams/security/rss.xml
Pag. 20 http://www.t3campitalia.it/
21. 10. Rimuovere codice non
usato
Disinstallare un’estensione
non è sufficiente
Il codice PHP
rimane sul server
È necessario cancellare
fisicamente la cartella
dell’estensione da
typo3conf/ext/
Pag. 21 http://www.t3campitalia.it/
23. 12. Rinominare cartella
typo3/
Confondiamo le acque: rinominamo la cartella typo3
Usare un nome non standard
(evitare “admin”, “backend”, “backoffice”, “amministrazione”, ecc.)
Richiede modifiche
al core di TYPO3
Può non essere
compatibile
con alcune estensioni
Pag. 23 http://www.t3campitalia.it/
24. 13. Rimuovere l’Install Tool
Dopo l’installazione e configurazione di TYPO3
è possibile rimuovere i file PHP dell’Install Tool
Se serviranno si potranno rimettere
in un secondo momento
Pag. 24 http://www.t3campitalia.it/
25. 14. localconf.php
Spostare il file localconf.php (o parte del suo contenuto) fuori
dalla cartella htdocs
<?php
require("<directory outside htdocs>/localconf.php");
?>
Pag. 25 http://www.t3campitalia.it/
30. SQL Injection
Proviamo a fare la query seguente:
About" OR 1="1
La query diventa:
SELECT uid, title, fe_group
FROM pages
WHERE
title LIKE "%About" OR 1="1%"
AND pages.deleted=0
AND […]
Otteniamo tutte le pagine, anche
quelle nascoste o visibili solo agli
utenti loggati
Pag. 30 http://www.t3campitalia.it/
31. Solo le pagine?
Dite che cmq ho solo listato delle pagine nascoste?
Proviamo con questa ricerca:
About"
UNION select uid, password, username
FROM be_users
UNION select uid,fe_group,title
from pages WHERE 1="0
Pag. 31 http://www.t3campitalia.it/
32. Oddio gli utenti!?!?!?!
Siamo riusciti a listare gli utenti di backend e le relative
password!!!!
Pag. 32 http://www.t3campitalia.it/
33. Ecco la query
SELECT uid, title, fe_group
FROM pages
WHERE title LIKE "%About"
UNION SELECT uid, password, username FROM be_users
UNION SELECT uid,fe_group,title FROM pages
WHERE 1="0%" AND pages.deleted=0 AND
pages.t3ver_state<=0 AND pages.pid!=-1 AND pages.hidden=0
AND pages.starttime<=1319042880 AND (pages.endtime=0
OR pages.endtime>1319042880) AND (pages.fe_group='' OR
pages.fe_group IS NULL OR pages.fe_group='0' OR
FIND_IN_SET('0',pages.fe_group) OR FIND_IN_SET('-
1',pages.fe_group)) AND tx_wfmobile_nodesktop=0
Pag. 33 http://www.t3campitalia.it/
34. Come proteggersi?
Do not trust users!!!
È necessario fare un casting o una pulizia dei parametri passati
in GET, in POST o anche nel COOKIE
intval($params['cerca'])
addslashes($params['cerca'])
Correggiamo la query:
$res = $GLOBALS['TYPO3_DB']->exec_SELECTquery( 'uid, title,
fe_group', 'pages', 'title LIKE "%'.addslashes($params['cerca']).'%" '.$this-
>cObj->enableFields('pages') );
Pag. 34 http://www.t3campitalia.it/
35. XSS
Cross Site Scripting?
Proviamo a fare questa ricerca:
About<script type="text/javascript">
$(document).ready(function(){alert('XSS riuscita!!!');});</script>
Pag. 35 http://www.t3campitalia.it/
36. Come proteggersi
E questo è niente: mediante XSS è possibile rubare la sessione
dell’utente
Mai, stampare contenuto fornito dall’utente senza prima pulirlo:
htmlspecialchars
strip_tags
…
Puliamo l’output:
$content .= '<p>Parola ricercata:
<strong>'.htmlspecialchars($params['cerca']).'</strong></p>';
Pag. 36 http://www.t3campitalia.it/
37. Altri attacchi
Malicious File Upload
Gli utenti potrebbero riuscire ad uploadare file PHP, .htaccess o altri file
pericolosi
Controllare sempre il formato del file che si sta caricando
Impedire l’upload di file .php, .htaccess, ecc.
Ci sono molte altre possibili vulnerabilità
http://owasp.org
Pag. 37 http://www.t3campitalia.it/
38. E se trovo una
vulnerabilità…
… in un’estensione pubblica o nel core?
NON segnalare la vulnerabilità alla mailing list!
Scrivere a:
security@typo3.org
Pag. 38 http://www.t3campitalia.it/
40. Captcha
Per prevenire l’invio di spam mediante i moduli TYPO3 è utile
dotarsi di un captcha
Ci sono diverse estensioni disponibili
sr_freecap
captcha
jm_recaptcha
…
E se il captcha fa scappare i miei utenti?
Pag. 40 http://www.t3campitalia.it/
41. Spamshield
wt_spamshield
Utilizza alcuni semplici controlli per riconoscere lo spam
Utilizza “Akismet”, un servizio online per verificare se il
contenuto è spam
http://akismet.com/how/
Supporta:
mailform standard
powermail
ve_guestbook
tx_comments
Pag. 41 http://www.t3campitalia.it/
42. checkmysite
Tutte le pagine di TYPO3 sono servite dal file index.php
Questa estensione verifica la presenza di codice malevolo
iniettato nel file index.php
Si basa su 60 regole diverse per verificare un’eventuale
presenza di codice malevolo
Se riscontra la presenza di codice malevolo avvisa
l’amministratore via mail e redirige tutti gli utenti ad una pagina
di manutenzione
Pag. 42 http://www.t3campitalia.it/
43. wt_doorman
Filtra le variabili passate in GET e in POST contro XSS e SQL
Injection
Può essere usata per filtrare i parametri di TYPO3 e quelli delle
proprie estensioni
Può pulire tutte i parametri non espressamente autorizzati
Ciascun parametro va configurato:
Pag. 43 http://www.t3campitalia.it/
45. PHP IDS
PHP Intrusion Detection System – http://www.phpids.org
PHP IDS è un layer di sicurezza che può essere aggiunto alle
proprie applicazioni web
Analizza le chiamate e riconosce un’eventuale attacco
assegnando un punteggio di impatto – si basa su un database
di regole costantemente aggiornato
Pag. 45 http://www.t3campitalia.it/
46. Testiamolo sulla nostra
estensione
Proviamo ad eseguire le tre ricerche «malevole» che abbiamo
eseguito in precedenza:
Pag. 46 http://www.t3campitalia.it/
47. Reagiamo!
In base al punteggio di impatto possiamo reagire:
Salvare un log in un file
Salvare un log in un database
Inviare una segnalazione via mail
Mostrare un messaggio di errore
Bloccare la sessione utente
Pag. 47 http://www.t3campitalia.it/
48. E se mi hanno hackerato?
Analizzare i log!
sys_log table
access log
php error log
lista di file con nomi inaspettati, con date di ultima modifica/accesso
strane
OS logs (auth, audit, ecc.)
IDS logs
http://buzz.typo3.org/teams/security/article/what-you-need-to-
know-and-need-to-do-if-your-website-has-been-hacked/
http://www.slideshare.net/t3sec/typo3-website-hacked
Pag. 48 http://www.t3campitalia.it/
50. Ora so tutto?
NO!!!
La sicurezza non è un risultato, la sicurezza è un processo!
Mantenere sicuri i propri siti significa:
Aggiornamenti costanti
Controlli continui
Verifiche
Studio
Ecc. ecc.
Pag. 50 http://www.t3campitalia.it/
51. Discussione aperta
Questi sono solo dei suggerimenti per iniziare, ora sta a voi!
Qualcuno ha qualche suggerimento?
Pag. 51 http://www.t3campitalia.it/
52. Grazie!
Grazie a tutti per l’attenzione
I miei riferimenti:
mauro.lorenzutti@webformat.com
http://it.linkedin.com/in/maurolorenzutti
http://twitter.com/#!/MauroLorenzutti
Pag. 52 http://www.t3campitalia.it/