Um in das Repository der Pakete nixpkgs, das in der NixOS-Distribution verwendet wird, aufgenommen zu werden, wurde ein Modus fĂŒr reproduzierbare Builds vorgeschlagen. Dieser erlaubt es, FĂ€lle der CodeeinfĂŒhrung von Backdoors zu erkennen, die an den Vorfall im Projekt XZ erinnern. Die vorgestellte Schutzmethode ermöglicht es, Modifikationen in den Archiven des Quellcodes der Veröffentlichung zu entdecken, die in den Code-Repositories nicht vorhanden sind.
Der Kern der Methode besteht darin, dass der Quellcode der neuen Version der Anwendung zweimal kompiliert wird â einmal aus dem Code, der aus dem git-Repository geladen wird, und ein zweites Mal aus dem Code, der in fertigen Archiven verteilt wird. Wenn sich die resultierenden BinĂ€rdateien unterscheiden, gibt es Anlass zur Vermutung, dass versteckte Modifikationen im Repository oder in der Archivdatei mit dem Code vorliegen.
Zur Erinnerung: Im Fall des Projekts XZ enthielt das Code-Repository keine verdĂ€chtigen Ănderungen. Die schĂ€dlichen Komponenten, die die Backdoor bilden, wurden in Dateien geliefert, die im Testset zur ĂberprĂŒfung der korrekten Funktion des XZ-Dekompressors verwendet wurden. Die Backdoor wurde auf der Ebene des Build-Systems aktiviert, wĂ€hrend der Quellcode von XZ mit dem Code im Repository ĂŒbereinstimmte. Die die Backdoor aktivierenden m4-Makros fĂŒr das Automake-Werkzeug waren nur im fertigen Archiv mit dem Code enthalten und fehlten im Repository.
Die Backdoor in XZ wurde von einem Angreifer eingebaut, der den Status eines Maintainers im Projekt erlangt hatte. Die EinfĂŒhrung der Backdoor wurde zunĂ€chst nicht bemerkt, da die Distributionen hauptsĂ€chlich Pakete kompilieren, indem sie Code aus fertigen Archiven laden. Denn bei der Kodierung fĂŒr den Build kann man sich auf eine einzige PrĂŒfziffer zur ĂberprĂŒfung der IntegritĂ€t der Archivdatei stĂŒtzen und Spiegelserver nutzen. Bei der ĂberprĂŒfung des Codes liegt der Fokus auf der Analyse des Inhalts des Repositories, weshalb nicht offensichtliche Unterschiede in den Archiven nicht immer sofort identifiziert werden können.
Um die ĂberprĂŒfung der Ăbereinstimmung von Archivdateien und SchnappschĂŒssen von Repositorys, die den Veröffentlichungen entsprechen, zu vereinfachen, haben einige Open-Source-Projekte wie PostgreSQL ein System zur wiederholbaren Archivgenerierung eingefĂŒhrt. In diesem Fall wird ein Werkzeugset bereitgestellt, das es ermöglicht, aus dem Code ein eigenes Archiv zu erstellen, das vollstĂ€ndig mit dem fertigen Archiv ĂŒbereinstimmt, das zum Download verfĂŒgbar ist. Wenn das unabhĂ€ngig erstellte Archiv und das vom Hauptprojekt bereitgestellte Archiv unterschiedlich sind, liegt eine Kompromittierung des Repositorys oder des Referenzarchivs vor.
Das Problem ist, dass eine solche Methode nur in bestimmten FĂ€llen praktiziert wird, wĂ€hrend viele Projekte weiterhin zusĂ€tzliche Artefakte in die Archive einfĂŒgen, die im Hauptrepository fehlen, wie man-Seiten, Dokumentation, Beispiele, Paketserien fĂŒr Distributionen und zusĂ€tzliche Build-Dateien. Dies geschieht in der Regel aus historischen GrĂŒnden und aufgrund der Besonderheiten der Veröffentlichungsprozesse. Einfache ĂberprĂŒfungen der Ăbereinstimmung von Repository-Inhalten und Archiv sind in diesem Fall nicht geeignet.
Als Lösung wurde vorgeschlagen, die BinĂ€rdateien der Veröffentlichung sowohl aus dem Repository (zum Beispiel kann das automatisch generierte Archiv auf GitHub fĂŒr das Release-Tag verwendet werden) als auch aus dem vorbereiteten Archiv des Betreuers zu sammeln und anschlieĂend die Ergebnisse zu vergleichen. Als Experiment wurde eine solche ĂberprĂŒfung vorerst nur fĂŒr das Paket âxzâ vorgeschlagen. Wenn das Experiment erfolgreich ist, planen die ĂberprĂŒfungen, auch in anderen Paketen in nixpkgs eingesetzt zu werden.
Quelle: opennet.ru
