• 8 heures
  • Moyenne

Ce cours est visible gratuitement en ligne.

course.header.alt.is_video

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 05/12/2019

Résistez aux attaques contre votre système

Connectez-vous ou inscrivez-vous gratuitement pour bénéficier de toutes les fonctionnalités de ce cours !

Évolution des systèmes embarqués

Les systèmes embarqués aéronautiques peuvent être la cible d'attaques, comme tous les systèmes informatiques. Si les fautes accidentelles ont toujours été considérées dans ces systèmes, qui en conséquence sont dotés de mécanismes de tolérance aux fautes adaptés, les malveillances l'ont été plus récemment. Et ceci est notamment dû à une évolution importante des systèmes embarqués ces dernières années.

Exemple
Contexte d'un avion connecté

Auparavant, ces systèmes étaient très fermés et développés spécifiquement. Par conséquent, il n'y avait quasiment aucune interaction avec le monde extérieur, et donc peu de danger potentiel. Mais depuis plusieurs années, il y a une volonté de réduire le poids des systèmes embarqués à bord de l'avion, de réduire leur coût d'entretien et leur coût de développement. Ceci s'est notamment fait par l'utilisation de modules génériques réutilisables sur différents modèles d'avion et par l'utilisation de systèmes standardisés. Par ailleurs, il y également une volonté d'accroître les possibilités de communication à bord des avions.

Exemple
Les différentes communications d'un avion avec l'extérieur

Ainsi, aujourd'hui, les systèmes embarqués disposent de plus en plus d'interfaces de communication et ils sont développés en partie à partir de logiciels standard et non plus spécifiquement. Ceci est important à considérer pour la sécurité des systèmes embarqués. En effet, la multiplicité des points de connectivité accroît la surface d'attaque potentielle et le logiciel standard, non spécifiquement développé et potentiellement moins adapté que le logiciel spécifique à l'environnement dans lequel il est déployé, est susceptible de contenir des vulnérabilités.

Origine des menaces

Exemple
Origine des menaces

En ce qui concerne la source des menaces, étant donné la multiplicité des points de connectivité de l'avion, les attaquants peuvent être des passagers tentant d'abuser des moyens de communication dont ils disposent dans la cabine, mais ils peuvent être aussi des individus en dehors de l'avion et tentant d'abuser des mécanismes de communication de l'avion avec le sol. Les attaquants peuvent ainsi tenter, par des moyens de plus en plus variés, de prendre le contrôle d'équipements peu sécurisés car peu critiques, pour ensuite tenter de cibler des systèmes plus critiques.

Cependant, de manière générale, il est important de considérer les scénarios d'attaques les plus dangereux même s'ils s'avèrent être les moins plausibles. Cela aboutit à une défense en profondeur qui permet de consolider le système face à d'éventuelles évolutions, voire de contenir les compromissions locales. Ainsi, si l'on considère qu'un attaquant a réussi à prendre le contrôle d'une application peu critique, il peut tenter plusieurs types d'attaques à destination des composants critiques.

Exemples d'attaques

Exemple
Exemple d'attaque 1

Il peut, par exemple, essayer de lire ou d'écrire dans des parties privilégiées de la mémoire, tenter d'accroître ses privilèges ou contourner les mécanismes de protection, comme tout logiciel malveillant pourrait le réaliser sur un ordinateur de bureau classique. Toutes ces attaques sont relativement bien connues, car semblables à celles que l'on rencontre sur les ordinateurs de bureau.

Exemple
Exemple d'attaque 2

Par ailleurs, un attaquant peut aussi tenter d'abuser des spécificités des systèmes embarqués ou des mécanismes de tolérance aux fautes qui sont implémentés dans les systèmes embarqués pour faire face aux fautes accidentelles. Ainsi, un logiciel malveillant peut tenter d'abuser des mécanismes de détection d'erreurs, de façon à provoquer volontairement le redémarrage constant du système, ou de façon à provoquer systématiquement un passage en mode dégradé du système.

Exemple
Exemple d'attaque 3

Il peut également cibler l'ordonnancement des processus, qui est soumis à des contraintes temps réel précises, dans le cas des systèmes embarqués. Dans cet exemple, le système d'exploitation donne la main alternativement à plusieurs processus. Ces derniers doivent tout mettre en œuvre pour assurer d'avoir réalisé leur traitement avant de rendre la main.

Mécanismes de défense

