Trusted Platform Module (Polski)

From ArchWiki

This article or section needs expansion.

Reason: Potrzeba wyjaśnienia różnic w użytkowaniu TPM 1.2 i 2.0, obrony przed atakiem Evil Maid i Trusted boot. Uszczelnianie rejestrów PCR i używanie w połączeniu z LUKS. (Discuss in Talk:Trusted Platform Module (Polski))

Trusted Platform Module (TPM) to międzynarodowy standard bezpiecznego kryptoprocesora, który jest dedykowanym mikroprocesorem zaprojektowanym do zabezpieczania sprzętu poprzez integrację kluczy kryptograficznych w urządzeniach.

W praktyce TPM może być wykorzystywany do różnych zastosowań związanych z bezpieczeństwem, takich jak secure boot, przechowywanie kluczy i generowanie liczb losowych.

TPM jest oczywiście obsługiwany tylko na urządzeniach, które mają sprzętową obsługę TPM. Jeśli twój sprzęt obsługuje TPM, ale nie jest wyświetlany, może być konieczne włączenie go w ustawieniach BIOS-u.

Wersje

Istnieją dwie bardzo różne specyfikacje TPM: 2.0 i 1.2, które również używają różnych stosów oprogramowania. Ten artykuł opisuje tylko TPM 2.0, dla starszego TPM 1.2 zobacz /1.2 (Polski).

TPM 2.0 umożliwia bezpośredni dostęp przez /dev/tpm0 (jeden klient na raz), dostęp zarządzany przez jądro przez /dev/tpmrm0 lub dostęp zarządzany przez demona zarządzającego zasobami tpm2-abrmd. Według członka projektu systemd, używanie tpm2-abrmd nie jest już zalecane. Istnieją dwie opcje narzędzi przestrzeni użytkownika, tpm2-tools firmy Intel i ibm-tssAUR firmy IBM.

TPM 2.0 wymaga rozruchu UEFI; systemy rozruchowe BIOS lub Legacy mogą korzystać tylko z TPM 1.2.

Niektóre układy TPM można przełączać między wersjami 2.0 i 1.2 poprzez aktualizację oprogramowania układowego (którą można wykonać tylko ograniczoną liczbę razy).

Użycie

This article or section needs expansion.

Reason: Ta sekcja to tylko fragment. Możesz pomóc, rozszerzając ją o informacje na temat konfigurowania i używania urządzenia TPM 2.0. (Discuss in Talk:Trusted Platform Module (Polski))

Wiele zasobów informacyjnych na temat konfigurowania i korzystania z usług TPM 2.0 w codziennych zastosowaniach jest dostępnych na stronie społeczności tpm2-software.

Sprawdzanie wsparcia

Układ TPM 2.0 jest wymagany dla komputerów certyfikowanych do uruchamiania systemu Windows 10 od 2016-07-28.[1]. Linux obsługuje TPM 2.0 od wersji 3.20[2] i nie powinien wymagać żadnych innych kroków do włączenia w domyślnej instalacji Arch.

Dwa sposoby sprawdzenia, czy TPM 2.0 jest skonfigurowany bez specjalnego oprogramowania:

  • sprawdzenie logów, np. poprzez uruchomienie journalctl -k --grep=tpm jako root
  • odczytanie wartości /sys/class/tpm/tpm0/device/description[3] lub /sys/class/tpm/tpm0/tpm_version_major

Szyfrowanie danych w spoczynku (at-rest) za pomocą LUKS

Istnieją dwie metody odblokowania woluminu LUKS przy użyciu modułu TPM. Można użyć Clevis lub #systemd-cryptenroll.

