All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ingo Molnar <mingo@kernel.org>
To: Kees Cook <keescook@chromium.org>
Cc: linux-kernel@vger.kernel.org,
	kernel-hardening@lists.openwall.com,
	"H. Peter Anvin" <hpa@zytor.com>,
	Thomas Gleixner <tglx@linutronix.de>,
	Ingo Molnar <mingo@redhat.com>,
	x86@kernel.org, Jarkko Sakkinen <jarkko.sakkinen@intel.com>,
	Matthew Garrett <mjg@redhat.com>,
	Matt Fleming <matt.fleming@intel.com>,
	Eric Northup <digitaleric@google.com>,
	Dan Rosenberg <drosenberg@vsecurity.com>,
	Julien Tinnes <jln@google.com>, Will Drewry <wad@chromium.org>
Subject: [kernel-hardening] Re: [PATCH 3/3] x86: kernel base offset ASLR
Date: Fri, 5 Apr 2013 09:11:44 +0200	[thread overview]
Message-ID: <20130405071144.GB26889@gmail.com> (raw)
In-Reply-To: <1365106055-22939-4-git-send-email-keescook@chromium.org>


* Kees Cook <keescook@chromium.org> wrote:

> This creates CONFIG_RANDOMIZE_BASE, so that the base offset of the kernel
> can be randomized at boot.
> 
> This makes kernel vulnerabilities harder to reliably exploit, especially
> from remote attacks and local processes in seccomp containers. Keeping
> the location of kernel addresses secret becomes very important when using
> this feature, so enabling kptr_restrict and dmesg_restrict is recommended.
> Besides direct address leaks, several other attacks are possible to bypass
> this on local systems, including cache timing[1]. However, the benefits of
> this feature in certain environments exceed the perceived weaknesses[2].
> 
> An added security benefit is making the IDT read-only.
> 
> Current entropy is low, since the kernel has basically a minimum 2MB
> alignment and has been built with -2G memory addressing. As a result,
> available entropy will be 8 bits in the best case. The e820 entries on
> a given system may further limit the available memory.
> 
> This feature is presently incompatible with hibernation.
> 
> When built into the kernel, the "noaslr" kernel command line option will
> disable the feature.
> 
> Heavily based on work by Dan Rosenberg[3] and Neill Clift.
> 
> [1] http://www.internetsociety.org/sites/default/files/Practical%20Timing%20Side%20Channel%20Attacks%20Against%20Kernel%20Space%20ASLR.pdf
> [2] http://forums.grsecurity.net/viewtopic.php?f=7&t=3367
> [3] http://lkml.indiana.edu/hypermail/linux/kernel/1105.3/index.html#00520
> 
> Signed-off-by: Kees Cook <keescook@chromium.org>
> Cc: Eric Northup <digitaleric@google.com>
> ---
>  Documentation/kernel-parameters.txt  |    4 +
>  arch/x86/Kconfig                     |   51 +++++++++++--
>  arch/x86/Makefile                    |    3 +
>  arch/x86/boot/compressed/head_32.S   |   21 +++++-
>  arch/x86/boot/compressed/head_64.S   |  135 ++++++++++++++++++++++++++++++++--
>  arch/x86/include/asm/fixmap.h        |    4 +
>  arch/x86/include/asm/page_32_types.h |    2 +
>  arch/x86/include/asm/page_64_types.h |    4 -
>  arch/x86/include/asm/page_types.h    |    4 +
>  arch/x86/kernel/asm-offsets.c        |   14 ++++
>  arch/x86/kernel/setup.c              |   24 ++++++
>  arch/x86/kernel/traps.c              |    6 ++
>  12 files changed, 251 insertions(+), 21 deletions(-)

Before going into the details, I have a structural request: could you 
please further increase the granularity of the patch-set?

In particular I'd suggest introducing a helper Kconfig bool that makes the 
IDT readonly - instead of using CONFIG_RANDOMIZE_BASE for that. 
CONFIG_RANDOMIZE_BASE can then select this helper Kconfig switch.

Users could also select a readonly-IDT - even if they don't want a 
randomized kernel.

