Sécurisation des sites web
EMNA BEY (GL4)
SAHAR DRIDI (RT3)
GHADA ESSAIED (RT3)
MOHAMED AYMEN KARMOUS (RT2)
Sécurisation des sites web |SECURILIGHT 2013
1
Table des matières
I. Présentation de l'atelier...............................
Sécurisation des sites web |SECURILIGHT 2013
2
I. Présentation de l'atelier
Nombreuses sont les personnes ayant l'envie de...
Sécurisation des sites web |SECURILIGHT 2013
3
III. Topologie du réseau
Notre serveur est WampServeur installé sur une mac...
Sécurisation des sites web |SECURILIGHT 2013
4
Ce site comporte les pages suivantes:
 La page inscription.php qui permet ...
Sécurisation des sites web |SECURILIGHT 2013
5
 La page espace-membre.php qui permet à un membre de voir son profil
 La ...
Sécurisation des sites web |SECURILIGHT 2013
6
2. Sécurisation du site web
Maintenant que notre site est près, nous pouvon...
Sécurisation des sites web |SECURILIGHT 2013
7
$mdp = mysql_real_escape_string($mdp);
b. Faille XSS
Qu'est ce que la faill...
Sécurisation des sites web |SECURILIGHT 2013
8
On peut aussi utiliser onmouseover, onload, ... sur n'importe quelle balise...
Sécurisation des sites web |SECURILIGHT 2013
9
Ce code permet d'afficher la page passée en paramètre ou bien la page par d...
Sécurisation des sites web |SECURILIGHT 2013
10
d. Faille Upload
Qu'est ce que la faille Upload?
L’upload permet le transf...
Sécurisation des sites web |SECURILIGHT 2013
11
Activons Tamper Data comme suit:
On démarre l'altération en cliquant sur S...
Sécurisation des sites web |SECURILIGHT 2013
12
Une autre fenêtre s'ouvre et dans cette dernière il faut modifier, dans PO...
Sécurisation des sites web |SECURILIGHT 2013
13
On peut maintenant y accéder. Comme ce fichier contient un code pour affic...
Sécurisation des sites web |SECURILIGHT 2013
14
L'une des solutions, pour lutter contre ces robots, consiste à soumettre l...
Sécurisation des sites web |SECURILIGHT 2013
15
Pour interdire une adresse IP :
deny from 192.168.1.1
Inversement, on peut...
Prochain SlideShare
Chargement dans…5
×

Tuto atelier securisation_site_web

307 vues

Publié le

Tuto atelier securisation_site_web

