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
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).
- 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.
- 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
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
- Konfiguracja bezpiecznego rozruchu + TPM 2 (2018-06, Debian)
- Using the TPM - It's Not Rocket Science (Anymore) - Johannes Holland & Peter Huewe (2020-11, Youtube): przykłady dla OpenSSL z tpm2-tss-engine.
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. |
- 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
- Gentoo:Trusted Platform Module
- Narzędzie do testowania TPM-JS: kod źródłowy - wersja internetowa.