Potpuni vodič za /dev/tpm0, /dev/tpmrm0 i naredbe tpm2_pcrread i tpm2_pcr_extend u Linuxu

  • TPM 2.0 omogućuje izmjerene boot i LUKS ključeve vezane za PCR-ove, idealno s PBA PIN-om.
  • Za upravljanje PCR-ima koristite /dev/tpmrm0 i tpm2_pcrread/tpm2_pcrextend.
  • Potpisana UKI + PCR politika stabilizira ažuriranja bez gubitka sigurnosti.
  • Ublažite hladno pokretanje i njuškanje pomoću PBA i šifriranja parametara; održavajte oporavak.

TPM i tpm2 naredbe u Linuxu

Posljednjih godina, TPM 2.0 moduli su od hardverske misterije postali uobičajeni dio svakog modernog računala s UEFI-jem i Secure Bootom. Ovaj članak objašnjava što su /dev/tpm0 i /dev/tpmrm0 te kako koristiti tpm2_pcrread i tpm2_pcrextend. (kao i njegovu stvarnu naredbu u tpm2-tools), kao i objašnjenje kako se uklapaju u politike izmjerenog pokretanja, šifriranja diska i potpisanog PCR-a u Linuxu.

Korisna dokumentacija postoji, ali je razasuta među stranicama priručnika systemd, wiki unosima i vrlo gustim objavama; Ovdje prikupljamo sve ključne informacije (PCR-ove, praktične primjere, rizike i obranu) tako da tehničari, čak i ako nisu stručnjaci za TPM, mogu raditi s tim alatima bez da se izgube u nejasnim detaljima.

Što je TPM 2.0 i zašto bi vas to moglo zanimati

Modul pouzdane platforme (Trusted Platform Module) je sigurnosni čip koji se nalazi na vašoj matičnoj ploči (ili unutar CPU-a poput fTPM/Intel PTT) i djeluje kao sigurna pohrana, generator slučajnih brojeva i korijen povjerenja za sustav. Pasivan je: ako ga ne koristite, ne radi ništa., ali kada ga integrirate u tijek pokretanja i šifriranje diska, pruža provjeru integriteta i hardverski zaštićene ključeve.

U praksi, TPM 2.0 omogućuje dva glavna načina korištenja šifriranja diska: a) generiranje/spremanje snažnog ključa i zaštitu njegove upotrebe PIN-om s anti-brute force zaključavanjem; b) aktiviranje tzv. izmjerenog pokretanja, gdje Svaka komponenta čizma mjeri se u PCR zapisima, tako da se ključ "otpakira" samo ako sustav nije bio mijenjan (i opcionalno s PIN-om prije pokretanja).

/dev/tpm0 i /dev/tpmrm0: razlike i kada koristiti svaki od njih

Na Linuxu ćete vidjeti dva znakovna uređaja kada je dostupan TPM 2.0. /dev/tpm0 je "sirovo" sučelje TPM-aDok /dev/tpmrm0 omogućava pristup putem Upravitelja resursa (upravitelj koji umnožava klijente, upravlja sesijama i resursima), a upravo ga tpm2-tools preporučuje u većini scenarija.

Ako niste sigurni postoji li TPM ili ne, možete ga testirati u radu. Ako je /sys/class/tpm/ prazan ili wiki naredba ne vraća ništa, TPM nije vidljiv: Možda fizički ne postoji ili je onemogućen u firmveru.

# ¿Hay TPM 2.0?
ls /sys/class/tpm/
cat /sys/class/tpm/tpm*/tpm_version_major
# Dispositivos
ls -l /dev/tpm*

Kada su oba čvora uređaja prisutna, tpm2-tools će normalno detektirati /dev/tpmrm0 i automatski ga koristiti. Ako trebate prisilno aktivirati uređaj, većina alata prihvaća –tcti ili koristite TCTI varijable okruženja, ali za uobičajene zadatke to obično nije potrebno.

TPM PCR-ovi: Kako funkcioniraju i što mjere

Registri konfiguracije platforme su zapisi koji pohranjuju hash-ove (obično SHA-256) stanja kritičnih komponenti u svakoj fazi pokretanja. Inicijaliziraju se na nulu prilikom uključivanja i mogu se samo "proširiti".: nikada ne prepisivati ​​ili brisati (osim u slučajevima otklanjanja grešaka poput PCR 16).

Osnovna operacija je proširenje: nova_vrijednost = SHA256(trenutna_vrijednost || SHA256(podaci))Na ovaj način su mjerenja povezana bez dopuštanja oportunističkih resetiranja. Ovaj se obrazac koristi za mjerenje firmvera, konfiguracije, Secure Boota, kernela, initrd-a i parametara kernela, između ostalog.

