Linux Secure Boot Hardening – jak własnoręcznie tworzyć podpisane obrazy kernelu i modułów
Linux

Linux Secure Boot Hardening – jak własnoręcznie tworzyć podpisane obrazy kernelu i modułów

Linux Secure Boot Hardening – jak własnoręcznie tworzyć podpisane obrazy kernelu i modułów

Secure Boot odgrywa dziś kluczową rolę w zabezpieczaniu systemów Linux przed uruchamianiem nieautoryzowanego kodu — zarówno podczas startu, jak i w trakcie ładowania modułów jądra. W środowiskach produkcyjnych, serwerowych i korporacyjnych coraz częściej wymaga się nie tylko korzystania z Secure Boot, ale również samodzielnego podpisywania jądra, initramfs i modułów, aby:

  • zachować pełną kontrolę nad łańcuchem zaufania,
  • uruchamiać własne, customowe kernele,
  • instalować sterowniki i moduły spoza oficjalnych repozytoriów,
  • zintegrować własne polityki bezpieczeństwa.

Poniżej znajdziesz praktyczny przewodnik pokazujący, jak utworzyć własne klucze, podpisać kernel i moduły, a następnie bezpiecznie je wdrożyć w środowisku z włączonym Secure Boot.


1. Secure Boot – szybkie przypomnienie

Secure Boot działa w oparciu o łańcuch zaufania:

  1. UEFI ładuje podpisany bootloader.
  2. Bootloader uruchamia podpisany obraz jądra.
  3. Kernel ładuje tylko podpisane moduły.

Jeśli którykolwiek element nie jest podpisany kluczem zaufanym przez UEFI, uruchomienie zostanie zablokowane.

Własne podpisy są niezbędne, jeśli:

  • budujesz jądro samodzielnie,
  • korzystasz z DKMS (np. NVIDIA, VirtualBox),
  • instalujesz sterowniki out-of-tree,
  • tworzysz własną dystrybucję.

 

Linux Secure Boot Hardening – jak własnoręcznie tworzyć podpisane obrazy kernelu i modułów
Linux Secure Boot Hardening – jak własnoręcznie tworzyć podpisane obrazy kernelu i modułów

2. Tworzenie własnych kluczy: KEK, DB, MOK

Możesz przygotować trzy typy kluczy:

1. Klucze UEFI (KEK + DB)

Wymagają dostępu do firmware i są zaawansowane. Wykorzystuje się je głównie w środowiskach enterprise.

2. MOK – Machine Owner Key (najpraktyczniejsze podejście)

To najczęściej stosowany model: klucz jest rejestrowany w systemowym MOK Managerze podczas rebootu.

Generowanie klucza MOK:

openssl req -new -x509 -newkey rsa:4096 -keyout MOK.key -out MOK.crt -nodes -days 3650 -subj "/CN=MyKernel/"

Zestaw plików:

  • MOK.key – klucz prywatny (trzymany w tajemnicy),
  • MOK.crt – klucz publiczny (dodawany do systemu).

3. Dodawanie klucza do MOK Managera

Zarejestruj klucz w systemie:

sudo mokutil --import MOK.crt

Po restarcie:

  • pojawi się MOK Manager,
  • wybierz Enroll MOK,
  • potwierdź hasłem,
  • zaakceptuj klucz.

Od tego momentu kernel i moduły podpisane tym kluczem będą uznawane za zaufane.


4. Podpisywanie własnego jądra Linux

1. Zlokalizuj plik kernela

Najczęściej:

  • /boot/vmlinuz-<wersja>
  • /boot/EFI/.../bzImage

2. Użyj narzędzia sbsign

sbsign --key MOK.key --cert MOK.crt --output vmlinuz-signed vmlinuz

Wygenerowany plik vmlinuz-signed zastępuje dotychczasowy kernel w katalogu EFI lub /boot.

Możesz go umieścić np.:

sudo cp vmlinuz-signed /boot/efi/EFI/Linux/vmlinuz.efi

5. Podpisywanie modułów jądra (out-of-tree + DKMS)

Linux wymaga, aby wszystkie moduły ładowane pod Secure Boot były podpisane kluczem uznanym przez kernel.

Podpisywanie modułu ręcznie

Załóżmy, że chcesz podpisać moduł:

sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file \
    sha256 MOK.key MOK.crt /lib/modules/$(uname -r)/kernel/drivers/misc/example.ko

Automatyzacja dla DKMS

