Actions malveillantes impactant la sécurité des systèmes informatiques

Contexte et problématique

Aujourd’hui, les systèmes informatiques occupent une place prédominante dans les entreprises, dans les administrations et dans le quotidien des particuliers. Ce phénomène a été catalysé, entre autres, par l’essor de l’Internet qui séduit chaque jour de plus en plus d’internautes par les nombreux avantages et la diversité des services rendus accessibles. Ils peuvent ainsi bénéficier à moindre coût de moyens de communication rapides, partager des ressources de traitement et de stockage de grandes capacités (Cloud Computing), faciliter les échanges commerciaux et financiers (e-Commerce, e-Banking), fournir et utiliser de nombreux services en ligne (e-Administration, e-Health, e-Learning, etc.), participer à des communautés virtuelles et à des réseaux sociaux, se divertir (e-Gaming, e-Television, etc.) et, plus généralement, partager et accéder à l’information [Deswarte et Gambs 12]. Notre dépendance croissante aux systèmes informatiques dans divers aspects de la vie quotidienne et leur omniprésence soulèvent inévitablement des questions quant à leur sécurité et à la sécurité des informations qui leurs sont confiées. En dépit des efforts conséquents qui ont été investis depuis un certain nombre d’années pour tenter d’endiguer les problèmes de sécurité, force est de constater que le nombre de vulnérabilités dans les systèmes informatiques et, de surcroît, les activités malveillantes qui essaient et qui réussissent à les exploiter, continuent régulièrement à se multiplier. Les données statistiques fournies par Kaspersky Lab [Namestnikov 12], spécialisé dans la sécurité des systèmes d’information, tendent à confirmer ce phénomène. Notamment, il dénombrait pas moins de 946 393 693 attaques réussies au travers de l’Internet en 2011 contre seulement 580 371 937 en 2010, représentant ainsi une progression d’environ 39%. Cet échec est justifié, en partie, par la complexité toujours croissante des systèmes informatiques actuels. En effet, pour réduire les coûts de développement, ces systèmes utilisent de plus en plus de composants sur étagère (ou COTS pour Commercial Off-The-Shelf), même pour des applications plus ou moins critiques. Ces composants peuvent être des matériels (microprocesseurs, chipsets  , périphériques, etc.), des programmes de base (systèmes d’exploitation, outils de développement ou de configuration, etc.), des programmes génériques (systèmes de gestion de base de données, serveurs Web, etc.) ou dédiés à des fonctions plus spécifiques (pare-feux, détection d’intrusions, supervision, etc.). Les composants génériques, de par la multiplicité de leurs utilisations possibles, sont souvent beaucoup plus complexes que ce qui est vraiment utile pour un système particulier. Cette complexité les fragilise vis-à-vis de la sécurité. En effet, il est pratiquement impossible de les vérifier parfaitement, c’est à-dire de garantir, d’une part, l’absence de bogues et, d’autre part, l’absence de fonctions cachées. Par conséquent, des attaquants (ou pirates informatiques) peuvent profiter de cette situation pour réussir à pénétrer dans ces systèmes et utiliser les ressources matérielles et logicielles qui y sont associées.

Les attaquants font aujourd’hui de plus en plus preuve d’ingéniosité pour attaquer les systèmes informatiques : les malveillances peuvent cibler les programmes qui s’exécutent sur le système mais également le système d’exploitation lui-même et en particulier, son noyau. Corrompre le noyau d’un système d’exploitation est particulièrement intéressant du point de vue d’un attaquant car cela signifie corrompre potentiellement tous les programmes qui s’exécutent au-dessus de ce noyau, voire prendre complètement le contrôle du système. À cet effet, il dispose de divers vecteurs d’attaque. La plupart des scénarios d’attaque s’appuient sur des vecteurs d’attaque liés au logiciel s’exécutant sur le processeur principal : un attaquant peut, par exemple, utiliser des fonctionnalités trop permissives du système (le chargeur de modules noyau, les périphériques virtuels, etc.) ou exploiter des erreurs d’implémentations logicielles (les débordements de tampons ou d’entiers, les chaînes de format, etc.). Cette classe d’attaques est relativement bien connue à ce jour, et de nombreux mécanismes (les piles nonexécutables, la distribution aléatoire de l’espace d’adressage, la technique du canari, etc.) permettent de s’en protéger. Depuis quelques années, nous constatons que les scénarios d’attaque évoluent et deviennent chaque jour plus complexes. En effet, certaines attaques ne reposent plus exclusivement sur l’utilisation de composants logiciels, et nous observons de plus en plus d’attaques impliquant des composants matériels, tels que le chipset, les contrôleurs d’entréessorties (un contrôleur Ethernet, un contrôleur de clavier, etc.) ou les périphériques (un iPod avec une connectique FireWire, une souris USB, etc.). Celles-ci détournent des fonctionnalités légitimes du matériel, tels que les mécanismes entrées-sorties (accès direct à la mémoire, interruption, etc.) à différentes fins malveillantes (escalade de privilèges, fuite d’informations, déni de service, etc.).