Na modernoj opremi vidjet ćete 24 PCR-a (0–23). Najrelevantniji u UEFI pokretanju sa systemd-om su:
– PCR 0: kod firmvera.
– PCR 1: konfiguracija firmvera (UEFI postavke).
– PCR 7: Status sigurnog pokretanja i certifikati kojima vjeruje.
– PCR 9: initrd(i) izmjereni jezgrom.
– PCR 11: UKI (Unified Kernel Image) i fazne oznake putem systemd-stub/systemd-pcrphase.
– PCR 12: naredbeni redak kernela.

Čitajte i proširite PCR-ove pomoću tpm2-alata: tpm2_pcrread i tpm2_pcr_extend

U tpm2-toolsima čitanje se vrši pomoću tpm2_pcrread i produžetak s tpm2_pcrextendPonekad ćete vidjeti "tpm2_pcr_extend" kao konceptualnu operaciju proširenja, ali Stvarna naredba paketa je tpm2_pcrextend.

Za provjeru trenutnog statusa PCR-ova SHA-256, jednostavno je kao:

# Leer PCRs en SHA-256 (ejemplos de índices habituales)
sudo tpm2_pcrread sha256:0,1,7,9,11,12

# O todos los PCRs SHA-256 disponibles
tpm2_pcrread sha256:all

Za proširenje PCR-a s hashom proizvoljnih podataka (kao pedagoški primjer, hash od /etc/passwd), izračunajte SHA-256 i proširite ga. Zapamtite: TPM ne prima ogromne podatke, već njihov hash, prema ograničenjima i dizajnu.

# 1) Guardar el hash de /etc/passwd
echo -n $(sha256sum /etc/passwd | cut -d' ' -f1) > passwd.sha

# 2) Extender PCR 7 (ejemplo) con el hash previo
sudo tpm2_pcrextend 7:sha256=$(cat passwd.sha)

# 3) Ver el nuevo valor del PCR 7
tpm2_pcrread sha256:7

Ako želite reproducirati matematiku proširenja izvan TPM-a, Spajate trenutnu PCR vrijednost (binarnu) s novim hashom i ponovno primjenjujete SHA-256 kako biste provjerili rezultat.

Može li se PCR resetirati?

U normalnim uvjetima, ne. Filozofija je da PCR raste samo s ekstenzijama.Postoji jedna iznimka: PCR 16 je obično rezerviran za "otklanjanje pogrešaka" i može se resetirati u određenim tokovima, ali nije koristan kao sigurnosni korijen vaše politike.

Izmjereno bootiranje, LUKS i systemd-cryptenroll: Spajanje dijelova

Kada integrirate TPM u šifriranje diska, možete "povezati" otključavanje ključa sa skupom PCR-ova. Ako u trenutnom pokretanju ti PCR-ovi imaju iste vrijednosti kao kada ste registrirali ključ, TPM se otpečaćuje i LUKS volumen se automatski otvara (sa ili bez PIN-a prije pokretanja, ovisno o vašoj konfiguraciji).

To se vrlo lijepo radi sa systemd-cryptenroll i systemd-cryptsetup. Ideja je stvoriti volumen, registrirati TPM ključ i dodati ključ za oporavak. tako da ne budete isključeni ako se mjerenja promijene (na primjer, nakon ažuriranja firmvera ili kernela).

# Ejemplo: crear LUKS, matricular TPM y añadir recuperación (pseudoflujo)
# 1) Crear el volumen con contraseña temporal
sudo cryptsetup luksFormat /dev/nvme0n1p2

# 2) Matricular TPM en LUKS usando PCRs concretos y PIN
sudo systemd-cryptenroll \
  --tpm2-device=auto \
  --tpm2-with-pin=yes \
  --tpm2-pcrs=1+2+3+4 \
  --wipe-slot=empty \
  /dev/nvme0n1p2

# 3) Añadir clave de recuperación aleatoria
sudo systemd-cryptenroll --recovery-key /dev/nvme0n1p2

# 4) Abrir con TPM o con recovery cuando proceda
systemd-cryptsetup attach root /dev/nvme0n1p2 - tpm2-device=auto

Ako prisilite na nesklad (npr. namjerno produžujete PCR 4), TPM više neće otpuštati ključ i morat ćete koristiti ključ za oporavak. Kasnije možete ponovno registrirati TPM s novim trenutnim vrijednostima pomoću –wipe-slot=tpm2 i još jedno izvršavanje systemd-cryptenrolla.

