Etude des attaques des malwares et proposition de solutions

Télécharger le fichier pdf d’un mémoire de fin d’études

Concepts et terminologie des systèmes [Laprie 04]

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 non-inattendues 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 Accidental-Fault 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.

Moyens pour la sûreté de fonctionnement

Le développement d’un système sûr de fonctionnement passe par l’utilisation combinée d’un ensemble de méthodes qui sont réparties en quatre classes de moyens :
— la prévention de fautes : comment empêcher, par construction, l’occurrence ou l’introduction de fautes ; elle est principalement obtenue par des méthodes de spécification et de développement relevant de l’ingénierie des systèmes ;
— la tolérance aux fautes : comment fournir un service à même de remplir la fonction du système en dépit des fautes ; elle est mise en œuvre par la détection d’erreurs et le rétablissement du système ;
— l’élimination des fautes : comment réduire le nombre et la sévérité des fautes ; elle peut être réalisée pendant la phase de développement d’un système par vérification, diagnostic et correction, ou pendant sa phase opérationnelle par maintenance ;
— la prévision des fautes : comment estimer la présence, la création et les conséquences des fautes ; elle est effectuée par évaluation du comportement du système par rapport à l’occurrence des fautes, à leur activation et à leurs conséquences.
Ces moyens sont interdépendants et peuvent être groupés de différentes façons. Ainsi, la prévention de fautes et l’élimination des fautes peuvent être groupées dans l’évitement des fautes, c’est-à-dire comment tendre vers un système exempt de fautes, alors que la tolérance aux fautes et la prévision des fautes peuvent être groupées dans l’acceptation des fautes, à savoir comment vivre avec un système comportant des fautes. Un autre groupement consiste à associer la prévention de fautes et la tolérance aux fautes pour constituer la fourniture de la sûreté de fonctionnement, et donc l’aptitude à délivrer un service de confiance ; l’élimination des fautes et la prévision des fautes sont alors groupées en l’analyse de la sûreté de fonctionnement, destinée à obtenir une confiance justifiée dans le service, donc à s’assurer que les spécifications fonctionnelles et de sûreté de fonctionnement sont adéquates et que le système les satisfait.

Sécurité des systèmes informatiques [Deswarte 03]

Nous nous intéressons à présent à la sécurité-immunité que nous appellerons simplement sécurité lorsqu’il n’y aura pas d’ambigüité avec la sécurité-innocuité. Plutôt que de définir la sécurité des systèmes informatiques vis-à-vis de leur seule capacité à résister à des agressions externes physiques (incendie, inondation, bombes, etc.) ou logiques (erreurs de saisie, intrusions, piratages, logiques malicieuses, etc.), nous préférons, à l’instar des Information Technology Security Evaluation Criteria [ITSEC 91] et des Critères Communs [Common Criteria 12], considérer la sécurité comme la combinaison de trois propriétés 4 : la confidentialité, l’intégrité et la disponibilité. Il convient cependant de préciser que ces deux points de vue sont complémentaires. En effet, la sûreté de fonctionnement considère la sécurité comme l’association des trois propriétés (confidentialité, intégrité et disponibilité) vis-à-vis des actions autorisées (c’est-à-dire des services) alors que ces trois propriétés se rapportent à l’information dans le cadre des ITSEC. Le terme d’information doit être pris ici dans son sens le plus large, couvrant non seulement les données et les programmes, mais aussi les flots d’information, les traitements et la connaissance de l’existence de données, de programmes, de traitements et de communications. Cette notion d’information doit aller jusqu’à couvrir le système informatique lui-même dont parfois l’existence doit être tenue secrète (confidentialité). Pour être plus précis, nous distinguerons données et métadonnées : les données correspondent à des informations identifiées et accessibles à un certain niveau d’abstraction, alors que les métadonnées correspondent à des informations indirectes reliées aux données ou aux services. Bien évidemment, une métadonnée à un certain niveau d’abstraction correspond à une donnée réelle à un niveau plus bas. À titre d’exemple, les identifiants internes (uid, gid, etc.) sont considérés comme des données ou comme des métadonnées selon que l’on se place au niveau du système d’exploitation (données) ou au niveau d’une application (métadonnées).

