Popoln vodnik za ukaze /dev/tpm0, /dev/tpmrm0 ter tpm2_pcrread in tpm2_pcr_extend v Linuxu

  • TPM 2.0 omogoča izmerjene zagonske in LUKS ključe, vezane na PCR-je, idealno s PIN-om PBA.
  • Za upravljanje PCR-jev uporabite /dev/tpmrm0 in tpm2_pcrread/tpm2_pcrextend.
  • Podpisana politika UKI + PCR stabilizira posodobitve brez izgube varnosti.
  • Zmanjšajte hladen zagon in vohanje s PBA in šifriranjem parametrov; ohranite obnovitev.

Ukaza TPM in tpm2 v Linuxu

V zadnjih letih so moduli TPM 2.0 iz strojne skrivnosti postali običajen del vsakega sodobnega računalnika z UEFI in Secure Boot. Ta članek pojasnjuje, kaj sta /dev/tpm0 in /dev/tpmrm0 ter kako uporabljati tpm2_pcrread in tpm2_pcrextend. (kot tudi njegov dejanski ukaz v orodjih tpm2), ter razlago, kako se v Linuxu ujemajo s pravilniki za merjenje zagona, šifriranje diska in podpisane PCR.

Koristna dokumentacija obstaja, vendar je raztresena med stranmi priročnika systemd, vnosi v wiki in zelo gostimi objavami; Tukaj zbiramo vse ključne informacije (PCR, praktični primeri, tveganja in obramba) tako da lahko tehnično osebje, tudi če ni strokovnjak za TPM, dela s temi orodji, ne da bi se izgubilo v nejasnih podrobnostih.

Kaj je TPM 2.0 in zakaj bi vas to lahko zanimalo

Modul zaupanja vredne platforme (Trusted Platform Module) je varnostni čip, ki se nahaja na vaši matični plošči (ali v procesorju, kot je fTPM/Intel PTT) in deluje kot varno shrambo, generator naključnih števil in koren zaupanja za sistem. Je pasiven: če ga ne uporabljaš, ne naredi ničesar., ko pa ga integrirate v zagonski tok in šifriranje diska, zagotavlja preverjanje integritete in strojno zaščitene ključe.

V praksi vam TPM 2.0 omogoča dva glavna načina uporabe pri šifriranju diska: a) generiranje/shranjevanje močnega ključa in zaščito njegove uporabe s PIN-om z zaščito pred grobo silo; b) aktiviranje tako imenovanega izmerjenega zagona, kjer Vsaka komponenta škornja se meri v zapisih PCR, zato je ključ »odpakiran« le, če sistem ni bil spremenjen (in po izbiri s PIN-om pred zagonom).

/dev/tpm0 in /dev/tpmrm0: razlike in kdaj uporabiti vsakega od njih

V Linuxu boste videli dve znakovni napravi, ko je na voljo TPM 2.0. /dev/tpm0 je »surovi« vmesnik TPM-jaMedtem ko je /dev/tpmrm0 omogoča dostop prek upravitelja virov (upravljalnik, ki množi odjemalce, upravlja seje in vire), ki ga tpm2-tools priporoča v večini scenarijev.

Če niste prepričani, ali TPM obstaja ali ne, ga lahko preizkusite z vročim delovanjem. Če je /sys/class/tpm/ prazen ali ukaz wiki ne vrne ničesar, TPM ni viden: Morda fizično ne obstaja ali pa je onemogočen v vdelani programski opremi.

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

Ko sta prisotni obe vozlišči naprav, bo tpm2-tools običajno zaznal /dev/tpmrm0 in ga samodejno uporabil. Če morate napravo prisiliti, večina orodij sprejema –tcti ali uporabite okoljske spremenljivke TCTI, vendar za običajna opravila to običajno ni potrebno.

TPM PCR: Kako delujejo in kaj merijo

Registri konfiguracije platforme so zapisi, ki shranjujejo zgoščene vrednosti (običajno SHA-256) stanja kritičnih komponent v vsaki fazi zagona. Ob vklopu se inicializirajo na nič in jih je mogoče le "razširiti".: nikoli ne prepisuj ali briši (razen v primerih odpravljanja napak, kot je PCR 16).