Koje PCR testove odabrati i zašto

Što više relevantnih PCR-ova povežete, to više smanjujete površinu, ali češće ćete se morati ponovno registrirati nakon legitimnih promjena. Neki praktični kriteriji:
– PCR 7 (Secure Boot): Trebao bi biti vrlo stabilan ako se vaš skup ključeva ne mijenja.
– PCR 0/1 (firmware i konfiguracija): Rijetko se mijenjaju; potrebna je ponovna registracija nakon ažuriranja firmwarea ili promjene BIOS-a/UEFI-ja.
– PCR 9/11/12 (kernel, initrd, UKI i cmdline): Ovo se često mijenja ako ne koristite UKI ili stabilni potpis/pravila.

U nekim okruženjima je uočeno povezivanje samo PCR 7, oslanjajući se na Secure Boot koji provjerava kernel i initrd ako su pokrenuti kao potpisani UKI i koristi systemd-boot koji ne dopušta uređivanje parametara kernela kada je SB aktivanTo funkcionira, ali ako se vaše sigurno pokretanje oslanja na ključeve trećih strana (kao što je Microsoft 3rd Party), lakše je orkestrirati alternativno pokretanje koje čuva PCR 7 i stoga... Nije najrestriktivnija opcija.

Potpisane politike UKI i PCR: stabilnost bez gubitka sigurnosti

Praktično rješenje za izbjegavanje ponovne registracije svaki put kada ažurirate kernel je korištenje UKI (Unified Kernel Image) i potpisana PCR politikaGenerirate par ključeva, vežete javni ključ s TPM-om prilikom registracije i potpisujete svoj UKI nakon svakog ažuriranja. TPM vjeruje tom potpisu i dopušta otključavanje čak i ako se promijeni specifični hash kernela.

Alat systemd-measure i pomoćnik systemd-ukify to olakšavaju: ukify pakete kernel, initrd i cmdline u UKI (obično se mjeri u PCR 11) i systemd-measure potpisuje politiku. Pomoću mkinitcpio-a, ukify se može integrirati tako da nakon instalacije potpis se izvršava sam od sebe.

# Esquema típico (pseudocomandos)
# 1) Crear claves para política PCR firmada
openssl genpkey -algorithm RSA -out /etc/kernel/pcr-initrd.key.pem -pkeyopt rsa_keygen_bits:3072
openssl req -new -x509 -key /etc/kernel/pcr-initrd.key.pem -out /etc/kernel/pcr-initrd.pub.pem -subj "/CN=UKI PCR Policy"

# 2) Configurar ukify/mkinitcpio para generar UKI y firmar política
# (consultar man ukify y systemd-measure para parámetros)

# 3) Matricular en LUKS atando PCRs y clave pública de la política
sudo systemd-cryptenroll \
  --tpm2-device=auto \
  --wipe-slot=tpm2 \
  --tpm2-with-pin=yes \
  --tpm2-pcrs=0+1+2+7 \
  --tpm2-public-key=/etc/kernel/pcr-initrd.pub.pem \
  --tpm2-public-key-pcrs=11 \
  /dev/nvme0n1p2

Na taj način, Vaša politika ostaje stabilna u odnosu na promjene kernela/initrd-a sve dok nastavite potpisivati ​​UKI svojim ključem.Ako obnovite lozinke ili promijenite PCR set, morat ćete se ponovno registrirati.

Primjeri lanaca mjerenja sa systemd-om

Tijekom pokretanja, systemd-stub i systemd-pcrphase produžuju PCR-ove u određeno vrijeme. Na primjer, "enter-initrd" je zabilježen u PCR 11, što omogućuje da otključavanje bude valjano samo unutar initrd-a (smanjenje vektora gdje napadač kasnije pokušava ponovno upotrijebiti ključ).

U sustavima s UKI-jem, sadržaj UKI-ja mjeri se u PCR 11; u sustavima bez UKI-ja, kernel mjeri initrd-ove u PCR-u 9 i bootloader može mjeriti cmdline u PCR 12. Obavezno obuhvatite initrd i cmdline u svojoj politici, inače bi netko mogao stražnja vrata initrd ili pokretanje sa zlonamjernom cmdline naredbom poput init=/bin/bash.

Pravi rizici: hladno pokretanje, TPM njuškanje i još mnogo toga

Što može poći po zlu? Nekoliko stvari koje treba znati prilikom modeliranja prijetnji. Napadi hladnog pokretanja su i dalje održivi: ako je otključavanje potpuno automatsko, napadač može ponavljati neograničen broj pokušaja. Jasno ublažavanje je zahtijevanje PIN-a prije pokretanja (PBA), smanjujući pokušaje na jedan po ciklusu uključivanja/isključivanja.