Confidentialité

La confidentialité est la propriété qu’une information ne soit pas révélée à des utilisateurs non autorisés à la connaître. Cela signifie que le système informatique doit empêcher les utilisateurs de lire une information confidentielle s’ils n’y sont pas autorisés, et empêcher les utilisateurs autorisés à lire une information de la divulguer à d’autres utilisateurs non autorisés. Cette seconde condition est souvent négligée car plus difficile à assurer.
Un incident survenu au Massachusetts Institute of Technology en 1965 illustre une atteinte typique contre la confidentialité. Lors de son discours pour le prix Alan Turing, F. J. Cor-bató [Corbató 91] raconta que cet incident a provoqué l’affichage de la liste de tous les utilisateurs et de leurs mots de passe en clair sur tous les terminaux du système à temps partagé du campus. Cette mésaventure était la conséquence d’une faute de conception et d’une erreur d’opérateur : le système était conçu pour n’avoir qu’un seul opérateur, et donc un seul tampon avait été mis à sa disposition pour mettre à jour des fichiers. Ce jour-là, deux opérateurs mettaient à jour en même temps deux fichiers, d’une part, le fichier de la liste des utilisateurs (contenant également leurs mots de passe en clair) pour y ajouter un nouvel utilisateur et, d’autre part, le fichier du message de bienvenue qui s’affiche sur les terminaux en début de session. Quand ce dernier fichier a été écrit, le tampon unique contenait la liste des utilisateurs qui a donc remplacé le message de bienvenue

Intégrité

L’intégrité est la propriété qu’une information ne soit pas altérée. Cela signifie que le système informatique doit empêcher une modification indue de l’information, c’est-à-dire une modification par des utilisateurs non autorisés ou une modification incorrecte par des utilisateurs autorisés, s’assurer qu’aucun utilisateur ne puisse empêcher la modification légitime de l’information, faire en sorte que l’information soit créée et, enfin, vérifier qu’elle est correcte. Il convient de préciser que le terme modification doit être entendu ici au sens large, comprenant à la fois la création d’une nouvelle information, la mise à jour d’une information existante, et la destruction d’une information. Un virus informatique [Cohen 86, Filiol 03] est un exemple intéressant d’atteinte contre l’intégrité car une infection par ce type de parasites informatiques implique nécessairement une perte d’intégrité dans le système. Un virus est un segment de programme qui, lorsqu’il s’exécute, se reproduit en s’adjoignant à un autre programme. L’analogie avec les virus biologiques tient à leur comportement : un virus biologique ne peut se reproduire par lui-même ; pour se reproduire, il modifie le code génétique des cellules qu’il infecte pour que les cellules ainsi modifiées produisent des copies du virus ; de la même façon, un virus informatique ne peut être activé (et donc se reproduire) que par l’exécution d’un programme porteur du virus. La propagation du virus constitue alors une attaque contre l’intégrité des programmes, l’exécution du virus pouvant, par ailleurs, avoir d’autres effets qui peuvent être des attaques contre la confidentialité, la disponibilité et l’intégrité des données.

Disponibilité

La disponibilité est la propriété qu’une information soit accessible lorsqu’un utilisateur autorisé en a besoin. Cela signifie que le système informatique doit fournir l’accès à l’information pour que les utilisateurs autorisés puissent la lire ou la modifier, et faire en sorte qu’aucun utilisateur ne puisse empêcher les utilisateurs autorisés d’accéder à l’information. Pour reprendre l’exemple de l’incident survenu au Massachusetts Institute of Technology, si, par hasard, l’inverse s’était passé, à savoir la copie du message de bienvenue dans le fichier de la liste des utilisateurs, plus personne n’aurait pu se connecter au système, et c’eût été une atteinte grave à la disponibilité. Il convient de noter que la disponibilité implique l’intégrité, puisqu’il ne servirait à rien de rendre accessible une information fausse. La disponibilité implique également des contraintes plus ou moins précises sur le temps de réponse du service fourni par le système informatique. Une atteinte contre la disponibilité est souvent appelée déni de service.

Autres facettes de la sécurité

