2012 03-01-ror security v01

1 001 vues

Publié le

Une introduction a la sécurité de ruby on rails.
Présentation faite au Confoo 2012

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

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

Aucune remarque pour cette diapositive

2012 03-01-ror security v01

  1. 1. The OWASP Foundation http://www.owasp.org Ruby on Rails et la sécurité (une introduction) Sébastien Gioria OWASP France Leader OWASP Global Education Committee Confoo.ca 01 Mars 2012 - Montréal - CanadaSunday, March 4, 12
  2. 2. http://www.google.fr/#q=sebastien gioria ‣Responsable de la branche Audit S.I et Sécurité au sein du cabinet Groupe Y ‣OWASP France Leader & Founder - Evangéliste ‣OWASP Global Education Comittee Member (sebastien.gioria@owasp.org) ‣Responsable du Groupe Sécurité des Applications Web au CLUSIF Twitter :@SPoint CISA && ISO 27005 Risk Manager ‣ +13 ans d’expérience en Sécurité des Systèmes d’Information ‣ Différents postes de manager SSI dans la banque, l’assurance et les télécoms ‣ Expertise Technique - PenTesting, - Secure-SDLC - Gestion du risque, Architectures fonctionnelles, Audits - Consulting et Formation en Réseaux et Sécurité 2 2Sunday, March 4, 12
  3. 3. http://www.google.fr/#q=sebastien gioria ‣Responsable de la branche Audit S.I et Sécurité au sein du cabinet Groupe Y ‣OWASP France Leader & Founder - Evangéliste ‣OWASP Global Education Comittee Member (sebastien.gioria@owasp.org) ‣Responsable du Groupe Sécurité des Applications Web au CLUSIF Twitter :@SPoint CISA && ISO 27005 Risk Manager ‣ +13 ans d’expérience en Sécurité des Systèmes d’Information ‣ Différents postes de manager SSI dans la banque, l’assurance et les télécoms ‣ Expertise Technique - PenTesting, - Secure-SDLC - Gestion du risque, Architectures fonctionnelles, Audits - Consulting et Formation en Réseaux et Sécurité 2 2Sunday, March 4, 12
  4. 4. Agenda •Introduction •Injection •Sessions •XSS •CSRF •Fuite d’informations •Et ensuite... 3Sunday, March 4, 12
  5. 5. Etude Verizon 2010 © Verizon 2010 4Sunday, March 4, 12
  6. 6. Etude Verizon 2010 © Verizon 2010 4Sunday, March 4, 12
  7. 7. Etude Verizon 2010 © Verizon 2010 4Sunday, March 4, 12
  8. 8. Etude Verizon 2010 © Verizon 2010 4Sunday, March 4, 12
  9. 9. Etude Verizon 2010 © Verizon 2010 5Sunday, March 4, 12
  10. 10. Etude Verizon 2010 © Verizon 2010 5Sunday, March 4, 12
  11. 11. Etude Verizon 2010 © Verizon 2010 5Sunday, March 4, 12
  12. 12. Etude Verizon 2010 © Verizon 2010 5Sunday, March 4, 12
  13. 13. 22 © IBM X-Force 2009 - Extrait du rapport 2009Sunday, March 4, 12
  14. 14. 23 © IBM X-Force 2009 - Extrait du rapport 2009Sunday, March 4, 12
  15. 15. Exposition à une vulnérabilité 26Sunday, March 4, 12
  16. 16. Ce que dit le CIO : mais j’ai un Firewall !!! 27Sunday, March 4, 12
  17. 17. Ce que dit le Commercial : J’ai un certificat SSL 28Sunday, March 4, 12
  18. 18. Ce que dit le commercial : il faut être un expert pour hacker des sites Web • Les outils sont simples d’emploi • Cherchez juste sur Internet un outil nommé SQLInjector • L’attaque d’un serveur Web coute de 100$ à 200$ sur le marché souterrain • Les hackers “offrent” leur service directement sur Internet. 29Sunday, March 4, 12
  19. 19. Offres 12Sunday, March 4, 12
  20. 20. Ce que dit l’utilisateur : Une vulnérabilité n’est pas importante sur un site Web interne •Faut, vu que le web est partout, des attaques comme CSRF ainsi que l’arrivée de HTML5 et CORS sont destructrices. •Souvenez vous, et partagez cela : • AJAX fait des choses sans que vous le sachiez... 30 •Sachez et partagez ceci: • HTML5 introduit de bien belle facilités utilisateur, mais avec un impact important sur la sécurité (WebSocket, CORS, ...)Sunday, March 4, 12
  21. 21. The OWASP Foundation http://www.owasp.org Les risques !Sunday, March 4, 12
  22. 22. ‘OR 1==1 --’ 15Sunday, March 4, 12
  23. 23. ‘OR 1==1 --’ L’injection SQL fait beaucoup parler d’elle. Mais il existe d’autres formes d’injections : •XML •XPath •LDAP •ORB(Hibernate) •... 15Sunday, March 4, 12
  24. 24. ‘OR 1==1 --’ L’injection SQL fait beaucoup parler d’elle. Mais il existe d’autres formes d’injections : •XML •XPath •LDAP •ORB(Hibernate) •... 15Sunday, March 4, 12
  25. 25. ‘OR 1==1 --’ L’injection SQL fait beaucoup parler d’elle. Mais il existe d’autres formes d’injections : •XML •XPath •LDAP •ORB(Hibernate) •... A1  -­‐  Injec*on 15Sunday, March 4, 12
  26. 26. ‘OR 1==1 --’ L’injection SQL fait beaucoup parler d’elle. Mais il existe d’autres formes d’injections : •XML •XPath •LDAP •ORB(Hibernate) •... A1  -­‐  Injec*on 15Sunday, March 4, 12
  27. 27. Injec-on  de  données  -­‐  Exemple  de  code  vulnérable  SQL  Soit le code Suivant Project.find(:all, :conditions => "name = #{params[:name]}") 16Sunday, March 4, 12
  28. 28. Injec-on  de  données  -­‐  Exemple  de  code  vulnérable  SQL  Soit le code Suivant Project.find(:all, :conditions => "name = #{params[:name]}")  Imaginons un accès normal : 16Sunday, March 4, 12
  29. 29. Injec-on  de  données  -­‐  Exemple  de  code  vulnérable  SQL  Soit le code Suivant Project.find(:all, :conditions => "name = #{params[:name]}")  Imaginons un accès normal : http://www.example.com/Project.rb?name=me 16Sunday, March 4, 12
  30. 30. Injec-on  de  données  -­‐  Exemple  de  code  vulnérable  SQL  Soit le code Suivant Project.find(:all, :conditions => "name = #{params[:name]}")  Imaginons un accès normal : http://www.example.com/Project.rb?name=me SELECT * FROM Project WHERE name= ‘me’ 16Sunday, March 4, 12
  31. 31. Injec-on  de  données  -­‐  Exemple  de  code  vulnérable  SQL  Soit le code Suivant Project.find(:all, :conditions => "name = #{params[:name]}")  Imaginons un accès normal : http://www.example.com/Project.rb?name=me SELECT * FROM Project WHERE name= ‘me’  Imaginons un accès différent : 16Sunday, March 4, 12
  32. 32. Injec-on  de  données  -­‐  Exemple  de  code  vulnérable  SQL  Soit le code Suivant Project.find(:all, :conditions => "name = #{params[:name]}")  Imaginons un accès normal : http://www.example.com/Project.rb?name=me SELECT * FROM Project WHERE name= ‘me’  Imaginons un accès différent : http://www.example.com/Project.rb?name=me ‘ or ‘1’=’1 16Sunday, March 4, 12
  33. 33. Injec-on  de  données  -­‐  Exemple  de  code  vulnérable  SQL  Soit le code Suivant Project.find(:all, :conditions => "name = #{params[:name]}")  Imaginons un accès normal : http://www.example.com/Project.rb?name=me SELECT * FROM Project WHERE name= ‘me’  Imaginons un accès différent : http://www.example.com/Project.rb?name=me ‘ or ‘1’=’1 SELECT * FROM Project WHERE name = ‘me’ or ‘1’=’1’ 16Sunday, March 4, 12
  34. 34. Injec-on  de  données  -­‐  Exemple  de  code  vulnérable  SQL  Soit le code Suivant Project.find(:all, :conditions => "name = #{params[:name]}")  Imaginons un accès normal : http://www.example.com/Project.rb?name=me SELECT * FROM Project WHERE name= ‘me’  Imaginons un accès différent : http://www.example.com/Project.rb?name=me ‘ or ‘1’=’1 SELECT * FROM Project WHERE name = ‘me’ or ‘1’=’1’  Voir un accès très différent : 16Sunday, March 4, 12
  35. 35. Injec-on  de  données  -­‐  Exemple  de  code  vulnérable  SQL  Soit le code Suivant Project.find(:all, :conditions => "name = #{params[:name]}")  Imaginons un accès normal : http://www.example.com/Project.rb?name=me SELECT * FROM Project WHERE name= ‘me’  Imaginons un accès différent : http://www.example.com/Project.rb?name=me ‘ or ‘1’=’1 SELECT * FROM Project WHERE name = ‘me’ or ‘1’=’1’  Voir un accès très différent : http://www.example.com/Project.rb?name=me; DELETE FROM PROJECTS; SELECT * from projects where 1=1 16Sunday, March 4, 12
  36. 36. Injec-on  de  données  -­‐  Exemple  de  code  vulnérable  SQL  Soit le code Suivant Project.find(:all, :conditions => "name = #{params[:name]}")  Imaginons un accès normal : http://www.example.com/Project.rb?name=me SELECT * FROM Project WHERE name= ‘me’  Imaginons un accès différent : http://www.example.com/Project.rb?name=me ‘ or ‘1’=’1 SELECT * FROM Project WHERE name = ‘me’ or ‘1’=’1’  Voir un accès très différent : http://www.example.com/Project.rb?name=me; DELETE FROM PROJECTS; SELECT * from projects where 1=1 SELECT * FROM projects WHERE name = ; DELETE FROM PROJECTS; SELECT * from projects where 1=1 16Sunday, March 4, 12
  37. 37. Injection - Prévention ★Valider les données ★Utiliser les mécanismes des requêtes paramétrées quand ils sont disponibles ★Minimiser les privilèges de connexion aux bases ★Minimiser les privilèges des utilisateurs de base 17Sunday, March 4, 12
  38. 38. Injection - Prévention 1.Via une validation d’entrée propre 2.Via les requêtes paramétréesSunday, March 4, 12
  39. 39. 19Sunday, March 4, 12
  40. 40. 19Sunday, March 4, 12
  41. 41. 19Sunday, March 4, 12
  42. 42. 19Sunday, March 4, 12
  43. 43. http://codebutler.github.com/firesheep/ 19Sunday, March 4, 12
  44. 44. 20Sunday, March 4, 12
  45. 45. 20Sunday, March 4, 12
  46. 46. mabanque.com 20Sunday, March 4, 12
  47. 47. mabanque.com 20Sunday, March 4, 12
  48. 48. mabanque.com login.rb 20Sunday, March 4, 12
  49. 49. mabanque.com login.rb Requete 20Sunday, March 4, 12
  50. 50. mabanque.com login.rb Requete 20Sunday, March 4, 12
  51. 51. mabanque.com login.rb Requete Réponse Set-Cookie : SESSIONID=4242 20Sunday, March 4, 12
  52. 52. mabanque.com login.rb Requete Réponse Set-Cookie : SESSIONID=4242 mabanque.com 20Sunday, March 4, 12
  53. 53. mabanque.com login.rb Requete Réponse Set-Cookie : SESSIONID=4242 Images mabanque.com 20Sunday, March 4, 12
  54. 54. mabanque.com login.rb Requete Réponse Set-Cookie : SESSIONID=4242 Images mabanque.com 20Sunday, March 4, 12
  55. 55. mabanque.com login.rb Requete Réponse Set-Cookie : SESSIONID=4242 Images mabanque.com Requete Cookie : SESSIONID=4242 20Sunday, March 4, 12
  56. 56. mabanque.com login.rb Requete Réponse Set-Cookie : SESSIONID=4242 Images mabanque.com Requete Cookie : SESSIONID=4242 Réponse Cookie : SESSIONID=4242 20Sunday, March 4, 12
  57. 57. mabanque.com login.rb Requete Réponse Set-Cookie : SESSIONID=4242 Images mabanque.com Requete Cookie : SESSIONID=4242 Réponse Cookie : SESSIONID=4242 20Sunday, March 4, 12
  58. 58. mabanque.com login.rb Requete Réponse Set-Cookie : SESSIONID=4242 Images mabanque.com Requete Cookie : SESSIONID=4242 Réponse Cookie : SESSIONID=4242 20Sunday, March 4, 12
  59. 59. 21Sunday, March 4, 12
  60. 60. Les développeurs peuvent être tentés de créer leur propre gestionnaire de sessions et dauthentification, mais il sagit dune tâche complexe. Il en résulte souvent des implémentations contenant des faiblesses de sécurité dans des fonctions telles que: la déconnexion, la gestion des profils, etc. La diversité des implémentations rend la recherche de vulnérabilités complexe. 21Sunday, March 4, 12
  61. 61. Les développeurs peuvent être tentés de créer leur propre gestionnaire de sessions et dauthentification, mais il sagit dune tâche complexe. Il en résulte souvent des implémentations contenant des faiblesses de sécurité dans des fonctions telles que: la déconnexion, la gestion des profils, etc. La diversité des implémentations rend la recherche de vulnérabilités complexe. 21Sunday, March 4, 12
  62. 62. Les développeurs peuvent être tentés de créer leur propre gestionnaire de sessions et dauthentification, mais il sagit dune tâche complexe. Il en résulte souvent des implémentations contenant des faiblesses de sécurité dans des fonctions telles que: la déconnexion, la gestion des profils, etc. La diversité des implémentations rend la recherche de vulnérabilités complexe. A3  -­‐  Mauvaise   ges*on  des   sessions et de l’authentification 21Sunday, March 4, 12
  63. 63. Les développeurs peuvent être tentés de créer leur propre gestionnaire de sessions et dauthentification, mais il sagit dune tâche complexe. Il en résulte souvent des implémentations contenant des faiblesses de sécurité dans des fonctions telles que: la déconnexion, la gestion des profils, etc. La diversité des implémentations rend la recherche de vulnérabilités complexe. A3  -­‐  Mauvaise   ges*on  des   sessions et de l’authentification 21Sunday, March 4, 12
  64. 64. Session en Rails ★HTTP est un protocole sans état ★Ne pas réécrire son mécanisme ! ★ Par défaut les cookies de session sont utilisés avec une entropie suffisante. ★Protéger les ID lors du transfert • Utiliser SSL • Utiliser des cookies « secure » • Utiliser des limitations de path ★Prévoir une seconde autorisation pour les transferts « sensibles » 22Sunday, March 4, 12
  65. 65. Sessions en Rails ★Exemple de cookie propre : 23Sunday, March 4, 12
  66. 66. The OWASP Foundation http://www.owasp.org Démo XSSSunday, March 4, 12
  67. 67. A vous ? Se connecter à : •http://88.191.152.70:8080/ePoney-0.0.1- SNAPSHOT/pages/readReviews •Choisir “Jack Daniels System” et Show Reviews •Attendre 2mns30 :) 25Sunday, March 4, 12
  68. 68. XSS 26Sunday, March 4, 12
  69. 69. XSS Le Cross Site Scripting est souvent mal considéré. Sa puissance peut aller jusqu’a la prise de contrôle sur le poste client... 26Sunday, March 4, 12
  70. 70. XSS Le Cross Site Scripting est souvent mal considéré. Sa puissance peut aller jusqu’a la prise de contrôle sur le poste client... 26Sunday, March 4, 12
  71. 71. XSS Le Cross Site Scripting est souvent mal considéré. Sa puissance peut aller jusqu’a la prise de contrôle sur le poste client... A2  -­‐  Cross  Site   Scrip*ng  (XSS) 26Sunday, March 4, 12
  72. 72. XSS Le Cross Site Scripting est souvent mal considéré. Sa puissance peut aller jusqu’a la prise de contrôle sur le poste client... A2  -­‐  Cross  Site   Scrip*ng  (XSS) 26Sunday, March 4, 12
  73. 73. XSS - Prevention ★Valider les données en entrée ★Encoder les données de sortie ★ N’accepter que les données attendues. Eviter le cas ‘default’. ★ Nettoyer les données en entrée comme en sortie. ★ N’utiliser que des données fortement typées. Eviter les ‘cast’ implicites ou explicites. ★ Attention aux « clients », qui ne sont pas propres. 27Sunday, March 4, 12
  74. 74. ★Utilisation des échappements HTML (non suffisant) ★Utilisation des sanitizer HTML (mieux, mais non suffisant) ★Utilisation de OWASP ESAPI (beta) http://rubydoc.info/gems/owasp-esapi-ruby 28Sunday, March 4, 12
  75. 75. The OWASP Foundation http://www.owasp.org Démo CSRFSunday, March 4, 12
  76. 76. CSRF 30Sunday, March 4, 12
  77. 77. CSRF L’attaquant forge une requête HTTP et amène une victime à la soumettre via une balise d’image, XSS, ou de nombreuses autres techniques. Si l’utilisateur est authentifié , l’attaque est un succès. 30Sunday, March 4, 12
  78. 78. CSRF L’attaquant forge une requête HTTP et amène une victime à la soumettre via une balise d’image, XSS, ou de nombreuses autres techniques. Si l’utilisateur est authentifié , l’attaque est un succès. 30Sunday, March 4, 12
  79. 79. CSRF L’attaquant forge une requête HTTP et amène une victime à la soumettre via une balise d’image, XSS, ou de nombreuses autres techniques. Si l’utilisateur est authentifié , l’attaque est un succès. A5  -­‐  Cross  site   Request  Forgery   (CSRF) 30Sunday, March 4, 12
  80. 80. CSRF L’attaquant forge une requête HTTP et amène une victime à la soumettre via une balise d’image, XSS, ou de nombreuses autres techniques. Si l’utilisateur est authentifié , l’attaque est un succès. A5  -­‐  Cross  site   Request  Forgery   (CSRF) 30Sunday, March 4, 12
  81. 81. CSRF le probleme ★Le problème • Les navigateurs Web incluent automatiquement la plupart des identifiants dans chaque requête. • Que cela soit des requêtes venant d’un formulaire, d’une image ou d’un autre site. • Tous les sites basés uniquement sur les identifiants automatiques sont vulnérables • Approximativement 100% des sites le sont… ★C’est quoi un identifiant automatique? • Cookie de session • Une entête d’authentification HTTP • Une adresse IP • Les certificats SSL client • L’authentification de domaine Windows. 31Sunday, March 4, 12
  82. 82. CSRF Prevention Ajouter un jeton, non envoyé automatiquement, a toutes les requêtes sensibles. • Cela rend impossible pour l’attaquant de soumettre une requête valide. • (sauf si en plus il y a une faille XSS) • Ces jetons doivent être surs cryptographiquement. Options • Stocker un seul jeton dans la session et l’ajouter a tous les formulaire et liens • Champ caché: <input name="token" value="687965fdfaew87agrde" type="hidden"/> • Utiliser un URL : /accounts/687965fdfaew87agrde • Utiliser un jeton de formulaire: /accounts?auth=687965fdfaew87agrde • … a ne pas exposer le jeton dans l’entete “referer” Attention • Utiliser de préférence un champ caché. • Utiliser un jeton unique par fonction • Il est recommandé d’ajouter un second niveau d’authentification pour une transaction sensible 32Sunday, March 4, 12
  83. 83. CSRF Prévention en Rails Par défaut le framework inclut le principe du jeton 33Sunday, March 4, 12
  84. 84. The OWASP Foundation http://www.owasp.org Fuite d’informationsSunday, March 4, 12
  85. 85. 35Sunday, March 4, 12
  86. 86. Une simple recherche google permettait d’avoir accès aux numéros de sécurité sociale des étudiants de Yale 35Sunday, March 4, 12
  87. 87. Une simple recherche google permettait d’avoir accès aux numéros de sécurité sociale des étudiants de Yale 35Sunday, March 4, 12
  88. 88. Une simple recherche google permettait d’avoir accès aux numéros de sécurité sociale des étudiants de Yale A6  -­‐  Mauvaise   configura*on   Sécurité 35Sunday, March 4, 12
  89. 89. Une simple recherche google permettait d’avoir accès aux numéros de sécurité sociale des étudiants de Yale A6  -­‐  Mauvaise   configura*on   Sécurité 35Sunday, March 4, 12
  90. 90. Prévention ★Garder les outils a jour : ➡Serveurs ➡Frameworks ★Supprimer tous les éléments par défaut (en particulier les répertoire SVN ?) ★Customiser les messages d’erreurs 36Sunday, March 4, 12
  91. 91. The OWASP Foundation http://www.owasp.org ConclusionSunday, March 4, 12
  92. 92. OWASP Top Ten 2010 A3:  Mauvaise  ges*on   A4:Référence  directe   A2:  Cross  Site   A1:  Injec*on des  sessions  et  de   non  sécurisée  à  un   Scrip*ng  (XSS) l’authen*fica*on objet A8:  Mauvaise   A5:  Cross  Site  Request   A6:  Mauvaise   A7:  Mauvais  stockage   restric*on  d’accès  à   Forgery  (CSRF)   configura*on  sécurité cryptographique une  URL A9:  Protec*on   A10:    Redirec*ons    et   insuffisante  lors  du   transferts  non  validés transport  des  données http://www.owasp.org/index.php/Top_10Sunday, March 4, 12
  93. 93. A lire Ressources OWASP • https://www.owasp.org/index.php/Top10 • https://www.owasp.org/index.php/ Project_Information:template_Ruby_on_Rail s_Security_Guide_V2 • https://www.owasp.org/index.php/Esapi ROR Security Project: • http://www.rorsecurity.info/ 39Sunday, March 4, 12
  94. 94. Contact @SPoint sebastien.gioria@owasp.org 40Sunday, March 4, 12

×