W katalogu /etc/dkms/sign_helper.sh możesz utworzyć skrypt:

#!/bin/bash
KEY="/root/MOK.key"
CRT="/root/MOK.crt"

/usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 $KEY $CRT "$1"

Następnie w /etc/dkms/template-dkms-mok.conf:

POST_BUILD="/etc/dkms/sign_helper.sh ${dkms_module_path}/${module}.ko"

Od teraz każdy moduł przebudowany przez DKMS będzie podpisany automatycznie.


6. Podpisywanie initramfs

Initramfs również musi być podpisany, aby zachować łańcuch zaufania.

Przykład dla systemd-boot:

sbsign --key MOK.key --cert MOK.crt \
    --output initramfs.img.signed initramfs.img

Następnie umieszczasz go w /boot lub /boot/efi zależnie od konfiguracji.


7. Sprawdzanie podpisów

Sprawdzenie podpisu kernela:

sbverify --list vmlinuz-signed

Sprawdzenie podpisu modułu:

modinfo -F signer /path/to/module.ko

Powinieneś zobaczyć:

signer: MyKernel
sig_key: MOK.key

8. Zaawansowane techniki hardeningu Secure Boot

1. Całkowite usunięcie kluczy Microsoftu z firmware

Zachowujesz pełną kontrolę nad tym, co system uznaje za zaufane.

2. Własny łańcuch kluczy KEK + DB + dbx

Możesz odrzucać konkretne komponenty (np. stare shim-y) przez własny dbx.

3. Własne shim + grub + kernel

Pełna kontrola nad pipeline’em bootowania.

4. TPM 2.0 + measured boot

Rejestrowanie integralności bootloadera w PCR, dodatkowa walidacja.

5. Łączenie z modułem ima i ima-evm

Podpisy plików wykonywalnych i bibliotek — kontrola integralności całego systemu.


9. Najczęstsze problemy i ich rozwiązania

1. Kernel nie uruchamia się mimo podpisu

  • klucz nie został zaimportowany do MOK,
  • plik jest w złej lokalizacji EFI,
  • Secure Boot wymaga formatu EFI, nie raw vmlinuz.

2. Moduły nie ładują się po aktualizacji systemu

Należy ponownie podpisać:

  • moduły DKMS,
  • nowe moduły dostarczone przez kernel.

3. NVIDIA / VirtualBox odmawiają pracy

Wymagają podpisania modułów:

modprobe -v nvidia

Jeśli pokazuje tainted, moduły nie są podpisane.


Podsumowanie

Tworzenie podpisanych obrazów jądra i modułów Linux to kluczowy element twardego hardeningu Secure Boot. Własne klucze MOK i podpisywanie kluczowych komponentów pozwalają:

  • zwiększyć bezpieczeństwo,
  • utrzymać pełną kontrolę nad systemem,
  • uruchamiać customowe kernele i moduły bez łamania Secure Boot,
  • wdrażać rozwiązania stosowane w enterprise i środowiskach produkcyjnych.

 

Polecane wpisy
Zabezpieczanie sieci w systemie Linux za pomocą zapory ogniowej (firewall) i VPN
Zabezpieczanie sieci w systemie Linux za pomocą zapory ogniowej (firewall) i VPN

Zabezpieczanie sieci w systemie Linux za pomocą zapory ogniowej (firewall) i VPN Bezpieczeństwo sieci jest jednym z najważniejszych aspektów, na Czytaj dalej

Czy opłaca się inwestować w kryptowaluty? Analiza ryzyka i potencjalnych korzyści
Czy opłaca się inwestować w kryptowaluty? Analiza ryzyka i potencjalnych korzyści

Inwestowanie w kryptowaluty od kilku lat przyciąga uwagę zarówno doświadczonych inwestorów, jak i nowicjuszy. Jednak przed podjęciem decyzji o inwestycji Czytaj dalej

Marek "Netbe" Lampart Inżynier informatyki Marek Lampart to doświadczony inżynier informatyki z ponad 25-letnim stażem w zawodzie. Specjalizuje się w systemach Windows i Linux, bezpieczeństwie IT, cyberbezpieczeństwie, administracji serwerami oraz diagnostyce i optymalizacji systemów. Na netbe.pl publikuje praktyczne poradniki, analizy i instrukcje krok po kroku, pomagając administratorom, specjalistom IT oraz zaawansowanym użytkownikom rozwiązywać realne problemy techniczne.