La sécurité peut parfois représenter d’autres caractéristiques, telles que l’intimité (pour traduire le terme anglo-saxon privacy), l’authenticité, l’audibilité, la pérennité, l’exclusivité, etc. Ces propriétés de sécurité peuvent être exprimées par les propriétés de disponibilité, d’intégrité et de confidentialité appliquées à des données et à des métadonnées.
Les propriétés de sécurité que nous venons de rappeler s’appliquent à la notion générale de système. Dans la suite de ce manuscrit, nous appliquons ces propriétés aux systèmes informatiques que nous définissons comme suit. Un système informatique est la composition de deux systèmes, l’un matériel et l’autre logiciel, organisés dans le but de remplir une fonction ou une mission informatique dans un environnement donné. Un système informatique peut alors désigner un simple ordinateur, ou encore un réseau d’ordinateurs. Il est également possible de modéliser un réseau d’ordinateurs comme un système de systèmes informatiques. Les deux visions concordent avec notre définition, seule la granularité de la modélisation change. Aussi, pour plus de clarté, nous allons retenir cette seconde vision pour la suite de ce manuscrit et nous allons distinguer un ordinateur et un réseau d’ordinateurs.

Attaques agissant au niveau des systèmes logiciels

Les systèmes logiciels constituent un premier niveau d’abstraction à partir duquel un attaquant peut mettre en défaut la sécurité d’un système informatique. Dans ce contexte, le terme système logiciel doit être pris dans son sens le plus général. Il désigne tous types de logiciels dans un système informatique, couvrant aussi bien les programmes d’application, le système d’exploitation et son noyau, que les logiciels implantés (en anglais, firmware) dans les composants matériels. Une attaque, à ce niveau d’abstraction, repose alors soit sur l’utilisation d’une fonctionnalité logicielle légitime du système (éventuellement accessible grâce à une erreur dans la configuration logicielle), soit sur l’exploitation d’une fonctionnalité logicielle vulnérable à des fins malveillantes. La présente sous-section discute de ces deux vecteurs d’attaque.

Abus d’une fonctionnalité logicielle légitime

