Pro NixOS byl navržen režim opakovatelných sestavení, který umožňuje odhalit případy vkládání backdoorů do kódu, připomínající incident s projektem XZ. Představená metoda ochrany umožňuje zjistit modifikace v archivech se zdrojovým kódem vydání, které chybí v repozitářích s kódem.
Podstata metody spočívá v tom, že zdrojový kód nové verze aplikace je sestavován dvakrát — poprvé z kódu staženého z git-repozitáře, a podruhé z kódu distribuovaného v hotových archivech. Pokud se výsledné binární soubory liší, vzniká důvod pro podezření na přítomnost skrytých modifikací v repozitáři nebo v archivu s kódem.
Připomeňme, že v případě projektu XZ repozitář s kódem neobsahoval podezřelé změny. Backdoorové škodlivé komponenty byly dodávány uvnitř souborů používaných v testovacím souboru pro ověření správnosti práce rozbalovače XZ. Backdoor se aktivoval na úrovni systému sestavení, a samotný zdrojový kód XZ se shodoval s kódem z repozitáře. Aktivující backdoor m4-makra pro nástroj Automake byla zahrnuta pouze v hotovém archivu s kódem a chyběla v repozitáři.
Backdoor v XZ byl vložen útočníkem, který získal status udržovatele projektu. Vkládání backdooru bylo hned nezpozorováno, protože distribuce většinou sestavují balíčky ze staženého kódu z hotových archivů, neboť při stahování kódu pro sestavení stačí jedna kontrolní suma pro ověření integrity souboru s archívem a lze využít zrcadla. Hlavní pozornost při kontrole kódu je zaměřena na analýzu obsahu repozitáře, proto nejsou vždy okamžitě odhaleny nenápadné rozdíly v archivech.
Aby se usnadnilo ověřování shody archivních souborů a snímků repozitáře odpovídajících vydáním, některé otevřené projekty, jako například PostgreSQL, zavedly systém opakované generace archivů. V tomto případě je poskytován nástroj, který umožňuje uživatelům samostatně sestavit ze zdrojového kódu svůj archiv, který zcela odpovídá hotovému archivu dostupnému ke stažení. Pokud se nezávisle vytvořený archiv a archiv poskytovaný hlavním projektem liší, došlo k narušení repozitáře nebo referenčního archivu.
Problém je v tom, že tento způsob se aplikuje pouze v některých případech, zatímco mnoho projektů i nadále zahrnuje do archivů další artefakty, které chybí v hlavním repozitáři, jako jsou man-stránky, dokumentace, příklady, skripty pro tvorbu balíčků pro distribuce a další soubory pro sestavení. Obvykle se to děje z historických důvodů a specifik procesů vytváření vydání. Jednoduché ověření shody obsahu repozitáře a archivu v tomto případě není vhodné.
Jako řešení bylo navrženo shromažďování binárních souborů vydání jak z repozitáře (například lze použít automaticky generovaný archiv na GitHubu pro vydání tagu), tak z archivu připraveného údržbářem, a poté porovnat výsledek. Jako experiment bylo prozatím navrženo zahrnutí podobné kontroly pouze pro balíček „xz“. Pokud se experiment osvědčí, plánuje se jeho použití i v dalších balíčcích v nixpkgs.
Zdroj: opennet.ru
