View
137
Download
0
Category
Preview:
Citation preview
TYPO3 et la Sécurité de l’information
29.06.2011
Julien BOURDIN <julien.bourdin@kleegroup.com>
T3UNI 2011
TYPO3 et la Sécurité de l’information
29.06.2011
Julien BourdinArchitecte PHP / Développeur TYPO3KLEE GROUP
Profil : Architecte, chef de projetCertifié TYPO3 Integrator
Introduction
T3UNI 2011
TYPO3 et la Sécurité de l’information
29.06.2011
Objectif de la présentationCette présentation a pour but de présenter un large
ensemble de problèmes à prendre en compte dans un
projet TYPO3.
La présentation précisera en premier ce qui rentre dans le
périmètre du terme « sécurité » et les premières
conséquences.
Ensuite, la présentation passera en revu un certain
nombre des attaques possibles contre une application
web en expliquant comment elles procèdent et surtout
comment s’en prémunir
T3UNI 2011
TYPO3 et la Sécurité de l’information
29.06.2011
SommaireLe concept de sécurité
Les failles humaines et les piratages sociaux
Les failles évidentes
La stratégie pour limiter la portée des intrusions
Les Deny Of Services (DOS)
Le spam côté serveur
L’injection SQL
L’injection de script (XSS)
Le Cross Site Request Forgery (CSRF)
Le concept de sécurité
La sécurité est une gestion des risques.
T3UNI 2011
TYPO3 et la Sécurité de l’information
29.06.2011
Les différents risquesIntégrité des
données
Confidentialité
des données
Disponibilité des
services
Responsabilité
des personnes
T3UNI 2011
TYPO3 et la Sécurité de l’information
29.06.2011
Les différents risquesIntégrité des
données
Confidentialité
des données
Disponibilité des
services
Responsabilité
des personnes
=> Transactions, Détection des
incohérences, Sauvegarde
=> Authentification, Droits d’accès,
Détection d’intrusion
=> Redondance, Récupération après
incident, DOS, Supervision
=> Usage indu, Traçabilité,
Maintenance
T3UNI 2011
TYPO3 et la Sécurité de l’information
29.06.2011
La gestion des risques
Lister les évènements qui peuvent survenir
Estimer la probabilité de les voir arriver
Estimer le coût lorsqu’un évènement se produit
Estimer le coût pour réduire la chance que l’évènement
en question se produise
T3UNI 2011
TYPO3 et la Sécurité de l’information
29.06.2011
Le coût du risqueProbabilité du risque que multiplie le coût de l’évènement :
Pe x C/e
A comparer avec le coût pour réduire le risque et au coût
des autres risques.
ConséquencesTout risque identifié n’est pas un risque à corriger, on
compare le coût de chacun des risques
Tout comme il existe de la sur-qualité, il existe des abus
de sécuritéIl n’est pas possible de réduire à 0 l’ensemble des risques !
T3UNI 2011
TYPO3 et la Sécurité de l’information
29.06.2011
La sécurité est une chaîne
Chaque composant et chaque acteur apporte des risques
Sur un type de menace donné, l’application à la sécurité
de son maillon le plus faible
La solution la plus efficace pour réduire le risque n’est
pas nécessairement une solution techniqueInutile de mettre une porte blindée si les murs sont en
papier
Inutile d’avoir une serrure 5 points si on laisse les clefs sous
le paillasson
Inutile d’avoir un SSO complexe si votre mot de passe est
« 1234 » ou « password »
T3UNI 2011
TYPO3 et la Sécurité de l’information
29.06.2011
La sécurité est un investissement
Pour les responsables de l’application
Pour les utilisateurs
Pour les développeurs
Les bonnes pratiques, une fois acquises, permettent un niveau de sécurité correcte à moindre coût.
Les failles humaines et les piratages sociaux
T3UNI 2011
TYPO3 et la Sécurité de l’information
29.06.2011
L’être humain est la première faille de sécurité
Tout collaborateur n’est pas aussi bienveillant qu’on le
souhaiterait :
la majorité des sabotages sont le fait de collaborateurs
dans les entreprises
Les relations hiérarchiques sont plus fortes que les règles
de sécurité :
une secrétaire donne à son patron le mot de passe par
téléphone s’il lui demande.
La vigilance n’est pas une culture
On ne vérifie pas l’identité de la personne qui arrose les
plantes
On prête son compte à son collègue pour ses congés
On aime pas les contraintes pesantes !
T3UNI 2011
TYPO3 et la Sécurité de l’information
29.06.2011
Il est important de former et d’informerCe qui est vécu comme une contrainte est souvent
contourné
Ce qui semble anodin n’est pas source d’attentionIl faut donc responsabiliser
Les utilisateurs
Les décideurs
Les concepteurs
Les développeurs
Les exploitants
T3UNI 2011
TYPO3 et la Sécurité de l’information
29.06.2011
Gestion des comptes
Un compte utilisateur doit être attaché à une unique
personne
L’accès doit être restreint par des mots de passe non
triviaux
Interdiction d’utiliser le login ou un mot de passe par
défaut !
Interdiction d’utiliser le prénom de sa fille ou son
année de naissance !
Les droits doivent appartenir à des groupes
Les droits données sont ceux nécessaires et suffisant
pour les tâches confiées
La délégation se fait en donnant des droits au compte du
responsable par délégation
Un mot de passe ne doit jamais être transmis, encore
moins pas courriel
Les failles évidentes
Essayez donc /typo3/install avec joh316 !
T3UNI 2011
TYPO3 et la Sécurité de l’information
29.06.2011
Les évidences qu’on oublie quand même
Changer les mots de passe par défaut (admin/password
et joh316)
Mettez à jour TYPO3, ses extensions, ainsi que les
logiciels support (LAMP)
Supprimer les dossiers et fichiers inutiles
(MISC, .bak, .sql)
Désactivez l'opions "indexes" d'APACHE
Limitez l'accès au BE aux personnes pertinentes par une
technique forte (LAN ou VPN)
Choisissez vos extensions (en évitant les
"alpha/expérimental" de 2006)
Limiter la portée des intrusions
Une brèche ne doit pas emporter tout le système !
T3UNI 2011
TYPO3 et la Sécurité de l’information
29.06.2011
Pour limiter la portée d’une intrusion dans TYPO3
Limitez les comptes admin le plus possible (1 pour vous,
1 pour le client)
Activez l'envoi de mail avertissant de la connexion d’un
compte admin
Les droits d’écriture sur les fichiers ne sont pas donnés à
APACHE en dehors de typo3temp et quelques
répertoires bien choisis (idéalement les livraisons sont
faites avec un compte distinct)
Ne laissez pas en production d'extension donnant accès à
la base de données ou au système de fichiers (quixplorer,
phpmyadmin, terminal virtuel, etc...)
Interdisez la livraison d’extension en production depuis le
BE (option dans l'install tool + droit sur le repertoire
typo3conf/ext)
T3UNI 2011
TYPO3 et la Sécurité de l’information
29.06.2011
Surveillez les indicateurs de votre site
Vérifiez dans les logs si des URL inconnues existent (avec
Awstats par exemple)
Cherchez si des variations de bande passante/nombre de
hit apparaissent
Vérifiez que l’espace disque, la mémoire occupée ou la
charge CPU ne changent pas façon inattendue
Réagissez en cas de doute !
Les déni de services
T3UNI 2011
TYPO3 et la Sécurité de l’information
29.06.2011
Qu’est-ce que le déni de service ?Une attaque en déni de service vise à rendre impossible
le bon fonctionnement d’un service en saturant un
composant de l’architecture rendant ces services.
Il peut donc s’agir de saturer de requête la plateforme
mais cela peut aussi prendre des tours plus particuliers
Saturation de la base de données
Appel répété sur le moteur de recherche ou sur certaines pages
vulnérables
Ajout de scripts infinis dans un contenu
L’objet peut être simplement le déni de service mais cela
peut aussi avoir comme but de faire disparaitre le serveur
pour usurper ensuite son identité (spoofing)
T3UNI 2011
TYPO3 et la Sécurité de l’information
29.06.2011
Se protéger contre le déni de service : attaque frontaleDimensionnez votre plateforme pour un traffique de
pointe pertinent
Activez les caches de TYPO3 et interdisez l’utilisation de
« no_cache » dans l’URL (typo3/install)
Mettez un reverse proxy avec du cache
Limitez les pools de connexions MySQL et les processus
Apache et mettez un timeout sur le reverse-proxy (Il faut
pouvoir délester en retournant un message d’erreur)
Supervisez et alertez en cas de montée en charge non
anticipée
T3UNI 2011
TYPO3 et la Sécurité de l’information
29.06.2011
Se protéger contre le déni de service : écrituresLimitez les possibilités d’écriture sur le serveur : pas de
dépôt de fichiers non régulés ni d’écriture en base
N'écrivez pas en base de données depuis un accès
anonyme sauf avec protection anti-robot (livre d'or,
commentaire, etc...)
Supervisez l'espace sur file system et dans la BDD : alerte
lors de franchissement de seuils !
T3UNI 2011
TYPO3 et la Sécurité de l’information
29.06.2011
Se protéger contre le déni de service : le cHashLe cache de TYPO3 est en base de données ! Une URL
n’est mise en cache que si elle répond à un certain
nombre de critère dont la validité des paramètres soumis.
Sont acceptées par défaut les variables « id » et « type »
Sont acceptées sans signature les variables déclarées
dans config.linkVars (TSsetup) A limiter par une plage de
valeur config.linkVars=L(0-4)
Les autres variables ne sont valables que si elles ont été
signées par la génération d’une URL depuis TYPO3. La
signature, le cHash, est le résultat d’un MD5 des données
concaténées et d’une clef privée du serveur
T3UNI 2011
TYPO3 et la Sécurité de l’information
29.06.2011
Se protéger contre le déni de service : le cHashEx : http://monsite.com/index.php?
id=2&L=3&tx_ttnews[tt_news]=23&cHash=a7024cb
7
Générez vos URL à l’aide des méthodes de l’API TYPO3 :
TYPOLINK ou tslib_pibase->pi_linkTP_keepPIvars
Générez une clef unique après l’installation de TYPO3
(install TOOLS)
Forcez vos plugin à prendre en compte la validité des
hachage :
var $pi_checkCHash = TRUE; dans class
tx_monplugin_pi1 extends tslib_pibase
Le spam côté serveur
Votre serveur peut devenir une source de spam !
T3UNI 2011
TYPO3 et la Sécurité de l’information
29.06.2011
Un serveur capable d’envoyer des mails doit être maîtriséLe risque est de voir un écran exploité par un robot pour
diffuser largement des publicités
Un écran pouvant provoquer l’envoi d’un mail doit
respecter au moins une des règles ci-dessous :
Le courriel est destiné à une unique boite à lettre
(contact)
Le formulaire ne peut être soumis qu’après un test
identifiant un humain plutôt qu’un robot
Le courriel aura un contenu fixe, dépendant de
paramètre non modifiable sur l’écran
Les courriels ne peuvent être envoyés que sur un
domaine interne (intranet)
La quantité de mail envoyés par l’application doit être
supervisée
Vous risquez, en cas de souci, de voir votre serveur
d’envoi de courriel dans les listes noires
L’injection SQL
T3UNI 2011
TYPO3 et la Sécurité de l’information
29.06.2011
L’injection SQLUne injection SQL est l’utilisation d’instruction du langage
SQL au sein d’un paramètre sensé ne contenir que de la
donnée.
Elle est le plus couramment utilisée sur les champs d’un
formulaire front-office mais peut également se faire par
l’URL.
T3UNI 2011
TYPO3 et la Sécurité de l’information
29.06.2011
Exemple : la connexion par login et mot de passeSELECT * FROM USERS WHERE LOGIN = '$_GET['login']' AND
PASSWORD = '$_GET['password']';Il lui suffit donc de saisir Monlogin';# pour que la requête
devienne :
SELECT * FROM USERS WHERE LOGIN = 'Monlogin';#' AND
PASSWORD = '';La bonne méthode consiste à considérer la saisie comme
des caractères non susceptibles de déclencher des
commandes MySQL (voir mysql_real_escape_string)
SELECT * FROM USERS WHERE LOGIN = 'Monlogin\'; \#'
AND PASSWORD = '';
Note : en aucun cas, la requête présentée est la bonne façon de gérer l’authentification !
T3UNI 2011
TYPO3 et la Sécurité de l’information
29.06.2011
Se prémunir de l’injection SQLNe donner à l’utilisateur SQL que le minimum de droit
nécessaire (pas de DROP, TRUNCATE,…)
Ne pas stocker en base de mot de passe lisibles
(fe_users !)
Avoir des sauvegardes régulières de nos bases
Toujours vérifier la nature des données insérées dans les
requêtes
Si possible, préférer les requêtes préparées (prepared
statement) qui n’attendent que de la données pour leurs
paramètres (disponibles depuis TYPO3 4.5 LTS)
T3UNI 2011
TYPO3 et la Sécurité de l’information
29.06.2011
Se prémunir de l’injection SQL dans TYPO3Utiliser l’API
$GLOBALS['TYPO3_DB']->exec_SELECTquery()
$GLOBALS['TYPO3_DB']->exec_SELECTgetRows()
$GLOBALS['TYPO3_DB']->exec_INSERTquery()
$GLOBALS['TYPO3_DB']->exec_UPDATEquery()
$GLOBALS['TYPO3_DB']->exec_DELETEquery()
Lire la documentation de chaque méthode pour vérifier
l’usage de fullQuoteStr()
Optional additional WHERE clauses put in the end of the
query. NOTICE: You must escape values in this argument
with $this->fullQuoteStr() yourself!
T3UNI 2011
TYPO3 et la Sécurité de l’information
29.06.2011
Se prémunir de l’injection SQL dans TYPO3foreach ($this->piVars as $key => $value) {
$value = $GLOBALS['TYPO3_DB']-
>fullQuoteStr($value,'fe_users');
switch ($key) {
case 'nom':
if(strlen($value) > 2)$cond_array[]="fe_users.name LIKE
'$value%'";
break;
...
default:
break;
T3UNI 2011
TYPO3 et la Sécurité de l’information
29.06.2011
Se prémunir de l’injection SQL dans TYPO3 : 4.5 LTS$statement = $GLOBALS['TYPO3_DB']->prepare_SELECTquery('*',
'pages', 'pid = :pid');
for ($i = 1; $i < 10; $i++) {
$statement->execute(array(':pid' => $i));
while (($row = $statement->fetch()) !== FALSE) {
// Do something with your $row
}
$statement->free();
}
L’injection de script (XSS)
T3UNI 2011
TYPO3 et la Sécurité de l’information
29.06.2011
Le Cross Site ScriptingLe principe de cette stratégie d’attaque est de profiter de
l’affichage de données envoyées par l’utilisateur pour
inclure des éléments de HTML ou de script non prévu
Le moyen d’en faire une agression est d’inclure du script
qui va soumettre à l’extérieur la saisie de données
confidentielles
Pour arriver à créer ce contexte, il faut fournir par un
moyen ou un autre, une URL portant ces données. Ce
sera typiquement par l’envoi de mails malicieux ou par
une mise en ligne d’un lien sur un autre site
T3UNI 2011
TYPO3 et la Sécurité de l’information
29.06.2011
Le Cross Site Scripting : cas concretUn moteur de recherche propose un champ de saisie et
passe les données sous la forme :
http://www.monsite.fr/index.php?wsearch=mot_recherche
Les résultats sont présentés avec un rappel « votre
recherche : mot_recherche »
Si on remplace dans l’URL par wsearch=<script
type="text/javascript">…</script>
On obtient une page dans laquelle, selon le traitement,
on a éventuellement un script inclus et interprété là où
l’on croyait avoir un simple mot
T3UNI 2011
TYPO3 et la Sécurité de l’information
29.06.2011
Le Cross Site Scripting : vérifier le type de vos sorties !Normalement, une donnée utilisateur est d’un type
simple : nombre, texte, choix dans un menu déroulant,…
Ce ne sont pas des typages techniques ! Une chaine de
caractère et un texte simple ne sont pas la même chose
Le cas simple : prendre la donnée à afficher et s’assurer
que tous les caractères ne sont pas intérprétés en HTML :
htmlspecialchars
Les cas complexes : autorisations de certaines balises par
une analyse spécifique
T3UNI 2011
TYPO3 et la Sécurité de l’information
29.06.2011
Le Cross Site Scripting : le RTESi vous devez autoriser des saisies contenu du HTML,
passez par le RTE de TYPO3
Le RTE se positionne sur le Front-End comme sur le Back-
End
La liste des balises autorisées est paramétrable en
TYPOSCRIPT
L’affichage des contenus associés est validée soit par un
rendu TYPOSCRIPT parseFunc_RTE
soit par une méthode de l’API
tslib_pibase->pi_RTEcssText($variable)
T3UNI 2011
TYPO3 et la Sécurité de l’information
29.06.2011
Bonne pratique général : la programmation par contratChaque méthode définit le format de ses entrées et de
ses sorties
Les variables sont vérifiées par des assertions qui, en cas
de non respect, stoppent l’exécution
function mafonction($a,$b,…){
assertion(type1,$a); assertion(type2,$b);
$retour = corpsdemethode();
assertion(typesortie,$retour);
return $retour;
}
Le Cross Site Request Forgery (CSRF)
T3UNI 2011
TYPO3 et la Sécurité de l’information
29.06.2011
Le Cross Site Request Forgery La plupart des outils utilisent, avec raison, des URL
explicite:
http://www.monsite.fr/index.php?
action=supprimer&id=35
Ces URL sont donc prévisibles même pour un utilisateur
n’ayant pas le droit d’exécuter celle-ci
Une personne va donc tenter de faire jouer cette URL à
une personne ayant les droits à son insu
En proposant le lien dans le href d’une balise image
sur une page susceptible d’être consultée
En proposant un javascript de la même façon
T3UNI 2011
TYPO3 et la Sécurité de l’information
29.06.2011
Le Cross Site Request Forgery L’agression est difficile à détecter : c’est une personne
ayant les droits qui fait les actions
La faiblesse est accru par les contexte de type SSO : la
personne peut ne pas encore s’être authentifié à
l’application et faire toutefois l’action
L’attaque est d’autant plus facile à mener que les URL
d’écriture passent leur paramètre en GET (possibilité
d’utiliser des liens simple)
T3UNI 2011
TYPO3 et la Sécurité de l’information
29.06.2011
Le Cross Site Request Forgery : s’en prémunir Il faut ajouter un élément non prévisible dans les URL
Il faut que les URL ne soient pas rejouable
Exemple de solution : ajouter une date et le cHash de
TYPO3
http://www.monsite.fr/index.php?
txmonextension[action]=supprimer&txmonextension[id]=
35
&txmonextension[date]=timestamp&cHash=jgs37829DE
Recommended