mirror of
https://github.com/vyos/vyos-documentation.git
synced 2025-10-26 08:41:46 +01:00
179 lines
5.9 KiB
ReStructuredText
179 lines
5.9 KiB
ReStructuredText
.. _secure_boot:
|
|
|
|
###########
|
|
Secure Boot
|
|
###########
|
|
|
|
Initial UEFI secure boot support is available (:vytask:`T861`). We utilize
|
|
``shim`` from Debian 12 (Bookworm) which is properly signed by the UEFI
|
|
SecureBoot key from Microsoft.
|
|
|
|
.. note:: There is yet no signed version of ``shim`` for VyOS, thus we
|
|
provide no signed image for secure boot yet. If you are interested in
|
|
secure boot you can build an image on your own.
|
|
|
|
To generate a custom ISO with your own secure boot keys, run the following
|
|
commands prior to your ISO image build:
|
|
|
|
.. code-block:: bash
|
|
|
|
cd vyos-build
|
|
openssl req -new -x509 -newkey rsa:4096 \
|
|
-keyout data/live-build-config/includes.chroot/var/lib/shim-signed/mok/MOK.key \
|
|
-out data/live-build-config/includes.chroot/var/lib/shim-signed/mok/MOK.der \
|
|
-outform DER -days 36500 -subj "/CN=MyMOK/" -nodes
|
|
openssl x509 -inform der \
|
|
-in data/live-build-config/includes.chroot/var/lib/shim-signed/mok/MOK.der \
|
|
-out data/live-build-config/includes.chroot/var/lib/shim-signed/mok/MOK.pem
|
|
|
|
************
|
|
Installation
|
|
************
|
|
|
|
As our version of ``shim`` is not signed by Microsoft we need to enroll the
|
|
previously generated :abbr:`MOK (Machine Owner Key)` to the system.
|
|
|
|
First of all you will need to disable UEFI secure boot for the installation.
|
|
|
|
.. figure:: /_static/images/uefi_secureboot_01.png
|
|
:alt: Disable UEFI secure boot
|
|
|
|
Proceed with the regular VyOS :ref:`installation <permanent_installation>` on
|
|
your system, but instead of the final ``reboot`` we will enroll the
|
|
:abbr:`MOK (Machine Owner Key)`.
|
|
|
|
.. code-block:: none
|
|
|
|
vyos@vyos:~$ install mok
|
|
input password:
|
|
input password again:
|
|
|
|
The requested ``input password`` can be user chosen and is only needed after
|
|
rebooting the system into MOK Manager to permanently install the keys.
|
|
|
|
With the next reboot, MOK Manager will automatically launch
|
|
|
|
.. figure:: /_static/images/uefi_secureboot_02.png
|
|
:alt: Disable UEFI secure boot
|
|
|
|
Select ``Enroll MOK``
|
|
|
|
.. figure:: /_static/images/uefi_secureboot_03.png
|
|
:alt: Disable UEFI secure boot
|
|
|
|
You can now view the key to be installed and ``continue`` with the Key installation
|
|
|
|
.. figure:: /_static/images/uefi_secureboot_04.png
|
|
:alt: Disable UEFI secure boot
|
|
|
|
.. figure:: /_static/images/uefi_secureboot_05.png
|
|
:alt: Disable UEFI secure boot
|
|
|
|
Now you will need the password previously defined
|
|
|
|
.. figure:: /_static/images/uefi_secureboot_06.png
|
|
:alt: Disable UEFI secure boot
|
|
|
|
Now reboot and re-enable UEFI secure boot.
|
|
|
|
.. figure:: /_static/images/uefi_secureboot_07.png
|
|
:alt: Disable UEFI secure boot
|
|
|
|
VyOS will now launch in UEFI secure boot mode. This can be double-checked by running
|
|
either one of the commands:
|
|
|
|
.. code-block:: none
|
|
|
|
vyos@vyos:~$ show secure-boot
|
|
SecureBoot enabled
|
|
|
|
.. code-block:: none
|
|
|
|
vyos@vyos:~$ show log kernel | match Secure
|
|
Oct 08 19:15:41 kernel: Secure boot enabled
|
|
|
|
.. code-block:: none
|
|
|
|
vyos@vyos:~$ show version
|
|
Version: VyOS 1.5-secureboot
|
|
Release train: current
|
|
Release flavor: generic
|
|
|
|
Built by: autobuild@vyos.net
|
|
Built on: Tue 08 Oct 2024 18:00 UTC
|
|
Build UUID: 5702ca38-e6f4-470f-b89e-ffc29baee474
|
|
Build commit ID: 9eb61d3b6cf426
|
|
|
|
Architecture: x86_64
|
|
Boot via: installed image
|
|
System type: KVM guest
|
|
Secure Boot: enabled <-- UEFI secure boot indicator
|
|
|
|
Hardware vendor: QEMU
|
|
Hardware model: Standard PC (i440FX + PIIX, 1996)
|
|
Hardware S/N:
|
|
Hardware UUID: 1f6e7f5c-fb52-4c33-96c9-782fbea36436
|
|
|
|
Copyright: VyOS maintainers and contributors
|
|
|
|
************
|
|
Image Update
|
|
************
|
|
|
|
.. note:: There is yet no signed version of ``shim`` for VyOS, thus we
|
|
provide no signed image for secure boot yet. If you are interested in
|
|
secure boot you can build an image on your own.
|
|
|
|
During image installation you will install your :abbr:`MOK (Machine Owner
|
|
Key)` into the UEFI variables to add trust to this key. After enabling
|
|
secure boot support in UEFI again, you can only boot into your signed image.
|
|
|
|
It is no longer possible to boot into a CI generated rolling release as those
|
|
are currently not signed by a trusted party (:vytask:`T861` work in progress).
|
|
This also means that you need to sign all your successor builds you build on
|
|
your own with the exact same key, otherwise you will see:
|
|
|
|
.. code-block:: none
|
|
|
|
error: bad shim signature
|
|
error: you need to load the kernel first
|
|
|
|
************
|
|
Linux Kernel
|
|
************
|
|
|
|
In order to add an additional layer of security that can already be used in nonesecure
|
|
boot images already is ephem,eral key signing of the Linux Kernel modules.
|
|
|
|
https://patchwork.kernel.org/project/linux-integrity/patch/20210218220011.67625-5-nayna@linux.ibm.com/
|
|
|
|
Whenever our CI system builds a Kernel package and the required 3rd party modules,
|
|
we will generate a temporary (ephemeral) public/private key-pair that's used for signing the
|
|
modules. The public key portion is embedded into the Kernel binary to verify the loaded
|
|
modules.
|
|
|
|
After the Kernel CI build completes, the generated key is discarded - meaning we can no londer
|
|
sign additional modules with out key. Our Kernel configuration also contains the option
|
|
``CONFIG_MODULE_SIG_FORCE=y`` which means that we enforce all modules to be signed. If you
|
|
try to load an unsigned module, it will be rejected with the following error:
|
|
|
|
``insmod: ERROR: could not insert module malicious.ko: Key was rejected by service``
|
|
|
|
Thos we close the door to load any malicious stuff after the image was assembled into the
|
|
Kernel as module. You can of course disable this behavior on custom builds.
|
|
|
|
************
|
|
Troubleshoot
|
|
************
|
|
|
|
In most of the cases if something goes wrong you will see the following error message
|
|
during system boot:
|
|
|
|
.. code-block:: none
|
|
|
|
error: bad shim signature
|
|
error: you need to load the kernel first
|
|
|
|
This means that the Machine Owner Key used to sign the Kernel is not trusted by your
|
|
UEFI. You need to install the MOK via ``install mok`` as stated above.
|