Korzystając z obu metod, zaszyfrowany wolumin lub woluminy można odblokować za pomocą kluczy przechowywanych w module TPM, automatycznie podczas rozruchu lub ręcznie w późniejszym czasie. Użycie TPM do tego celu gwarantuje, że dyski nie zostaną odblokowane, chyba że spełnione zostaną określone warunki, takie jak brak modyfikacji oprogramowania układowego i brak wyłączenia Secure Boot (patrz #Dostęp do rejestrów PCR).

Warning: Jeśli użyjesz tej metody na woluminie głównym, oznacza to, że tak długo, jak wspomniane wcześniej warunki są spełnione, komputer odblokuje się automatycznie podczas uruchamiania bez konieczności wprowadzania hasła szyfrowania.
  • Oznacza to, że dostęp do danych jest chroniony w przypadku kradzieży tylko zaszyfrowanego dysku, ale nie w przypadku kradzieży całego komputera.
  • Należy pamiętać, że ta metoda zwiększa podatność na ataki zimnego rozruchu, ponieważ nawet jeśli komputer był wyłączony przez długi czas (zapewniając całkowite wyczyszczenie pamięci), atakujący może po prostu włączyć go i poczekać, aż moduł TPM automatycznie załaduje klucz. Może to stanowić zagrożenie dla celów o wysokiej wartości.

systemd-cryptenroll

Zobacz systemd-cryptenroll#Trusted Platform Module.

SSH

W przypadku kluczy SSH zabezpieczonych TPM dostępne są dwie opcje:

  • ssh-tpm-agent — Agent kompatybilny z ssh-agent używający kluczy wspieranych przez TPM.
https://github.com/Foxboron/ssh-tpm-agent || ssh-tpm-agent-gitAUR
Zobacz Przechowywanie kluczy ssh wewnątrz modułu TPM: ssh-tpm-agent.
  • tpm2-pkcs11 — Interfejs PKCS#11 dla sprzętu Trusted Platform Module 2.0.
https://github.com/tpm2-software/tpm2-pkcs11 || tpm2-pkcs11
Zobacz Konfiguracja SSH i Używanie TPM do uwierzytelniania SSH (2020-01).

GnuPG

This article or section needs expansion.

Reason: Dodanie instrukcji sprawdzania modułu TPM w celu określenia obsługiwanych przez niego kluczy. (Discuss in Talk:Trusted Platform Module (Polski))

GnuPG, od wersji 2.3, obsługuje przenoszenie kompatybilnych kluczy do TPM. Instrukcje można znaleźć na stronie Używanie TPM z GnuPG 2.3.

Inne dobre przykłady wykorzystania TPM 2.0

Dostęp do rejestrów PCR

Rejestry konfiguracji platformy (PCR) zawierają skróty, które można odczytać w dowolnym momencie, ale można je zapisać tylko za pomocą operacji rozszerzenia, która zależy od poprzedniej wartości skrótu, tworząc w ten sposób rodzaj łańcucha bloków. Są one przeznaczone do sprawdzania integralności sprzętu i oprogramowania platformy między uruchomieniami (np. ochrona przed atakiem Evil Maid). Mogą być używane do odblokowywania kluczy szyfrujących i udowadniania, że uruchomiono prawidłowy system operacyjny.

Specyfikacja TCG PC Client Specific Platform Firmware Profile Specification definiuje używane rejestry, a rejestr Linux TPM PCR przypisuje używające ich komponenty systemu Linux.

Rejestry są następujące:

PCR Użycie Uwagi
PCR0 Kod wykonywalny oprogramowania układowego systemu głównego (inaczej oprogramowanie układowe) Może ulec zmianie po aktualizacji UEFI
PCR1 Dane oprogramowania układowego systemu podstawowego (inaczej ustawienia UEFI)
PCR2 Rozszerzony lub rozszerzalny kod wykonywalny
PCR3 Rozszerzone lub podłączane dane oprogramowania układowego Ustawienie podczas fazy rozruchu Boot Device Select UEFI
PCR4 Kod menedżera rozruchu i próby rozruchu Mierzy menedżera rozruchu i urządzenia, z których oprogramowanie sprzętowe próbowało uruchomić komputer.
PCR5 Konfiguracja i dane menedżera rozruchu Może mierzyć konfigurację programów ładujących; zawiera tabelę partycji GPT
PCR6 Wznowienie od zdarzeń stanu zasilania S4 i S5
PCR7 Stan bezpiecznego rozruchu Zawiera pełną zawartość PK/KEK/db, a także określone certyfikaty używane do walidacji każdej aplikacji rozruchowej[4].
PCR81 Hash wiersza poleceń jądra Obsługiwane przez grub i systemd-boot.
PCR91 Hash opcji ładowania initrd i EFI Linux mierzy opcje ładowania initrd i EFI, zasadniczo opcje cmdline jądra.
PCR101 Zarezerwowane do wykorzystania w przyszłości
PCR111 Hash zunifikowanego obrazu jądra. zobacz systemd-stub(7)
PCR121 Nadpisany wiersz poleceń jądra, Poświadczenia zobacz systemd-stub(7)
PCR131 Rozszerzenia systemowe zobacz systemd-stub(7)
PCR141 shim - MokList, MokListX i MokSBState. [5]
PCR151 Nieużywany
PCR161 Debug Może być używany i resetowany w dowolnym momencie. Może nie występować w oficjalnej wersji oprogramowania sprzętowego.
PCR23 Obsługa aplikacji System operacyjny może ustawić i zresetować ten PCR.
  1. Przypadek użycia zdefiniowany przez system operacyjny i może się różnić w zależności od różnych dystrybucji Linuksa i urządzeń z systemem Windows.

W systemie Windows BitLocker używa PCR8-11 (Legacy) lub PCR11-14 (UEFI) do własnych celów. Dokumentacja od tianocore[6].

tpm2-totp ułatwia tę kontrolę za pomocą ludzkiego obserwatora i dedykowanego zaufanego urządzenia.

Bieżące wartości PCR można wyświetlić za pomocą systemd-analyze(1):

$ systemd-analyze pcrs

Lub alternatywnie z tpm2_pcrread(1) z tpm2-tools:

# tpm2_pcrread

Rozwiązywanie problemów

Odblokowanie TPM2 LUKS2 nadal wymaga podania hasła

Jeśli postępowałeś zgodnie z instrukcja opisana powyżej w celu automatycznego odblokowania urządzeń luks2 z zarejestrowanymi kluczami w module sprzętowym TPM2, ale nadal otrzymujesz monit o wprowadzenie hasła podczas etapu rozruchu initramfs. Konieczne może być wczesne załadowanie modułu jądra (jego nazwę można uzyskać za pomocą systemd-cryptenroll --tpm2-device=list), który jest odpowiedzialny za obsługę konkretnego modułu TPM2.

Zobacz także