Non
L'attaque, telle que décrite à l'origine, n'a jamais été une menace. Théoriquement, un compilateur pourrait le faire, mais pour en venir à bout de l'attaque, il faudrait le programmer pour qu'il
- Reconnaître quand le code source en cours de compilation est un compilateur, et
- Découvrez comment modifier le code source arbitraire pour y insérer le piratage.
Cela implique de déterminer le fonctionnement du compilateur à partir de son code source, afin de pouvoir le modifier sans interruption.
Par exemple, imaginez que le format de liaison stocke les longueurs de données ou le décalage du code machine compilé quelque part dans l'exécutable. Le compilateur devrait déterminer lui-même lequel de ces éléments doit être mis à jour et où, lors de l'insertion de la charge utile de l'exploit. Les versions ultérieures du compilateur (version inoffensive) peuvent changer arbitrairement ce format, de sorte que le code d'exploitation aurait effectivement besoin de comprendre ces concepts.
C'est une programmation auto-dirigée de haut niveau, un problème d'intelligence artificielle difficile (la dernière fois que j'ai vérifié, l'état de l'art produisait du code qui est pratiquement déterminé par ses types). Regardez: peu d'humains peuvent même le faire; il vous faudrait d'abord apprendre le langage de programmation et comprendre la base de code.
Même si le problème de l'IA était résolu, les gens remarqueraient que si compiler leur compilateur minuscule aboutissait à un binaire avec une énorme bibliothèque d'IA liée à celui-ci.
Attaque analogue: amorçage de la confiance
Cependant, une généralisation de l'attaque est pertinente. Le problème fondamental est que votre chaîne de confiance doit commencer quelque part et que, dans de nombreux domaines, son origine pourrait subvertir toute la chaîne de manière difficile à détecter.
Un exemple qui pourrait facilement être tiré dans la vie réelle
Ubuntu Linux, votre système d’exploitation assure la sécurité (intégrité) des mises à jour en vérifiant les packages de mise à jour téléchargés par rapport à la clé de signature du référentiel (à l’aide de la cryptographie à clé publique). Mais cela ne garantit l' authenticité des mises à jour que si vous pouvez prouver que la clé de signature appartient à une source légitime.
Où avez-vous obtenu la clé de signature? Lorsque vous avez téléchargé pour la première fois la distribution du système d’exploitation.
Vous devez avoir la certitude que la source de votre chaîne de confiance, cette clé de signature, n'est pas mauvaise.
Toute personne pouvant disposer de la connexion Internet MITM entre vous et le serveur de téléchargement Ubuntu - qu'il s'agisse de votre fournisseur d'accès à Internet, d'un gouvernement qui contrôle l'accès à Internet (par exemple en Chine) ou du fournisseur d'hébergement Ubuntu - aurait pu détourner ce processus:
- Détectez que vous téléchargez l'image du CD Ubuntu. C'est simple: vérifiez que la demande est dirigée vers l'un des miroirs Ubuntu (répertoriés publiquement) et demande le nom de fichier de l'image ISO.
- Envoyez la requête à partir de leur propre serveur, en vous fournissant une image CD contenant la clé publique de l'attaquant et l'emplacement du référentiel au lieu de celui d'Ubuntu.
Dorénavant, vous obtiendrez vos mises à jour en toute sécurité du serveur de l'attaquant. Les mises à jour étant exécutées en tant que root, l’attaquant a le contrôle total.
Vous pouvez empêcher l'attaque en vous assurant que l'original est authentique. Mais cela nécessite que vous validiez l’image CD téléchargée à l’aide d’un hachage ( peu de gens le font réellement ). Le hachage doit lui-même être téléchargé de manière sécurisée, par exemple via HTTPS. Et si votre attaquant peut ajouter un certificat sur votre ordinateur (courant dans un environnement d'entreprise) ou contrôler une autorité de certification (par exemple, la Chine), même le protocole HTTPS ne fournit aucune protection.