Większość ludzi kompiluje kernel albo z defconfig, albo kopiuje config z dystrybucji i robi make oldconfig. W obu przypadkach nikt nie sprawdza, ile opcji bezpieczeństwa jest wyłączonych.

A jest ich sporo.

Typowy config z Debiana 13 przechodzi mniej więcej 60% sprawdzeń bezpieczeństwa. Domyślny defconfig z upstream – jeszcze gorzej. Opcje typu CONFIG_STACKPROTECTOR_STRONG, CONFIG_INIT_STACK_ALL_ZERO czy CONFIG_RANDOMIZE_KSTACK_OFFSET_DEFAULT często nie są włączone, bo nikt ich ręcznie nie szuka w gąszczu kilku tysięcy opcji.

Jak to sprawdzić?

Narzędzie na vmlinuz.pl sprawdzi to za Ciebie: Kernel Checker.

Wrzucasz plik .config swojego kernela, a po kilku sekundach dostajesz:

  • wynik procentowy (ile sprawdzeń przeszło)
  • listę problemów pogrupowanych po kategoriach (self_protection, cut_attack_surface, harden_userspace, security_policy)
  • pełną tabelę ze wszystkimi opcjami i ich statusem

Sprawdzenia bazują na zaleceniach KSPP (Kernel Self Protection Project), grsecurity, CLIP OS i CIS Benchmark.

Gdzie znaleźć swój config?

Na większości dystrybucji:

ls /boot/config-$(uname -r)

Jeśli kernel ma wkompilowane CONFIG_IKCONFIG_PROC:

zcat /proc/config.gz > ~/my-kernel.config

A jeśli kompilowałeś ze źródeł, to .config leży w katalogu źródłowym.

Co z tym zrobić?

Nie chodzi o to, żeby mieć 100%. Część opcji jest wzajemnie wykluczająca, a część wpływa na wydajność. Ale jeśli masz 45%, to warto przejrzeć listę i włączyć to, co ma sens w Twoim przypadku.

Kilka opcji, które prawie zawsze warto mieć:

CONFIG_STACKPROTECTOR_STRONG=y
CONFIG_INIT_STACK_ALL_ZERO=y
CONFIG_RANDOMIZE_BASE=y
CONFIG_RANDOMIZE_MEMORY=y
CONFIG_HARDENED_USERCOPY=y
CONFIG_FORTIFY_SOURCE=y
CONFIG_STRICT_KERNEL_RWX=y
CONFIG_STRICT_MODULE_RWX=y
CONFIG_MODULE_SIG=y
CONFIG_MODULE_SIG_FORCE=y

Po zmianie konfiga:

make oldconfig
make -j$(nproc)
sudo make modules_install install

I restart.

Prywatność

Config nie jest nigdzie zapisywany. Trafia do analizy, wynik wraca do przeglądarki, plik jest kasowany. Nic nie logujemy, nic nie przechowujemy.