UEFI Secure Boot kasutamisest üldiselt
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
- kas saaks rakendada IMA tehnikat, https://wiki.gentoo.org/wiki/Integrity_Measurement_Architecture, https://wiki.strongswan.org/projects/strongswan/wiki/IMA
- kas arvuti /boot/efi peal asuda nn Ingrity.efi rakendus ja kahtluse korral saab seda kasutada arvuti failisüsteemide kontrollimiseks
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