Ce vecteur d’attaque se fonde sur le fait que l’accès à plusieurs fonctionnalités logicielles légitimes, potentiellement dangereuses pour la sécurité du système informatique, ne sont pas suffisamment restreintes par la politique de sécurité mise en œuvre par le système d’exploitation. Ces fonctionnalités logicielles peuvent alors servir des objectifs malveillants et porter éventuellement atteinte à la sécurité de composants du système situés à d’autres niveaux d’abstraction. Cette partie présente succinctement quelques-unes d’entre elles. Bien que les exemples que nous énonçons concernent majoritairement les systèmes d’exploitation de type Unix, nous précisons que ces fonctionnalités logicielles (et donc, des vecteurs d’attaque similaires) existent dans d’autres types de systèmes d’exploitation (Windows, BSD, etc.).
Dans les systèmes d’exploitation de type Unix, l’appel système trace 6 fait partie des nombreuses fonctionnalités logicielles légitimes que les attaquants détournent pour perpétrer des attaques. Un programme peut, au travers de cet appel système, accéder (en lecture et en écriture) à l’intégralité de la mémoire (les registres du processeur inclus) d’un autre processus, c’est-à-dire un autre programme en cours d’exécution. Le fonctionnement de nombreux outils, tels que le débogueur gdb, les outils de trace de programmes strace et ltrace ainsi que plusieurs outils d’analyse structurelle de code reposent sur cet appel système. Malheureusement, il n’est pas nécessaire pour un attaquant d’acquérir des privilèges particuliers pour l’utiliser : les permissions requises sont identiques à celles nécessaires à l’envoi d’un signal à un autre processus. Il peut alors aisément mettre en œuvre cette technique contre un autre processus 7 et opérer des actions malveillantes diverses (injection de code, modification du contexte d’exécution, etc.). [Bareil 06] détaille, plusieurs exemples et codes-sources à l’appui, quelques-unes de ces actions malveillantes. D’autres fonctionnalités logicielles, inhérentes à l’éditeur de liens, peuvent également être détournées de leur utilisation légitime et impacter, par là-même, la sécurité d’autres programmes. Nous pensons, en particulier, au mécanisme de chargement de bibliothèques dynamiques de fonctions dont le comportement peut être modifié par la définition de variables d’environnement bien précises. Les variables d’environnement LD_LIBRARY_PATH et LD_PRELOAD précisent, par exemple, à l’éditeur de liens respectivement les emplacements du système où chercher les bibliothèques dynamiques de fonctions et celles qui doivent être chargées en priorité avant toutes les autres. Ces fonctionnalités logicielles sont particulièrement utiles lorsqu’il s’agit de développer et tester un système. Cependant, pour des raisons de sécurité évidentes, il est fortement recommandé de rendre ces fonctionnalités inopérantes dans tous les systèmes en production. Il suffirait alors pour un attaquant qu’une des bibliothèques dynamiques de fonctions chargées par ces variables d’environnement soit vulnérable ou qu’il puisse les modifier de façon à charger ses propres bibliothèques de fonctions pour porter atteinte à la sécurité du système informatique. Ces techniques d’attaques sont discutées dans le détail dans [halflife 97] et sont mises en œuvre dans le rootkit récent Jynx-Kit [ErrProne 12].
Le mécanisme de chargement de modules d’extension présent dans certains systèmes logiciels peut également être détourné à des fins d’attaques. Un module d’extension (en anglais, plug-in) désigne un composant logiciel qu’il est possible de charger dans un système logiciel de façon à étendre l’ensemble des services disponibles. Il s’adjoint alors à ce système en modifiant sa structure et son état au travers d’interfaces logicielles bien définies. Un attaquant peut alors complètement modifier le comportement du système logiciel dès lors que ces interfaces logicielles sont trop permissives. Un tel mécanisme est implémenté dans la majorité des noyaux de systèmes d’exploitation actuels afin de permettre le chargement de composants logiciels provenant de tiers tels que les pilotes de périphériques, les modules implémentant des fonctionnalités complémentaires, etc. Des personnes malintentionnées détournent naturellement cette fonctionnalité logicielle afin d’attaquer le noyau de système d’exploitation et, par là-même, l’ensemble des programmes qui en dépendent pour leur exécution. Dans les systèmes d’exploitation Linux, de nombreux rootkits, tels que [Creed 99, truff 03, TESO 04, styxˆ 12], s’insèrent par ce vecteur d’attaque. La majorité de ces maliciels reposent sur des techniques d’attaques publiées dans [Pragmatic et THC 99].
Une dernière fonctionnalité logicielle pouvant être détournée pour impacter la sécurité des systèmes matériels mérite d’être mentionnée. Les noyaux de système d’exploitation (pour être plus précis, les différents sous-systèmes logiciels qui pilotent chaque composant matériel) mettent souvent à disposition des programmes des interfaces logicielles de façon à faciliter les interactions entre les programmes et le matériel. Ces interfaces logicielles, que l’on nomme généralement des « périphériques virtuels » par abus de langage, permettent aux programmes de s’abstraire des spécificités de chaque composant matériel et réduisent d’autant la complexité de ces programmes. Les attaquants peuvent s’en servir comme d’un vecteur d’accès (en lecture, et parfois en écriture) au matériel. Les possibilités d’attaques dépendent alors des fonctionnalités implémentées dans ces périphériques virtuels. Dans les systèmes d’exploitation Linux, les périphériques virtuels /dev/kmem 8 et /dev/mem 9, lesquels offrent respectivement une abstraction de la mémoire virtuelle du noyau du système d’exploitation et de la mémoire physique, sont particulièrement usités par les maliciels. Les techniques d’attaques qui les mettent en œuvre sont discutées dans [Cesare 99, crazylord 02, Lineberry 09]. Heureusement, l’accès aux périphériques virtuels requiert des privilèges d’administrateur, tout comme le chargement de modules d’extension au sein du noyau de système d’exploitation. Cela limite fortement (mais n’empêche cependant pas) l’utilisation de ce vecteur d’attaque.

Attaques agissant au niveau des systèmes matériels