Pour faire face à ces différentes menaces, on peut envisager différents types de mécanismes de défense, comme par exemple :

  • les méthodes formelles pour le développement de logiciel sans faute ;

  • l'audit de code, l'analyse de vulnérabilités et la proposition de contre-mesures ;

  • la détection et la prévention d'intrusions ;

  • l'élaboration d'architectures informatiques de confiance.

Méthodes formelles pour la sécurité

Méthode formelle pour la sécurité
Méthode formelle pour la sécurité

Les méthodes formelles peuvent être utilisées pour la conception et le développement de logiciels et sont particulièrement utiles dans la mesure où elles peuvent aider à générer du logiciel prouvé, sans faute. Elles s'appuient sur une représentation du logiciel ou de la spécification de ce logiciel dans un langage mathématique. Ce type de langage permet facilement de vérifier si le logiciel ou la spécification respecte des propriétés de sécurité. Ces propriétés peuvent être par exemple l'impossibilité de déborder d'un tableau ou l'impossibilité d'invoquer une fonctionnalité sans disposer des privilèges suffisants.

Plusieurs approches existent, telles que l'analyse du graphe de contrôle du code ou l'interprétation abstraite.

Audit et analyse de vulnérabilité

L'audit de code consiste en la recherche et l'élimination de fautes dans le logiciel. L'audit de code est un ensemble d'analyses :

  • l'analyse statique du code source, qui peut être manuelle (relecture de code) ou automatisée, grâce à l'utilisation d'outils ;

  • l'analyse dynamique, qui consiste en l'exécution du code avec des injections d'attaques ou avec des outils de fuzzing. Il n'existe aujourd'hui malheureusement pas d'outils automatiques capables de détecter et d'éliminer exhaustivement toutes les fautes présentes dans un logiciel. L'expertise humaine est par conséquent toujours requise.

De plus, la recherche de vulnérabilités peut nécessiter un temps très important si le logiciel est suffisamment volumineux et complexe. Par conséquent, les analyses de vulnérabilités vont en général privilégier la recherche des vulnérabilités les plus fréquentes (rapides à découvrir) ou des vulnérabilités associées à un niveau de risque élevé.

Prévention et détection d'intrusions

Prévention et détection d'intrusion

La prévention et la détection d'intrusions vise à utiliser des outils permettant d'empêcher l'occurrence d'intrusions ou de limiter leurs effets. On peut citer quelques exemples :

  • les firewalls permettent de bloquer certains flux de données considérés comme dangereux, à l'aide de règles de filtrage. Ils sont ainsi en mesure de bloquer certaines intrusions ;

  • les systèmes de détection d'intrusion permettent d'analyser des flux de communication ou des fichiers de log des systèmes, d'en déduire la présence d'activité malveillante sur le système et de lever des alertes ;

  • les antivirus sont capables d'analyser un système de fichiers, à la recherche de motifs indiquant la présence de fichiers corrompus et de lever des alertes en conséquence ;

  • les systèmes d'authentification et les mécanismes de contrôle d'accès permettent de réduire l'occurrence d'intrusions, dans la mesure où ils permettent de contrôler les individus qui ont accès au système et de vérifier leurs droits lorsqu'ils y réalisent des opérations.

Architecture de confiance

Il est indispensable aujourd'hui de concevoir des architectures informatiques de confiance, notamment à l'aide de composants matériels possédant des fonctionnalités adaptées à la sécurité et plus difficilement contournables que du logiciel.

On peut citer aujourd'hui les composants matériels assurant un démarrage sécurisé des systèmes informatiques comme le Trusted Platform Module, intégré dans beaucoup d'ordinateurs du marché aujourd'hui. On peut également penser aux technologies avancées des dernières générations de processeurs, comme l'assistance matérielle à la virtualisation, permettant d'assurer un cloisonnement efficace et très difficilement contournable du logiciel.

On peut préconiser l'utilisation de la diversification dans ces architectures de confiance. Il s'agit d'utiliser de la redondance (du logiciel et du matériel), comme il est fait habituellement pour faire face aux fautes accidentelles, mais de façon à ce que les différentes répliques soient diversifiées.

Par exemple, on n’utilisera pas le même système d'exploitation sur les 2 répliques, ou pas le même matériel. En général, une attaque informatique est spécifique à un logiciel ou matériel donné et est donc inefficace sur un autre logiciel ou matériel. La diversification permet donc d'assurer que toutes les répliques ne puissent être attaquées avec succès en même temps.

Ce chapitre sur la cybersécurité conclut la partie sur l'intégration des contraintes réglementaires et de sécurité en aéronautique. Dans la partie suivante, nous allons poursuivre notre projet de développement de calculateur.

Exemple de certificat de réussite
Exemple de certificat de réussite