From 43fc394a5cd06c38ed43e857ed14496cafdde0b5 Mon Sep 17 00:00:00 2001 From: Joachim Fasting Date: Mon, 1 Aug 2016 15:36:03 +0200 Subject: [PATCH] grsecurity module: disable EFI runtime services by default Enabling EFI runtime services provides a venue for injecting code into the kernel. When grsecurity is enabled, we close this by default by disabling access to EFI runtime services. The upshot of this is that /sys/firmware/efi/efivars will be unavailable by default (and attempts to mount it will fail). This is not strictly a grsecurity related option, it could be made into a general option, but it seems to be of particular interest to grsecurity users (for non-grsecurity users, there are other, more immediate kernel injection attack dangers to contend with anyway). --- nixos/doc/manual/configuration/grsecurity.xml | 5 +++++ nixos/modules/security/grsecurity.nix | 14 ++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/nixos/doc/manual/configuration/grsecurity.xml b/nixos/doc/manual/configuration/grsecurity.xml index 06e7617d58eb..3c17fc19397f 100644 --- a/nixos/doc/manual/configuration/grsecurity.xml +++ b/nixos/doc/manual/configuration/grsecurity.xml @@ -265,6 +265,11 @@ Issues and work-arounds + Access to EFI runtime services is disabled by default: + this plugs a potential code injection attack vector; use + to override + this behavior. + Virtualization: KVM is the preferred virtualization solution. Xen, Virtualbox, and VMWare are unsupported and most likely require a custom kernel. diff --git a/nixos/modules/security/grsecurity.nix b/nixos/modules/security/grsecurity.nix index 6b4dbe8e11f8..60e9058dd69e 100644 --- a/nixos/modules/security/grsecurity.nix +++ b/nixos/modules/security/grsecurity.nix @@ -37,6 +37,18 @@ in ''; }; + disableEfiRuntimeServices = mkOption { + type = types.bool; + example = false; + default = true; + description = '' + Whether to disable access to EFI runtime services. Enabling EFI runtime + services creates a venue for code injection attacks on the kernel and + should be disabled if at all possible. Changing this option enters into + effect upon reboot. + ''; + }; + }; config = mkIf cfg.enable { @@ -45,6 +57,8 @@ in # required kernel config boot.kernelPackages = mkDefault pkgs.linuxPackages_grsec_nixos; + boot.kernelParams = optional cfg.disableEfiRuntimeServices "noefi"; + system.requiredKernelConfig = with config.lib.kernelConfig; [ (isEnabled "GRKERNSEC") (isEnabled "PAX")