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

  • TPM 2.0 omogućava izmjerene boot i LUKS ključeve povezane s PCR-ima, idealno s PBA PIN-om.
  • Koristite /dev/tpmrm0 i tpm2_pcrread/tpm2_pcrextend za upravljanje PCR-ima.
  • 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čunara sa UEFI-jem i Secure Bootom. Ovaj članak objašnjava šta su /dev/tpm0 i /dev/tpmrm0 i kako koristiti tpm2_pcrread i tpm2_pcrextend. (kao i njegovu stvarnu naredbu u tpm2-tools), kao i objašnjenje kako se oni uklapaju u politike izmjerenog pokretanja, šifriranja diska i potpisanog PCR-a u Linuxu.

Korisna dokumentacija postoji, ali je raštrkana 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 TPM stručnjaci, mogu raditi s ovim alatima bez gubljenja u nejasnim detaljima.

Šta 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 podataka, generator slučajnih brojeva i korijen povjerenja za sistem. Pasivno je: ako ga ne koristite, ne radi ništa., ali kada ga integrirate u tok pokretanja i šifriranje diska, pruža provjeru integriteta i hardverski zaštićene ključeve.

U praksi, TPM 2.0 vam omogućava dva glavna načina korištenja kod šifriranja diska: a) generiranje/spremanje jakog ključa i zaštitu njegove upotrebe PIN-om s anti-brute force zaključavanjem; b) aktiviranje takozvanog izmjerenog pokretanja, gdje Svaka komponenta čizme se mjeri u PCR zapisima, tako da se ključ "otpakuje" samo ako sistem nije bio neovlašteno mijenjan (i opcionalno sa 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 "sirovi" interfejs TPM-a.dok /dev/tpmrm0 omogućava pristup putem Upravitelja resursa (menadžer koji umnožava klijente, upravlja sesijama i resursima), a upravo ga tpm2-tools preporučuje u većini scenarija.

Ako niste sigurni da li TPM postoji ili ne, možete ga testirati "na vruće". Ako je /sys/class/tpm/ prazno 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 detektovati /dev/tpmrm0 i automatski ga koristiti. Ako trebate prisilno aktivirati uređaj, većina alata prihvata –tcti ili koristite TCTI varijable okruženja, ali za uobičajene zadatke to obično nije potrebno.

TPM PCR-ovi: Kako funkcionišu i šta mjere

Registri konfiguracije platforme su zapisi koji pohranjuju heševe (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 ​​niti brisati (osim u slučajevima otklanjanja grešaka kao što je PCR 16).

Osnovna operacija je proširenje: nova_vrijednost = SHA256(trenutna_vrijednost || SHA256(podaci))Na ovaj način su mjerenja povezana bez omogućavanja oportunističkih resetovanja. Ovaj obrazac se 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 su:
– PCR 0: kod firmvera.
– PCR 1: konfiguracija firmvera (UEFI postavke).
– PCR 7: Status sigurnog pokretanja i certifikati kojima vjeruje.
– PCR 9: initrd(i) mjerene od strane kernela.
– PCR 11: UKI (Unified Kernel Image) i fazne oznake putem systemd-stub/systemd-pcrphase.
– PCR 12: komandna linija kernela.

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

U tpm2-tools-u, čitanje se vrši pomoću tpm2_pcrread i produžetak sa tpm2_pcrextendPonekad ćete vidjeti "tpm2_pcr_extend" koji se naziva konceptualnom operacijom proširenja, ali Prava naredba u paketu 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

Da biste proširili PCR 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 heš., zbog ograničenja i dizajna.

# 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 hešem i ponovo primjenjujete SHA-256 da provjerite rezultat.

Može li se PCR rezultat resetirati?

Pod normalnim uslovima, ne. Filozofija je da PCR raste samo s ekstenzijama.Postoji jedan izuzetak: PCR 16 je obično rezervisan za "otklanjanje grešaka" i može se resetovati u određenim tokovima, ali nije koristan kao sigurnosni koren vaše politike.

Izmjereno bootovanje, LUKS i systemd-cryptenroll: Spajanje dijelova

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

Ovo se veoma lijepo radi sa systemd-cryptenroll i systemd-cryptsetup. Ideja je da kreirate svoj volumen, registrujete TPM ključ i dodate ključ za oporavak. tako da ne budete izostavljeni 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 forsirate neslaganje (na primjer, Namjerno produžavate PCR 4), TPM više neće otpuštati ključ i morat ćete koristiti ključ za oporavak. Kasnije možete ponovo registrirati TPM s novim trenutnim vrijednostima koristeći –wipe-slot=tpm2 i još jedno izvršavanje systemd-cryptenroll-a.

Koje PCR testove odabrati i zašto

Što više relevantnih PCR-ova povežete, to ćete smanjiti površinu, ali ćete se češće morati ponovo registrovati nakon legitimnih promjena. Neki praktični kriteriji:
– PCR 7 (Secure Boot): Trebalo bi biti vrlo stabilno ako se vaš skup ključeva ne mijenja.
– PCR 0/1 (firmver i konfiguracija): Rijetko se mijenjaju; potrebna je ponovna registracija nakon ažuriranja firmvera 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/politiku.

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 dozvoljava uređivanje parametara kernela kada je SB aktivanTo funkcioniše, ali ako vaše Secure Boot 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... To 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č za TPM prilikom registracije i potpisujete svoj UKI nakon svakog ažuriranja. TPM vjeruje tom potpisu i omogućava otključavanje čak i ako se promijeni specifični hash kernela.

Alat systemd-measure i pomoćnik systemd-ukify ovo olakšavaju: ukify pakete kernel, initrd i cmdline u UKI (obično mjereno u PCR 11) i systemd-measure potpisuje politiku. Sa mkinitcpio, 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 ovaj način, Vaša politika ostaje stabilna u odnosu na promjene kernela/initrd-a sve dok nastavljate potpisivati ​​UKI svojim ključem.Ako obnovite lozinke ili promijenite PCR set, morat ćete se ponovo registrirati.

Primjeri lanaca mjerenja sa systemd-om

Tokom pokretanja, systemd-stub i systemd-pcrphase produžavaju PCR-ove u određenim trenucima. Na primjer, "enter-initrd" je zabilježen u PCR 11, što omogućava da otključavanje bude važeće samo unutar initrd-a (smanjenje vektora gdje napadač pokušava kasnije ponovo upotrijebiti ključ).

U sistemima sa UKI, sadržaj UKI se mjeri u PCR 11; u sistemima bez UKI, kernel mjeri initrd-ove u PCR 9 i bootloader može mjeriti cmdline u PCR 12. Obavezno obuhvatite initrd i cmdline u svojoj politici, inače bi neko mogao stražnja vrata initrd ili pokretanje sa zlonamjernom cmdline komandom kao što je init=/bin/bash.

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

Šta 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. Jasna mjeru ublažavanja je zahtijevanje PIN-a prije pokretanja (PBA), čime se pokušaji smanjuju na jedan po ciklusu napajanja.

Druga kategorija je napadi njuškanjem na TPM magistraluCPU zahtijeva ključ, TPM ga šalje; ako se link prisluškuje, ključ može biti otkriven. U tu svrhu, systemd implementira "šifriranje parametara" tako da je razmjena šifrirana; alternativno, korištenje fTPM/Intel PTT ili šifrirane memorije smanjuje izloženost. Postoje relativno pristupačne javne demonstracije (čak i s mikrokontrolerima) koje ilustruju izvodljivost na laptopima glavnih marki.

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

Status BitLockera u odnosu na ove prijetnje

U svijetu Windowsa, najrasprostranjenija metoda šifriranja diska je BitLocker. Sada je napomenuto 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đeni korporativni računari ranjivi na napad u roku od nekoliko minuta.

Preporuka je da se omogući autentifikaciju prije pokretanja putem politika/registra ili CLI-ja, nešto što nije dovoljno dostupno prosječnom korisniku. Također, ne zaboravite provjeriti gdje se nalazi ključ za oporavak: često se nalazi u korisničkom Microsoft računu, koji To je još jedan ugao rizika ako nije kontrolisano.

Ofanzivni/Defanzivni Trik: Zamijenite LUKS root da 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 on zna, i pokrenite računar. Pošto se PCR mjerenja podudaraju, TPM otpušta ključ, ali se ne podudara sa lažnim LUKS-om, tako da će initrd zatražiti "recovery" ključ. Unosom lozinke poznate napadaču, vaš sistem 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: aktivirajte autentifikaciju prije pokretanja, iskoristite systemd-pcrphase da biste otključavanje strogo vezali za 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

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

Šta se dešava kada ažurirate firmver ili kernel?

Ako promijenite firmver ili dodirnete UEFI opcije, PCR-ovi poput 0/1 će se promijeniti i TPM neće otpustiti ključ dok se ponovo ne registrujete. Za kernel i initrd, promjene su česteAko ne koristite UKI s potpisanom polisom, svako ažuriranje bi vas moglo prisiliti da koristite opciju oporavka i kasnije se ponovo registrujete. Sa 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čeno je 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 cmdline-a. 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 su podijeljeni u sezoni 2025/06: TPM greška i dalje utiče na AMD do određene mjere; wikiji su dodali posebne odjeljke o potpisanim PCR politikama; a instalacijski program za distribuciju koja nudi FDE s TPM-om kao eksperimentalnu značajku je testiran, s nekim praktičnim problemima (zahtijevanje oporavka pri prvom pokretanju, ovisnost o snapshotovima, dvostruko šifriranje diska), problem koji zaslužuje detaljniju reviziju.

Nastavak rada usmjeren na šifriranje diska u Windowsu 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. Podrazumevano koristi /dev/tpmrm0, i tpm2_pcrread/tpm2_pcrextend za testiranje i eksperimentisanje sa PCR-ima. Izbjegavajte proširivanje produkcijskih PCR-ova proizvoljnim podacima: uradite to u laboratorijama ili koristite PCR 16 za testiranje.

Prilikom registracije sa systemd-cryptenroll: –tpm2-uređaj=automatski detektuje TPM; –tpm2-sa-pinom dodaje PBA; –tpm2-pcrs=… odaberite svoje PCR-ove; –tpm2-public-key=… i –tpm2-public-key-pcrs=… aktivirajte potpisanu PCR polisu (npr. vezanu za 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 sistema

Povremeno, nakon ažuriranja, servis pokušava koristiti TPM iako vaš računar to ne vidi, što uzrokuje istek vremena pri pokretanju. 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 datoteku. Nemam opcije poput tpm2-device=autoAko postoje, obrišite ih i ponovo izgradite initrd. Također možete onemogućiti fazu mjerenja na računarima 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

Ovo eliminira nepotrebno čekanje ako vašoj opremi nedostaje TPM. Ako kasnije omogućite TPM u BIOS-u/UEFI-ju, uklonite crnu listu i demaskirajte uređaj 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 balansira upotrebljivost, privatnost i održavanje. Za mnoge ljude, TPM+PBA+potpisani UKI predstavlja ogroman sigurnosni skok bez pretjeranih problema.

Na hardveru koji to dozvoljava, 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 za mjereno pokretanje i robusno šifriranje 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 kernelom 6.17
Vezani članak:
Ubuntu 25.10 beta stiže sa Linuxom 6.17 i ključnim promjenama