Osnovna operacija je razširitev: nova_vrednost = SHA256(trenutna_vrednost || SHA256(podatki))Tako so meritve povezane skupaj, ne da bi bile dovoljene oportunistične ponastavitve. Ta vzorec se uporablja za merjenje vdelane programske opreme, konfiguracije, varnega zagona, jedra, initrd in parametrov jedra, med drugim.

Na sodobni opremi boste videli 24 PCR (0–23). Najpomembnejši pri zagonu UEFI s systemd so:
– PCR 0: koda vdelane programske opreme.
– PCR 1: konfiguracija vdelane programske opreme (nastavitve UEFI).
– PCR 7: Stanje varnega zagona in potrdila, ki jim zaupa.
– PCR 9: initrd(i), izmerjene z jedrom.
– PCR 11: UKI (Unified Kernel Image) in fazne oznake prek systemd-stub/systemd-pcrphase.
– PCR 12: ukazna vrstica jedra.

Branje in razširitev PCR-jev z orodji tpm2: tpm2_pcrread in tpm2_pcr_extend

V orodjih tpm2 se branje izvede z tpm2_pcrread in podaljšek z tpm2_pcrextendVčasih boste videli »tpm2_pcr_extend« kot konceptualno operacijo razširjanja, vendar Dejanski ukaz paketa je tpm2_pcrextend.

Za pregled trenutnega stanja PCR-jev SHA-256, je tako preprosto kot:

# 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 razširitev PCR z zgoščeno vrednostjo poljubnih podatkov (kot pedagoški primer, zgoščena vrednost /etc/passwd), izračunajte SHA-256 in jo razširite. Ne pozabite: TPM ne prejema ogromnih podatkov, temveč njihovo zgoščeno vrednost (hash)., zaradi omejitev in zasnove.

# 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

Če želite reproducirati matematično obdelavo razširitve zunaj TPM-ja, Trenutno vrednost PCR (binarno) združite z novo zgoščeno vrednostjo in ponovno uporabite SHA-256, da preverite rezultat.

Ali je mogoče PCR ponastaviti?

V normalnih pogojih ne. Filozofija je, da PCR raste le z razširitvamiObstaja ena izjema: PCR 16 je običajno rezerviran za »odpravljanje napak« in ga je mogoče v določenih tokovih ponastaviti, vendar ni uporaben kot varnostni koren vaše politike.

Izmerjeni zagon, LUKS in systemd-cryptenroll: Sestavljanje koščkov

Ko TPM integrirate v šifriranje diska, lahko odklepanje ključa »povežete« na niz PCR-jev. Če imajo v trenutnem zagonu ti PCR-ji enake vrednosti kot pri registraciji ključa, se TPM odpečati in nosilec LUKS se samodejno odpre (z ali brez PIN-a pred zagonom, odvisno od vaše konfiguracije).

To se zelo lepo naredi s systemd-cryptenroll in systemd-cryptsetup. Ideja je ustvariti svoj nosilec, vpisati ključ TPM in dodati ključ za obnovitev. tako da ne boste izpuščeni, če se meritve spremenijo (na primer po posodobitvi vdelane programske opreme ali jedra).

# 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

Če vsiliš neskladje (npr. PCR 4 namerno podaljšujete), TPM ne bo več sprostil ključa in boste morali uporabiti obnovitveni ključ. TPM lahko pozneje ponovno vpišete z novimi trenutnimi vrednostmi z uporabo –wipe-slot=tpm2 in še ena izvedba systemd-cryptenroll.

Katere PCR teste izbrati in zakaj