Publié dans : Ingénierie
0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
307
Sur SlideShare
0
Issues des intégrations
0
Intégrations
22
Actions
Partages
0
Téléchargements
0
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Tuto atelier securisation_site_web

  1. 1. Sécurisation des sites web EMNA BEY (GL4) SAHAR DRIDI (RT3) GHADA ESSAIED (RT3) MOHAMED AYMEN KARMOUS (RT2)
  2. 2. Sécurisation des sites web |SECURILIGHT 2013 1 Table des matières I. Présentation de l'atelier.................................................................................................... 2 II. Présentation des outils utilisés.......................................................................................... 2 1. WampServer.................................................................................................................. 2 2. Notepad ++.................................................................................................................... 2 3. VMware Workstation .................................................................................................... 2 III. Topologie du réseau...................................................................................................... 3 IV. Développement............................................................................................................. 3 1. Développement du site web ......................................................................................... 3 2. Sécurisation du site web................................................................................................ 6 a. Injection SQL.................................................................................................................. 6 b. Faille XSS........................................................................................................................ 7 c. Faille Include.................................................................................................................. 8 d. Faille Upload................................................................................................................ 10 e. Les CAPTCHA ............................................................................................................... 13 f. Le fichier .htaccess ...................................................................................................... 14 V. Conclusion ....................................................................................................................... 15
  3. 3. Sécurisation des sites web |SECURILIGHT 2013 2 I. Présentation de l'atelier Nombreuses sont les personnes ayant l'envie de créer leur site par leurs propres moyens malgré le déclin des tarifs pour la création des sites Web et les efforts menés par les agences Web afin de proposer des sites toujours plus performants, adaptés au budget des consommateurs. Cependant il ne faut pas oublier que le développement Web est une "discipline" relativement complexe et demande un investissement personnel considérable, ce qui peut s'avérer très rapidement un vrai casse tête lorsque l'on débute dans la matière. Cette problématique peut engendrer l'ouverture de failles de sécurité sur un site Web. C'est pour remédier à ce problème que vous avons élaboré cet atelier permettant de sécuriser un site web. II. Présentation des outils utilisés Pour réaliser cet atelier nous avons utilisé: 1. WampServer C'est une plate-forme de développement Web sous Windows pour des applications Web dynamiques à l’aide du serveur Apache2, du langage de scripts PHP et d’une base de données MySQL. Il possède également PHPMyAdmin pour gérer plus facilement les bases de données. 2. Notepad ++ C' est un éditeur de code source qui prend en charge plusieurs langages et que nous avons utilisé pour créer nos pages html, php, etc... 3. VMware Workstation C'est un logiciel de virtualisation permetant la création d'une ou plusieurs machines virtuelles au sein d'un même système d'exploitation (généralement Windows ou Linux), ceux-ci pouvant être reliés au réseau local avec une adresse IP différente, tout en étant sur la même machine physique (machine existant réellement).
  4. 4. Sécurisation des sites web |SECURILIGHT 2013 3 III. Topologie du réseau Notre serveur est WampServeur installé sur une machine Windows 7. Il nous permet d'exécuter des scripts PHP et d'accéder à une base de données MySQL grâce à PHPMyAdmin. Notre client est, quant à lui, une machine virtuelle Backtrack qui tourne sur VMware en mode bridged pour qu'elle ait sa propre adresse IP. IV. Développement 1. Développement du site web Commençons par créer un mini site web qui nous permettra d'exploiter les différentes failles de sécurité et par la suite de les corriger.
  5. 5. Sécurisation des sites web |SECURILIGHT 2013 4 Ce site comporte les pages suivantes:  La page inscription.php qui permet à internaute de créer un compte.  La page connexion.php qui permet à un membre de se connecter.
  6. 6. Sécurisation des sites web |SECURILIGHT 2013 5  La page espace-membre.php qui permet à un membre de voir son profil  La page ajoutPhoto.php qui permet à un membre d'uploader une image.  La page photpAjoute.php qui permet de visualiser l'image ajoutée.
  7. 7. Sécurisation des sites web |SECURILIGHT 2013 6 2. Sécurisation du site web Maintenant que notre site est près, nous pouvons tester dessus les différentes failles de sécurité et les sécuriser par la suite. a. Injection SQL Qu'est ce que l'injection SQL? Cette faille apparaît quand il est possible d'injecter du code SQL dans les requêtes qui sont faites dans une page web. C'est actuellement la "meilleure" vulnérabilité Web en rapport fréquence/surface d'exploitation. Les conséquences d'une faille SQL peuvent être multiples, du contournement de formulaires d'authentification au dump complet de la base de données en passant par l'exécution arbitraire de code. Comment l'exploiter? Sur le site que nous avons développé, pour se connecter, on remplie le formulaire avec les informations login et mot de passe. La page utilise ces informations pour envoyer la requête mysql_query("SELECT bdd_id FROM membres WHERE bdd_login='$login' AND bdd_mdp='$mdp'") sachant que $login et $mdp sont respectivement l'identifiant et le mot de passe. Un hacker peut saisir les valeurs suivantes: $login = nimporte_quoi $mdp = ' OR '1' = '1 la requete devient mysql_query("SELECT bdd_id FROM membres WHERE bdd_login='nimporte_quoi' AND bdd_mdp='' OR '1' = '1'") Vu que 1 = 1 est toujours vrai, l'utilisateur va être connecté en utilisant les infirmations du premier membre récupéré de la base de données. Ce type de faille est en général facile à reconnaître, puisque si l'on injecte un simple guillemet dans le formulaire, une erreur interviendra (pour peu que les rapports d'erreurs soient activés, ce qui est le cas par défaut ; sinon il est tout de même possible en général d'observer des différences de comportement comme l'apparition d'une page vide). Comment s'en protéger? Une simple quotte « ' » peut couper la requête pour ensuite la modifier comme on le souhaite. Le problème vient du fait que l'on n'a pas protéger ce caractère. En effet, pour pouvoir utiliser des (antislash) ou des ' (simples quottes) dans une chaine de caractères, on a besoin de rajouter un « » devant autrement dit il faut échapper ce caractère pour ne pas le prendre en compte. Avec PHP, il y a une multitude de fonctions permettant d'échapper ce genre de caractères (strreplace, stripslashes ...) mais pour une meilleure pratique on utilise la fonction prévue exprès pour ça et qui est mysql_real_escape_string() dans le cas d'une utilisation d'une base de données MySql. Par exemple pour sécuriser les variable $login et $mpd utilisé dans la requête précédente on devra faire: $login = mysql_real_escape_string($login);
  8. 8. Sécurisation des sites web |SECURILIGHT 2013 7 $mdp = mysql_real_escape_string($mdp); b. Faille XSS Qu'est ce que la faille XSS? La faille XSS (cross-site scripting) est une technique qui consiste à injecter du code HTML contenant du JavaScript dans vos pages pour le faire exécuter à vos visiteurs. Comment l'exploiter? Si on appelle la page inscription.php de cette façon: http://localhost/site_non_securise/connexion.php?erreur=<B>SecuriNet<%2FB> Sachant que "%2F" remplace "/", on verra que le mot SecuriNets s'est affiché en gras. Le site est donc vulnérable. On peut aussi déclencher une alerte avec <script>alert('SecuriNets');</script> Mettons, par exemple, ce script dans l'un des champs de la page d'inscription de notre site et faisons notre inscription. A chaque fois qu'on se connecte avec ce nouveau compte, une boite de dialogue, affichant SecuriNets, s'ouvre. Certains pensent alors à supprimer <script> en faisant: $texte = str_replace("<script>", "",$texte); Mais ceci ne sert à rien si on lui passe: <scr<script>ipt>alert("SecuriNets")</scr<script>ipt> De plus, il n'y a pas que la balise script qui permet de lancer des scripts JavaScript, on trouve, par exemple, le BBCode Image: <img src="javascript:alert(' SecuriNets ')"/>
  9. 9. Sécurisation des sites web |SECURILIGHT 2013 8 On peut aussi utiliser onmouseover, onload, ... sur n'importe quelle balise; comme on peut très bien encoder le texte. Les choses deviennent vraiment critiques si le visiteur est assez malin pour récupérer vos cookies de cette façon-là. Les cookies stockent des informations sur votre session et parfois des informations plus confidentielles, comme votre pseudonyme et votre mot de passe sur le site ! Il est possible de forcer le visiteur qui lira le code JavaScript à envoyer tous les cookies qu'il a enregistrés pour votre site web, ce qui peut conduire au vol de son compte sur ce site. Comment s'en protéger? Pour échapper le code HTML, il suffit d'utiliser la fonction htmlspecialchars() qui va transformer les chevrons des balises HTML <> en &lt; et &gt; respectivement. Cela provoquera l'affichage de la balise plutôt que son exécution. $login=htmlspecialchars (trim($_POST['login'])); Il faut penser à utiliser cette fonction sur tous les textes envoyés par l'utilisateur qui sont susceptibles d'être affichés sur une page web. Si vous préférez retirer les balises HTML que le visiteur a tenté d'envoyer plutôt que de les afficher, il faut utiliser la fonction strip_tags(). c. Faille Include Qu'est ce que la faille Include? La fonction include permet, comme son nom l’indique, d’inclure une page dans une autre , on l’utilise comme ceci: <?php include("page.php"); ?> Si toutes vos pages requièrent la page config.php dans laquelle sont contenues les informations de connexion a la base de données, il convient de l’inclure dans chacune de vos pages plutôt que de retaper l’équivalent de mysql.php dans toutes celle-ci. La fonction include vous permet de n’avoir qu’une seule page config.php, et toutes les pages de votre site l’incluront. Comment l'exploiter? Supposons que nous avons la page index.php suivante: <?php if (isset($_GET["page"])) include($_GET["page"]); else include ('connexion.php'); ?>
  10. 10. Sécurisation des sites web |SECURILIGHT 2013 9 Ce code permet d'afficher la page passée en paramètre ou bien la page par défaut qui est connexion.php. Si on tape http://localhost/site_non_securise/index.php?page=inscription.php la page inscription s'affiche . Si on tape http://localhost/site_non_securise/index.php?page=http://www.google.com alors la page Google s'exécutera et s'affichera sur notre serveur. Maintenant, si cette page en question est une backdoor comme c99.php on peut alors lister tous les fichiers, les éditer, en créer, accéder à la base de données, etc... Il est aussi possible, avec cette faille, d’exécuter un fichier se trouvant sur le serveur vulnérable. Et d’ailleurs, c’est parfois la seule possibilité, car certaines protections désactivent la possibilité d’inclure du code situé sur un autre serveur. Comment s'en protéger? La meilleure façon pour corriger une Include est de :  Faire un test pour chaque pages de votre site, certes c’est long mais il n’y a pas mieux. switch ($page) { case "inscription": include("inscription.php"); break; case "connexion": include("connexion.php"); break; case "espace-membre": include("espace-membre.php"); break; default: include ("connexion.php"); }  En php4, mettre la commande allow_url_fopen à off. Cette dernier permet la lecture de fichiers situés sur un autre serveur;  En php5, mettre la commande allow_url_include à off. C’est un apport par rapport à php4, qui distingue les fichiers lus des fichiers inclus.
  11. 11. Sécurisation des sites web |SECURILIGHT 2013 10 d. Faille Upload Qu'est ce que la faille Upload? L’upload permet le transfert des fichiers depuis votre machine qui est le client vers le site qui est le serveur, mais souvent les scripts d’upload contiennent des vulnérabilités. La faille upload est une faille permettant d’uploader des fichiers avec une extension non autorisée, cette faille est due à la mauvaise configuration du script d’upload ou à l’absence complète de sécurité. Celle ci est généralement présente dans les scripts d’upload d’images. Le but de cette faille est d’uploader un fichier avec une extension non autorisée. (Par exemple un code php) de façon à avoir un accès au serveur cible. Comment exploiter cette faille? Il y 'a 3 manières pour exploiter cette faille:  La plus simple: Le serveur ne vérifie rien du tous lors de l'upload. Lorsqu'on doit choisir une image à uploader, on choisit simplement notre fichier page.php et on envoie.  La double extension: Certains scripts ne font que vérifier l’extension du fichier, encore cette protection peut être bypasser en faisant une double extension par exemple ma_page.php.gif.  Bypass mime vérification: Le type MIME, c’est le renseignement donné par $_FILES['monFichier']['type'] Certains scripts ne font que vérifier si le mime correspond aux types de fichiers autorisés par contre une vérification de mime n’est pas suffisante parce qu’on peut bypasser cette vérification en utilisant par exemple le module Tamper Data de Firefox. Prenons notre page d'upload qui n'accepte que des fichiers de type GIF, JPEG, JPG ou PNG grace à la vérification du content_type du fichier comme suit: if (($_FILES["file"]["type"] == "image/gif") || ($_FILES["file"]["type"] == "image/jpeg")|| ($_FILES["file"]["type"] == "image/jpg") || ($_FILES["file"]["type"] == "image/pjpeg")|| ($_FILES["file"]["type"] == "image/x-png") || ($_FILES["file"]["type"] == "image/png")) { //traitement }
  12. 12. Sécurisation des sites web |SECURILIGHT 2013 11 Activons Tamper Data comme suit: On démarre l'altération en cliquant sur Start Tamper. Ensuite, on sélectionne le fichier php qu'on veut uploder et on clique sur Upload. Une nouvelle fenêtre s'ouvre, on clique sur Tamper.
  13. 13. Sécurisation des sites web |SECURILIGHT 2013 12 Une autre fenêtre s'ouvre et dans cette dernière il faut modifier, dans POST_DATA, le content type qui est "Application/x-php" par "image/png" Et voila notre fichier est uploadé.
  14. 14. Sécurisation des sites web |SECURILIGHT 2013 13 On peut maintenant y accéder. Comme ce fichier contient un code pour afficher le contenu du dossier courant, on aura: Comment s'en protéger? Pour sécuriser un site contre cette faille on pourrait, en plus de la vérification du content_type, rajouter:  La vérification de l'extension: On ajoute dans notre page upload.php un tableau contenant les extensions permises et on vérifie si l'extension de notre fichier y appartient comme suit: $allowedExts = array("gif", "jpeg", "jpg", "png"); $temp = explode(".", $_FILES["file"]["name"]); $extension = end($temp); if (in_array($extension, $allowedExts)){ //traitement }  La vérification de la taille du fichier qui ne doit pas dépasser une certaine limite: if($_FILES["file"]["size"] < 1000000){ //traitement }  Le renommage des fichiers uploadés avant de les enregistrer e. Les CAPTCHA Les sites web sont visités et utilisés non seulement par des êtres humains, mais aussi par des machines, des ordinateurs. On appelle ces programmes qui parcourent sans cesse le web des robots (on dit aussi bot). Certains bots ont de bonnes intentions, comme par exemple les robots d'indexation des moteurs de recherche (appelés crawler) comme Googlebot (Google), ou Slurp (Yahoo !). Mais d'autres bots ont des objectifs beaucoup moins louables, leur but est par exemple de s'inscrire sur des forums de discussion pour poster des messages publicitaires (spam), ou de poster des commentaires de spam sur un blog.
  15. 15. Sécurisation des sites web |SECURILIGHT 2013 14 L'une des solutions, pour lutter contre ces robots, consiste à soumettre l'utilisateur à un test auquel seul un être humain est sensé être capable de répondre (on appelle ça un test de Turing). En effet, on ajoute, tout simplement, un champ anti-spam appelé Captcha dans un formulaire HTML qu'on souhaite protéger contre les robots. f. Le fichier .htaccess Un .htaccess est un fichier qui sert à indiquer des commandes pour le serveur, c'est un fichier de configuration pour Apache. Il permet, par exemple, de protéger certains répertoires avec des mots de passe, de restreindre l'accès à une page Web, d'empêcher le listage des répertoires (quand ils ne contiennent pas de fichier index.html), ou encore d'utiliser vos propres pages d'erreur (404, 403).. Un .htaccess placé dans un répertoire agit sur ce répertoire et tous les sous-répertoires qu'il contient. Personnaliser les pages d'erreur: Il peut être utile de personnaliser les pages d'erreur 404 (File Not Found), 403 (Forbidden), 500 (Internal Server Error)..., par exemple pour demander à l'internaute de signaler les liens cassés, ou pour lui proposer de faire une recherche sur le site. Dans se cas on mettra dans le fichier .htaccess : ErrorDocument numero_d'_erreur /chemin/du/fichier.html Par exemple, on veut personnaliser la page d'erreur 403, on crée la page 403.html dans le répertoire erreurs puis, on ajoute cette ligne au fichier .htaccess: ErrorDocument 403 /erreurs/403.html Restrictions d'accès: On peut interdire l'accès a notre site à partir de certaines adresses IP.
  16. 16. Sécurisation des sites web |SECURILIGHT 2013 15 Pour interdire une adresse IP : deny from 192.168.1.1 Inversement, on peut autoriser une adresse IP : allow from 192.168.1.2 on peut aussi utiliser allow from all et deny from all. Interdire de lister le contenu d'un dossier: On peut interdire le listage du contenu d'un dossier en ajoutant cette ligne dans le fichier .htaccess: Options -Indexes V. Conclusion Au cours de cet atelier, nous avons pu comprendre le fonctionnement d'un certain nombre d'attaques et nous avons essayé de les corriger pour sécuriser tant soit peu notre site web. Mais il faut être très vigilent car ce ne sont pas les seules problèmes qu'un site peut rencontrer.

×