Placer sa confiance

Reflexion on trusting trust.

Un pionnier des sciences de l’informatique, Ken Thompson, présente et publie un court discours en 1984 pour la du prix Turing. Ce discours eu une grande influence dans le monde de la sécurité. Pour cause, il démontre que la technologie ne suffit pas à créer la confiance.

Ken Thompson. Reflections on trusting trust. Communications of the ACM, 27(8):761–763, 1984.

Moral
The moral is obvious. You can’t trust code that you did not totally create yourself. […] No amount of source-level verification or scrutiny will protect you.
It is more important to trust the people who wrote the software.

Vous ne pouvez pas vous fier au code que vous n’avez pas entièrement créé. […] Aucun contrôle ou inspection de la source ne vous protégera.
Il est plus important de faire confiance aux gens qui ont écrit le logiciel.

La démonstration vient de la chaîne nécessaire à la création et l’exécution d’un programme informatique.

Langage de programmation
langage lisible par un humain structurée suivant un vocabulaire et une grammaire pour la rendre compréhensible par un logiciel.

Il y a au cœur le code source, l’ensemble des instructions écrites par un développeur informaticien dans un langage de programmation. La vérification de ce code source est la règle générale pour assurer la correction du programme et se protéger contre les portes dérobées (fonctionnalités malveillantes volontairement cachées dans un programme informatique).

L’intelligence du discours de Ken Thompson est sa démonstration que le code source seul ne suffit pas. En effet, le code source n’est pas lui-même exécuté par un ordinateur mais passe par une étape de compilation (par un compilateur) ou d’interprétation (à travers un interpréteur) — la démonstration vaut pour les deux cas. Un code source sain peut produire un programme informatique (ou une exécution informatique) malveillante si le compilateur (ou l’interpréteur) introduit lui-même une fonction malveillante dans le programme.

Un code source sain ⊕ un compilateur malveillant ⟶ un programme malveillant.

La réflexion ne s’arrête pas là. Le compilateur est lui-même un programme informatique, donc issu d’un code source. On peut donc vérifier le code source du compilateur pour chercher sa fonctionnalité malveillante. Malheureusement, le compilateur n’est pas l’exécution de son code source, mais l’exécution de la compilation de son code source par un autre compilateur. La fonctionnalité malveillante du compilateur peut se trouver dans le compilateur pré-existant. En multipliant les itérations, les versions du compilateur, l’introduction de la fonctionnalité malveillante disparaît rapidement.

Dans la complexité du monde informatique

L’exécution d’un programme informatique nécessite bien plus qu’un code source et un compilateur. De multiples composants interagissent pour produire l’exécution attendu par le développeur informatique. Chaque composant peut lui-même introduire la fonctionnalité malveillante ; très peu de composants peuvent être vérifier — encore que l’utilisateur aurait les compétences, les outils et le temps de vérifier.

Voici un petit tour (non exhaustif) de ce qui peut se passer mal :

Securelist by Kaspersky, Equation: The Death Star of Malware Galaxy.
The most powerful tool […] allows them to reprogram the hard drive firmware of over a dozen different hard drive brands

le disque dur
le programme informatique est stocké dans un élément de stockage (un disque dur) qui le fourni à l’ordinateur (au processeur) à la demande. Si le disque modifie à la volée un programme sain en y injectant une fonctionnalité malveillante, l’ordinateur exécutera un programme devenu malveillant.
Le système d’exploitation
l’exécution d’un programme informatique se fait dans un environnement contrôlé par le système d’exploitation (ms windows ou Linux sur pc, mac os sur ordinateur Apple, Android ou i os sur smartphone, etc). Le système d’exploitation permet à l’application d’interagir avec l’environnement (interface utilisateur, autres applications, composants matériels, …) tout en assurant sa sécurité (les autres applications ne peuvent pas le modifier ou lire ses données directement). Ce contrôle permettrait également à un système d’exploitation malveillant d’injecter à l’exécution des fonctionnalités malveillantes dans un programme informatique sain.
l’ordinateur
l’ordinateur exécutant le programme peut être lui-même physiquement modifié pour injecter des fonctionnalités malveillantes aux programmes lors de leur exécution.

Les nouvelles attaques

Cacher dans le code source

Dans les modèles utilisés par l’intelligence artificielle

Morale