2 Ne pas faire confiance aux données entrées par l internaute

Documents pareils
Principales failles de sécurité des applications Web Principes, parades et bonnes pratiques de développement

Remote Cookies Stealing SIWAR JENHANI (RT4) SOUHIR FARES (RT4)

Sécurité des sites Web Pas un cours un recueil du net. INF340 Jean-François Berdjugin

PHP CLÉS EN MAIN. 76 scripts efficaces pour enrichir vos sites web. par William Steinmetz et Brian Ward

Vulnérabilités et solutions de sécurisation des applications Web

Vulnérabilités et sécurisation des applications Web

Devenez un véritable développeur web en 3 mois!

Charte d hébergement des sites web universitaires "Réseau National Universitaire (RNU)"

ADF 2009 Sécurisation d applications PHP/MySQL

INTERNET est un RESEAU D ORDINATEURS RELIES ENTRE EUX A L ECHELLE PLANETAIRE. Internet : interconnexion de réseaux (anglais : net = réseau)

Failles XSS : Principes, Catégories Démonstrations, Contre mesures

1. La plate-forme LAMP

Réseau - Sécurité - Métrologie - Data Center. Le leader du marché allemand des UTM débarque en France avec des arguments forts!

Sécurité des Applications Web Comment Minimiser les Risques d Attaques les plus Courants

10. Base de données et Web. OlivierCuré

Programmation Web. Madalina Croitoru IUT Montpellier

Mise en place d un serveur Proxy sous Ubuntu / Debian

Protection des protocoles

webmestre : conception de sites et administration de serveurs web 42 crédits Certificat professionnel CP09

Supplément de renseignements : Examens d applications et pare-feux d applications web clarifiés Normes : Normes en matière de sécurité des données de

Urbanisation des SI Conduite du changement IT 20/03/09. Patrick CHAMBET

Création d un «Web Worm»

OWASP Open Web Application Security Project. Jean-Marc Robert Génie logiciel et des TI

Développement des Systèmes d Information

Aide-mémoire minimal pour la sécurité en PHP François Gannaz

Plateforme PAYZEN. Intégration du module de paiement pour la plateforme Magento version 1.3.x.x. Paiement en plusieurs fois. Version 1.

Tech-Evenings Sécurité des applications Web Sébastien LEBRETON

Rapport de certification ANSSI-CSPN-2010/05. ModSecurity v2.5.12

Installation d un serveur HTTP (Hypertext Transfer Protocol) sous Débian 6

Architectures web/bases de données

Magento. Magento. Réussir son site e-commerce. Réussir son site e-commerce BLANCHARD. Préface de Sébastien L e p e r s

