Lennart Poettering opublikował propozycję modernizacji procesu uruchamiania dystrybucji systemu Linux, mając na celu rozwiązanie istniejących problemów oraz uproszczenie organizacji pełnoprawnego, zweryfikowanego uruchamiania, potwierdzającego autentyczność jądra i podstawowego środowiska systemowego. Zmiany niezbędne do wprowadzenia nowej architektury już zostały włączone do bazy kodu systemd i dotyczą komponentów, takich jak systemd-stub, systemd-measure, systemd-cryptenroll, systemd-cryptsetup, systemd-pcrphase i systemd-creds.
Proponowane zmiany ograniczają się do stworzenia jednego, uniwersalnego obrazu UKI (Unified Kernel Image), łączącego obraz jądra Linux, obsługę ładowania jądra z UEFI (UEFI boot stub) oraz ładowane do pamięci środowisko systemowe initrd, stosowane do wstępnej inicjalizacji na etapie przed zamontowaniem systemu plików root. Zamiast obrazu RAM-dysku initrd, w UKI można zapakować cały system, co pozwala na tworzenie w pełni zweryfikowanych środowisk systemowych, ładowanych do pamięci operacyjnej. Obraz UKI ma formę pliku wykonywalnego w formacie PE, który może być ładowany nie tylko za pomocą tradycyjnych loaderów, ale także bezpośrednio wywoływany z firmware UEFI.
Możliwość wywołania z UEFI pozwala na wykorzystanie weryfikacji integralności i autentyczności za pomocą podpisu cyfrowego, obejmującego nie tylko jądro, ale także zawartość initrd. Dodatkowo, wsparcie dla wywołania z tradycyjnych loaderów pozwala na zachowanie takich możliwości, jak dostarczanie wielu wersji jądra oraz automatyczny powrót do działającego jądra w przypadku wykrycia problemów z nowym jądrem po aktualizacji.
Obecnie w większości dystrybucji systemu Linux w trakcie inicjalizacji stosuje się łańcuch „firmware → zatwierdzona podpisem cyfrowym Microsofta warstwa shim → zatwierdzony podpisem cyfrowym dystrybucji bootloader GRUB → zatwierdzone podpisem cyfrowym dystrybucji jądro Linux → niezbadane środowisko initrd → system plików root”. Brak weryfikacji initrd w tradycyjnych dystrybucjach stwarza problemy z bezpieczeństwem, ponieważ między innymi w tym środowisku odbywa się ekstrakcja kluczy do odszyfrowania systemu plików root.
Weryfikacja obrazu initrd nie jest wspierana, ponieważ ten plik jest generowany na lokalnym systemie użytkownika i nie może być zatwierdzony cyfrowym podpisem dystrybucji, co bardzo komplikuje organizację sprawdzania przy użyciu trybu SecureBoot (aby zatwierdzić initrd, użytkownik musi wygenerować własne klucze i załadować je do firmware UEFI). Ponadto, obecna organizacja ładowania nie pozwala na wykorzystanie informacji z rejestrów TPM PCR (Platform Configuration Register) do kontrolowania integralności komponentów przestrzeni użytkownika, poza shim, grub i jądrem. Wśród istniejących problemów wspomniano również o komplikacjach związanych z aktualizacją bootloadera oraz braku możliwości ograniczenia dostępu do kluczy w TPM dla starszych wersji systemów operacyjnych, które stały się nieaktualne po zastosowaniu aktualizacji.
Główne cele wdrożenia nowej architektury ładowania:
- Zapewnienie w pełni zweryfikowanego procesu ładowania, obejmującego wszystkie etapy od firmware do przestrzeni użytkownika, oraz potwierdzającego autentyczność i integralność ładowanych komponentów.
- Powiązanie kontrolowanych zasobów z rejestrami TPM PCR z podziałem na właścicieli.
- Możliwość wcześniejszego obliczenia wartości PCR na podstawie używanych podczas ładowania jądra, initrd, konfiguracji i lokalnego identyfikatora systemu.
- Ochrona przed atakami typu Rollback, związanymi z powrotem do wcześniejszej, podatnej wersji systemu.
- Uproszczenie i zwiększenie niezawodności aktualizacji.
- Wsparcie aktualizacji systemu operacyjnego, które nie wymagają ponownego zastosowania ani lokalnego przygotowania zasobów zabezpieczonych przez TPM.
- Gotowość systemu do przeprowadzenia zdalnej atestacji w celu potwierdzenia poprawności ładowanego systemu operacyjnego i ustawień.
- Możliwość przypisania danych poufnych do określonych etapów ładowania, na przykład wydobywanie z TPM kluczy szyfrowania dla systemu plików root.
- Zapewnienie bezpiecznego, automatycznego i działającego bez udziału użytkownika procesu odblokowywania kluczy do deszyfrowania dysku z partycją root.
- Użycie chipów wspierających specyfikację TPM 2.0, z możliwością powrotu do systemów bez TPM.
Źródło: opennet.ru
