W cz. 1 sprawdzaliśmy .config, w cz. 2 ustawienia sysctl. Trzecia warstwa to parametry boota — flagi przekazywane kernelowi przy starcie.

Kernel Checker obsługuje teraz zakładkę Cmdline. Sprawdzenia bazują na rekomendacjach KSPP, grsecurity, CLIP OS i CIS Benchmark.

Cmdline — parametry boota

Parametry cmdline to flagi przekazywane kernelowi przy starcie. Niektóre z nich wyłączają zabezpieczenia — czasem świadomie (debugowanie), czasem przez domyślną konfigurację bootloadera.

Przykłady niebezpiecznych parametrów:

nokaslr          — wyłącza ASLR kernela
nopti            — wyłącza Page Table Isolation (Meltdown)
nospectre_v2     — wyłącza mitygację Spectre v2
nosmep           — wyłącza SMEP (Supervisor Mode Execution Prevention)
nosmap           — wyłącza SMAP (Supervisor Mode Access Prevention)

Żeby sprawdzić swoje parametry:

cat /proc/cmdline > cmdline.txt

Plik wrzucasz do zakładki Cmdline. Sprawdzenie działa dla architektury x86_64.

Typowy /proc/cmdline wygląda tak:

BOOT_IMAGE=/vmlinuz-6.12.0 root=/dev/sda1 ro quiet splash

Jeśli nie ma w nim nokaslr, nopti ani podobnych flag — prawdopodobnie jest OK. Checker sprawdzi to dokładnie.

Gdzie zmienić cmdline?

GRUB — edytuj /etc/default/grub:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"

Upewnij się, że nie ma tam nokaslr, nopti ani innych wyłączających flag. Po zmianie:

sudo update-grub

systemd-boot — edytuj wpis w /boot/loader/entries/:

options root=/dev/sda1 rw quiet

Trzy warstwy

Pełne sprawdzenie bezpieczeństwa kernela to trzy warstwy:

  1. Kconfig — co jest wkompilowane (.config)
  2. Cmdline — co jest włączone/wyłączone przy starcie (/proc/cmdline)
  3. Sysctl — co jest ustawione w runtime (sysctl -a)

Każda warstwa może nadpisać poprzednią. Możesz mieć CONFIG_RANDOMIZE_BASE=y w configu, ale nokaslr w cmdline skutecznie to wyłącza.

Dlatego warto sprawdzić wszystkie trzy.