Wydano wersję frameworka TUF 1.0 (The Update Framework), która oferuje narzędzia do bezpiecznego sprawdzania dostępności i pobierania aktualizacji. Głównym celem projektu jest ochrona klienta przed typowymi atakami na repozytoria i infrastrukturę, w tym przeciwdziałanie promocji przez cyberprzestępców fałszywych aktualizacji stworzonych po uzyskaniu dostępu do kluczy do generowania podpisów cyfrowych lub kompromitacji repozytoriów. Projekt rozwija się pod egidą organizacji Linux Foundation i jest stosowany w celu zwiększenia bezpieczeństwa dostarczania aktualizacji w takich projektach jak Docker, Fuchsia, Automotive Grade Linux, Bottlerocket i PyPI (włączenie weryfikacji pobrań i metadanych w PyPI jest planowane na najbliższy czas). Kod referencyjnej implementacji TUF napisany jest w języku Python i rozpowszechniany na licencji Apache 2.0.
Projekt rozwija serię bibliotek, formatów plików i narzędzi, które można łatwo zintegrować z istniejącymi systemami aktualizacji aplikacji, zapewniając ochronę w przypadku kompromitacji kluczy po stronie deweloperów oprogramowania. Aby używać TUF, wystarczy dodać odpowiednie metadane do repozytorium oraz zintegrować dostarczane przez TUF procedury do pobierania i weryfikacji plików w kodzie klienta.
Framework TUF przejmuje zadania związane ze sprawdzaniem dostępności aktualizacji, pobieraniem aktualizacji i weryfikacją ich integralności. System instalacji aktualizacji nie przeplata się bezpośrednio z dodatkowymi metadanymi, których weryfikację i pobieranie przejmuje TUF. W celu integracji z aplikacjami i systemami instalacji aktualizacji oferowane jest niskopoziomowe API do dostępu do metadanych oraz realizacja wysokopoziomowego klienta API ngclient, gotowego do integracji z aplikacjami.
Spośród ataków, którym TUF może przeciwdziałać, wyróżniają się zamiana starych wersji na aktualizacje w celu zablokowania łatania luk w oprogramowaniu lub przywracania użytkownika do starej, podatnej wersji, a także promocja złośliwych aktualizacji, poprawnie podpisanych przy użyciu skompromitowanego klucza, realizacja ataków DoS na klientów, takich jak zapełnianie dysku nieskończonymi aktualizacjami.
Ochrona przed kompromitacją infrastruktury dostawcy oprogramowania osiągana jest poprzez utrzymywanie oddzielnych zweryfikowanych rejestrów stanu repozytorium lub aplikacji. Weryfikowalne metadane TUF zawierają informacje o zaufanych kluczach, kryptograficzne hashe do oceny integralności plików, dodatkowe podpisy cyfrowe do uwierzytelnienia metadanych, informacje o numerach wersji oraz dane dotyczące okresu ważności rejestrów. Klucze używane do weryfikacji mają ograniczony czas życia i wymagają stałej aktualizacji w celu ochrony przed podpisywaniem za pomocą starych kluczy.
Redukcja ryzyka kompromitacji całego systemu realizowana jest dzięki wykorzystaniu modelu podziału zaufania, w którym każda strona jest ograniczona jedynie do obszaru, za który bezpośrednio odpowiada. W systemie stosuje się hierarchię ról z własnymi kluczami, na przykład rola główna podpisuje klucze dla ról odpowiedzialnych za metadane w repozytorium, dane o czasie tworzenia aktualizacji i docelowe kompilacje, z kolei rola odpowiedzialna za kompilacje podpisuje role związane z uwierzytelnieniem dostarczanych plików.

W celu ochrony przed kompromitacją kluczy stosowany jest mechanizm natychmiastowego odwołania i wymiany kluczy. W każdym poszczególnym kluczu skoncentrowane są jedynie minimalnie niezbędne uprawnienia, a do operacji uwierzytelniania wymagane jest użycie kilku kluczy (ujawnienie pojedynczego klucza nie pozwala na natychmiastowy atak na klienta, natomiast do kompromitacji całego systemu konieczne jest przejęcie kluczy wszystkich uczestników). Klient może akceptować jedynie pliki utworzone później niż już wcześniej otrzymane pliki, a dane są ładowane jedynie zgodnie z rozmiarem określonym w zweryfikowanych metadanych.
Opublikowana wersja TUF 1.0.0 oferuje całkowicie przepisane i stabilizowane wzorcowe wdrożenie specyfikacji TUF, które może być używane jako gotowy przykład przy tworzeniu własnych wdrożeń lub do integracji w swoich projektach. Nowe wdrożenie zawiera znacznie mniej kodu (1400 linii zamiast 4700), jest łatwiejsze w utrzymaniu i może być łatwo rozszerzane, na przykład w przypadku potrzeby dodania wsparcia dla specyficznych stosów sieciowych, systemów przechowywania lub algorytmów szyfrowania.
Źródło: opennet.ru
