Ein möglicher Weg, obwohl es in der Praxis sehr lange dauern würde, wäre, zu den Wurzeln zurückzukehren. Die Entwicklung von GNU begann 1984 und die ursprüngliche Version von Minix (die während der frühen Linux-Entwicklung für Bootstrapping-Zwecke verwendet wurde) wurde 1987 veröffentlicht.
Die gesamte Antwort basiert auf der Annahme, dass "[Sie] oder andere die Fähigkeit haben, Quellcode auf Sicherheitslücken hin zu lesen und zu verstehen, sodass der Quellcode vor dem Kompilieren zuerst überprüft wird" und dass Sie dem Ergebnis einer solchen Analyse vertrauen können . Ohne das ist diese Antwort wahrscheinlich schlimmer als wertlos, da Sie viel Zeit für absolut keinen Nutzen aufwenden werden.
Wenn Sie eine Kopie des ursprünglichen Minix-Buches mit Quellcode finden, können Sie sie aus dem Buch eingeben. Kompilieren Sie es und verwenden Sie dann einen anderen Dekompiler auf einem anderen System, um sicherzustellen, dass der Compiler die erwartete Maschinensprachen-Binärausgabe generiert. (Der Code besteht nur aus 12.000 Zeilen, vermutlich C, was zwar zeitaufwändig ist, aber immer noch in Ordnung ist, wenn Sie ein solches Projekt ernst meinen.) Sie könnten sogar Ihren eigenen Disassembler schreiben; das sollte nicht sehr schwierig sein.
Besorgen Sie sich die ältesten Versionen der GNU-Dienstprogramme, die Sie möglicherweise in die Finger bekommen können (da diese vermutlich weniger Code enthalten und weniger von externen Bibliotheken abhängig sind), lesen Sie den Code durch und erstellen Sie ihn für Minix (dies kann jedoch einige Arbeit erfordern; was Sie tun) Es ist unbedingt zu vermeiden, Anpassungen am Quellcode vorzunehmen, da dies das Hinzufügen von Patches zu einem späteren Zeitpunkt sehr fehleranfällig macht und einen ähnlichen Disassemble-Verifizierungszyklus für die GNU-Tools durchläuft. An diesem Punkt vertrauen Sie dem Betriebssystem und der Toolchain, sodass Sie nur den Quellcode im Patchset durchgehen müssen (alles, was nicht im Patchset enthalten ist, ist bereits vertrauenswürdig), aber die Tools sind im Vergleich zu Ihrer Verwendung immer noch sehr primitiv und grob bis heute. Erwarten Sie zum Beispiel nicht, dass mehr als die grundlegendste Funktionalität der Systemtools funktioniert.Lose XKCD lesen.
Irgendwann werden Sie ein System haben, das eine frühe Version des Linux-Kernels kompilieren und booten kann, ähnlich wie es in den frühen neunziger Jahren der Fall war, als Linux unter Hackern an Bedeutung gewann. Ich würde empfehlen, zu diesem Zeitpunkt auf Linux zu migrieren (die Systembibliotheken und die Toolchain gegen Linux neu zu erstellen, den Linux-Kernel zu erstellen, in Linux zu booten und möglicherweise den Linux-Kernel und die GNU-Toolchain unter Linux neu zu erstellen; der letzte Beweis, dass das System jetzt selbstständig ist). Hosting), aber das liegt weitgehend bei Ihnen. Überprüfen Sie weiterhin die Patches, patchen Sie den Kernel, die Bibliotheken und die grundlegenden GNU-Tools und erstellen Sie sie neu, bis Sie zu modernen Versionen gelangen.
Dann haben Sie ein vertrauenswürdiges Basis-Betriebssystem und einen Compiler, mit denen Sie moderne Software erstellen können. Bis dahin können Sie z. B. den Linux From Scratch- Anleitungen folgen , um ein System zu erstellen, das nützliche Aufgaben ausführen kann .
Das "Compiler" -System kann zu keinem Zeitpunkt in irgendeiner Weise mit einem Netzwerk verbunden werden (auch nicht als VM auf einem vernetzten Host). Sie würden das Risiko eingehen, durch netzwerkfähige Komponenten einschließlich des Kernels zu gelangen. Wenn Sie sich Sorgen über einen Thompson-Compiler-Angriff machen , müssen Sie damit rechnen, dass auch jeder VM-Host kompromittiert wird. Verwenden Sie sneakernet, um den Quellcode von dem physischen Host, auf dem Sie die Dinge kompilieren, und die Binärdateien abzurufen. Erwarten Sie Probleme beim Ein- und Ausschalten von Dateien auf dem System, bevor Sie den Punkt erreichen, an dem die Unterstützung für USB-Massenspeicher implementiert wurde. Wenn Sie wirklich paranoid, Code Druckquelle Listings und geben Sie sie mit der Hand in (und hoffen , dass der Druckertreiber und Drucker nicht über einen ähnlichen Code in ihnen) oder lesen Sie den Code auf einem Computermonitor und tippen Sie ihn in einen anderen Computer ein, der sich physisch neben dem Computer befindet, aber nicht mit ihm verbunden ist.
Ja, das wird viel Zeit in Anspruch nehmen . Der Vorteil dieses Ansatzes besteht jedoch darin, dass jeder Schritt inkrementell ist, was bedeutet, dass es für etwas Bösartiges viel schwieriger ist, durchzukommen, wenn es nicht über einen Zeitraum von vielen Versionen hinweg sehr allmählich eingeführt wird. Dies ist darauf zurückzuführen, dass die Anzahl der Änderungen bei jedem Schritt vergleichsweise gering ist und daher leichter zu überblicken ist. Vergleichen Sie das Patchset mit dem Changelog und stellen Sie sicher, dass Sie genau bestimmen können, welcher Changelog-Eintrag jeder Änderung im Quellcode entspricht. Dies setzt wiederum voraus, dass Sie die Möglichkeit haben (möglicherweise durch jemanden, dem Sie vertrauen), zu überprüfen, dass solche Änderungen nicht in die Codebasis eingeschleust wurden, aber Sie sollten einem vertrauenswürdigen System so nahe kommen wie einem reinen Software-System. Firmware Ansatz kann.