Notes de cours Sécurité Sécurité Web

Transcription

Notes de cours Sécurité Sécurité Web
Notes de cours Sécurité
Sécurité Web
Morgan Barbier
20 février 2013
1
Certificats
1.1
Problématique
Le protocole TCP/IP a été conçu avec le soucis de robustesse mais pas de
sécurité. Les informations qui sont transmises avec ce protocole circulent en
clair. Il est en est de même pour les cookies.
Pour résoudre ce problème il existe le protocole SSL (Secure Socket Layer),
qui chiffre les communications entre le serveur et le client, ce qui permet d’assurer :
– la confidentialité (chiffrement symétrique avec échange des clés en
asymétrique),
– l’intégrité des paquets (fonction de hachage),
– l’authentification (certificats).
Exemples d’utilisation :
– HTTPS,
– S/POP,
– POP3S,
– S/IMAP,
– Secure cookies.
Principe de base de SSL :
– client demande au serveur son certificat, et donne la liste des systèmes de
chiffrement symétriques qu’il supporte,
– le serveur envoie au client sa clé publique signé par une autorité de
confiance dans un certificat, et choisi un système de chiffrement que les
deux parties supportent,
– le client vérifie la signature de la clé publique, et vérifie s’il fait également
confiance à l’autorité qui a généré le certificat, le client envoie alors au
serveur une clé pour le système de chiffrement symétrique.
1
Le problème est de s’assurer que la clé publique signée est bien celle du
serveur avec lequel on souhaite communiquer, et non un autre serveur ou entité.
C’est pour cela que la notion de certificat est très importante.
1.2
Solution
Certificat :
– rôle : associer un nom de domaine à une clé publique,
– émetteur : une autorité d’authentification (CA),
– informations :
– informations relatives au domaine (nom, organisation...),
– informations relatives à l’autorité d’authentification (nom, organisation...),
– datation du certificat (émission et expiration),
– Empreintes,
– Algorithme asymétrique ainsi que la clé publique associée au domaine.
Le client doit alors vérifier la validité du certificat et que l’autorité d’authentification est bien dans le cercle de confiance du client. Généralement
certaines CA sont déjà enregistrées par défaut dans les navigateurs.
Ce système permet d’éviter les attaques types man-in-the-middle. Mais
attention, c’est le rôle de l’utilisateur de faire attention au hameçonnage
(phishing).
2
2.1
Sessions
Problématique
Après une authentification d’un utilisateur sur un site web, il est nécessaire
de faire transiter tout au long de sa navigation certaines données personnelles
(id...). Si les pages envoie ces données par les méthodes POST ou GET, il est
facile alors pour un attaquant qui est capable de regarder et d’analyser le trafic
d’usurper l’identité d’un utilisateur.
2.2
Solution
L’idée est alors de sauvegardé temporairement ces informations du côté
serveur dans une session. Et on transmet alors un cookie avec l’identifiant de
session, nombre pseudo-aléatoire. Ce qui rends le développement plus facile et
permet d’enregistrer sur le serveur, et non chez le client, des informations importantes, qu’il pourrait avoir envie de modifier, par exemple le prix de son panier...
2
2.3
2.3.1
Risque lié
Usurpation de session
Si pendant la communication du cookie avec l’identifiant de session le
protocole n’est pas sécurisé à l’aide de SSL, alors un attaquant pourrait en
observant les paquets se créer un cookie avec le même identifiant de session et
ainsi usurper l’identification d’un utilisateur.
2.3.2
Cross-site request forgery
Imaginons qu’un utilisateur est connecté à un forum, avec des droits de
modification et/ou de suppression. Dans un autre onglet ce même utilisateur
est sur une page d’un site pirate et sur cette page le site charge la page du
forum avec les commandes de suppression de certaines informations, grâce à la
balise “img”. Alors le forum pensera que l’utilisateur à fait lui-même la requête
de suppression et exécutera cette requête.
Comment s’en prémunir au niveau du forum :
– demander confirmation à l’utilisateur, via mot de passe ou captcha,
– jetons de validité,
– vérifier de quelle page vient la requête $ SERVER[’HTTP REFERER’],
attention cette valeur est modifiable.
3
htaccess
3.1
À quoi ça sert ?
– gère l’authentification des utilisateurs sur certains parties d’un site,
– gérer les erreurs,
– changer les variables PHP : php value nom de variable valeur.
3.2
Risque lié
Il faut faire attention où sont enregistrer ses fichiers. La bonne coutume est
d’enregistrer ces fichiers dans un dossier où se trouve un fichier htaccess avec
Deny from all, rendant l’accès impossible depuis les protocoles HTTP(S). De
plus, grâce à la commande htpasswd, il faut enregistrer les mots de passe de
manière sécurisée.
4
Règles de base
– Toujours récupérer les variables par la méthode utilisée
– $ GET[’....’]
– $ POST[’....’]
3
– $ SESSION[’....’]
– $ SERVER[’....’]
– ...
Pour s’assurer de ne pas faire d’oubli à cette règle mettre la variable de
configuration de PHP : register globals à off.
– Injection : penser toujours à vérifier la forme des variables et les traı̂ter
avec des fonctions qui annulent l’effet des caractères spéciaux :
– mysql real escape string(),
– intval(),
– ...
– Brute-force : pour éviter ce genre d’attaque, penser à regarder les IP de
ceux qui font des requêtes sur le site.
4