web-dev-qa-db-fra.com

Comment compiler le compilateur C à partir de zéro, puis compiler UNIX / Linux à partir de zéro

Disons que je travaille pour une grande organisation de services en dehors des États-Unis/Royaume-Uni. Nous utilisons beaucoup les serveurs UNIX et Linux.

Lecture à travers cet article Il mentionne qu'il serait facile d'insérer une porte d'porte dans un compilateur C, puis n'importe quel code compilé avec ce compilateur contiendrait également un porte-backdoor. Maintenant, étant donné des fuites récentes concernant le mandat de la NSA/GCHQ de mettre des portefeuilles/faiblesses dans toutes les méthodes de cryptage, le matériel et les logiciels, le compilateur est maintenant un point critique de l'échec. Potentiellement, toutes les distributions Standard Unix/Linix pourraient être compromises. Nous ne pouvons pas nous permettre de disposer de nos systèmes, de nos données et de nos clients de nos clients compromis par les gouvernements rugueux.

Compte tenu de ces informations, je voudrais construire un compilateur de confiance à partir de zéro, puis j'ai une base sécurisée à construire sur afin que je puisse créer le système d'exploitation et les applications du code source en utilisant ce compilateur.

Question

Quelle est la bonne (et la solution sécurisée) pour faire la compilation d'un compilateur à partir du code source (un scénario apparemment au poulet-oeuf), puis la compilation d'une distribution UNIX/Linux de confiance à partir de zéro?

Vous pouvez supposer que je ou d'autres personnes ont la possibilité de lire et de comprendre le code source pour les défauts de sécurité. Le code source sera donc vérifié avant de la compiler. Ce que je suis vraiment après est un guide de travail pour produire ce compilateur à partir de zéro de manière sûre et peut être utilisé pour compiler le noyau, d'autres parties du système d'exploitation et des applications.

La pile de sécurité doit commencer au niveau de base si nous devons avoir une confiance dans le système d'exploitation ou les applications exécutées sur cette pile. Oui, je comprends qu'il peut y avoir des portefeuilles matériels qui peuvent insérer du microcode dans le compilateur lors de sa construction. Nous ne pouvons pas trop faire à ce sujet pour le moment, sauf peut-être utiliser des puces non conçues aux États-Unis. Get's This Couble triés pour un démarrage et supposons que je pourrais la construire sur un ancien ordinateur potentiellement avant que tous les porte-retour ne soient insérés.

Comme le dit Bruce Schneier: "aux ingénieurs, je dis cela: nous avons construit Internet, et certains d'entre nous ont aidé à le renverser. Maintenant, ceux d'entre nous qui aiment la liberté doivent le réparer. "

Liens supplémentaires:

64
David J

AFAIK Le seul moyen d'être totalement sûr de la sécurité serait d'écrire un compilateur dans la langue d'assemblage (ou modifier le disque directement vous-même ). Ce n'est qu'alors que vous pouvez vous assurer que votre compilateur n'inserve pas de backdoor - cela fonctionne car vous éliminez complètement le compilateur.

À partir de là, vous pouvez utiliser votre compilateur de rayures à partir de bootstrap par ex. The GNU Toolchain. Ensuite, vous pouvez utiliser votre boîte à outils personnalisée pour compiler A Linux du système Scratch .

Notez que pour faciliter les choses sur vous-même, vous pourriez avoir un deuxième compilateur intermédiaire, écrit en C (ou autre langue). Donc, vous écririez un compilateur A en montage, puis réécrivez ce compilateur en C/C++/Python/Brainfuck/Quels que soient le compilateur B, que vous compilez à l'aide du compilateur A. Ensuite, vous utiliseriez Compiler B pour compiler GCC et vos amis.

30
strugee

Si vous avez besoin d'un compilateur de confiance, vous pouvez consulter le travail académique, comme le projet Compcert . C'est un compilateur construit par l'INRIA (un laboratoire public français informatique) conçu pour être "certifié", c'est-à-dire de produire un exécutable sémantiquement parfaitement équivalent au code (et bien sûr, il a été prouvé mathématiquement).

9
lgeorget

Lors de la création manuelle de votre propre compilateur comme point de départ serait la plus sécurisée, une autre option consiste à installer un système à partir d'un CD d'installation de 5 (ou 10) ans que vous avez confiance a été créé avant que ces exploits n'existaient. Ensuite, utilisez cela comme une base pour compiler la nouvelle source auditée.

2
sambler