Les systèmes matériels constituent un second niveau d’abstraction à partir duquel il est possible de nuire à la sécurité d’un système informatique. Bien qu’il soit plus simple pour un attaquant de cibler directement les systèmes logiciels, nous observons qu’actuellement de plus en plus d’attaques s’appuient sur les systèmes matériels pour impacter indirectement le système logiciel. Nous discernons deux raisons principales à cela. La première est que le fonctionnement des systèmes logiciels repose sur les systèmes matériels. Ainsi, corrompre un système matériel signifie potentiellement corrompre tous les systèmes logiciels qui en dépendent pour leur exécution. Le fait que les systèmes matériels sont souvent soumis à des restrictions moins drastiques que les systèmes logiciels constituent une seconde raison. En effet, au niveau du matériel, il n’existe plus de notion de privilèges, d’isolation de processus, etc. Une attaque au niveau des systèmes matériels agit alors soit sur les fonctionnalités matérielles qui ont été implémentées en logique câblée, soit sur leur configuration matérielle. Une telle attaque peut être mise en œuvre de différentes façons, présentées dans les trois sous-sections suivantes.

Abus d’une fonctionnalité matérielle légitime

Les systèmes matériels, étant les supports d’exécution des systèmes logiciels, ont automatiquement accès aux ressources utilisées par ces derniers. À l’instar du mécanisme d’accès direct à la mémoire dans les contrôleurs d’entrées-sorties il est possible de détourner les fonctionnalités matérielles qui accèdent à ces ressources dans le but de perpétrer des attaques contre l’intégrité ou la confidentialité. Étant donné que ces accès sont autorisés et que leur mise en œuvre est relativement bien documentée dans les spécifications, il peut alors s’avérer difficile de distinguer un accès malveillant d’un accès légitime.
Un autre cas qu’il est important de considérer est celui des fonctionnalités matérielles non-documentées. Depuis de nombreuses années, on remarque, par exemple, que certaines instructions du processeur, qui ne semblent pas définies, ne provoquent pas d’exceptions matérielles lors de leur exécution [Collins 12b].
C’est le cas en particulier de l’opcode 0xd6 dans les processeurs Intel x86 qui, pendant longtemps a été considéré comme une instruction nop (une absence d’opération). En réalité, il correspondait à une opération qui consiste à mettre à 0 le registre AL du processeur lorsque le bit de retenue (en anglais, carry) du processeur est à 1 [Collins 12c]. Celui-ci n’a été documenté qu’à partir de la 6e génération de Pentium, soit à partir de l’année 2004. L’existence de ces fonctionnalités matérielles non-documentées est préoccupante et fait peser un risque important sur la sécurité du système. En effet, on voit sans peine l’avantage que pourrait obtenir un attaquant bien informé alors que les utilisateurs n’en soupçonnent même pas l’existence.

Exploitation d’une fonctionnalité matérielle vulnérable

De la même façon que les systèmes logiciels, les systèmes matériels peuvent contenir des fonctionnalités matérielles vulnérables. Toutefois, celles-ci sont moins courantes que les vulnérabilités logicielles et, dans la majorité des cas, ne sont pas exploitables. Pour se convaincre de l’existence de telles vulnérabilités matérielles, il suffit de remarquer que les principaux constructeurs de processeurs compatibles x86 publient, de façon régulière, les bogues matériels dans leurs composants. Ces bogues, pour lesquels une liste est disponible [Collins 12a], sont relativement nombreux et certains ne seront sans doute jamais corrigés. En particulier, le bogue matériel découvert dans les processeurs Pentium en décembre 1997 [Collins 97d] aurait pu être utilisé pour perpétrer des attaques contre la disponibilité. En effet, lorsqu’un processeur Pentium exécutait la séquence d’instructions lock cmpxchg8b eax (correspondant à la séquence d’octets 0xF00FC7C8), celui-ci se bloquait aussitôt. L’instruction cmpxchg8b eax n’étant pas valide, l’exécution de celle-ci déclenchait une exception matérielle. Cette instruction préfixée par l’instruction lock formait également une autre instruction invalide et provoquait aussi une exception matérielle. À cause d’une inversion de priorité dans le traitement de ces deux exceptions matérielles, le processeur entrait dans un état d’interblocage. Une personne malintentionnée pouvait profiter de ce bogue matériel pour provoquer des dénis de service simplement en exécutant un programme contenant cette séquence d’instructions. Il n’est pas clair que ce bogue matériel ait été corrigé sur les processeurs actuels. La plupart des systèmes d’exploitation masquent cependant ce problème par une configuration particulière du processeur. Il est intéressant de remarquer que tous les bogues matériels ne conduisent pas nécessairement à un déni de service. Dans certains cas, une escalade de privilèges [Wojtczuk et Rutkowska 11b, Gruskovnjak 12] est possible lorsque l’attaque est menée habilement.