Actions malveillantes impactant la sécurité des systèmes informatiques

Les enjeux de la sécurité des systèmes informatiques sont primordiaux, étant donné les pertes humaines, économiques et financières importantes que peut engendrer la compromission de ces systèmes. Comprendre et caractériser les attaques informatiques nous paraît alors essentiel afin d’en déduire un modèle sur lequel il soit possible de s’appuyer, d’une part, pour étudier ces attaques et éventuellement en identifier d’autres qui sont encore inconnues, et d’autre part, pour concevoir puis mettre en place des mécanismes visant à protéger le système contre ces attaques. Les travaux décrits dans ce manuscrit se concentrent plus particulièrement sur ce premier objectif.

Sécurité des systèmes informatiques

Avant de préciser la notion de sécurité des systèmes informatiques, il convient de définir au préalable ce que nous entendons par le terme système. Nous précisons ensuite la terminologie et les concepts fondamentaux liés à la sûreté de fonctionnement dans laquelle s’inscrit plus particulièrement la sécurité des systèmes. Finalement, nous rappelons la définition de la sécurité des systèmes informatiques telle qu’elle a été initialement décrite dans les Information Technology Security Evaluation Criteria [ITSEC 91] puis, par la suite, reprise dans les Critères Communs [Common Criteria 12], c’est-à-dire la sécurité comme la combinaison de trois propriétés : la confidentialité, l’intégrité et la disponibilité de l’information.

Concepts et terminologie des systèmes

Un système est une entité qui interagit avec d’autres entités, donc d’autres systèmes, y compris le matériel, le logiciel, les humains et le monde physique avec ses phénomènes naturels. Ces autres systèmes constituent l’environnement du système considéré. La frontière du système est la limite commune entre le système et son environnement. La fonction d’un système est ce à quoi il est destiné. Elle est décrite par la spécification fonctionnelle. Le comportement d’un système est ce que le système fait pour accomplir sa fonction et est décrit par une séquence d’états. L’ensemble des états de traitement, de communication, de mémorisation, d’interconnexion et des conditions physiques constituent son état total. La structure d’un système est ce qui lui permet de générer son comportement. D’un point de vue structurel, un système est constitué d’un ensemble de composants interconnectés en vue d’interagir. Un composant est un autre système, etc. La décomposition s’arrête lorsqu’un système est considéré comme étant un système atomique : aucune décomposition ultérieure n’est envisagée ou n’est envisageable, soit par nature, soit parce que dénuée d’intérêt. Le service délivré par un système, dans son rôle de fournisseur, est son comportement tel que perçu par ses utilisateurs ; un utilisateur est un autre système qui reçoit un service du fournisseur. Un système peut être, séquentiellement ou simultanément, fournisseur et utilisateur d’un autre système, c’est-à-dire délivrer un service à cet autre système et en recevoir. La partie de la frontière du système où ont lieu les interactions avec ses utilisateurs est l’interface de service. La partie de l’état total du fournisseur qui est perceptible à l’interface de service est son état externe; le reste est son état interne. Il est à noter qu’un système accomplit généralement plusieurs fonctions et délivre plusieurs services. Les concepts de fonction et de service peuvent donc être vus comme constitués de fonctions élémentaires et de services élémentaires.

Sûreté de fonctionnement 