Več ustreznih PCR-jev kot povežete, večjo površino zmanjšate, vendar se boste morali po legitimnih spremembah pogosteje ponovno registrirati. Nekaj ​​praktičnih meril:
– PCR 7 (Secure Boot): Če se vaš nabor ključev ne spremeni, bi moral biti zelo stabilen.
– PCR 0/1 (vdelana programska oprema in konfiguracija): Te se redko spreminjajo; po posodobitvi vdelane programske opreme ali spremembi BIOS-a/UEFI-ja je potrebna ponovna registracija.
– PCR 9/11/12 (jedro, initrd, UKI in cmdline): Te se pogosto spreminjajo, če ne uporabljate UKI ali stabilnega podpisa/pravilnika.

V nekaterih okoljih je bilo opaziti povezavo samo s PCR 7, pri čemer se je zanašal na Secure Boot, ki je preveril jedro in initrd, če sta zagnana kot podpisan UKI, in uporabil systemd-boot, ki ne dovoljuje urejanja parametrov jedra, ko je SB aktivenTo deluje, če pa vaš Secure Boot uporablja ključe drugih proizvajalcev (kot je Microsoft 3rd Party), je lažje orkestrirati alternativni zagon, ki ohranja PCR 7 in zato... To ni najbolj omejujoča možnost.

Podpisani pravili UKI in PCR: stabilnost brez izgube varnosti

Praktična rešitev, s katero se izognete ponovni registraciji vsakič, ko posodobite jedro, je uporaba UKI (Unified Kernel Image) in podpisana politika PCRUstvarite par ključev, ob registraciji povežete javni ključ s TPM in po vsaki posodobitvi podpišete svoj UKI. TPM zaupa temu podpisu in omogoča odklepanje, tudi če se spremeni specifična zgoščena vrednost jedra.

Orodje systemd-measure in pomočnik systemd-ukify to olajšata: ukify pakete kernel, initrd in cmdline v UKI (običajno merjeno v PCR 11) in systemd-measure podpiše pravilnik. Z mkinitcpio je mogoče ukify integrirati tako, da po namestitvi Podpis se izvede sam.

# 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 ta način oz. Vaša politika ostane stabilna glede na spremembe jedra/initrda, dokler še naprej podpisujete UKI s svojim ključem.Če obnovite gesla ali spremenite komplet PCR, se boste morali ponovno vpisati.

Primeri merilnih verig s systemd

Med zagonom systemd-stub in systemd-pcrphase podaljšata PCR-je ob določenih časih. Na primer, »enter-initrd« je zapisan v PCR 11, kar omogoča, da je odklepanje veljavno le znotraj initrd-a (zmanjšanje vektorjev, kjer napadalec poskuša pozneje ponovno uporabiti ključ).

V sistemih z UKI se vsebnost UKI meri v PCR 11; v sistemih brez UKI pa Jedro meri initrde v PCR 9 in zagonski nalagalnik lahko izmeri ukazno vrstico (cmdline) v PCR 12. Prepričajte se, da v svojo politiko zajamete initrd in cmdline, sicer bi lahko kdo zadnja vrata initrd ali zagon z zlonamerno ukazno vrstico, kot je init=/bin/bash.

Resnična tveganja: hladen zagon, vohanje TPM in drugo

Kaj lahko gre narobe? Nekaj ​​stvari, ki jih je treba vedeti pri modeliranju groženj. Napadi s hladnim zagonom so še vedno izvedljivi: če je odklepanje popolnoma samodejno, lahko napadalec ponovi neomejeno število poskusov. Jasna omilitev je zahteva po PIN-u pred zagonom (PBA), kar zmanjša poskuse na enega na vklop/izklop.

Druga kategorija je napadi vohanja na vodilo TPMCPU zahteva ključ, TPM ga pošlje; če se povezava prisluškuje, lahko ključ uide. V ta namen systemd izvaja "šifriranje parametrov", tako da je izmenjava šifrirana; alternativno pa uporaba fTPM/Intel PTT ali šifriranega pomnilnika zmanjša izpostavljenost. Obstajajo relativno cenovno dostopne javne demonstracije (tudi z mikrokrmilniki), ki ponazarjajo izvedljivost na prenosnikih večjih blagovnih znamk.