Modification de la configuration matérielle

Le fonctionnement d’un système matériel repose en partie sur sa configuration matérielle. Un attaquant peut chercher à altérer la configuration d’un système matériel de façon à reconfigurer ou à désactiver certaines fonctionnalités matérielles. Par exemple, la plupart des systèmes d’exploitation actuels configurent les zones de la mémoire centrale correspondant à des données comme non-exécutables dans le but de rendre plus difficile l’exploitation des vulnérabilités logicielles. Pour faire en sorte que ces zones de données soient à nouveau exécutables, une attaque simple peut être envisagée. Elle consiste à positionner les attributs des pages contenant ces zones de données à une valeur appropriée. Ces attributs des pages configurent le contrôle d’accès effectué par l’unité de gestion mémoire (Memory Management Unit, ou MMU) dans le processeur. En occurrence, pour cet exemple précis, l’attribut NX (pour Never-eXecute) de chacune de ces pages doit être mis à zéro. Dans la majorité des cas, un attaquant va altérer la configuration matérielle de manière valide. Toutefois, il arrive parfois qu’un attaquant expérimente des modifications invalides de façon à perturber des fonctionnalités matérielles, à révéler des vulnérabilités matérielles [Rutkowska et Wojtczuk 08, Wojtczuk et Rutkowska 11b] ou à influer sur (voire exploiter) un système logiciel au moyen des valeurs contenues dans la configuration matérielle [Wojtczuk et al. 09]. Il peut être intéressant de positionner, par exemple, les champs réservés pour un usage futur, qui sont généralement mis à zéro, à des valeurs aléatoires.

Attaques agissant au niveau des canaux de communication

Les canaux de communication constituent un autre niveau d’abstraction à partir duquel un attaquant peut mettre en défaut la sécurité d’un système informatique. La notion de canal de communication désigne ici tout type de médium de transmission d’information dont le rôle est d’acheminer des messages entre des systèmes qui interagissent, et couvre aussi bien les canaux de communication physiques que les canaux de communication logiques (par exemple, les mémoires partagées, les fichiers partagés, etc.). Une attaque, à ce niveau d’abstraction, repose alors sur des vecteurs d’attaque liés aux messages échangés entre les systèmes logiciels ou matériels qui interagissent. Nous distinguons alors quatre vecteurs d’attaque possibles qui nécessitent pour l’attaquant un accès au canal de transmission : la destruction, la modification, la captation et l’insertion de messages, ces messages pouvant être soit cohérents, soit incohérents par rapport au protocole de communication. La suite de cette sous-section présente de façon succincte ces vecteurs d’attaque.
Les attaques qui exploitent les Trojans seront discutées en détail dans le chapitre 2.

Destruction de messages

Ce vecteur d’attaque est probablement le plus simple à mettre en œuvre. Il nécessite que l’attaquant obtienne un accès en émission sur le canal de communication. Une fois cet accès acquis, il peut chercher à détruire les messages échangés entre les systèmes qui interagissent et perturber ainsi les communications, voire provoquer une atteinte contre la disponibilité. Une manière simple (et efficace) pour atteindre cet objectif revient à ne pas respecter les règles d’accès au médium et de le parasiter en continu de façon à empêcher les systèmes de communiquer. Cette technique d’attaque s’apparente au brouillage (en anglais, jamming). Lorsque les messages échangés transitent par un composant sous le contrôle de l’attaquant (par exemple, une passerelle compromise), une autre façon de détruire les messages consiste à les bloquer au niveau de ce composant. Dans ce cas, nous parlons plutôt d’interruption de messages.

