Als Ken Thompson 1983 gemeinsam mit Dennis Ritchie den Turing Award für Unix erhielt, nutzte er seine Dankesrede für ein Gedankenexperiment, das die Sicherheitsforschung bis heute beschäftigt. Der Text erschien 1984 unter dem Titel „Reflections on Trusting Trust“ in den Communications of the ACM und ist nur drei Seiten lang.
Der Trick in drei Schritten
Erstens: Man ändert den C-Compiler so, dass er beim Übersetzen des Programms login eine Hintertür einfügt, ein Passwort, das immer funktioniert. Das wäre im Quellcode des Compilers sichtbar. Zweitens: Man ändert den Compiler zusätzlich so, dass er beim Übersetzen des Compilers selbst diese beiden Änderungen wieder einfügt. Drittens: Man übersetzt den Compiler einmal mit dieser Version, entfernt danach die verräterischen Zeilen aus dem Quellcode und übersetzt neu. Der Quellcode ist jetzt sauber, die erzeugte Compiler-Binärdatei trägt die Manipulation aber weiter und pflanzt sie in jede künftige Version und in jedes login-Programm ein.
Die Pointe
Thompsons Schluss: Man kann Code nicht vertrauen, den man nicht vollständig selbst erzeugt hat, und das schließt Compiler, Assembler, Lader und Mikrocode ein. Quellcode-Prüfung allein beweist nichts, wenn die Werkzeuge kompromittiert sind. Ob Thompson den Trick tatsächlich in Bell-Labs-Unix eingebaut hat, wurde jahrzehntelang diskutiert; 2023 veröffentlichte er den damaligen Code und bestätigte, dass es einen funktionierenden Prototyp gab, der aber nie außerhalb der Labs lief.
Die Antwort darauf
2009 beschrieb David A. Wheeler in seiner Dissertation das Verfahren „Diverse Double-Compiling“: Man übersetzt den Compiler mit zwei voneinander unabhängigen Compilern und vergleicht die Ergebnisse. Weichen sie ab, ist einer manipuliert. Das Projekt Reproducible Builds, an dem sich Debian, Arch und andere Distributionen beteiligen, verfolgt dasselbe Ziel: jeder soll aus dem Quellcode Bit für Bit dieselbe Binärdatei erzeugen können. Das Projekt Bootstrappable Builds geht noch weiter und baut eine ganze Linux-Werkzeugkette aus einem winzigen, von Hand prüfbaren Startprogramm.
Warum das heute zählt
Angriffe auf die Lieferkette von Software sind Alltag geworden: SolarWinds 2020, die manipulierte Kompressionsbibliothek xz 2024, vergiftete Pakete in npm und PyPI. Sie alle folgen Thompsons Logik: nicht das Programm angreifen, sondern das Werkzeug, das es baut. Wer Software ausliefert, muss deshalb beweisen können, wo seine Binärdateien herkommen.