Druga kategorija je napadi njuškanjem na TPM sabirnicuCPU traži ključ, TPM ga šalje; ako se veza prisluškuje, ključ može procuriti. U tu svrhu, systemd implementira "šifriranje parametara" tako da je razmjena šifrirana; alternativno, korištenje fTPM/Intel PTT-a ili šifrirane memorije smanjuje izloženost. Postoje relativno pristupačne javne demonstracije (čak i s mikrokontrolerima) koje ilustriraju izvedivost na prijenosnim računalima glavnih marki.

Također je bilo akademskih i praktičnih slabosti: TPM-Fail, faultTPM (sa značajnim utjecajem na AMD) i slučaj bitpixie (CVE-2023-21563)To ne znači da je TPM beskoristan, ali trebali biste ažurirati firmware, razumjeti svoj model prijetnje i ne vjerovati mu slijepo.

Status BitLockera u odnosu na ove prijetnje

U svijetu Windowsa, najraširenija šifra diska je BitLocker. Sada je primijećeno da njegova zadana konfiguracija (automatsko otključavanje samo s TPM-om) Ostavlja vrata otvorena i za hladno pokretanje i za TPM njuškanje kanala, jer ne implementira šifriranje parametara u stilu systemd-a. Zbog toga su određena korporativna računala ranjiva na napad u roku od nekoliko minuta.

Preporuka je omogućiti provjera autentičnosti prije pokretanja sustava putem pravila/registra ili CLI-ja, nešto što nije dovoljno dostupno prosječnom korisniku. Također, ne zaboravite provjeriti gdje je pohranjen ključ za oporavak: često se nalazi u korisnikovom Microsoft računu, koji To je još jedan kut rizika ako nije kontrolirano.

Ofenzivni/obrambeni trik: Zamijenite LUKS root kako biste prisilili svoju lozinku

Postoji zanimljiv vektor kada nema autentifikacije prije pokretanja. Napadač može klonirati pravu LUKS particiju, zamijenite ga drugim LUKS-om s istim UUID-om i lozinkom koju zna, i pokrenite računalo. Budući da se PCR mjerenja podudaraju, TPM otpušta ključ, ali se ne podudara s lažnim LUKS-om, pa će initrd zatražiti ključ za "oporavak". Unosom lozinke poznate napadaču, vaš sustav se pokreće kao root u initrd-u, a zatim možete orkestrirati krađu originalnog ključa (na primjer, montiranjem prave kopije preko mreže i korištenjem systemd-cryptsetup).

Jasne mjere ublažavanja: aktiviranje autentifikacije prije pokretanja, iskoristite systemd-pcrphase za vezanje otključavanja isključivo na initrd fazu i razmislite o mjerenju/povezivanju ciljnog LUKS volumena (zahtijeva pažljiv dizajn kako bi se izbjegli začarani krugovi).

Odabir particioniranja i drugog ključa: najbolja praksa

održavati ključ za oporavak Obavezno je: ako TPM ili matična ploča prestanu raditi, vaš ključ vezan za TPM je beskoristan. LUKS dopušta više utora (TPM koristi jedan, oporavak koristi drugi). Osim toga, odvajanje particija / i /home ima prednosti: možete primijeniti strogo mjerenje s TPM-om a/ i koristite jaki ključ ili FIDO2/YubiKey uređaj za /home, smanjujući ukupno povjerenje u jedan mehanizam.

Što se događa kada ažurirate firmware ili kernel?

Ako promijenite firmware ili dodirnete UEFI opcije, PCR-ovi poput 0/1 će se promijeniti i TPM neće otpustiti ključ dok ga ponovno ne upišete. Za kernel i initrd, promjene su česteAko ne koristite UKI s potpisanom policom, svako ažuriranje moglo bi vas prisiliti da koristite opciju oporavka i kasnije se ponovno registrirate. S potpisanim UKI-jem, samo ga potpišete i to je to.

Bilješke i zapažanja zajednice

U nekim popularnim vodičima za određene distribucije preporučuje se veži samo PCR 7 kad god koristiš UKI i systemd-boot, oslanjajući se na zaštitne mjere Secure Boota i nemogućnost uređivanja cmdlinea. Radi, ali postoje rizici ako se oslanjate na treće strane. U prošlosti je također dokumentirana greška gdje bi pritisak na Enter otvorio ljusku za oporavak nakon otključavanja; dobra je ideja ažurirati svoje verzije kako biste izbjegli iznenađenja.