La sûreté de fonctionnement fournit un cadre conceptuel intéressant pour situer la sécurité par rapport à d’autres propriétés des systèmes informatiques. En effet, depuis de nombreuses années, les spécialistes de la sûreté de fonctionnement ont développé une terminologie et des méthodes dont l’application à la sécurité peut être enrichissante. Nous rappelons, dans cette sous-section, les définitions et les concepts de base de la sûreté de fonctionnement directement adaptés de [Laprie et al. 96] et de [Laprie 04]. La sûreté de fonctionnement d’un système est la propriété qui permet à ses utilisateurs de placer une confiance justifiée dans le service que le système leur délivre [Avižienis et al. 04, Laprie 04]. Cette propriété englobe trois notions différentes (cf. figure 1.1) : ses attributs, les propriétés complémentaires qui la caractérisent ; ses entraves, les circonstances indésirables – mais noninattendues– qui sont causes ou résultats de la non-sûreté de fonctionnement ; ses moyens, les méthodes et techniques qui cherchent à rendre un système capable d’accomplir correctement sa fonction et à donner confiance dans cette aptitude.

Attributs de la sûreté de fonctionnement

Les attributs de la sûreté de fonctionnement sont définis par diverses propriétés dont l’importance relative dépend de l’application et de l’environnement auxquels est destiné le système informatique considéré :

— par rapport à la capacité du système à être prêt à délivrer le service, la sûreté de fonctionnement est perçue comme la disponibilité (en anglais, availability),
— par rapport à la continuité de service, la sûreté de fonctionnement est perçue comme la fiabilité (en anglais, reliability),
— par rapport à l’évitement de conséquences catastrophiques sur l’environnement, la sûreté de fonctionnement est perçue comme la sécurité-innocuité (en anglais, safety),
— par rapport à la préservation de la confidentialité, de l’intégrité et de la disponibilité des informations, la sûreté de fonctionnement est perçue comme la sécurité immunité (en anglais, security).

Entraves à la sûreté de fonctionnement

Un service correct est délivré par un système lorsqu’il accomplit sa fonction. Une défaillance du service, souvent simplement dénommée défaillance, est un événement qui survient lorsque le service dévie de l’accomplissement de la fonction du système. Le service délivré étant une séquence d’états externes, une défaillance du service signifie qu’au moins un état externe dévie du service correct. La partie de l’état du système qui dévie du fonctionnement correct, autrement dit qui est anormale ou incorrecte, est une erreur; une faute est la cause adjugée ou supposée d’une erreur, et peut être interne ou externe au système. La relation de causalité entre fautes, erreurs et défaillances peut être exprimée comme suit. Une faute activée produit une erreur qui peut se propager dans un composant ou d’un composant à un autre, et est susceptible de provoquer une défaillance. La défaillance d’un composant cause une faute permanente ou temporaire interne pour le système qui le contient, tandis que la défaillance d’un système cause une faute permanente ou temporaire externe pour les systèmes avec lesquels il interagit. Ce processus de propagation est illustré sur la figure 1.2. Deux principales classes de fautes sont à considérer dès lors que nous nous intéressons aux fautes malveillantes : les logiques malignes et les intrusions. Nous reprenons les définitions de ces termes telles qu’elles ont été introduites dans le projet MAFTIA (Malicious- and AccidentalFault Tolerance for Internet Applications) [Adelsbach et al. 03]. Les logiques malignes sont des parties du système conçues pour provoquer des dégâts (les bombes logiques, les virus, etc.) ou pour faciliter des intrusions futures au travers de vulnérabilités créées volontairement telles que les portes dérobées. Les logiques malignes peuvent être introduites dès la création du système par un concepteur malveillant, ou en phase opérationnelle par l’installation d’un composant logiciel ou matériel contenant un cheval de Troie ou par une intrusion. La définition d’une intrusion est étroitement liée aux notions d’attaque et de vulnérabilité. Une attaque est une faute d’interaction malveillante visant à violer une ou plusieurs propriétés de sécurité. C’est une faute externe créée avec l’intention de nuire. Une vulnérabilité est une faute accidentelle ou intentionnelle (avec ou sans volonté de nuire) dans la spécification des besoins, la spécification fonctionnelle, la conception ou la configuration du système, ou dans la façon selon laquelle il est utilisé. La vulnérabilité peut être exploitée pour créer une intrusion. Une intrusion est une faute malveillante interne, mais d’origine externe, résultant d’une attaque qui a réussi à exploiter une vulnérabilité. Elle est susceptible de produire des erreurs pouvant provoquer une défaillance vis-à-vis de la sécurité, c’est-à-dire une violation de la politique de sécurité du système.

