Kernel hardening cz. 3 — sprawdź parametry boota
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:
- Kconfig — co jest wkompilowane (
.config) - Cmdline — co jest włączone/wyłączone przy starcie (
/proc/cmdline) - 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.