Sécurité logicielle
Transcription
Sécurité logicielle
Sécurité logicielle Jean-Marc Robert Génie logiciel et des TI Plan de la présentation Introduction Les vulnérabilités logicielles Développement de logiciels sécurisés Le cycle de développement logiciel Les bases de connaissance Le rôle des participants Conclusions Jean-Marc Robert, ETS Sécurité logicielle A08 2 Approche traditionnelle La sécurité informatique considère généralement la sécurisation du périmètre d’un réseau. Pare-feu Systèmes de détection ou de prévention d’intrusions Pots de miel … Réaction plutôt que prévention à la source! Jean-Marc Robert, ETS Sécurité logicielle A08 3 Approche préventive La sécurité logicielle a pour but de comprendre les risques de sécurité dus aux failles des logiciels, de proposer de bonnes pratiques de développement logiciel. Dans ce cadre, sécurité est synonyme à robustesse. Comment s’assurer qu’un logiciel utilisé dans un environnement hostile n’ait pas de faille de sécurité et réponde toujours selon les spécifications. Éliminons les failles à la source! Jean-Marc Robert, ETS Sécurité logicielle A08 4 Approche préventive La difficulté provient du fait que: La sécurité est une propriété pas une fonctionnalité! Jean-Marc Robert, ETS Sécurité logicielle A08 5 Sécurité logicielle: Pour y parvenir Microsoft’s Trustworthy Computing Initiative Mémo de Bill Gates en janvier 2002 présente la nouvelle approche de Microsoft de développer des logiciels sécurisés. Microsoft aurait dépensé plus de 300 millions USD. The Trusthworhty Computing Security Development Lifecycle. Publications de Gary McGraw – CTO de Cigital Sécurité = Robustesse du logiciel Jean-Marc Robert, ETS Sécurité logicielle A08 6 Cycle de développement du logiciel L’objectif est d’intégrer de bonnes pratiques simples tout au long du cycle de développement logiciel afin de produire des logiciels plus robustes donc plus sécurisés. Cette liste de bonnes pratiques est relativement courte. I. II. III. IV. V. VI. VII. Cas abusifs Spécifications de sécurité Analyse des risques Revue de code Plan de tests de sécurité Tests d’intrusions Sécurité opérationnelle Jean-Marc Robert, ETS Sécurité logicielle A08 7 Cycle de développement du logiciel •Analyse des risques •Cas abusifs •Spécifications de sécurité •Analyse des risques Spécification Cas d’usage Architecture •Tests sécurité basés sur les risques Plan de tests •Revue code (outils) Code •Analyse des risques •Tests intrusion Tests •Tests intrusion •Sécurité opérationnelle Déploiement Adapté de Software Security de McGraw Jean-Marc Robert, ETS Sécurité logicielle A08 8 I. Cas abusifs Entrée: Documents de spécification et de cas d’usage. Exemple de résultats Cas abusifs – scénarios d’utilisation malveillante. Pour atteindre l’objectif de cette phase, il peut être nécessaire de recourir à divers intervenants. Experts en sécurité Experts en fiabilité (reliability) Concepteurs du système Analystes fonctionnels Jean-Marc Robert, ETS Sécurité logicielle A08 9 I. Cas abusifs Comment? Répertorier les divers interfaces. Chercher les hypothèses faites au sujet des usagers. Les usagers ne peuvent faire … Les attaquant peuvent le faire! Les usagers ne feront pas … Les attaquant vont le faire! Définir ce que le logiciel ne doit pas faire. Lorsqu’un usager peut interagir avec le système, l’attaquant peut essayer d’abuser de cet interface. Aussi important que de définir ce que le logiciel doit faire. Utiliser des listes de modèles d’attaque. Jean-Marc Robert, ETS Sécurité logicielle A08 10 I. Cas abusifs – Exemple Conduire Inclus Barrer véhicule Inclus Voler véhicule Inclus Court-circuiter allumage Barrer la direction Cas d’utilisation Cas abusifs I. Alexander, Misuse cases: use cases with hostile intent. IEEE Software, janvier 2003. Jean-Marc Robert, ETS Sécurité logicielle A08 11 II. Spécifications de sécurité Entrée: Documents de spécification, de cas d’usage et de cas abusifs. Exemple de résultats Pas de description de comment préserver l’intégrité des actifs. Pas de description de comment préserver la confidentialité des actifs. Cette phase doit faire partie intégrante de la phase de spécification du système. Une erreur typique est de développer les spécifications indépendamment des spécifications du système. Jean-Marc Robert, ETS Sécurité logicielle A08 12 II. Spécifications de sécurité – SQUARE Security Quality Requirements Engineering Développé à CMU – Software Engineering Institute Neufs étapes Établir les définitions Identifier les objectifs de sécurité Développer les artéfacts (cas d’utilisation, cas abusifs, arbres d’attaque) pour définir les spécifications Effectuer une analyse des risques Choisir une méthode pour expliciter les spécifications Expliciter les spécifications Catégoriser les spécifications Prioriser les spécifications Revue des spécifications Jean-Marc Robert, ETS Sécurité logicielle A08 13 III. Analyse des risques Entrée: Documents de spécifications et d’architecture, de cas d’usage et de cas abusifs. Exemple de résultats Mauvais contrôle d’accès. Mauvaise protection de la confidentialité ou de l’intégrité des actifs. Aucune moyen d’assurer la disponibilité des actifs. L’objectif est d’identifier les erreurs de conception. Documenter les hypothèses. Identifier les attaques possibles. Établir une liste des attaques usuelles. Définir les objectifs de sécurité. Jean-Marc Robert, ETS Sécurité logicielle A08 14 III. Analyse des risques – Méthodologie Plusieurs méthodes existent. La méthode retenue par les auteurs de Software Security Engineering – A guide for project managers: NIST SP800-30 Risk management guide for information technology systems Cours no 5 Jean-Marc Robert, ETS Sécurité logicielle A08 15 IV. Revue de code Entrée: Code du logiciel. Exemple de résultats Débordement de tableaux Utilisation de fonctions à risque (p.e. strcat, strcpy) Cas d’erreur non traités Tests insuffisants … L’objectif est d’identifier les erreurs d’implémentation. Outils d’analyse statique (spécialement pour C et C++) Coverity, Fortify Software, Ounce Labs, Secure Software Revue de code humaine Jean-Marc Robert, ETS Sécurité logicielle A08 16 IV. Revue de code : à la recherche de … Common Weakness Enumeration – cwe.mitre.org Improper access of indexable resource Use of insufficiently random values Interaction error Insufficient control of resource through its lifetime Incorrect calculation Insufficient control flow management Protection mechanism failure Insufficient comparison Failure to handle exceptional conditions Use of incorrectly-resolved name or reference Failure to enforce that messages or data are well-formed Coding standards violation Cours no 2 enrichi Classification des vulnérabilités répertoriées par cve.mitre.org Jean-Marc Robert, ETS Sécurité logicielle A08 17 V. Plan de tests de sécurité Entrée: Modules et système Documents d’architecture et d’analyse des risques. Exemple de résultats Erreurs d’implémentation. Erreurs fonctionnelles. Deux aspects doivent être considérés. Tests fonctionnels de sécurité. Tester les fonctionnalités de sécurité comme toute autre fonctionnalité. Tests malveillants de sécurité Tester en se basant sur les attaques habituelles, l’analyse des risques et les cas abusifs. Tester comme une personne malveillante voulant exploiter une faille de sécurité. Toutefois, la personne effectuant les tests a plus d’information qu’un attaquant. Jean-Marc Robert, ETS Sécurité logicielle A08 18 V. Plan de tests de sécurité Objectif: S’assurer qu’un logiciel est robuste et peut continuer de fonctionner de façon acceptable malgré la présence d’attaques malveillantes. Comment? Les tests doivent débuter au niveau des composantes. Les tests doivent se poursuivre lors de l’intégration. Les risques contre les actifs doivent être atténués à ce niveau. Les risques dus aux interactions entre composantes doivent être tester. Par qui? Les responsables QA ont l’habitude d’effectuer des tests de fonctionnalité. Toutefois, ils n’ont pas l’expertise pour effectuer les tests malveillants. Ces tests reposent sur l’expertise et l’expérience en sécurité. Jean-Marc Robert, ETS Sécurité logicielle A08 19 V. Plan de tests de sécurité – Exemple Changement de paradigme: Au lieu de tester ce qu’un logiciel doit faire, il faut tester ce qu’il ne doit pas faire. Exemple: interface demandant d’entrer son identifiant Entre 5 et 32 caractères Caractères alphanumériques plus les caractères ‘-’ et ‘_’ Lettres non accentuées Le premier caractère doit être une lettre Le responsable de QA va tester tous les cas représentatifs respectant les spécifications. Mais il ne va pas tester les débordements de tableaux. 256 caractères! Jean-Marc Robert, ETS Sécurité logicielle A08 20 V. Plan de tests de sécurité Tests fonctionnels Tests classiques validant les fonctionnalités de sécurité. Exemples: Tests malveillants Tests spécifiques validant ce que le logiciel ne doit pas faire. L’accès est bloqué après trois tentatives d’accès invalides. L’information est échangée ou stockée de façon chiffrée. Lorsque qu’un événement X survient, le système réagit de la façon Y. Jean-Marc Robert, ETS Sécurité logicielle A08 Analyse des risques Vulnérabilités classiques Exemple: Tests de la forme: Tests basés: Vérifier l’existence des débordements de tableaux Basés sur l’expérience et une bonne connaissance des vulnérabilités. 21 VI. Tests d’intrusion Entrée: Système déployé dans un environnement d’utilisation. Documents d’architecture et d’analyse des risques. Exemple de résultats Problèmes de configuration (p.e. certificats X.509 absents) Services ouverts inutilement (p.e. interface de débogage) L’objectif est d’identifier les erreurs d’implémentation, de conception et de configuration. Cette étape est essentielle afin de déterminer les failles dues à la configuration et aux autres facteurs environnementaux. Sans analyse des risques, cette étape donne peu de résultats concluants. Un ethical hacker testant un système comme une boîte noire est très limité. Jean-Marc Robert, ETS Sécurité logicielle A08 22 VI. Tests d’intrusion – Pièges Les tests de pénétration sont faits généralement très (trop?) tard. Les erreurs découvertes par les outils ne sont pas priorisées en fonction des risques d’affaire. Il est possible qu’une erreur grave n’expose pas d’actif important. Les erreurs sont souvent corrigées individuellement sans chercher à corriger la cause commune. Les erreurs ne sont pas intégrées au système de gestion d’erreurs (bug tracking) Les erreurs sont généralement coûteuses à éliminer. Les tests de pénétration sont effectués par un équipe indépendante. La couverture des tests est difficile à évaluer. Jean-Marc Robert, ETS Sécurité logicielle A08 23 VI. Tests d’intrusion – Outils Logiciel gratuit nmap nessus nikto … Commercial Core Impact QualysGuard family IBM Internet Scanner HP WebInspect Watchfire Appscan Paros Proxy OWASP WebScarab … https://buildsecurityin.us-cert.gov/daisy/bsi/articles/tools/penetration/657-BSI.html Jean-Marc Robert, ETS Sécurité logicielle A08 24 VII. Sécurité opérationnelle Entrée: Système déployé dans un environnement opérationnel. Exemple de résultats Fichier d’audit ne contient pas suffisamment d’information. Gestion de mots de passe pas assez flexible. L’objectif est d’évaluer comment le système réagi lorsqu’il est déployé dans un milieu « hostile ». Identifier les failles dues aux erreurs d’implémentation ou de conception mais plus particulièrement celles dues aux « carences » ou « insuffisances » du système. Ces informations opérationnelles doivent être incluses dans le prochain cycle de développement du système afin de pallier aux failles découvertes. Jean-Marc Robert, ETS Sécurité logicielle A08 25 Sécurité logicielle ce n’est pas que … Une histoire de codage ou de convention! Une histoire de fonctionnalité! Il y a plus que les débordements de tableaux et d’entiers. Mots de passe, chiffrement, authentification, … Une histoire de listes de contrôle (check lists)! Jean-Marc Robert, ETS Sécurité logicielle A08 26 Bases de connaissance requises Connaissances normatives Principes de la sécurité Guides Règles Interdire l’utilisation des fonctions strcpy, sprintf, … (langage C) Connaissances descriptives Principe du moindre privilège, usage exclusif de clés, méthodes de contrôle d’accès,… Vulnérabilités Exploits Scénarios des attaques Connaissances historiques Base de données des risques et des vulnérabilités Jean-Marc Robert, ETS Sécurité logicielle A08 27 Le rôle de chacun Certaines des bases de connaissance sont traditionnellement du domaine des spécialistes des TI. Exploits Scénarios des attaques Connaissance historique des risques Certaines des activités sont traditionnellement du domaine des spécialistes logiciels. Définition des spécifications et cas abusifs. Tests des fonctionnalités. Revue de code. Jean-Marc Robert, ETS Sécurité logicielle A08 28 Spécialiste des TI •Analyse des risques •Cas abusifs •Spécifications de sécurité •Analyse des risques Spécification Cas d’utilisation Architecture •Tests sécurité basés sur les risques Plan de tests •Revue code (outils) Code •Analyse des risques •Tests intrusion Tests •Tests intrusion •Sécurité opérationnelle Déploiement Adapté de Software Security de McGraw Jean-Marc Robert, ETS Sécurité logicielle A08 29 Spécialiste de génie logiciel •Analyse des risques •Cas abusifs •Spécifications de sécurité Spécification Cas d’utilisation •Analyse de risque •Tests sécurité basés sur les risques Architecture Plan de tests •Revue code (outils) Code •Analyse des risques •Tests intrusion Tests •Tests intrusion •Sécurité opérationnelle Déploiement Adapté de Software Security de McGraw Jean-Marc Robert, ETS Sécurité logicielle A08 30 Conclusions La sécurité est une propriété d’un logiciel et non une fonctionnalité dudit logiciel. La sécurité doit faire partie intégrante du logiciel. Dès sa conception et au cours de chacune des phases subséquentes de son développement. Security is a process, not a product. Bruce Schneier, CTO de BT Counterpane Auteur de nombreux livres de sécurité. Jean-Marc Robert, ETS Sécurité logicielle A08 31 Références Les livres de Gary McGraw Le site Build Security In (http://buildsecurityin.us-cert.gov/) Best Practices Acquisition Architectural Risk Analysis Assembly, Integration, & Evolution Code Analysis Deployment & Operations Governance & Management Incident Management Legacy Systems Measurement Penetration Testing Project Management Requirements Engineering Risk Management Security Testing System Strategies Training & Awareness White Box Testing Outils Jean-Marc Robert, ETS Sécurité logicielle A08 32