Modification de messages

Ce vecteur d’attaque consiste à modifier les messages échangés entre les systèmes qui communiquent. Sa mise en œuvre nécessite, par conséquent, un accès en écoute et en émission sur le canal de communication. La modification des messages est opérée soit directement sur les canaux de communication soit à l’aide d’un système intermédiaire, sous le contrôle de l’attaquant, par lequel transitent les échanges. Les objectifs de l’attaquant guident généralement la nature des modifications apportées. Une modification incohérente va impacter, dans la plupart des cas, la disponibilité et va conduire à un déni de service à moins qu’un mécanisme de tolérance aux fautes efficace contre ce type d’incohérence ne soit mis en œuvre. En revanche, une modification cohérente peut conduire à des attaques différentes.
Une attaque courante est le déguisement (en anglais, masquerade) qui consiste à tromper les mécanismes d’authentification pour se faire passer pour un utilisateur autorisé, de façon à obtenir des droits d’accès illégitimes et ainsi compromettre la confidentialité, l’intégrité ou la disponibilité. Un cas particulier de déguisement consiste pour un attaquant à « forger » de fausses adresses d’origine pour les messages qu’il émet. Dans ce cas, nous parlons alors plus particulièrement de spoofing (littéralement, parodie) d’adresse. Ce déguisement est, par exemple, très facile à réaliser sur le réseau Internet, puisqu’il n’y a pas d’authentification sur les adresses IP.

Captation de messages

Ce vecteur d’attaque consiste à effectuer un accès, sans modification, aux messages qui sont générés, transmis ou stockés sur les systèmes matériels et logiciels vulnérables. Il cible plus particulièrement les propriétés de confidentialité. Les attaques par captation de messages sont très souvent difficiles à détecter. En effet, étant entièrement passives, elles ne produisent pas d’effets observables sur les canaux de communication. Il existe de nombreuses variantes de captation de messages (plus ou moins) passives, souvent baptisées de noms imagés : le sniffing (action de renifler), le snooping (action de fouiner), l’eavesdropping (action d’écouter aux portes), wire-tapping (branchement sur une liaison filaire, installation d’une « bretelle »). Les techniques de captation de messages se sont largement développées avec la connexion de nombreux réseaux locaux sur l’Internet. Une fois qu’un intrus a pris le contrôle d’une machine d’un réseau local, il peut installer un sniffer, qui est un logiciel capable de configurer la connexion réseau de cette machine (par exemple, le contrôleur Ethernet ou le contrôleur de réseau sans fil) en mode d’écoute (en anglais, promiscuous mode) puis analyser les paquets qui circulent sur le réseau, en particulier pour récupérer les noms d’utilisateurs et les mots de passe, parfois transmis en clair lors des phases de connexion d’utilisateurs. Il convient de remarquer que les informations (utiles) dans les messages ne sont pas toujours directement accessibles. Elles peuvent, par exemple, être dissimulées dans un ou plusieurs messages à l’aide de techniques de stéganographie.

Insertion de messages