Pojavile so se tudi akademske in praktične ranljivosti: Napaka TPM, napaka TPM (z opaznim vplivom na AMD) in primer bitpixie (CVE-2023-21563)To ne pomeni, da je TPM neuporaben, vendar morate posodabljati vdelano programsko opremo, razumeti svoj model groženj in mu ne zaupati slepo.

Stanje BitLockerja v primerjavi s temi grožnjami

V svetu sistema Windows je najpogosteje uporabljeno šifriranje diska BitLocker. Zdaj je bilo ugotovljeno, da privzeta konfiguracija (samodejno odklepanje samo s TPM) Omogoča tako hladen zagon kot tudi vohanje kanalov TPM, saj ne izvaja šifriranja parametrov v slogu systemd. Zaradi tega so nekateri poslovni računalniki ranljivi za napade v nekaj minutah.

Priporočilo je, da se omogoči preverjanje pristnosti pred zagonom prek pravilnikov/registra ali CLI, kar povprečnemu uporabniku ni dovolj znano. Prav tako ne pozabite preveriti, kje je shranjen obnovitveni ključ: pogosto se nahaja v uporabnikovem Microsoftovem računu, ki To je še en kot tveganja če ni nadzorovano.

Ofenzivni/obrambni trik: Zamenjajte korenski dostop LUKS, da vsilite svoje geslo

Zanimiv vektor se pojavi, ko ni avtentikacije pred zagonom. Napadalec lahko klonira pravo particijo LUKS, zamenjajte ga z drugim LUKS-om z istim UUID-jem in geslom, ki ga pozna, in zaženite računalnik. Ker se meritve PCR ujemajo, TPM sprosti ključ, vendar se ne ujema s ponarejenim LUKS-om, zato bo initrd pozval k vnosu ključa za »obnovitev«. Z vnosom gesla, ki ga napadalec pozna, se vaš sistem zažene kot root v initrd-u in nato lahko orkestrirate krajo izvirnega ključa (na primer tako, da namestite pravo kopijo prek omrežja in uporabite systemd-cryptsetup).

Jasne omilitve: aktiviranje preverjanja pristnosti pred zagonom, izkoristite systemd-pcrphase za vezavo odklepanja strogo na fazo initrd in razmislite tudi o merjenju/vezavi ciljnega nosilca LUKS (zahteva skrbno načrtovanje, da se izognemo začaranim krogom).

Izbira particioniranja in drugega ključa: najboljša praksa

Ohrani obnovitveni ključ Obvezno je: če TPM ali matična plošča odpove, je vaš ključ, povezan s TPM, neuporaben. LUKS omogoča več rež (TPM uporablja eno, obnovitev pa drugo). Poleg tega ima ločevanje particij / in /home prednosti: lahko uporabite stroge meritve s TPM a/ in uporabite močan ključ ali napravo FIDO2/YubiKey za /home, kar zmanjša splošno zaupanje v en sam mehanizem.

Kaj se zgodi, ko posodobite vdelano programsko opremo ali jedro?

Če spremenite vdelano programsko opremo ali se dotaknete možnosti UEFI, se bodo PCR-ji, kot je 0/1, spremenili in TPM ne bo sprostil ključa, dokler ga ne vpišete znova. Za jedro in initrd, spremembe so pogosteČe ne uporabljate UKI s podpisano politiko, vas lahko vsaka posodobitev prisili, da uporabite možnost obnovitve in se pozneje ponovno registrirate. S podpisanim UKI ga samo podpišete in to je to.

Opombe in opažanja skupnosti

V nekaterih priljubljenih vodnikih za določene distribucije je bilo priporočeno pri uporabi UKI in systemd-boot veže samo PCR 7, pri čemer se zanaša na zaščitne ukrepe Secure Boota in nezmožnost urejanja ukazne vrstice. Deluje, vendar obstajajo tveganja, če se zanašate na tretje osebe. V preteklosti je bila dokumentirana tudi napaka, pri kateri je pritisk tipke Enter po odklepanju odprl obnovitveno lupino; priporočljivo je, da svoje različice posodabljate, da se izognete presenečenjem.