With that done, it would be nice to implement the read-only IDT changes in 
a separate, preparatory patch. If it causes any problems it will be easier 
to isolate.

Thanks,

	Ingo

WARNING: multiple messages have this Message-ID (diff)
From: Ingo Molnar <mingo@kernel.org>
To: Kees Cook <keescook@chromium.org>
Cc: linux-kernel@vger.kernel.org,
	kernel-hardening@lists.openwall.com,
	"H. Peter Anvin" <hpa@zytor.com>,
	Thomas Gleixner <tglx@linutronix.de>,
	Ingo Molnar <mingo@redhat.com>,
	x86@kernel.org, Jarkko Sakkinen <jarkko.sakkinen@intel.com>,
	Matthew Garrett <mjg@redhat.com>,
	Matt Fleming <matt.fleming@intel.com>,
	Eric Northup <digitaleric@google.com>,
	Dan Rosenberg <drosenberg@vsecurity.com>,
	Julien Tinnes <jln@google.com>, Will Drewry <wad@chromium.org>
Subject: Re: [PATCH 3/3] x86: kernel base offset ASLR
Date: Fri, 5 Apr 2013 09:11:44 +0200	[thread overview]
Message-ID: <20130405071144.GB26889@gmail.com> (raw)
In-Reply-To: <1365106055-22939-4-git-send-email-keescook@chromium.org>


* Kees Cook <keescook@chromium.org> wrote:

> This creates CONFIG_RANDOMIZE_BASE, so that the base offset of the kernel
> can be randomized at boot.
> 
> This makes kernel vulnerabilities harder to reliably exploit, especially
> from remote attacks and local processes in seccomp containers. Keeping
> the location of kernel addresses secret becomes very important when using
> this feature, so enabling kptr_restrict and dmesg_restrict is recommended.
> Besides direct address leaks, several other attacks are possible to bypass
> this on local systems, including cache timing[1]. However, the benefits of
> this feature in certain environments exceed the perceived weaknesses[2].
> 
> An added security benefit is making the IDT read-only.
> 
> Current entropy is low, since the kernel has basically a minimum 2MB
> alignment and has been built with -2G memory addressing. As a result,
> available entropy will be 8 bits in the best case. The e820 entries on
> a given system may further limit the available memory.
> 
> This feature is presently incompatible with hibernation.
> 
> When built into the kernel, the "noaslr" kernel command line option will
> disable the feature.
> 
> Heavily based on work by Dan Rosenberg[3] and Neill Clift.
> 
> [1] http://www.internetsociety.org/sites/default/files/Practical%20Timing%20Side%20Channel%20Attacks%20Against%20Kernel%20Space%20ASLR.pdf
> [2] http://forums.grsecurity.net/viewtopic.php?f=7&t=3367
> [3] http://lkml.indiana.edu/hypermail/linux/kernel/1105.3/index.html#00520
> 
> Signed-off-by: Kees Cook <keescook@chromium.org>
> Cc: Eric Northup <digitaleric@google.com>
> ---
>  Documentation/kernel-parameters.txt  |    4 +
>  arch/x86/Kconfig                     |   51 +++++++++++--
>  arch/x86/Makefile                    |    3 +
>  arch/x86/boot/compressed/head_32.S   |   21 +++++-
>  arch/x86/boot/compressed/head_64.S   |  135 ++++++++++++++++++++++++++++++++--
>  arch/x86/include/asm/fixmap.h        |    4 +
>  arch/x86/include/asm/page_32_types.h |    2 +
>  arch/x86/include/asm/page_64_types.h |    4 -
>  arch/x86/include/asm/page_types.h    |    4 +
>  arch/x86/kernel/asm-offsets.c        |   14 ++++
>  arch/x86/kernel/setup.c              |   24 ++++++
>  arch/x86/kernel/traps.c              |    6 ++
>  12 files changed, 251 insertions(+), 21 deletions(-)

Before going into the details, I have a structural request: could you 
please further increase the granularity of the patch-set?

In particular I'd suggest introducing a helper Kconfig bool that makes the 
IDT readonly - instead of using CONFIG_RANDOMIZE_BASE for that. 
CONFIG_RANDOMIZE_BASE can then select this helper Kconfig switch.

