Un moyen possible, même si cela prendrait très longtemps dans la pratique, serait de retourner aux sources. Le développement de GNU a commencé en 1984, et la version originale de Minix (utilisée au début du développement de Linux pour l’amorçage) a été publiée en 1987.
Toute votre réponse repose sur votre prémisse selon laquelle "vous ou d'autres personnes avez la capacité de lire et de comprendre le code source pour détecter les failles de sécurité, le code source sera donc préalablement vérifié avant la compilation", et vous pouvez faire confiance au résultat d'une telle analyse. . Sans cela, cette réponse est probablement pire que sans valeur, car vous passerez énormément de temps sans aucun bénéfice.
Si vous pouvez trouver une copie du livre Minix original avec le code source, vous pouvez la saisir à partir du livre. Compilez-le, puis utilisez un décompilateur différent sur un système différent pour vérifier que le compilateur génère la sortie binaire attendue en langage machine. (Le code ne contient que 12 000 lignes, probablement C, cela prend donc beaucoup de temps mais reste raisonnable si vous êtes sérieux au sujet d'un tel projet.) Vous pouvez même écrire votre propre désassembleur; cela ne devrait pas être très difficile.
Prenez les versions les plus anciennes des utilitaires GNU sur lesquels vous pouvez éventuellement mettre la main (car celles-ci ont probablement moins de code et moins de dépendances vis-à-vis de bibliothèques externes), parcourez le code, compilez-le pour Minix (cela pourrait prendre du travail, cependant; Ce que vous voulez absolument éviter, c’est d’apporter des ajustements au code source, car cela rendrait l’ajout de correctifs très sujet aux erreurs par la suite) et suivrait un cycle de désassemblage-vérification similaire pour les outils GNU. À ce stade, vous faites confiance au système d’exploitation et à la chaîne d’outils, il vous suffit donc de consulter le code source du patchset (tout ce qui n’est pas dans le patchset est déjà approuvé), mais les outils seront toujours très primitifs et rudimentaires par rapport à ce que vous avez utilisé. À aujourd'hui. Par exemple, n'espérez rien de plus que les fonctionnalités les plus élémentaires des outils système.Lire beaucoup de XKCD.
À un moment donné, vous disposerez d’un système capable de compiler et d’amorcer une première version du noyau Linux, un peu comme ce fut le cas au début des années 90, lorsque Linux commença à gagner du terrain parmi les pirates. À ce stade, je suggèrerais de migrer vers Linux (reconstruire les bibliothèques système et la chaîne d’outils contre Linux, compiler le noyau Linux, démarrer sous Linux et éventuellement reconstruire le noyau Linux et la chaîne d’outils GNU sous Linux; le dernier prouve que le système est maintenant autonome. hébergement), mais c’est à vous de décider. Continuez à vérifier les correctifs, à patcher le noyau, les bibliothèques et les outils GNU de base, et à reconstruire jusqu’à ce que vous obteniez les versions modernes.
Vous disposez alors d’un système d’exploitation de base et d’un compilateur fiables qui peuvent être utilisés pour créer des logiciels modernes. D'ici là, vous pouvez suivre, par exemple, les guides Linux From Scratch pour créer un système capable d'exécuter des tâches utiles .
À aucun moment, le système "compilateur" ne peut jamais être connecté à un réseau (y compris en tant que VM sur un hôte en réseau); vous risqueriez de pénétrer dans tout composant compatible réseau, y compris le noyau. Si vous craignez une attaque du compilateur Thompson , vous devez vous attendre à ce que tout hôte de machine virtuelle puisse également être compromis. Utilisez sneakernet pour obtenir le code source et les fichiers binaires de l'hôte physique sur lequel vous compilez des éléments. Attendez-vous à rencontrer des problèmes pour obtenir des fichiers sur et hors du système au moins avant d'arriver au point où la prise en charge du stockage de masse USB a été mise en œuvre. Si vous êtes vraiment paranoïaque, des listes de code source d'impression et saisissez - les à la main (et nous espérons que le pilote d'imprimante et l' imprimante ne sont pas un code similaire dans les), ou lisez le code sur l’écran d’un ordinateur et saisissez-le dans un autre ordinateur physiquement à côté, mais non connecté.
Oui, cela prendra beaucoup de temps. Mais l’avantage de cette approche est que chaque étape est incrémentielle, ce qui signifie qu’il serait beaucoup plus difficile de faire passer tout ce qui est malfaisant à moins de l’introduire très progressivement sur une période de plusieurs versions; ceci parce que l'ensemble des modifications à chaque étape est relativement petit et donc beaucoup plus facile à examiner. Comparez le patch avec le journal des modifications et assurez-vous que vous pouvez déterminer exactement quelle entrée du journal des modifications correspond à chaque modification du code source. Encore une fois, cela suppose que vous avez la possibilité (éventuellement par l’intermédiaire de quelqu'un de confiance) de vérifier que de tels changements n’ont pas été insérés dans le code, mais cela devrait vous rapprocher d’un système de confiance, à l’exception du logiciel uniquement. approche du firmware peut.