V sezoni 2025/06 so bili podani zanimivi komentarji: Napaka TPM še naprej vpliva na AMD do neke mere; wikiji so dodali posebne razdelke o podpisanih pravilnikih PCR; namestitveni program za distribucijo, ki ponuja FDE s TPM kot eksperimentalno funkcijo, je bil preizkušen, z nekaj praktičnimi težavami (zahteva za obnovitev ob prvem zagonu, odvisnost od snaps, dvojno šifriranje diska), težava, ki zasluži si poglobljeno revizijo.

Nadaljevanje, osredotočeno na šifriranje diska v sistemu Windows, je bilo objavljeno leta 2025/07. Splošni sklep potrjuje potrebo po PBA in šifriranju kanala TPM., kot tudi omejevanje odvisnosti od ključev tretjih oseb v Secure Boot.

Nasveti za uporabo orodij tpm2 in systemd

Za vsakodnevno uporabo: Namestite tpm2-tools in tpm2-tss. Privzeto uporablja /dev/tpmrm0in tpm2_pcrread/tpm2_pcrextend za testiranje in eksperimentiranje s PCR. Izogibajte se razširitvi produkcijskih PCR s poljubnimi podatki: to storite v laboratorijih ali uporabite PCR 16 za testiranje.

Pri vpisu s systemd-cryptenroll: –tpm2-naprava=samodejno zazna TPM; –tpm2-z-pinom dodaja PBA; –tpm2-pcrs=… izberite svoje PCR-je; –tpm2-javni-ključ=… in –tpm2-javni-ključ-pcrs=… aktivirajte podpisano politiko PCR (npr. vezano na PCR 11 za UKI). Ne pozabite –reža za brisanje ko želite očistiti prejšnjo režo.

Če nimate TPM-ja in vas systemd čaka na zagon

Občasno se po posodobitvi zgodi, da storitev poskuša uporabiti TPM, čeprav ga vaš računalnik nima viden, kar povzroči časovne omejitve ob zagonu. Najprej preverite, da se ne prikaže /dev/tpm* niti vnosov v /sys/class/tpm.

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

Če ni TPM-ja, preverite datoteko /etc/crypttab nimajo možnosti, kot je tpm2-device=autoČe obstajajo, jih izbrišite in znova zgradite initrd. Fazo merjenja lahko onemogočite tudi v računalnikih brez TPM:

# 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

S tem se odpravi nepotrebno čakanje, če vaša oprema nima TPM-ja. Če kasneje omogočite TPM v BIOS-u/UEFI, odstranite črni seznam in razkrijte enoto, da obnovite meritve.

Dobre prakse in odločitve o zaupanju

Nekateri ljudje so previdni glede TPM-ja, ker je to "črna skrinjica", tako kot samošifrirni diski. To je razumen dvom. Ocenite svoj model groženj in uravnoteži uporabnost, zasebnost in vzdrževanje. Za mnoge ljudi je TPM+PBA+podpisano UKI velik varnostni preskok brez pretiranega trenja.

Na strojni opremi, ki to omogoča, dodajte šifriran pomnilnik in se izogibajte zanašanju na ključe tretjih oseb v Secure Bootu; kadar koli je to mogoče, omejite verigo na lastne ključe. Poskrbite za posodabljanje vdelane programske opreme in jedra, da vključite ublažitve za objavljene ranljivosti.

Obvladovanje operacij /dev/tpm0, /dev/tpmrm0 in tpm2_pcrread/tpm2_pcr_extend odpira vrata do premerjenega zagona in robustnega šifriranja diska v Linuxu; z UKI in podpisanim pravilnikom PCR dosežete operativno stabilnost, dodajanje PIN-a pred zagonom pa vas ščiti tudi pred bolj praktičnimi napadi. Ključno je, da dobro izberete PCR-je, pogosto podpisujete spremembe in vedno hranite dober ključ za obnovitev..

Ubuntu 25.10 beta prihaja z jedrom Linux 6.17
Povezani članek:
Ubuntu 25.10 beta prihaja z Linuxom 6.17 in ključnimi spremembami