Un peu de sécurité Modal Web Modal Baptiste DESPREZ

Slides:



Advertisements
Présentations similaires
05/05/2011 Panorama des menaces actuelles et futures à travers le prisme dun CERT David Bizeul – CERT Société Générale C0 Présentation publique.
Advertisements

Possibilités de Facebook dans votre club Toastmasters Samedi, le 12 juin 2010 Michel Beaulieu
Novembre 2005 – Michel Desconnets PHP : théorie Objectif : introduire les concepts globaux permettant d'aborder la programmation en PHP.
ASP.NET 2.0 et la sécurité Nicolas CLERC
Université Nancy 2 - CRI Propositions de mécanisme de SSO dans un environnement d’applications web.
Algorithmes et structures de données avancées Partie Conception de Sites Web dynamiques Cours 9 Patrick Reuter.
UV Libre : Bureau Des Elèves encadré par Nicolas Malandain - ASI3 – UV Libre BDE –
Se repérer et organiser sa veille dans la recherche en éducation Module 2 « Maîtriser laccès aux ressources scientifiques en éducation » Outils de veille.
Formation au portail SIMBAD
Xavier Tannier Yann Jacob Sécurite Web.
HTML Les types de balises
Gestion des bibliographies par logiciel. 2Bibliothèque de l'Université Laval Accès créer un compte Il faut se créer un compte.
Soutenance de stage · Par : Guillaume Prévost · Entreprise : Cynetic
Sécurité Informatique
Failles de sécurité INJECTION
Sécurité Informatique Module 02
Développement d’applications web
MODEX WEB BAPTISTE DESPREZ Un peu de sécurité. Avant dentrer dans le vif du sujet JavaScript Langage de script (comme PHP) Exécuté par votre navigateur.
Les Redirections et renvois non validés
1 Comment utiliser votre Extranet Se connecter 2.My Site 3.Documentation 3.1 Documents dintégration 3.2 Documents types 4.Vos informations privées.
PROJET DATELIEU 20 MARS 2012LCP SALLE B105 création du site internet avec Weebly.
Mars 2013 Grégory Petit
Développement dapplications web Initiation à la sécurité 1.
Collecte de données en ligne
Le langage PHP 5.
Administration de SharePoint
Réalisation Gestionnaire de Stock
Développement Rapide dApplications Web avec.NET « Mon premier site »
Lycée Louis Vincent Séance 1
18/05/ Utiliser le cahier de texte en ligne avec lapplication SPIP Adresse du site du lycée :
Ecole Supérieure Privée de ingénierie et de technologie année universitaire :2013/2014 Cross-Plateform Cours JavaScript.
Les instructions PHP pour l'accès à une base de données MySql
Mauvaise configuration sécurité
Xavier Tannier Sécurite Web.
Remplir le formulaire en ligne
28 novembre 2012 Grégory Petit
Jeudi, 20 août 2009 Sécurité informatique Cégep de St-Hyacinthe Par Hugo St-Louis.
Internet : la mémoire courte ? Capture de sites Web en ligne Conférence B.N.F, Avril 2004 Xavier Roche(HTTrack)
SQL Injection Réalisée par: BEN NASR Houssem GMATI Idriss HADDAD Mohamed Aymen HAKIM Youssef.
Développement dapplications web Authentification, session.
Utilisation des installations informatiques du CERN
SSO : Single Sign On.
802.1x Audric PODMILSAK 13 janvier 2009.
PHP Géant Aurélien. PHP (Hypertext Preprocessor) Langage de scripts libre Permet produire des pages Web dynamiques dispose d'un très grand nombre d'API(Application.
MODEX WEB BAPTISTE DESPREZ Un peu de sécurité. Javascript JavaScript / Jquery Langage de script (comme PHP) Exécuté par votre navigateur (Firefox, IE,
MODEX WEB BAPTISTE DESPREZ Un peu de sécurité. Avant dentrer dans le vif du sujet JavaScript Langage de script (comme PHP) Exécuté par votre navigateur.
Sécurité et Vie Privée Dans les Réseaux Sociaux
Novembre – Décembre 2005 Version Conclusion État de lart de la sécurité informatique Auteurs : Stéphan GUIDARINI – Consultant Senior Sébastien DESSE.
S ÉCURITÉ I NFORMATIQUE Asp.net. P LAN Sécurité sur Internet Sécurité avec ASP.net Gestion des comptes et droits d’accès Utilisation des contrôles de.
Tout savoir sur la synchronisation des mails, contacts et calendrier sur Windows Phone Lire cette présentation en mode plein écran.
CPI/BTS 2 Programmation Web PHP et les Bases de données Prog Web CPI/BTS2 – M. Dravet – 11/03/2004 Dernière modification: 11/03/2004.
Veolia Consommateurs Contenu
La Place du Village Guide d’utilisation
Les dangers d'Internet (virus et autres)
Date : Juillet 2014 Formation : TAI Formateur : Tayeb BENDJELTI
420-B63 Programmation Web Avancée Auteur : Frédéric Thériault 1.
Centre d’échange d’informations sur la Convention sur la Diversité Biologique Bienvenue dans le cours sur l’ajout d’une page web sur un site web développé.
Présentation de l’application
Sécurité et confidentialité dans Microsoft Internet Explorer William Keener Développement de contenu Global Service Automation Microsoft Corporation.
420-B63 Programmation Web Avancée Auteur : Frédéric Thériault 1.
Institut Supérieur d’Informatique
Page 1Dernière mise à jour: 17 avril 2015 Service de l'enseignement des technologies de l'information, © HEC Montréal, Tous droits réservés.
 Formulaires HTML : traiter les entrées utilisateur
Sécurité des systèmes d’information: Web Security & Honeypots
Sécurité des Web Services
Chaîne de requêteCookieSession Sauvegarder un état via l'url Sauvegarder l'état La technique consiste à passer des informations via l'URL sous la forme:
Au dela du top 10. Contexte Dans le cours de sécurité précédent (GTI619), vous avez vu le top 10 de l’OWASP. Ce cours vise à vous présenter au delà du.
(fait son épicerie les jeudi). Cross site Scripting est l'attaque web la plus commune.
Par Michael Tran Injection. Présentation du problème C’est faire en sorte que l’entrée utilisateur de l’attaquant est considérée de façon spéciale Permet.
Développement d’applications Web
Transcription de la présentation:

Un peu de sécurité Modal Web Modal 2012 - Baptiste DESPREZ Modal Web - Baptiste DESPREZ Modal 2012 - Baptiste DESPREZ

Modal Web - Baptiste DESPREZ Un peu de vocabulaire… Injection SQL : : consiste à exploiter une faille d’un site afin d’y « injecter » ses propres requêtes SQL XSS (Cross Site Scripting) : consiste à exploiter une faille d’un site afin d’y déposer son propre code (JavaScript par exemple) CSRF (Cross Site Request Forgery) : consiste à se servir d’un utilisateur pour effectuer diverses actions à son insu

Modal Web - Baptiste DESPREZ Un peu de vocabulaire… Usurpation de session : consiste à récupérer la session d’un utilisateur afin d’accéder à ses données Captcha : petite image bizarroïde que seul un humain est capable de lire (et encore, pas toujours). Bot : Robot informatique

… beaucoup de pratique ! Injection SQL Modal Web - Baptiste DESPREZ … beaucoup de pratique ! Injection SQL Au mieux, le pirate accède au contenu de votre base de données (courriels, données personnelles ou financières, …) Au pire, votre base de données est détruite URL démo : http://localhost/modal/ Login : ‘ or 1=1# si on ne connait pas le login, remplacer or par and si on le connait Modal 2012 - Baptiste DESPREZ

Injection SQL Modal 2012 - Baptiste DESPREZ Modal Web - Baptiste DESPREZ Injection SQL Modal 2012 - Baptiste DESPREZ

Injection SQL Comment se protéger ? Modal Web - Baptiste DESPREZ Injection SQL Comment se protéger ? Avec PDO : $sth = $dbh -> prepare() puis $sth->execute(array($login, $password)) Sinon : mysql_real_escape_string($login) Restreindre les droits des utilisateurs Mysql (par exemple, créer un utilisateur Mysql lambda pour votre site) N’affichez pas vos erreurs SQL ! Comme préconisé dans le TD, utilisez PDO::prepare suivi de PDOStatement->execute. Cela vous protègera contre les injections SQL (n’utilisez pas directement PDO:: query sauf si votre requête SQL ne contient pas de variable). Les fonctions PHP mysql_real_escape_string (http://fr.php.net/manual/fr/function.mysql-real-escape-string.php) et addslashes (http://fr2.php.net/manual/fr/function.addslashes.php) permettent comme PDO::prepare d’ajouter des caractères d’échappement, i.e. « \ » devant les caractères réservés. Si vous utilisez une base mysql, je vous conseille d’utiliser la fonction dédiée mysql_real_escape_string. Sinon, addslashes fonctionnera aussi mais rajoutera plus de « \ » devant les caractères spéciaux. La fonction qui fait l’inverse (i.e. retirer tous les « \ ») s’appelle stripslashes (http://fr2.php.net/manual/fr/function.stripslashes.php). Les messages de debug sont à bannir d’un site en production… en affichant l’erreur SQL avec la requêtes, vous montrez au pirate que vous ne contrôlez pas vos champs, et, cerise sur la gâteau, vous lui donnez toutes les informations pour bien malmener votre site ! Essayez de restreindre les droits du compte utilisateur de base de données que vous utilisez dans votre code une fois votre site en production. Un utilisateur « admin » détourné pourra casser toute la base de données, et utiliser comme bon lui semble votre serveur. En production, un utilisateur avec les droits SELECT, INSERT, UPDATE, DELETE suffit généralement. Modal 2012 - Baptiste DESPREZ

Modal Web - Baptiste DESPREZ XSS 21/10/2010 : Twitter est victime d’une faille XSS. Résultat : des utilisateurs spammés, et les serveurs de Twitter à genou (et tout ça avec moins de 140 caractères !!!) 09/01/2012 : Une faille XSS vient d’être découverte sur le site de La Banque Postale URL démo : http://localhost/modal/ Modal 2012 - Baptiste DESPREZ

XSS Comment se protéger ? Modal Web - Baptiste DESPREZ XSS Comment se protéger ? A chaque fois que vous devez afficher un contenu pouvant être modifié par un utilisateur ($_GET, $_POST, …), utilisez htmlspecialchars($string) Empêchez l’utilisateur d’insérer des caractères spéciaux : les signes &,$,*, etc. n’ont rien à faire dans un login par exemple Vérifiez le type (entier -> ctype_digit(), etc.) La fonction php htmlspecialchars (http://fr2.php.net/manual/fr/function.htmlspecialchars.php) vous permet de convertir en HTML les caractères réservés à PHP. Les remplacements effectués sont : "&" (et commercial) devient "&" """ (guillemets doubles) devient """ lorsque ENT_NOQUOTES n'est pas utilisée. "'" (guillemet simple) devient "'" uniquement lorsque ENT_QUOTES est utilisée. "<" (inférieur à) devient "<" ">" (supérieur à) devient ">" Elle est très utile dans le cas de formulaires, et vous aidera à vous protéger de la plupart des XSS. D’une manière plus générale, il faut TOUJOURS contrôler toutes les données que les utilisateurs peuvent insérer. Cela concerne aussi bien les formulaires que les paramètres que vous passez par $_GET pour l’affichage de votre page. Dans le cas de la page http://mapage/index.php?id=5, n’importe quel utilisateur peut modifier le 5 et mettre ce qu’il veut ! Si vous envoyez par GET ou POST ou autre un entier, vérifiez que vous recevez un entier. C’est simple et ça ne coûte rien. Voici la classe ctype qui pourra vous aider dans cette tâche : http://fr2.php.net/manual/fr/ref.ctype.php Modal 2012 - Baptiste DESPREZ

Modal Web - Baptiste DESPREZ CSRF… … ou comment profiter des droits d’un utilisateur sans que ce dernier ne s’en rende compte Publier une actu sur le site Demander à son collègue de se connecter sur le site : il est obligé de se connecter ! Et le tour est joué http://localhost/hack/csrf.php Modal 2012 - Baptiste DESPREZ

CSRF Comment se protéger ? Modal Web - Baptiste DESPREZ CSRF Comment se protéger ? Il n’y a pas de solution miracle mais des pistes pour limiter la faille : http://www.serversidemagazine.com/php/php- security-measures-against-csrf-attacks/ Comment amener les utilisateurs vers mon site contrefait ? Google Trends ! Modal 2012 - Baptiste DESPREZ

Et si on combinait tout ? Démonstration ! Modal Web - Baptiste DESPREZ Et si on combinait tout ? Démonstration ! Connexion au site via injection SQL puis publication du code CSRF via la faille XSS de l’agenda ;) Modal 2012 - Baptiste DESPREZ

Modal Web - Baptiste DESPREZ Usurpation de session La session (démarrée avec session_start()) est en fait une chaîne alphanumérique partagée entre votre navigateur et le serveur. Il est possible de la prédire (32 caractères quand même), de l’intercepter (via une faille XSS par exemple) ou de la fixer. Webmail de free : http://imp.free.fr/?Horde=1234 Modal 2012 - Baptiste DESPREZ

Usurpation de session Comment se protéger ? Modal Web - Baptiste DESPREZ Usurpation de session Comment se protéger ? ini_set('session.use_trans_sid', '0'); Régénérer votre session, pour compliquer un peu la tâche du pirate ;) <?php session_name("Mon_Beau_Site_Web" ); session_start(); if (!isset($_SESSION['initiated'])) { session_regenerate_id(); $_SESSION['initiated'] = true; } ?> La directive ini_set('session.use_trans_sid', '0') permet de bloquer le passage de l’ID de session d’un utilisateur par $_GET, c’est-à-dire par l’URL. Même si cette id de session est une chaîne aléatoire, le fait qu’elle passe en clair en facilite la récupération. Le passage par l’URL de l’ID de session intervient généralement quand un utilisateur bloque au niveau de son navigateur tous les cookies des sites. En effet, quand un navigateur ne peut pas écrire votre ID de session dans un fichier, il essaie automatiquement de la passer par l’URL. Vous pouvez tester avec le webmail de Free. Pour bloquer les cookies, dans Firefox (Windwos), allez dans : Outils -> Options… -> Vie privée et décochez « Accepter les cookies » Les cookies sont de petits fichiers stockés par votre navigateur. Ils contiennent généralement des informations sur votre session en cours sur un site web. Ils peuvent aussi servir d’espion (spyware). Le script qui suit permet de sérieusement compliquer la vie du pirate : La fonction session_name permet de changer le nom de la session par défaut qui est PHPSESSID et que vous avez pu voir dans les URL de la diapo précédente. C’est faciliter la vie du hacker que de laisser des options ou des noms par défaut! Sur le webmail de Free, cette session s’appelle « Horde ». Ensuite, vous connaissez la fonction session_start, qui permet de démarrer un session unique sur votre site. Ensuite, pour encore rendre la vie aux pirates un peu plus dure, on va régénérer un ID de session. On commence d’abord par tester l’existence d’une variable booléenne « session initiée », pour éviter de régénérer une session à chaque chargement de page, et, s’il elle n’existe pas, on régénère un ID de session et on crée notre variable booléenne citée précédemment. Modal 2012 - Baptiste DESPREZ

Modal Web - Baptiste DESPREZ Bot La plupart des attaques sur le net sont effectuées par des Bots plus ou moins intelligents http://localhost/hack/curl.php Modal 2012 - Baptiste DESPREZ

Bot Comment se protéger ? Modal Web - Baptiste DESPREZ Bot Comment se protéger ? Protéger les formulaires publics par des CAPTCHA (http://www.google.com/recaptcha) MAIS… Les OCR se perfectionnent Une base de données de 1000 captcha s’achète 1$ Cf. « Comment amener un utilisateur vers mon site contrefait » Modal 2012 - Baptiste DESPREZ

Modal Web - Baptiste DESPREZ Captcha ! Modal 2012 - Baptiste DESPREZ

Mais aussi… Attaques type DoS ou « Déni de service » Modal Web - Baptiste DESPREZ Mais aussi… Attaques type DoS ou « Déni de service » Manipulation de cookies Modification du code avec FireBug Google Hacking Attention aux include / require ! Man in the Middle Payant ne veut pas dire plus sécurisé ! … Modal 2012 - Baptiste DESPREZ

Conclusion Ne faites pas confiance aux utilisateurs ! Modal Web - Baptiste DESPREZ Conclusion Ne faites pas confiance aux utilisateurs ! Contrôler tout ce qu’il peuvent modifier ou afficher ($_GET, $_POST, …) Protégez vos formulaires (captcha, modération, …) Protégez l’authentification de votre site avec HTTPS (si possible) Modal 2012 - Baptiste DESPREZ