UEFI Secure Boot kasutamisest üldiselt

Allikas: Imre kasutab arvutit
Mine navigeerimisribaleMine otsikasti

Sissejuhatus

Tundub, et üldiselt on Secure Boot ja Linux tarkvara kasutamisel kolm suunda

  • UEFI Setup keskkonnas Secure Boot funktsionaalsuse väljalülitamine
  • UEFI Secure Boot on sisse lülitatud, aga selle turvalisusega seotud aspektidele ei pöörata tähelepanu; oluline on, et arvuti Linuxiga töötaks ja kõik (nt dual-boot Windows-Linux režiimis töötav arvuti)
  • UEFI Secure Boot abil süsteemi turvalisuse suurendamine

Käesolev tekst tegeleb UEFI Secure Boot kasutamisega süsteemi turvalisuse suurendamiseks. Kindlasti ei ole Secure Boot üksi piisav instrument süsteemi turvalisusega tegelemisel, aga kuna kaasaegne riistvara seda võimaldab, oleks tõenäoliselt ebapraktiline seda võimalust mitte kasutada. Nt Windows 8+ operatsioonisüsteemide puhul reeglina on Secure Boot kasutusel.

UEFI Secure Boot kasutamine on üldiselt võimalik vaid füüsilisel arvutil, millel on vastav riistvaraline tugi (tavaliselt tänapäeva arvutitel on) ja mõnes virtuaalses keskkonnas (VirtualBox, OVMF).

Mõisted

  • PK (Platform Key)
  • KEK (Key Exchange Key)
  • DB
  • DBX
  • DBT
  • OVMF (Open Virtual Machine Firmware)
  • ExitBootServices - https://lwn.net/Articles/632528/
  • kernel system keyring

Tööpõhimõte

UEFI Secure Boot kasutamise eesmärgiks võiks olla, et

  • arvutis käivitub ainult kontrollitud esimese astme bootloader shim
  • arvutis käivitub ainult kontrollitud järgmise astme bootloader (nt grub2)
  • arvutis käivitub ainult kontrollitud tuum
  • arvutis käivituvad ainult kontrollitud tuuma moodulid

Selle tulemusena on välistatud bootkit, rootkit jms nö madala kihi pahalaste tegevused. Kuna pahalane ei saa syscall'ide nö interceptimiseks tuuma enda pahu mooduleid juurde laadida, on tal raskem oma tegevusi varjata operatsioonisüsteemi keskkonnas töötavate staatiliselt kompileeritud utiliitide ja nö tavalise viirustõrje vms HIDS lahenduse eest.

Tundub, et Secure Boot on mitte-valmis ja arengus valdkond ning erinevad Linuxi distributsioonid on läinud natuke erinevat teed, seda võtab hästi kokku aadressil https://wiki.freebsd.org/SecureBoot, lühidalt

  • Fedora kontrollib kasutatava tarkvara autentsust kuni (ja kaasa arvatud) tuuma moodulid, kui midagi ei läbi kontrolli, arvuti algkäivitumine katkeb
  • Ubuntu kontrollib kasutatava tarkvara autentsust kuni bootloaderini (ja kaasa arvatud), kui midagi ei läbi kontrolli, arvuti algkäivitumine katkeb. Sealt edasi võib aga ei pea kontroll õnnestuma (nt saab laadida signeerimata tuuma).

Vahel on oluline Secure Boot valikute kehtestumiseks kaitsta BIOS ehk UEFI Setup keskkonna kasutamine parooliga.

PK, KEK ja DB komplektides olevad sertifikaadid ei moodusta üldiselt omavahel sertifikaatide ahelaid issueri ja subject mõttes.

Secure Boot tehnikat kasutava süsteemi tutvustus

Secure Boot tehnikat kasutaval süsteemil paistavad välja sellised omadused. Enne bootimist annab secure boot sisselülitamisest tunnistust nt HP ProLiant DL160 Gen9 arvuti puhul

Fail:Uefi-secure-boof-hpdl160-4.gif

kus

  • Boot Mode - UEFI ja lisaks Secure Boot

Peale bootimist annab secure boot sisselülitamisest tunnistust

  • Asjakohased teated laaditud sertifikaatidest
# dmesg | grep Loaded
[    0.697495] EFI: Loaded cert 'Microsoft Windows Production PCA 2011: a92902398e16c49778cd90f99e4f9ae17c55af53' linked to '.builtin_trusted_keys'
[    0.697535] EFI: Loaded cert 'Microsoft Corporation UEFI CA 2011: 13adbf4309bd82709c8cd54f316ed522988a1bd4' linked to '.builtin_trusted_keys'
[    0.702545] EFI: Loaded cert 'Fedora Secure Boot CA: fde32599c2d61db1bf5807335d7b20e4cd963b42' linked to '.builtin_trusted_keys'
[    0.703825] Loaded X.509 cert 'Fedora kernel signing key: 673bb02beed63197377aec66b8b55b48fda09690'
  • kernel system keyring sisu
# keyctl list %:.builtin_trusted_keys
4 keys in keyring:
 12781590: ---lswrv     0     0 asymmetric: Microsoft Windows Production PCA 2011: a92902398e16c49778cd90f99e4f9ae17c55af53
209795856: ---lswrv     0     0 asymmetric: Fedora kernel signing key: 673bb02beed63197377aec66b8b55b48fda09690
866803799: ---lswrv     0     0 asymmetric: Fedora Secure Boot CA: fde32599c2d61db1bf5807335d7b20e4cd963b42
550204441: ---lswrv     0     0 asymmetric: Microsoft Corporation UEFI CA 2011: 13adbf4309bd82709c8cd54f316ed522988a1bd4
  • dmesg'is paistab Secure Boot nii
