Securité web

681 vues

Publié le

Support de conférence du 7 février 2013 à Supinfo Nantes

Publié dans : Technologie
1 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à aimer ceci

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

Aucune remarque pour cette diapositive

Securité web

  1. 1. Securité WebLes failles les pluscourantes
  2. 2. Quelques questions• Quelles menaces pour la sécurité de monsite et des données de mes utilisateurs ?• Comment les pirates arrivent-ils àexploiter ces failles ?• Que faire pour y remédier ?• Quelques bonne pratiques à adopter ?
  3. 3. Sommaire1. Faille XSS2. Injection SQL3. Attaque des mots de passe par brute force4. Faille include5. Quelques bonnes pratiques
  4. 4. Faille XSS
  5. 5. 1.Faille XSS• Le Cross Site Scripting (XSS) permetl’injection de code malveillant côté client• Souvent des codes Javascript, Java ouFlasha. Qu’est ce que c’est ?
  6. 6. b. Comment ça marche ?• Souvent, le code va s’exécuter sur les pages desvisiteurs du site• Le script de l’attaquant va avoir accès au DOM• Il peut faire n’importe quel action à l’insu del’utilisateur1.Faille XSS
  7. 7. • Exemple :1.Faille XSSb. Comment ça marche ?
  8. 8. Exemple :1.Faille XSSb. Comment ça marche ?
  9. 9. Maintenant, tentons de comprendre ce qui c’est passé !Le pirate à entrer le code suivant dans le commentaire :1.Faille XSSb. Comment ça marche ?Ce même code a été ensuite affiché sur la page html oron se rend bien compte que c’est du code qui a étéaffiché dans le navigateur. Le navigateur a donc exécutéce qui était dans entre les balise script normalement etaffiché le message voulu par le pirate.
  10. 10. c. Quel est le danger ?• Vols d’informations• Utilisation d’un site piraté pour faire circuler un virus(virus Samy sur MySpace en 2005)• Phishing• Défacement• Redirection vers un autre site (pouvant servir à volerdes informations par la même occasion)1.Faille XSS
  11. 11. d. Comment l’éviter ?Pour l’éviter deux possibilités :• Faire des filtres• Remplacer certains caractères html par leur entitéhtml correspondante1.Faille XSS
  12. 12. On pourrait faire une fonction qui filtre la balise <script>.La fonction ci-dessous va enlever tout les « script ».1.Faille XSSd. Comment l’éviter ?
  13. 13. Problèmes :• Ce filtre est facilement contournable. En effet, au lieude mettre <script></script> mettons<scscript></scrscriptipt> et lorsque le filtre enleverales « script » il restera <script></script>• Si on veut mettre le mot script dans un message ilsera effacer du message.1.Faille XSSd. Comment l’éviter ?
  14. 14. d. Comment l’éviter ?La fonction htmlspecialchars()1.Faille XSSLa fonction htmlspecialchars permet de remplacercertains caractère html par leur entité correspondante :• & devient &amp;• " devient &quot;• "" devient '• <‘ devient &lt;• >‘ devient &gt;
  15. 15. d. Comment l’éviter ?La fonction htmlentities()1.Faille XSSLa fonction htmlentities a exactement la même utilité que lafonction htmlspecialchars sauf qu’elle remplace tout les caractèreshtml existant par leur entité correspondante. Elle est donc pluscomplète.
  16. 16. d. Comment l’éviter ?La fonction strip_tags()1.Faille XSSLa fonction strip_tags() va supprimer tout les balises html, php
  17. 17. Démonstration
  18. 18. Questions
  19. 19. Injection sql
  20. 20. 2. Injection sqlL’injection sql permet, comme son noml’indique d’injecter une requête sql à l’insudu développeura. Qu’est ce que c’est ?
  21. 21. 2. Injection sqlb. Comment ça marche ?• Souvent, le code malveillant va être insérédans des données transmis par formulaire etpar des données dans les urls• Le code de l’attaquant va pouvoir faire desrequêtes à la base ou en fausser leur sortie• Au préalable il pourra avoir soigneusementexploité le manque de sécurisation pourconnaître le nom d’une ou de plusieurs tablede la base.
  22. 22. 2. Injection sqlb. Comment ça marche ?Exemple :
  23. 23. 2. Injection sqlb. Comment ça marche ?Exemple :
  24. 24. 2. Injection sqlb. Comment ça marche ?Dans l’exemple précédent nous avons pris le cas d’une connexionclassique. Pour bien comprendre ce qui c’est passé il est bon de voirquel type de requête est utilisé pour la connexion.Maintenant remplaçons les variables par les données rentrée pasl’utilisateur, la requête devient alors :Or le # signifie le début d’un commentaire en sql d’où la requête revientdonc a :La requête retourne toujours un resultat tant que le nom d’utilisateur‘admin’ existe dans la base
  25. 25. 2. Injection sqlc. Quel est le danger ?• Vols d’informations• Changement des informations de la base• Délétion de données
  26. 26. 2. Injection sqld. Comment l’éviter ?Pour l’éviter deux possibilités :• Échapper les caractères• Préparer les requêtes
  27. 27. 2. Injection sqld. Comment l’éviter ?La fonction addslashes() :La fonction addslashes() permet de rajouter un antislash devant les ‘, ", /,byte NULL
  28. 28. 2. Injection sqld. Comment l’éviter ?La fonction MySQLi:mysqli_real_escape_string() :La fonction mysqli_real_escape_string() permet de rajouter un antislashdevant les ‘, ", /, byte NULL, n, r
  29. 29. Attention !La fonction mysql_real_escape_string()sera devenu obsolète pour la version5.5.0 de PHP et sera supprimée dans lesfutures version de PHP.
  30. 30. 2. Injection sqld. Comment l’éviter ?La fonction PDO:quote() :La fonction PDO:quote() permet de rajouter un antislash devant tout lescaractères spéciaux définis par le pilote ainsi qu’un « ’ » de chaque côté de lavaleur de la variable,
  31. 31. 2. Injection sqld. Comment l’éviter ?Préparer ses requêtes :La préparation des requêtes permet également de protéger nos requêtes.Néanmoins, il ne suffit pas juste de faire une requête préparé pour que noterequête soit protégé. En effet, le code suivant ne permet absolument pas deprotéger notre requête.
  32. 32. 2. Injection sqld. Comment l’éviter ?Préparer ses requêtes :Voici deux façons de faire qui permettent de protéger les requêtes contre lesinjections.En préparant juste :
  33. 33. 2. Injection sqld. Comment l’éviter ?Préparer ses requêtes :En passant les paramètres par la fonction PDOStatement:bindValue() (conseillé):
  34. 34. 2. Injection sqld. Comment l’éviter ?Mais surtout bien vérifier les données :Le plus important pour éviter de subir des injections est de vérifier lesdonnées rentrées. Cela comprend, de :• vérifier le type de la données (de le transtyper si besoin est)• Vérifier la longueur des données• Si le choix des données est restreint vérifier que les données sont lafourchettes de solutions
  35. 35. Démonstration
  36. 36. Questions
  37. 37. Attaque par brute force
  38. 38. 3. Brute forcea. Qu’est ce que c’est ?Le principe d’une attaque par brute force des mots depasse est de tendre à une recherche exhaustive des motsde passe possible rentrer par l’utilisateur.Plusieurs variantes existent une recherche exhaustive enessayant tout les combinaisons de caractères possibles oualors une autre variante consiste à se servir d’undictionnaire pour rechercher les mots probables rentréspar l’utilisateur.
  39. 39. 3. Brute forceb. Comment ça marche ?Première variante, la recherche exhaustive descombinaisons de caractères possibles :L’attaquant, qui a au préalable récupéré le pseudo d’un membre, teste tout lescombinaisons de caractères possibles pouvant être rentrée en mot de passe. Aubout d’un moment le mot de passe rentrée est bon et l’attaquant à accès aucompte.
  40. 40. 3. Brute forceb. Comment ça marche ?Deuxième variante, l’attaque par dictionnaire :L’attaquant, qui a au préalable récupéré le pseudo d’un membre, teste tout lesmots probables du dictionnaire d’une langue.
  41. 41. 3. Brute forceb. Comment ça marche ?Façon de faire :Pour exécuter ces attaques il est évident que cela doit être un script qui doitexécuter les requêtes dans un but de rapidité. Ce script va donc envoyer desrequêtes avec le même pseudo et différents mot de passe, puis, pourrepérer l’échec d’authentification, va comparer le code source de la pagelors de l’échec d’authentification et le code source de la page renvoyé pourchaque mot de passe. Lorsque le code source n’est pas le même alors, c’estqui n’y a pas d’erreur et donc que vous avez l’attaquant est connecté aucompte.
  42. 42. 3. Brute forcec. Quel est le danger ?Le danger, c’est tout simplement le contrôle d’un compte (ou plusieurs sil’attaquant attaque plusieurs compte), le vol d’informations, modificationdes informations de l’utilisateurs, …., toute les actions que peut faire unutilisateurs. Il est également possible d’avoir plus d’accès dans le cas ducontrôle d’un administrateur qui pourrait avoir accès au compte ftp.
  43. 43. 3. Brute forced. Comment l’éviter ?Première méthode, la limitation d’essaies :Une première méthode consiste à limiter le nombre d’essaies de mots de passerentrée par l’utilisateur.
  44. 44. 3. Brute forced. Comment l’éviter ?Deuxième méthode, le captcha :Une deuxième méthode consiste à mettre un captcha pour s’identifier. Le scriptne pourra donc pas déchiffrer le captcha et ne pourra jamais être authentifié.
  45. 45. 3. Brute forced. Comment l’éviter ?Augmenter la sécurité des mots de passe :Vous pouvez demander aux utilisateurs d’avoir un mot de passecomportant un certains nombre de caractères (au moins 6) avec deslettres, des chiffres, des caractères spéciaux et ne formant pas un mot.Ce n’est pas une mesure de sécurité absolu mais elle peut au moinsendurcir la découverte des mots de passe par l’attaquant.
  46. 46. Questions
  47. 47. Faille include
  48. 48. 4. Faille includea. Qu’est ce que c’est ?• L’exploitation d’une faille include permet d’accéder à n’importequel page sur le serveur et plus selon les configurations de votreenvironnement PHP.• Souvent le nom du fichier est demandé dans une url
  49. 49. 4. Faille includeb. Comment ça marche ?Nous allons travailler sur un cas classique de recherche où l’objet dela recherche est une page web inclue par un include. En voici le scriptque l’attaquant ne connait pas bien sûr.Néanmoins, il est facile de le repérer à l’url :
  50. 50. 4. Faille includeb. Comment ça marche ?L’attaquant va donc remplacer « example1.php » par le fichier qu’ilveut voir. Prenons par exemple le fichier .htaccess. L’url rentrée parl’attaquant va donc devenir :Le script va donc inclure le fichier .htaccess et dans la suite logique deschoses la page affiche le contenu de mon fichier .htaccess :
  51. 51. 4. Faille includec. Quel est le danger ?Comme danger on pourrait citer celui d’avoir accès pour l’attaquant à des fichierssensible tel que le .htaccess, .htpasswd et celui de pouvoir inclure et/ou exécuterdes fichiers sensibles (un script pouvant afficher la liste des mails des utilisateurspar exemple).
  52. 52. 4. Faille included. Comment l’éviter ?Voilons, comme première solutions le fait d’obliger une extension particulièrecomme par exemple les .html. Cela évitera, en toute logique, d’inclure les fichiers.htaccess, .htpasswd et tout les scripts php.Le code du début deviendra donc le suivant :
  53. 53. 4. Faille included. Comment l’éviter ?Si nous répétons l’attaque donnée en démonstration, voici donc ce qui va sepasser :Néanmoins cette technique n’est pas une protection absolu dans le cas où l’onpeut aisément inclure un autre fichier de celui demandé.
  54. 54. 4. Faille included. Comment l’éviter ?Ou alors vous pouvez tout simplement vérifier le fichier à inclure. Pour ce fairevous pouvez dresser une liste des fichiers qui peuvent être inclues soit avec untableau soit avec des entrée dans une table de la base de données.Exemple de script pouvant exercé ce contrôle :
  55. 55. Démonstration
  56. 56. Questions
  57. 57. Quelques bonnes pratiques
  58. 58. 5. Quelques bonnes pratiquesa. Eviter de montrer nos erreursFonction error_reporting() :Cette fonction permet d’empécher que dans le cas d’uneéventuel erreurs, celle-ci soit afficher au mieux à l’utilisateuret au pire au pirate pour révéler des informations précieusestel que le nom de variables, le nom de table sql, nom derépertoire, de fichier, ….
  59. 59. 5. Quelques bonnes pratiquesa. Eviter de montrer nos erreursFonction set_error_handler() :Cette fonction permet de gérer vos erreur. Vous pouvez donc,en cas d’erreur, enregistrer ces erreurs dans une base dedonnées afin d’en prendre connaissance et faire uneredirection vers une page d’erreur, évitant ainsi que l’erreursoit visible par le pirate.
  60. 60. 5. Quelques bonnes pratiquesa. Eviter de montrer nos erreursLe « @ » anti-erreurs :Le placement d’un @ devant les fonctions natives php vouspermette d’empêcher le déclenchement d’une erreur.
  61. 61. Questions

×