LKML Archive on lore.kernel.org
help / color / mirror / Atom feed
From: ebiederm@xmission.com (Eric W. Biederman)
To: Mimi Zohar <zohar@linux.vnet.ibm.com>
Cc: Kees Cook <keescook@chromium.org>,
	David Howells <dhowells@redhat.com>,
	Matthew Garrett <mjg59@google.com>,
	linux-integrity@vger.kernel.org,
	linux-security-module@vger.kernel.org, kexec@lists.infradead.org,
	linux-kernel@vger.kernel.org,
	kernel-hardening@lists.openwall.com
Subject: Re: [PATCH 0/3] kexec: limit kexec_load syscall
Date: Thu, 03 May 2018 18:03:47 -0500	[thread overview]
Message-ID: <87fu38jq98.fsf@xmission.com> (raw)
In-Reply-To: <1525384675.3539.89.camel@linux.vnet.ibm.com> (Mimi Zohar's message of "Thu, 03 May 2018 17:57:55 -0400")

Mimi Zohar <zohar@linux.vnet.ibm.com> writes:

> On Thu, 2018-05-03 at 16:38 -0500, Eric W. Biederman wrote:
>> Mimi Zohar <zohar@linux.vnet.ibm.com> writes:
>> 
>> > [Cc'ing Kees and kernel-hardening]
>> >
>> > On Thu, 2018-05-03 at 15:13 -0500, Eric W. Biederman wrote:
>> >> Mimi Zohar <zohar@linux.vnet.ibm.com> writes:
>> >> 
>> >> > In environments that require the kexec kernel image to be signed, prevent
>> >> > using the kexec_load syscall.  In order for LSMs and IMA to differentiate
>> >> > between kexec_load and kexec_file_load syscalls, this patch set adds a
>> >> > call to security_kernel_read_file() in kexec_load_check().
>> >> 
>> >> Having thought about it some more this justification for these changes
>> >> does not work.  The functionality of kexec_load is already root-only.
>> >> So in environments that require the kernel image to be signed just don't
>> >> use kexec_load.  Possibly even compile kexec_load out to save space
>> >> because you will never need it.  You don't need a new security hook to
>> >> do any of that.  Userspace is a very fine mechanism for being the
>> >> instrument of policy.
>> >
>> > True, for those building their own kernel, they can disable the old
>> > syscalls.  The concern is not for those building their own kernels,
>> > but for those using stock kernels.  
>> >
>> > By adding an LSM hook here in the kexec_load syscall, as opposed to an
>> > IMA specific hook, other LSMs can piggy back on top of it.  Currently,
>> > both load_pin and SELinux are gating the kernel module syscalls based
>> > on security_kernel_read_file.
>> >
>> > If there was a similar option for the kernel image, I'm pretty sure
>> > other LSMs would use it.
>> >
>> > From an IMA perspective, there needs to be some method for only
>> > allowing signed code to be loaded, executed, etc. - kernel modules,
>> > kernel image/initramfs, firmware, policies.
>> 
>> What is the IMA perspective.  Why can't IMA trust appropriately
>> authorized userspace?
>
> Suppose a system owner wants to define a system wide policy that
> requires all code be signed - kernel modules, firmware, kexec image &
> initramfs, executables, mmapped files, etc - without having to rebuild
> the kernel.  Without a call in kexec_load that isn't possible.

Of course it is.  You just make it a requirement that before an
executable will be signed it will be audited to see that it doesn't
call sys_kexec_load.  Signing presumably means something.  So it should
not be hard to enforce a policy like that on a specialty system call
that most applications will never call.

>> >> If you don't trust userspace that needs to be spelled out very clearly.
>> >> You need to talk about what your threat models are.
>> >> 
>> >> If the only justification is so that that we can't boot windows if
>> >> someone hacks into userspace it has my nack because that is another kind
>> >> of complete non-sense.
>> >
>> > The usecase is the ability to gate the kexec_load usage in stock
>> > kernels.
>> 
>> But kexec_load is already gated.  It requires CAP_SYS_BOOT.
>
> It isn't a matter of kexec_load already being gated, but of wanting a
> single place for defining a system wide policy, as described above.

Signing is only a tool to enforce a policy.  Signing by itself is not a
policy.  Enforcing any quality controls in the signed executables should
trivially prevent kexec_load from being used.

Eric

  reply	other threads:[~2018-05-03 23:03 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-04-12 22:41 Mimi Zohar
2018-04-12 22:41 ` [PATCH 1/3] ima: based on the "secure_boot" policy limit syscalls Mimi Zohar
2018-04-12 22:41 ` [PATCH 2/3] kexec: call LSM hook for kexec_load syscall Mimi Zohar
2018-05-02 14:45   ` Eric W. Biederman
2018-05-02 15:45     ` Mimi Zohar
2018-05-03 15:51       ` Eric W. Biederman
2018-05-03 16:05         ` Casey Schaufler
2018-05-03 16:42           ` Eric W. Biederman
2018-05-03 21:06             ` Mimi Zohar
2018-05-03 21:36               ` Eric W. Biederman
2018-04-12 22:41 ` [PATCH 3/3] ima: based on policy require signed kexec kernel images Mimi Zohar
2018-05-03 20:13 ` [PATCH 0/3] kexec: limit kexec_load syscall Eric W. Biederman
2018-05-03 20:39   ` Matthew Garrett
2018-05-03 21:58     ` Eric W. Biederman
2018-05-03 22:51       ` Matthew Garrett
2018-05-03 21:31   ` Mimi Zohar
2018-05-03 21:38     ` Eric W. Biederman
2018-05-03 21:57       ` Mimi Zohar
2018-05-03 23:03         ` Eric W. Biederman [this message]
2018-05-04  2:29           ` Mimi Zohar
2018-05-11  1:36 Mimi Zohar

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=87fu38jq98.fsf@xmission.com \
    --to=ebiederm@xmission.com \
    --cc=dhowells@redhat.com \
    --cc=keescook@chromium.org \
    --cc=kernel-hardening@lists.openwall.com \
    --cc=kexec@lists.infradead.org \
    --cc=linux-integrity@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-security-module@vger.kernel.org \
    --cc=mjg59@google.com \
    --cc=zohar@linux.vnet.ibm.com \
    --subject='Re: [PATCH 0/3] kexec: limit kexec_load syscall' \
    /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

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).