# dmesg | grep Secure
[    0.000000] Secure boot enabled
[    2.920552] EFI: Loaded cert 'Hewlett-Packard Company: HP UEFI Secure Boot 2013 DB key: 1d7cf2c2b92673f69c8ee1ec7063967ab9b62bec' linked to '.builtin_trusted_keys'
[    3.009054] EFI: Loaded cert 'SUSE Linux Enterprise Secure Boot Signkey: 3fb077b6cebc6ff2522e1c148c57c777c788e3e7' linked to '.builtin_trusted_keys'
  • bootctl ütleb nii
# bootctl status
Using EFI System Parition at /boot/efi.
System:
     Firmware: n/a (n/a)
  Secure Boot: enabled
   Setup Mode: user

...
  • saab paigaldada, kuid mitte kasutada isekompileeritud tuuma mooduleid
# apt-get install flashcache-dkms

...
# modprobe flashcache
modprobe: ERROR: could not insert 'flashcache': Required key not available
  • arvutilt küsimine, kas Secure Boot on sisse lülitatud
# mokutil --sb-state
SecureBoot enabled

Ubuntu kasutamine Secure Boot abil

Vaikimisi Ubuntu 16.10 kontrollib rangelt tegevusi kuni ja kaasa arvatud GRUB2 bootloaderi laadimiseni. Seejärel lubatakse laadida suvaline kernel. Kui kernel kasutab signeeritud mooduleid, siis ei lubata laadida signeerimata mooduleid. Seejuures tundub, et Ubuntu võti on otse SHIM efi rakenduse sees (mitte MOK andmestikus). Ubuntu probleem on selles, et GRUB2 bootloader ei kontrolli rangelt, kas tuum on signeeritud. Tundub, et Ubuntu 16.10 saab juurutada turvaliselt selliselt

  • kustutada DB seest Mircosoft sertifikaadid
  • tekitada privaatne võti-sertifikaat
  • kustutada MOK andmestik
  • lisada DB peale oma sertifikaat (UEFI Setup keskkonnast saab seda teha ilma mingite lisakinnitusteta)
  • kasutada Fedora SHIM ja GRUB2 efi rakendusi, kopeerida /boot/efi/EFI/ubuntu-verified alla tavalise Fedora vastava kataloogi sisust failid
/boot/efi/EFI/fedora/MokManager.efi
/boot/efi/EFI/fedora/shim.efi
/boot/efi/EFI/fedora/shim-fedora.efi
/boot/efi/EFI/fedora/fonts/unicode.pf2
/boot/efi/EFI/fedora/grubx64.efi
  • allkirjastada Fedora shim.efi, grubx64.efi ja kernel oma privaatse võtmega
  • osutub, et tuuma moodulid on signeeritud tuuma sees oleva võtmega (mitte üldise Ubuntu võtmega) ja tundub, et loogika on selline, et kui tuum on usaldatud kasutada, siis tuuma iseseisvalt kontrollib oma moodulite usaldusväärsust

Käsitsi bootimisel sobib öelda efi shellis

Shell> fs0:
FS0:\> cd efi/ubuntu-verified
FS0:\> shim.efi

ning grub promptis

grub> ls
grub> set root=(lvm/system-root)
grub> ls /
grub> linuxefi /boot/vmlinuz-4.8.0-22-generic.efi.signed.test-cert root=/dev/mapper/system-root ro
grub> initrdefi /boot/initrd.img-4.8.0-22-generic
grub> boot

Sellisel juhul

  • pahalane võib küll asendada shim.efi või grubx64.efi rakendused või kerneli, aga süsteemi ei käivitata kuna ta ei saa neid sobivalt allkirjastada, sest tal puudub privaatne võti
  • pahalane ei saa sokutada kasutusse ka Ubuntu default shim.efi ja grubx64.efi rakendusi (et sealt edasi kasutada suvalist tuuma), kuna need on signeeritud Ubuntu poolt, aga Ubuntu võtit ei ole DB andmestikus

Vale shim.efi rakenduse laadimine paistab nii

Fail:Uefi-secure-boof-hpdl160-5.gif

Vale tuuma laadimine nii

Fail:Uefi-secure-boof-hpdl160-6.gif

Vale tuuma mooduli laadimine

# modprobe flashcache
modprobe: ERROR: could not insert 'flashcache': Required key not available

Tegevused peale UEFI-Secure-Boot-proper osa lõppu

Secure Boot abil saab käivitada turvaliselt tuuma ja tuuma moodulid, aga tekib küsimus, et mis edasi, nt

Probleemid

  • grub.conf signeerimine - ilma selleta ei saa küll bootida päris suvalisi kerneleid, aga suvalisi korrektselt signeeritud kerneleid (nt vana tuuma versiooni)
  • kexec kasutamine - tundub, et 2016 aastal saab kexec abil laadida ainult korrektselt signeeritud tuuma

Ubuntu signed tuuma kasutamine

Ubuntu signed tuuma kasutamiseks tuleb paigaldada vastav signed pakett, nt

# apt-get install linux-signed-image-generic-hwe-16.04-edge

kusjuures iseensest see pakett kutsub esile teise paketi paigaldamise, mis sisaldab ainult detached signatuuri

# dpkg -L linux-signed-image-4.13.0-17-generic
...
/usr/lib/linux/vmlinuz-4.13.0-17-generic.efi.signature

Misc

Windows keskkonnas Secure Boot oleku küsimine, öelda PowerShell promptis

Confirm-SecureBootUEFI

Kasulikud lisamaterjalid