Users could also select a readonly-IDT - even if they don't want a 
randomized kernel.

With that done, it would be nice to implement the read-only IDT changes in 
a separate, preparatory patch. If it causes any problems it will be easier 
to isolate.

Thanks,

	Ingo

  parent reply	other threads:[~2013-04-05  7:11 UTC|newest]

Thread overview: 102+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-04-04 20:07 [kernel-hardening] [PATCH 0/3] kernel ASLR Kees Cook
2013-04-04 20:07 ` Kees Cook
2013-04-04 20:07 ` [kernel-hardening] [PATCH 1/3] x86: routines to choose random kernel base offset Kees Cook
2013-04-04 20:07   ` Kees Cook
2013-04-05  7:24   ` [kernel-hardening] " Ingo Molnar
2013-04-05  7:24     ` Ingo Molnar
2013-04-05  7:36     ` [kernel-hardening] " Ingo Molnar
2013-04-05  7:36       ` Ingo Molnar
2013-04-05 18:15       ` [kernel-hardening] " H. Peter Anvin
2013-04-05 18:15         ` H. Peter Anvin
2013-04-08  5:35         ` [kernel-hardening] " Hasinoliva MIARIMANJATO
2013-04-08  5:35           ` Hasinoliva MIARIMANJATO
2013-04-04 20:07 ` [kernel-hardening] [PATCH 2/3] x86: build reloc tool for both 64 and 32 bit Kees Cook
2013-04-04 20:07   ` Kees Cook
2013-04-05  7:13   ` [kernel-hardening] " Ingo Molnar
2013-04-05  7:13     ` Ingo Molnar
2013-04-04 20:07 ` [kernel-hardening] [PATCH 3/3] x86: kernel base offset ASLR Kees Cook
2013-04-04 20:07   ` Kees Cook
2013-04-04 20:12   ` [kernel-hardening] " H. Peter Anvin
2013-04-04 20:12     ` H. Peter Anvin
2013-04-04 20:19     ` [kernel-hardening] " Julien Tinnes
2013-04-04 20:19       ` Julien Tinnes
2013-04-04 20:23       ` [kernel-hardening] " Julien Tinnes
2013-04-04 20:23         ` Julien Tinnes
2013-04-04 20:27         ` [kernel-hardening] " H. Peter Anvin
2013-04-04 20:27           ` H. Peter Anvin
2013-04-04 20:48           ` [kernel-hardening] " Julien Tinnes
2013-04-04 20:48             ` Julien Tinnes
2013-04-05  7:05             ` [kernel-hardening] " Ingo Molnar
2013-04-05  7:05               ` Ingo Molnar
2013-04-04 20:54     ` [kernel-hardening] " Kees Cook
2013-04-04 20:54       ` Kees Cook
2013-04-04 20:58       ` [kernel-hardening] " H. Peter Anvin
2013-04-04 20:58         ` H. Peter Anvin
2013-04-04 21:00         ` [kernel-hardening] " Kees Cook
2013-04-04 21:00           ` Kees Cook
2013-04-04 21:01           ` [kernel-hardening] " H. Peter Anvin
2013-04-04 21:01             ` H. Peter Anvin
2013-04-04 21:04             ` [kernel-hardening] " Eric Northup
2013-04-04 21:04               ` Eric Northup
2013-04-04 21:06             ` [kernel-hardening] " Kees Cook
2013-04-04 21:06               ` Kees Cook
2013-04-04 21:00         ` [kernel-hardening] " Julien Tinnes
2013-04-04 21:00           ` Julien Tinnes
2013-04-04 21:01         ` [kernel-hardening] " Eric Northup
2013-04-04 21:01           ` Eric Northup
2013-04-05  7:55           ` [kernel-hardening] " Ingo Molnar
2013-04-05  7:55             ` Ingo Molnar
2013-04-04 20:21   ` [kernel-hardening] " H. Peter Anvin
2013-04-04 20:21     ` H. Peter Anvin
2013-04-04 20:47     ` [kernel-hardening] " Eric Northup
2013-04-04 20:47       ` Eric Northup
2013-04-05  1:08       ` [kernel-hardening] " H. Peter Anvin
2013-04-05  1:08         ` H. Peter Anvin
2013-04-05  8:04     ` [kernel-hardening] " Ingo Molnar
2013-04-05  8:04       ` Ingo Molnar
2013-04-05 15:30       ` [kernel-hardening] " H. Peter Anvin
2013-04-05 15:30         ` H. Peter Anvin
2013-04-08 11:58         ` [kernel-hardening] " Ingo Molnar
2013-04-08 11:58           ` Ingo Molnar
2013-04-08 14:58           ` [kernel-hardening] " H. Peter Anvin
2013-04-08 14:58             ` H. Peter Anvin
2013-04-05 18:17       ` [kernel-hardening] " H. Peter Anvin
2013-04-05 18:17         ` H. Peter Anvin
2013-04-05 20:01     ` [kernel-hardening] " Yinghai Lu
2013-04-05 20:01       ` Yinghai Lu
2013-04-05 20:05       ` [kernel-hardening] " H. Peter Anvin
2013-04-05 20:05         ` H. Peter Anvin
2013-04-05 20:19         ` [kernel-hardening] " Yinghai Lu
2013-04-05 20:19           ` Yinghai Lu
2013-04-05 20:29           ` [kernel-hardening] " H. Peter Anvin
2013-04-05 20:29             ` H. Peter Anvin
2013-04-05  7:11   ` Ingo Molnar [this message]
2013-04-05  7:11     ` Ingo Molnar
2013-04-05 22:06     ` [kernel-hardening] " Julien Tinnes
2013-04-05 22:06       ` Julien Tinnes
2013-04-05 22:08       ` [kernel-hardening] " H. Peter Anvin
2013-04-05 22:08         ` H. Peter Anvin
2013-04-05 22:13         ` [kernel-hardening] " Julien Tinnes
2013-04-05 22:13           ` Julien Tinnes
2013-04-05  7:34   ` [kernel-hardening] " Ingo Molnar
2013-04-05  7:34     ` Ingo Molnar
2013-04-05 12:12   ` [kernel-hardening] " Jiri Kosina
2013-04-05 12:12     ` Jiri Kosina
2013-04-05 14:49   ` [kernel-hardening] " Borislav Petkov
2013-04-05 14:49     ` Borislav Petkov
2013-04-05 20:19     ` [kernel-hardening] " Julien Tinnes
2013-04-05 20:19       ` Julien Tinnes
2013-04-05 20:43       ` [kernel-hardening] " Borislav Petkov
2013-04-05 20:43         ` Borislav Petkov
2013-04-05 23:18         ` [kernel-hardening] " Kees Cook
2013-04-05 23:18           ` Kees Cook
2013-04-06 10:10           ` [kernel-hardening] " Borislav Petkov
2013-04-06 10:10             ` Borislav Petkov
2013-04-08  5:34             ` [kernel-hardening] " Hasinoliva MIARIMANJATO
2013-04-08 12:13         ` Ingo Molnar
2013-04-08 12:13           ` Ingo Molnar
2013-04-08  5:34 ` [kernel-hardening] [PATCH 0/3] kernel ASLR Hasinoliva MIARIMANJATO
2013-04-11 20:52 ` [kernel-hardening] " H. Peter Anvin
2013-04-11 20:52   ` H. Peter Anvin
2013-04-11 21:28   ` [kernel-hardening] " Kees Cook
2013-04-11 21:28     ` Kees Cook

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20130405071144.GB26889@gmail.com \
    --to=mingo@kernel.org \
    --cc=digitaleric@google.com \
    --cc=drosenberg@vsecurity.com \
    --cc=hpa@zytor.com \
    --cc=jarkko.sakkinen@intel.com \
    --cc=jln@google.com \
    --cc=keescook@chromium.org \
    --cc=kernel-hardening@lists.openwall.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=matt.fleming@intel.com \
    --cc=mingo@redhat.com \
    --cc=mjg@redhat.com \
    --cc=tglx@linutronix.de \
    --cc=wad@chromium.org \
    --cc=x86@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.