\ \ / \ / / \/ ~ \/ _ \\ \ ` \ Y ( <_> ) \ / /\ _ / \ / / \/ \/ \/ Team

FileMaker Server 11. Publication Web personnalisée avec XML et XSLT

Expérience d un hébergeur public dans la sécurisation des sites Web, CCK. Hinda Feriani Ghariani Samedi 2 avril 2005 Hammamet

APPLICATIONS WEB ET SECURITE

Application Web et J2EE

Technologies du Web. Créer et héberger un site Web. Pierre Senellart. Page 1 / 26 Licence de droits d usage

WEB 2.0 : Vulnerabilty Reloaded!

L envoi d un formulaire par courriel. Configuration requise Mail Texte Mail HTML Check-list

les techniques d'extraction, les formulaires et intégration dans un site WEB

<Insert Picture Here>ApExposé. Cédric MYLLE 05 Février Exposé Système et Réseaux : ApEx, Application Express d Oracle

Audit Sécurité vendredi 13 novembre

Banque en ligne et sécurité : remarques importantes

Failles des applications Web. Ce document est extrait du travail de diplôme de M. DIZON dans l état.

Attaques de type. Brandon Petty

WEB & DÉVELOPPEMENT LES BASES DU WEB LE LANGAGE HTML FEUILLES DE STYLES CSS HISTORIQUE D INTERNET ET DU WEB LES DIFFÉRENTS LANGAGES

3W Academy Programme de Formation Développeur Intégrateur web Total : 400 heures

OUAPI Guide d installation Outil d administration de parc informatique. Documentation d installation et de paramétrage

1 / Introduction. 2 / Gestion des comptes cpanel. Guide débuter avec WHM. 2.1Créer un package. 2.2Créer un compte cpanel

L3 informatique TP n o 2 : Les applications réseau

Améliorer les performances du site par l'utilisation de techniques de Web Mining

Hébergement WeboCube. Un système performant et sécurisé. Hébergement géré par une équipe de techniciens

Pratique et administration des systèmes

Attaques applicatives

CRÉER, ROUTER ET GÉRER UNE NEWSLETTER, UN ING

Programmation Web. Introduction

Technologies Web. Ludovic Denoyer Sylvain Lamprier Mohamed Amine Baazizi Gabriella Contardo Narcisse Nya. Université Pierre et Marie Curie

LICENCE PROFESSIONNELLE SYSTEMES INFORMATIQUES & LOGICIELS

Présentation du relais HTTP Open Source Vulture. Arnaud Desmons Jérémie Jourdin

E-TRANSACTIONS. Guide du programmeur API Plug-in. Version 1.1

Introduction. PHP = Personal Home Pages ou PHP Hypertext Preprocessor. Langage de script interprété (non compilé)

Découverte d aesecure. Par Christophe Avonture, développeur d aesecure

LANGAGUE JAVA. Public Développeurs souhaitant étendre leur panel de langages de programmation

Gestion d identités PSL Installation IdP Authentic

Mise en place d un firewall d entreprise avec PfSense

DNS : types d attaques et. techniques de. sécurisation. Le DNS (Domain Name System), un élément essentiel de l infrastructure Internet

Outils de traitements de logs Apache

Chapitre 1 Qu est-ce qu une expression régulière?

Présentation de la solution Open Source «Vulture» Version 2.0

Création, analyse de questionnaires et d'entretiens pour Windows 2008, 7, 8 et MacOs 10

SP1 : Intégration d'une vidéo dans une mardi 21/01/2014. page web, fonction du format vidéo et 3 mercredi 22/01/2014

Note technique. Recommandations pour la sécurisation des sites web

JAB, une backdoor pour réseau Win32 inconnu

INFORMATIQUE & WEB. PARCOURS CERTIFICAT PROFESSIONNEL Programmation de sites Web. 1 an 7 MODULES. Code du diplôme : CP09

Formation : WEbMaster

Manuel d'installation

FileMaker Server 12. publication Web personnalisée avec XML

Les menaces informatiques

ASP.NET MVC 4 Développement d'applications Web en C# - Concepts et bonnes pratiques

Module BD et sites WEB

FileMaker Server 14. Guide de démarrage

DenyAll Protect. Sécurité & accélération. Parefeux pour applications et services Web. de vos applications.

Hébergement de site web Damien Nouvel

Architectures en couches pour applications web Rappel : Architecture en couches

Formation Cloudera Data Analyst Utiliser Pig, Hive et Impala avec Hadoop

«Obad.a» : le malware Android le plus perfectionné à ce jour

Performance, rendement Vs Evolutivité

MANUEL D INSTALLATION D UN PROXY

NFA016 : Introduction. Pour naviguer sur le Web, il faut : Naviguer: dialoguer avec un serveur web

Mise en oeuvre d un intranet à partir de logiciels Open Source avec intégration des certificats numériques et login unique

ADF Reverse Proxy. Thierry DOSTES

Bee Ware. Cible de Sécurité CSPN. Validation Fonctionnelle Validation Fonctionnelle Bon pour application AMOA BEEWARE BEEWARE

Echosgraphik. Ce document sert uniquement à vous donner une vision sur ma manière de travailler et d appréhender un projet

Activité sur Meteor. Annexe 1 : notion de client-serveur et notion de base de données

Table des matières. Avant-propos... Préface... XIII. Remerciements...

Les sites Internet dynamiques. contact : Patrick VINCENT pvincent@erasme.org

ISPConfig Documentation

Sécuriser les applications web

Transcription:

Université de Caen Basse-Normandie Département d informatique, U.F.R. Sciences Licence pro. ATC, Webmestre, 2015 2016 Unité UE14 Approfondissement programmation objet Cours. Sécurité des scripts Bruno Zanuttini 1 Types d attaques Parmi les attaques qui peuvent être lancées sur Internet, on peut considérer que les plus faciles sont celles menées contre les clients. Viennent ensuite celles contre les serveurs, et enfin celles sur les communications. Contre les serveurs, on peut recenser les principaux types suivants : accès à des données confidentielles stockées sur le serveur, exécution de commandes, parmi lesquelles la destruction de fichiers, installation de chevaux de Troie (logiciels destinées à faciliter une attaque ultérieure), défiguration d un site Internet, déni de service (Denial of Services, DoS) et sa version distribuée (DDoS). De façon générale, parmi les moyens de protection on trouve notamment une bonne configuration du serveur, une minimisation des services, et l écriture de scripts et applications sécurisés. 2 Ne pas faire confiance aux données entrées par l internaute Un site Web dynamique utilise en général de nombreuses données fournies par les internautes, que ce soit via des formulaires, via des URL (méthode GET) ou encore via des cookies. La règle de base dans le traitement de telles données est de toujours les valider avant de les utiliser. Les données fournies par les internautes peuvent permettre les types d attaques suivants. Les injections système consistent à changer la signification d une commande système exécutée par le serveur en introduisant des caractères spéciaux dans les données. Elles peuvent résulter en la possibilité, pour l internaute, de faire exécuter une commande système quelconque par le serveur. Les injections SQL (par exemple) consistent de même à changer la signification d une requête à une base de données en jouant sur les caractères spéciaux. Une telle attaque 1

peut permettre de contourner une authentification, de voir des données confidentielles, ou encore de modifier la structure de la base de données. Le cross-site scripting (XSS) consiste par exemple à inclure, dans des données fournies au site Web, des balises HTML. Si le site affiche ces données plus tard, en particulier pour un autre visiteur (cross-site), les balises seront interprétées. Le site peut ainsi être défiguré, faire «planter» les navigateurs de ses visiteurs, etc. Les cross-site request forgeries (CSRF) consistent à faire appeler un script par une victime (un autre internaute), à son insu. Le script en question est alors appelé avec les droits, l adresse IP, etc. de la victime, avec de fait la possibilité de passer des barrières de sécurité. On fait ainsi exécuter une attaque par un internaute à son insu. Outre les instructions système et les requêtes aux bases de données, on doit se méfier des instructions de la famille des include(url), en particulier si l URL est construite à partir des données fournies par l internaute. Un autre exemple d attaque, générique, est l exploitation d un buffer overflow. Cette technique (difficile à mettre en oeuvre) consiste à imposer à une application d écrire plus de données qu elle ne le peut dans la zone de mémoire qui lui est réservée. Le résultat est que les données en trop risquent d être écrites dans la zone mémoire qui contrôle le déroulement même de l application. Il est alors possible, quoique difficile, de modifier ce déroulement. Concernant le langage PHP, il faut également se méfier du fait que les variables (globales) n ont pas besoin d être déclarées, et ne jamais se reposer sur leurs valeurs par défaut. En effet, ces variables peuvent dans certains cas être modifiées par un utilisateur du script, via la méthode GET par exemple. Notons que la configuration par défaut de PHP4+ empêche cette possibilité (option register_globals=off), mais que cette configuration peut avoir été modifiée. 3 Écriture d applications sécurisées Il s agit de façon générale de filtrer les données entrées par l utilisateur. Il est difficile d établir une manière générale de filtrer, mais les caractères spéciaux tels que ceux du shell et ceux servant à introduire des commentaires dans les différents langages ont rarement des raisons d être présents dans un champ rempli par un visiteur du site. Lorsque c est possible, il est encore mieux de ne garder que les caractères valides plutôt que d en retirer certains. En effet, il paraît par exemple raisonnable de ne garder que les chiffres dans un champ «date de naissance», ou encore de ne garder que les lettres dans un champ «nom». En PHP, plusieurs fonctions permettent de réaliser de tels filtrages. Citons les suivantes (toutes ces fonctions retournent une nouvelle chaîne de caractères). escapeshellarg(string) échappe les guillemets de string, et l entoure de guillemets de sorte qu avec une bonne probabilité, le résultat puisse être utilisé en toute sécurité comme argument d une commande shell. escapeshellcmd(string) échappe les caractères spéciaux du shell, prévenant ainsi les 2

attaques utilisant, par exemple, le tube ou le point-virgule. addslashes(string) est écrite pour les requêtes à des bases de données. Elle échappe les simples et doubles guillemets et l antislash. stripslashes(string) fait l inverse. trim(string,liste) supprime les caractères présents dans liste de string. htmlentities(string) remplace dans string tous les caractères qui peuvent l être par les entités HTML équivalentes. htmlspecialchars(string) a le même effet que htmlentities, mais seulement pour les caractères ayant une signification spéciale en HTML. strip_tags(string) retire toutes les balises HTML de string (sauf celles d une éventuelle liste spécifiée). D autre part, l option magic_quotes_gpc de PHP (dans sa configuration) réalise automatiquement le travail de addslashes pour les données obtenues par GET, POST et COOKIES, avant de les passer à un script. Concernant les injections SQL, on peut s en protéger en utilisant des requêtes préparées (avec des variables pour chaque champ provenant de l utilisateur et utilisé dans la construction de la requête). De telles requêtes sont définies indépendamment des valeurs des paramètres. Ceux-ci ne sont liés à la requête que dans un deuxième temps, la syntaxe (parsing) de la requête ne pouvant alors plus être modifiée. En PHP, PDO, par exemple, propose des requêtes préparées. Concernant les CSRF, il faut faire en sorte qu aucune action importante ne puisse être exécutée via un simple appel de script. Il est également préférable de privilégier la méthode POST à la méthode GET pour la récupération des paramètres, car alors la victime se rendra compte de l attaque (affichage du résultat du post). Enfin, on peut mettre en œuvre des techniques plus élaborées, consistant à vérifier que le script critique a bien été appelé depuis un formulaire émis par le serveur. On peut ainsi cacher un nombre aléatoire (différent à chaque fois et pour chaque utilisateur) dans ces formulaires et vérifier qu il a bien été renvoyé lors de l appel du script. Notons que le fait de ne permettre aucune action importante via un simple appel de script est un conseil à suivre, même indépendamment des attaques possibles : penser au rechargement d une page, par exemple, qui ferait exécuter deux fois l action importante sans que l utilisateur ne le souhaite. 4 Applications exécutées côté client Il peut être tentant d utiliser des langages tels que JavaScript pour valider les données entrées par un visiteur, ou encore de limiter les données possibles en les faisant choisir à l utilisateur dans une liste, via un formulaire. Mais il ne faut pas perdre de vue que l attaquant fait ce qu il veut sur sa machine. En particulier, il peut enregistrer la page Web, en supprimer la fonction JavaScript de validation ou ajouter des possibilités dans les listes, puis utiliser cette page modifiée pour appeler le script. Cette remarque vaut également pour les cookies, car il suffit à l internaute d en éditer le fichier sur sa machine pour en modifier les valeurs. 3

Plus généralement, il est vain de se reposer sur des applications exécutées côté client pour la sécurité. 5 Messages d erreur et d information Les messages d erreur, et plus généralement d information, qu affiche un script, peuvent être une précieuse source d informations pour un attaquant, qui peut de plus chercher à les provoquer en fournissant des données non valides. De façon générale, et même s il ne faut pas se reposer sur ce seul point, la non connaissance d un script augmente la difficulté d exploiter ses failles. Il faut donc éviter des messages d erreur montrant, par exemple, une instruction dont l exécution a échoué. À titre d exemple, il est préférable d afficher «authentification impossible» plutôt qu «identifiant inconnu» ou «mauvais mot de passe». En effet, dans le second cas l attaquant peut obtenir plus rapidement la connaissance d un identifiant valide : au lieu d essayer de deviner un couple, il n a plus qu à chercher un identifiant valide, puis le mot de passe correspondant. Notons cependant qu un identifiant valide est souvent facile à deviner («root», «user», ou encore les adresses électroniques). 6 Dénis de services Les attaques de type déni de service visent à rendre un site Web ou un serveur inopérant, à y interdire l accès à une personne normalement autorisée, etc. Il est en général très difficile de se protéger contre ces attaques, parce qu elles exploitent la fonction même du serveur, c est-à-dire fournir des services. Un exemple consiste à envoyer de très nombreuses requêtes au serveur afin de le saturer. Une autre attaque consiste à essayer de faire révoquer le certificat d un site Web sécurisé via SSL. Les clients n y accepteront alors plus la connection, ou tout du moins demanderont confirmation à l utilisateur. Notons que de tels dénis de services peuvent être très graves pour les finances d une entreprise de vente par Internet, pour la réputation d une société d informatique, etc. Une autre attaque de type déni de service consiste à essayer d empêcher à une personne autorisée l accès à un site Internet ou à un compte. On peut par exemple exploiter des scripts qui bloquent un compte après trois mauvais mots de passe. 7 Options PHP Il est possible de surcharger, au niveau utilisateur, la valeur de certaines options de configuration de PHP. On peut utiliser pour cela la fonction ini_set dans un script PHP. La syntaxe 4

est ini_set( option, valeur ). La fonction phpinfo permet d obtenir des informations sur la configuration courante. Bien entendu, seules certaines options, choisies en général par l administrateur, sont modifiables. Si PHP est installé en tant que module d Apache, on peut également changer la valeur de ces options via les fichiers.htaccess. On utilise pour cela les directives php_value option valeur ou php_flag option on/off. 5