Zanimljivi komentari podijeljeni su u sezoni 2025./06.: TPM greška i dalje utječe na AMD do određene mjere; wikiji su dodali posebne odjeljke o potpisanim PCR pravilima; a instalacijski program za distribuciju koja nudi FDE s TPM-om kao eksperimentalnu značajku testiran je, s nekim praktičnim problemima (zahtijevanje oporavka pri prvom pokretanju, ovisnost o snapshotima, dvostruko šifriranje diska), problem koji zaslužuje detaljniju reviziju.

Nastavak usmjeren na šifriranje diska u sustavu Windows objavljen je 2025./07. Opći zaključak pojačava potrebu za PBA i šifriranjem TPM kanala., kao i ograničavanje oslanjanja na ključeve trećih strana u Secure Bootu.

Savjeti za korištenje tpm2-tools i systemd

Za svakodnevnu upotrebu: Instalirajte tpm2-tools i tpm2-tss. Zadano koristi /dev/tpmrm0i tpm2_pcrread/tpm2_pcrextend za testiranje i eksperimentiranje s PCR-ima. Izbjegavajte proširivanje produkcijskih PCR-ova s ​​proizvoljnim podacima: učinite to u laboratorijima ili koristite PCR 16 za testiranje.

Prilikom registracije sa systemd-cryptenroll: –tpm2-uređaj=automatski detektira TPM; –tpm2-s-pinom dodaje PBA; –tpm2-pcrs=… odaberite svoje PCR-ove; –tpm2-public-key=… i –tpm2-public-key-pcrs=… aktivirajte potpisanu PCR policu (npr. vezanu uz PCR 11 za UKI). Ne zaboravite –utor za brisanje kada želite očistiti prethodni utor.

Ako nemate TPM i systemd vas tjera da čekate pri pokretanju

Povremeno, nakon ažuriranja, servis pokušava koristiti TPM iako ga vaš uređaj ne vidi, što uzrokuje istek vremena prilikom pokretanja. Prvo provjerite da se ne pojavljuje /dev/tpm* niti unose u /sys/class/tpm.

# Verificación rápida
ls /dev/tpm*
ls /sys/class/tpm/

Ako nema TPM-a, provjerite /etc/crypttab nemam opcije poput tpm2-device=autoAko postoje, izbrišite ih i ponovno izgradite initrd. Također možete onemogućiti fazu mjerenja na računalima bez TPM-a:

# 1) Eliminar referencias TPM en /etc/crypttab y regenerar initrd
sudo mkinitcpio -P    # (o dracut/rebuildinitrd según distro)

# 2) Evitar carga de módulos TPM si el firmware publica algo extraño
echo -e "blacklist tpm\nblacklist tpm_tis\nblacklist tpm_crb" | sudo tee /etc/modprobe.d/no-tpm.conf

# 3) Opcional: evitar pcrphase si te da problemas
sudo systemctl mask systemd-pcrphase.service

To eliminira nepotrebno čekanje ako vašoj opremi nedostaje TPM. Ako kasnije omogućite TPM u BIOS-u/UEFI-ju, uklonite crnu listu i demaskirajte jedinicu kako biste oporavili mjerenja.

Dobre prakse i odluke o povjerenju

Neki ljudi su oprezni prema TPM-u jer je to "crna kutija", baš kao i samošifrirajući diskovi. To je razumna sumnja. Procijenite svoj model prijetnje i uravnotežuje upotrebljivost, privatnost i održavanje. Za mnoge ljude, TPM+PBA+potpisani UKI predstavlja ogroman sigurnosni skok bez pretjeranih problema.

Na hardveru koji to dopušta, dodajte šifrirana memorija i izbjegavajte oslanjanje na ključeve trećih strana u Secure Bootu; ograničite lanac na vlastite ključeve kad god je to moguće. Redovito ažurirajte firmver i kernel kako biste uključili ublažavanja za objavljene ranjivosti.

Savladavanje operacija /dev/tpm0, /dev/tpmrm0 i tpm2_pcrread/tpm2_pcr_extend otvara vrata izmjerenom pokretanju i robusnom šifriranju diska u Linuxu; s UKI-jem i potpisanom PCR politikom postižete operativnu stabilnost, a dodavanje PIN-a prije pokretanja također vas štiti od praktičnijih napada. Ključno je dobro odabrati PCR-ove, često potpisivati ​​​​promjene i uvijek imati dobar ključ za oporavak..

Ubuntu 25.10 beta dolazi s Linux 6.17 kernelom
Povezani članak:
Ubuntu 25.10 beta stiže s Linuxom 6.17 i ključnim promjenama