Le rapport de stage ou le pfe est un document d’analyse, de synthèse et d’évaluation de votre apprentissage, c’est pour cela chatpfe.com propose le téléchargement des modèles complet de projet de fin d’étude, rapport de stage, mémoire, pfe, thèse, pour connaître la méthodologie à avoir et savoir comment construire les parties d’un projet de fin d’étude.

Table des matières

Introduction générale
1 Contexte et problématique
2 Présentation de nos travaux
Chapitre 1 Actions malveillantes impactant la sécurité des systèmes informatiques
1.1 Sécurité des systèmes informatiques
1.1.1 Concepts et terminologie des systèmes
1.1.2 Sûreté de fonctionnement
1.1.3 Sécurité des systèmes informatiques
1.2 Classification des attaques sur les systèmes informatiques
1.2.1 Attaques agissant au niveau des systèmes logiciels
1.2.2 Attaques agissant au niveau des systèmes matériels
1.2.3 Attaques agissant au niveau des canaux de communication
1.2.4 Attaques agissant au niveau des canaux auxiliaires
1.3 Méthodes et techniques pour l’élimination des fautes
1.3.1 Analyse statique
1.3.2 Preuve mathématique
1.3.3 Analyse de comportement
1.3.4 Exécution symbolique
1.3.5 Test
1.4 Conclusion
Chapitre 2 Élaboration d’un modèle d’attaques
2.1 Infrastructure matérielle d’un système informatique
2.1.1 Architectures de communication
2.1.2 Composants matériels
2.2 Modèle d’attaques basé sur les interactions entre les composants
2.2.1 Modèle des actions élémentaires et des attaques élémentaires
2.2.2 Séquences d’actions et d’attaques élémentaires
2.2.3 Application à un modèle de système informatique
2.3 Illustration du modèle par plusieurs exemples réels d’attaque
2.3.1 Usurpation d’identité de périphériques USB
2.3.2 Modification d’une ROM flashable d’extension PCI
2.3.3 Modification de la routine de traitement de la SMI
2.4 Limites du modèle d’attaques
2.5 Conclusion
Chapitre 3 Mise en œuvre d’attaques par entrées-sorties sur une architecture PC
3.1 Aperçu de l’architecture Intel-PC
3.1.1 Infrastructure matérielle
3.1.2 Espaces d’adressage
3.1.3 Modes d’entrée-sortie
3.2 Contrôle des accès directs à la mémoire centrale
3.2.1 Attaques par accès direct à la mémoire
3.2.2 Quelques contre-mesures spécifiques
3.2.3 Contre-mesure générique : une I/O MMU
3.2.4 Attaques par partage d’identifiants
3.2.5 Contre-mesures complémentaires
3.3 Contrôle des accès pair-à-pair
3.3.1 Attaques par accès pair-à-pair
3.3.2 Mise en œuvre sur plusieurs chipsets récents
3.3.3 Contre-mesures envisageables
3.4 Conclusion
Chapitre 4 Application des techniques de fuzzing sur les bus d’entrées-sorties
4.1 IronHide : outil d’injection de fautes sur les bus d’entrées-sorties
4.1.1 Introduction aux bus PCI Express
4.1.2 Contrôleur d’entrées-sorties IronHide
4.2 Éléments de fuzzing
4.2.1 Principes du fuzzing
4.2.2 Phases du fuzzing
4.2.3 Méthodes de fuzzing
4.3 Mise en œuvre du fuzzing sur les bus d’entrées-sorties
4.3.1 Architecture du fuzzer
4.3.2 Expérimentations et résultats
4.4 Conclusion
Conclusion générale

Lire le rapport complet

Télécharger aussi :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *