From: xf0r3m Date: Sat, 24 Aug 2024 18:15:30 +0000 (+0200) Subject: Napisano artykuł o odblokowaniu cryptroot przez TPM. Do przeredagowania i sprawdzenia... X-Git-Url: https://gitweb.morketsmerke.org/?a=commitdiff_plain;h=22df49a5802dfd7ad75c4c3b90c3bdf2586274c0;p=mmdev.git Napisano artykuł o odblokowaniu cryptroot przez TPM. Do przeredagowania i sprawdzenia pod kątem błędów HTML. --- diff --git a/articles/linux/index.html b/articles/linux/index.html index f40beb3..2883d97 100755 --- a/articles/linux/index.html +++ b/articles/linux/index.html @@ -49,6 +49,7 @@
  • Automatyczne odblokowanie istniejących partycji LUKS
  • Przekierowanie konsoli tty0 na RS-232 (port COM)
  • Zdalne odblokowanie cryptroot przez SSH
  • +
  • Wykorzystanie modułu TPM do odblokowania cryptroot
  • diff --git a/articles/linux/wykorzystanie_modulu_TPM_do_odblokowania_cryptroot.html b/articles/linux/wykorzystanie_modulu_TPM_do_odblokowania_cryptroot.html new file mode 100644 index 0000000..18db81a --- /dev/null +++ b/articles/linux/wykorzystanie_modulu_TPM_do_odblokowania_cryptroot.html @@ -0,0 +1,183 @@ + + + + + + + + +
    +  _____ _   _ _    _    ___      _
    + / ____| \ | | |  | |  / / |    (_)
    +| |  __|  \| | |  | | / /| |     _ _ __  _   ___  __
    +| | |_ | . ` | |  | |/ / | |    | | '_ \| | | \ \/ /
    +| |__| | |\  | |__| / /  | |____| | | | | |_| |>  <
    + \_____|_| \_|\____/_/   |______|_|_| |_|\__,_/_/\_\
    +
    + +
    +

    Wykorzystanie modułu TPM 1.2 do odblokowania cryptroot

    +

    + Myślałem, że na zdalnym odblokowywaniu cryptroot seria się skończy, ale + rodziła się potrzeba stworzenia laptopa do zdalnej pomocy, przyczym + system na tym laptopie miałbyć jak najbardziej bezobsługowy. To jest + użytkownik końcowy ma go tylko włączyć i już jak system się załaduje to + załóżmy pomocnik działu IT, powinien już się z nim połączyć. Kiedy + rozwiązano wszystkie inne problemy - takie jak wybór sposóbu + udostępnienia zdalnego pulpitu. Pozostał problem ochrony klucza + prywatnego VPN, ze zdjętym hasłem. Dla nas sprawa wydaje się oczywista. + Szyfrujemy dysk. A co z wymogiem bezobsługowości? No i tutaj pojawiły + się dwa wyjścia, albo wykorzystujemy moduł TPM. Wówczas szyfrowanie + dysków na dystrybucjach Linuksa wygląda podobnie do BitLockera na + MS Windows. Nie musimy wpisywać żadnych haseł, a dysk odblokowuje się + podczas uruchamiania systemu. W takim systemie, dane chronione są + przez hasło użytkownika. Drugim wyjściem, było nie szyfrowanie dysku, ale + zablokowanie na serwerze proxy sieci VPN możliwości inicjowania + połączeniem z innymi hostami sieci prywatnej. Stwierdziłem, że jeżeli + pierwszy plan nie wypali, to ostatecznie użyjemy drugiej metody. +

    +

    + Aby rozpocząć konfigurowanie LUKS (dodanie klucza) w użyciem TPM, należy + na początku upewnić się że sam TPM jest obecny i funkcjonalny. Tak + wygląda włączony i poprawnie działający moduł TPM na Debianie: +

    +
    +xf0r3m@romek:~$ sudo dmesg | grep "TPM"                                                                                                                                                                                                     
    +[    1.078372] tpm_tis 00:05: 1.2 TPM (device-id 0xB, rev-id 16)
    +[   32.365170] systemd[1]: systemd 252.26-1~deb12u2 running in system mode 
    +(+PAM +AUDIT +SELINUX +APPARMOR +IMA +SMACK +SECCOMP +GCRYPT -GNUTLS +OPENSSL
    ++ACL +BLKID +CURL +ELFUTILS +FIDO2 +IDN2 -IDN +IPTC +KMOD +LIBCRYPTSETUP
    ++LIBFDISK)
    +
    +

    + Jeśli pojawi się informacja o tym, że moduł ten jest wyłączony lub + zdezaktywowany i/lub pojawiają się komunikaty o błędach w komunikacji + z nim, to wówczas należy sprawdzić w BIOS-ie komputera czy jest on + włączony. Jeśli nie jesteśmy w stanie odnaleźć takich ustawień, to być + może nasza platforma nie posiada modułu TPM (większość, komputerów + profesjonalnych takich jak Lenovo TP, Dell Latitude czy komputerów + stacjonarnych takich jak HP Z Workstations posiada moduł TPM w wersji + zależnej od wieku sprzętu). +

    +

    + W przypadku modułów TPM w wersji niższej niż 2.0. Może być problem z + oprogramowaniem pozwalającym obsługiwać moduł TPM w dzisiejszych + wersjach dystrybucji. Jednym z takich programów jest + clevis - modularny framework do automatyzacji + szyfrowania. Oficjalna wersja nie wspiera modułów TPM poniżej 2.0, więc + jeden z hakerów, wykonał fork (własną wersję, czyjegoś + projektu) clevisa dodając do niego obsługę modułów TPM <2.0. + Jego projekt jest możliwy do instalacji za pomocą paczek .deb. Pakiety + mają również zdefiniowane zależności więc po za pobraniem i + wydaniem odpowiedniego polecenia nie trzeba nic robić. +

    +
    +xf0r3m@romek:~$ wget https://github.com/oldium/clevis/releases/download/v20_tpm1/clevis-initramfs_20-1+tpm1_amd64.deb
    +xf0r3m@romek:~$ wget https://github.com/oldium/clevis/releases/download/v20_tpm1/clevis-systemd_20-1+tpm1_amd64.deb
    +xf0r3m@romek:~$ wget https://github.com/oldium/clevis/releases/download/v20_tpm1/clevis-tpm1_20-1+tpm1_amd64.deb
    +xf0r3m@romek:~$ wget https://github.com/oldium/clevis/releases/download/v20_tpm1/clevis-luks_20-1+tpm1_amd64.deb
    +xf0r3m@romek:~$ wget https://github.com/oldium/clevis/releases/download/v20_tpm1/clevis_20-1+tpm1_amd64.deb
    +xf0r3m@romek:~$ ls
    +clevis_20-1+tpm1_amd64.deb            clevis-systemd_20-1+tpm1_amd64.deb
    +clevis-initramfs_20-1+tpm1_amd64.deb  clevis-tpm1_20-1+tpm1_amd64.deb
    +clevis-luks_20-1+tpm1_amd64.deb
    +xf0r3m@romek:~$ sudo apt install ./clevis-initramfs_20-1+tpm1_amd64.deb \
    +./clevis-systemd_20-1+tpm1_amd64.deb ./clevis-tpm1_20-1+tpm1_amd64.deb \
    +./clevis-luks_20-1+tpm1_amd64.deb ./clevis_20-1+tpm1_amd64.deb
    +
    +

    + Po zainstalowaniu oprogramowania, może zainicjować moduł TPM. Za pomocą + odpowiedniego polecenia. Polecenie zarząda od nas ustawienia sobie + hasła właściciela: +

    +
    +xf0r3m@romek:~$ sudo tpm_takeownership -z
    +Enter owner password: 
    +Confirm password: 
    +
    +

    + Polecenie po ustawieniu hasła nie powinno zwrócić żadnych dodatkowych + komunikatów. Opcja -z ustawi hasło + SRK (Secret Root Key) na 20B samych zer (0). Dzięki czemu + będziemy w stanie automatycznie odblokować zaszyfrowany główny system + plików. +

    +

    + Po przejęciu kontroli na modułem TPM, możemy dodać klucz zapisany w TPM + do naszej zaszyfrowanej partycji. +

    +
    +xf0r3m@romek:~$ sudo clevis luks bind -d /dev/sdb5 tpm1 '{"pcr_ids":"0,4,7"}'                                                                                                                                                           
    +Enter existing LUKS password: 
    +
    +

    + Polecenie powinno zakończyć się bez żadnych dodatkowych komunikatów. + Wartości PCR_IDS są wskaźnikami status bezpieczeństwa. Ich wartości + pozwalają ustalić czy TPM działa w zaufanym środowisku. Jeśli któraś z + wartości nie jest zgodna z oczekiwaniami - moduł TPM, może odmówić + wydania klucza kryptograficznego. +

    +

    + Po dodaniu klucz do partycji, należy zaktualizować initrd. +

    +
    +xf0r3m@romek:~$ sudo update-initramfs -u -k 'all'
    +update-initramfs: Generating /boot/initrd.img-6.1.0-23-amd64
    +update-initramfs: Generating /boot/initrd.img-6.1.0-18-amd64
    +
    +

    + Aktualizację nalepiej wykonać, dla wszystkich wersji. Stąd opcja + -k 'all'. +

    +

    + Dla pewności, aby został uruchomiony odpowiedni plik. Aktualizujemy + również konfigurację GRUB-a. +

    +
    +xf0r3m@romek:~$ sudo update-grub
    +Generating grub configuration file ...
    +Found linux image: /boot/vmlinuz-6.1.0-23-amd64
    +Found initrd image: /boot/initrd.img-6.1.0-23-amd64
    +Found linux image: /boot/vmlinuz-6.1.0-18-amd64
    +Found initrd image: /boot/initrd.img-6.1.0-18-amd64
    +Warning: os-prober will be executed to detect other bootable partitions.
    +Its output will be used to detect bootable binaries on them and create new boot entries.
    +done
    +
    +

    + Teraz możemy uruchomić ponownie komputer. Kiedy przyjdzie do odblokowania + dysku. Program poprosi nas o hasło, ale po chwili powinien pojawić się + komunikat, że dysk został odblokowany przez clevis. +

    +
    +Please unlock disk sda5_crypt:Unlocked /dev/sdb5 with clevis
    +/dev/mapper/romek--vg--root: clean, 133975/31883264 files, 3426415/127506432 blocks
    +...
    +Debian GNU/Linux 12 romek ttyS0
    +
    +romek login:
    +
    +

    + Jeśli przed dodaniem klucza do partycji, chcemy sprawdzić czy nasz TPM + działa poprawnie. Możemy wykonać prosty test. +

    +
    +xf0r3m@romek:~$ echo test | clevis encrypt tpm1 '{"pcr_ids":"0,4,7"}' | clevis decrypt
    +test
    +
    +

    + Ten test powinien zwrócić na wyjściu to samo co dostał na wejściu. +

    +

    + Tak skonfigurowany system będzie bezpieczny, nawet z bootowanie z + pendrive-a nic nie da. TPM sprawdzi wartość rejestru nr. 4 i jeśli nie + uruchomiliśmy komputera z prawidłowego dysku to nie wyda klucza. +

    +
    + + +