From: Stephen Smalley <sds@tycho.nsa.gov>
To: Andy Lutomirski <luto@amacapital.net>, James Morris <jmorris@namei.org>
Cc: Andy Lutomirski <luto@kernel.org>,
Matthew Garrett <matthewgarrett@google.com>,
linux-security@vger.kernel.org,
LKML <linux-kernel@vger.kernel.org>,
Linux API <linux-api@vger.kernel.org>,
David Howells <dhowells@redhat.com>,
Alexei Starovoitov <alexei.starovoitov@gmail.com>,
Matthew Garrett <mjg59@google.com>,
Network Development <netdev@vger.kernel.org>,
Chun-Yi Lee <jlee@suse.com>,
Daniel Borkmann <daniel@iogearbox.net>,
linux-security-module@vger.kernel.org
Subject: Re: [PATCH V33 24/30] bpf: Restrict bpf when kernel lockdown is in confidentiality mode
Date: Thu, 27 Jun 2019 10:35:41 -0400 [thread overview]
Message-ID: <bce70c8b-9efd-6362-d536-cfbbcf70b0b7@tycho.nsa.gov> (raw)
In-Reply-To: <6E53376F-01BB-4795-BC02-24F9CAE00001@amacapital.net>
On 6/26/19 8:57 PM, Andy Lutomirski wrote:
>
>
>> On Jun 26, 2019, at 1:22 PM, James Morris <jmorris@namei.org> wrote:
>>
>> [Adding the LSM mailing list: missed this patchset initially]
>>
>>> On Thu, 20 Jun 2019, Andy Lutomirski wrote:
>>>
>>> This patch exemplifies why I don't like this approach:
>>>
>>>> @@ -97,6 +97,7 @@ enum lockdown_reason {
>>>> LOCKDOWN_INTEGRITY_MAX,
>>>> LOCKDOWN_KCORE,
>>>> LOCKDOWN_KPROBES,
>>>> + LOCKDOWN_BPF,
>>>> LOCKDOWN_CONFIDENTIALITY_MAX,
>>>
>>>> --- a/security/lockdown/lockdown.c
>>>> +++ b/security/lockdown/lockdown.c
>>>> @@ -33,6 +33,7 @@ static char *lockdown_reasons[LOCKDOWN_CONFIDENTIALITY_MAX+1] = {
>>>> [LOCKDOWN_INTEGRITY_MAX] = "integrity",
>>>> [LOCKDOWN_KCORE] = "/proc/kcore access",
>>>> [LOCKDOWN_KPROBES] = "use of kprobes",
>>>> + [LOCKDOWN_BPF] = "use of bpf",
>>>> [LOCKDOWN_CONFIDENTIALITY_MAX] = "confidentiality",
>>>
>>> The text here says "use of bpf", but what this patch is *really* doing
>>> is locking down use of BPF to read kernel memory. If the details
>>> change, then every LSM needs to get updated, and we risk breaking user
>>> policies that are based on LSMs that offer excessively fine
>>> granularity.
>>
>> Can you give an example of how the details might change?
>>
>>> I'd be more comfortable if the LSM only got to see "confidentiality"
>>> or "integrity".
>>
>> These are not sufficient for creating a useful policy for the SELinux
>> case.
>>
>>
>
> I may have misunderstood, but I thought that SELinux mainly needed to allow certain privileged programs to bypass the policy. Is there a real example of what SELinux wants to do that can’t be done in the simplified model?
>
> The think that specifically makes me uneasy about exposing all of these precise actions to LSMs is that they will get exposed to userspace in a way that forces us to treat them as stable ABIs.
There are two scenarios where finer-grained distinctions make sense:
- Users may need to enable specific functionality that falls under the
umbrella of "confidentiality" or "integrity" lockdown. Finer-grained
lockdown reasons free them from having to make an all-or-nothing choice
between lost functionality or no lockdown at all. This can be supported
directly by the lockdown module without any help from SELinux or other
security modules; we just need the ability to specify these
finer-grained lockdown levels via the boot parameters and securityfs nodes.
- Different processes/programs may need to use different sets of
functionality restricted via lockdown confidentiality or integrity
categories. If we have to allow all-or-none for the set of
interfaces/functionality covered by the generic confidentiality or
integrity categories, then we'll end up having to choose between lost
functionality or overprivileged processes, neither of which is optimal.
Is it truly the case that everything under the "confidentiality"
category poses the same level of risk to kernel confidentiality, and
similarly for everything under the "integrity" category? If not, then
being able to distinguish them definitely has benefit.
I'm still not clear though on how/if this will compose with or be
overridden by other security modules. We would need some means for
another security module to take over lockdown decisions once it has
initialized (including policy load), and to be able to access state that
is currently private to the lockdown module, like the level.
next prev parent reply other threads:[~2019-06-27 14:36 UTC|newest]
Thread overview: 58+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-06-21 1:19 [PATCH V33 00/30] Lockdown as an LSM Matthew Garrett
2019-06-21 1:19 ` [PATCH V33 01/30] security: Support early LSMs Matthew Garrett
2019-06-21 3:21 ` Kees Cook
2019-06-21 19:26 ` Matthew Garrett
2019-06-21 5:23 ` Andy Lutomirski
2019-06-21 19:27 ` Matthew Garrett
2019-06-21 1:19 ` [PATCH V33 02/30] security: Add a "locked down" LSM hook Matthew Garrett
2019-06-21 3:23 ` Kees Cook
2019-06-21 19:29 ` Matthew Garrett
2019-06-21 1:19 ` [PATCH V33 03/30] security: Add a static lockdown policy LSM Matthew Garrett
2019-06-21 3:44 ` Kees Cook
2019-06-21 19:37 ` Matthew Garrett
2019-06-21 21:04 ` Matthew Garrett
2019-06-21 22:31 ` Mimi Zohar
2019-06-21 1:19 ` [PATCH V33 04/30] Enforce module signatures if the kernel is locked down Matthew Garrett
2019-06-21 3:46 ` Kees Cook
2019-06-21 1:19 ` [PATCH V33 05/30] Restrict /dev/{mem,kmem,port} when " Matthew Garrett
2019-06-21 1:19 ` [PATCH V33 06/30] kexec_load: Disable at runtime if " Matthew Garrett
2019-06-21 1:19 ` [PATCH V33 07/30] Copy secure_boot flag in boot params across kexec reboot Matthew Garrett
2019-06-21 1:19 ` [PATCH V33 08/30] kexec_file: split KEXEC_VERIFY_SIG into KEXEC_SIG and KEXEC_SIG_FORCE Matthew Garrett
2019-06-21 1:19 ` [PATCH V33 09/30] kexec_file: Restrict at runtime if the kernel is locked down Matthew Garrett
2019-06-21 1:19 ` [PATCH V33 10/30] hibernate: Disable when " Matthew Garrett
2019-06-21 1:19 ` [PATCH V33 11/30] uswsusp: " Matthew Garrett
2019-06-21 1:19 ` [PATCH V33 12/30] PCI: Lock down BAR access " Matthew Garrett
2019-06-21 1:19 ` [PATCH V33 13/30] x86: Lock down IO port " Matthew Garrett
2019-06-21 1:19 ` [PATCH V33 14/30] x86/msr: Restrict MSR " Matthew Garrett
2019-06-21 1:19 ` [PATCH V33 15/30] ACPI: Limit access to custom_method " Matthew Garrett
2019-06-21 1:19 ` [PATCH V33 16/30] acpi: Ignore acpi_rsdp kernel param when the kernel has been " Matthew Garrett
2019-06-21 1:19 ` [PATCH V33 17/30] acpi: Disable ACPI table override if the kernel is " Matthew Garrett
2019-06-21 1:19 ` [PATCH V33 18/30] Prohibit PCMCIA CIS storage when " Matthew Garrett
2019-06-21 1:19 ` [PATCH V33 19/30] Lock down TIOCSSERIAL Matthew Garrett
2019-06-21 1:19 ` [PATCH V33 20/30] Lock down module params that specify hardware parameters (eg. ioport) Matthew Garrett
2019-06-21 1:19 ` [PATCH V33 21/30] x86/mmiotrace: Lock down the testmmiotrace module Matthew Garrett
2019-06-26 12:46 ` Steven Rostedt
2019-06-21 1:19 ` [PATCH V33 22/30] Lock down /proc/kcore Matthew Garrett
2019-06-21 1:19 ` [PATCH V33 23/30] Lock down tracing and perf kprobes when in confidentiality mode Matthew Garrett
2019-06-21 1:19 ` [PATCH V33 24/30] bpf: Restrict bpf when kernel lockdown is " Matthew Garrett
2019-06-21 5:22 ` Andy Lutomirski
2019-06-21 20:05 ` Matthew Garrett
2019-06-26 20:22 ` James Morris
2019-06-27 0:57 ` Andy Lutomirski
2019-06-27 14:35 ` Stephen Smalley [this message]
2019-06-27 18:06 ` James Morris
2019-06-27 20:16 ` Stephen Smalley
2019-06-27 23:16 ` Matthew Garrett
2019-06-27 23:23 ` Andy Lutomirski
2019-06-27 23:27 ` Andy Lutomirski
2019-06-28 18:47 ` Matthew Garrett
2019-06-29 23:47 ` Andy Lutomirski
2019-06-21 1:19 ` [PATCH V33 25/30] Lock down perf when " Matthew Garrett
2019-06-21 1:19 ` [PATCH V33 26/30] kexec: Allow kexec_file() with appropriate IMA policy when locked down Matthew Garrett
2019-06-21 1:19 ` [PATCH V33 27/30] lockdown: Print current->comm in restriction messages Matthew Garrett
2019-06-21 4:09 ` Kees Cook
2019-06-21 1:19 ` [PATCH V33 28/30] debugfs: Restrict debugfs when the kernel is locked down Matthew Garrett
2019-06-21 1:19 ` [PATCH V33 29/30] tracefs: Restrict tracefs " Matthew Garrett
2019-06-26 13:07 ` Steven Rostedt
2019-06-26 19:39 ` Matthew Garrett
2019-06-21 1:19 ` [PATCH V33 30/30] efi: Restrict efivar_ssdt_load " Matthew Garrett
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=bce70c8b-9efd-6362-d536-cfbbcf70b0b7@tycho.nsa.gov \
--to=sds@tycho.nsa.gov \
--cc=alexei.starovoitov@gmail.com \
--cc=daniel@iogearbox.net \
--cc=dhowells@redhat.com \
--cc=jlee@suse.com \
--cc=jmorris@namei.org \
--cc=linux-api@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-security-module@vger.kernel.org \
--cc=linux-security@vger.kernel.org \
--cc=luto@amacapital.net \
--cc=luto@kernel.org \
--cc=matthewgarrett@google.com \
--cc=mjg59@google.com \
--cc=netdev@vger.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®