Ce vecteur d’attaque consiste à insérer des messages dans un canal de communication. La mise en œuvre d’un tel vecteur d’attaque nécessite alors un accès au canal de communication en émission. Un attaquant peut, en particulier, rejouer des séquences de messages qu’il aura captées précédemment, par exemple pour se faire passer pour un autre utilisateur (répétition d’une séquence d’authentification) ou pour faire exécuter plusieurs fois une même action (répétition d’un transfert électronique de fonds), etc. Lorsque l’insertion consiste à émettre des messages, valides ou invalides, en très grand nombre, il s’agit plutôt d’une attaque contre la disponibilité qui peut aller jusqu’au déni de service. Nous parlons alors d’inondation (en anglais, flooding). Un cas particulier d’inondation est l’éblouissement, qui consiste à saturer les canaux de communication par des messages incohérents de façon à mettre temporairement hors ligne un ou plusieurs systèmes (par exemple, des systèmes de détection d’intrusions) de façon à masquer, à ces systèmes, d’autres activités malveillantes (par exemple, l’installation d’une porte dérobée). Il convient de remarquer qu’il est possible de définir des techniques d’attaques plus complexes à partir des quatre vecteurs d’attaque que nous venons de présenter. À titre d’exemple, une attaque de type man-in-the-middle (littéralement, l’homme au milieu), laquelle consiste à intercepter une communication entre deux systèmes puis à falsifier les échanges afin de se faire passer pour l’une des parties, peut être définie par la combinaison d’une captation et plusieurs insertions de messages. Les premières insertions permettent à l’attaquant de se faire passer pour l’une des parties et d’autres insertions sont nécessaires pour relayer les messages captés.

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 rapport-gratuit.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
Première partie : Etude théorique
Chapitre I : Actions malveillantes impactant la sécurité des systèmes informatiques
1.1 Introduction
1.2 Sécurité des systèmes informatiques
1.3 Concepts et terminologie des systèmes [Laprie 04]
1.4 Sûreté de fonctionnement
1.4.1 Attributs de la sûreté de fonctionnement
1.4.2 Entraves à la sûreté de fonctionnement
1.4.3 Moyens pour la sûreté de fonctionnement
1.4.4 Sécurité des systèmes informatiques [Deswarte 03]
1.5 Classification des attaques sur les systèmes informatiques
1.5.1 Attaques agissant au niveau des systèmes logiciels
 Le vol de session TCP
1.5.2 Attaques agissant au niveau des systèmes matériels
1.5.3 Attaques agissant au niveau des canaux de communication
1.5.4 Attaques agissant au niveau des canaux auxiliaires
1.6 Généralistes sur les Malwares
1.6.1 Définition d’un Malware
1.6.2 Les différents types de malwares
Chapitre II : Etude des attaques des malwares et proposition de solutions
Introduction :
2.1 Les différents types d’attaques utilisant les Malwares
2.2 Le Phishing ou Hameconnage
2.3 Comment fonctionne le phishing
2.4 Exemples de phising
2.5 Quelques astuces pour reconnaitre un message de phising
2.5.1 Comment éviter le phishing
Bonnes pratiques humaines
Bonnes pratiques techniques
Deuxième partie : Etude pratique
Chapitre III : Les Tests de pénétration
Définition
3.1 Préparation des tests
3.2 Exécution des tests
3.2.1 Phase préliminaire recherche des hôtes
3.2.2 Détection des machines sur un réseau
3.2.3 Détection des ports réseau ouverts sur une machine
3.2.4 Identifier l’OS d’une machine
3.3 Attaque du système
3.3.1 Les vols et destructions de données
3.3.2 Techniques de vols de données des utilisateurs
3.3.3 Distributeur de billets
3.3.4 Les points de paiements (POS)
3.4 Fonctionnement et exemple de Chevaux de Troie bancaire
3.4.1 Zeus Trojan Malware
3.4.2 Les conséquences du cheval de Troie Zeus sur les ordinateurs
3.4.3 Comment le cheval de Troie Zeus infecte les ordinateurs
3.5 Les mesures de protection
3.6 Attaques par déni de service
3.7 Les différences entre DoS et DDoS
3.8 Solutions contre les attaques des malwares
3.8.1 Définition d’un antivirus
3.8.2 L’antivirus résident
3.8.3 Les proxy anti-virus
3.8.4 Les sensibilisations
3.9 Que faire en cas d’infection par malware ?
3.9.1 Premiers gestes à faire
3.9.2 Comment reconnaître une infection par malware ?
3.9.3 Equipez votre ordinateur d’un anti-malware pour sa protection
Chapitre IV : Approche Pratique de notre étude
INTRODUCTION
4.1 La Comparassions entre Kali linux et Ubuntu
4.1.1 Pour Kali Linux :
4.1.2 Pour Ubuntu :
4.1.3 Table de comparaison
4.2 Architecture de notre Réseau
4.3 Déroulement d’une attaque portant sur les malwares
4.3.1 Cas d’un Trojon (Cheval de Troie)
4.3.2 Cas d’un Ransomware
Conclusion
Bibliographie

Télécharger 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 *

Comments (1)