All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andy Lutomirski <luto@kernel.org>
To: Sean Christopherson <sean.j.christopherson@intel.com>
Cc: Andy Lutomirski <luto@kernel.org>,
	"Huang, Kai" <kai.huang@intel.com>,
	Jethro Beekman <jethro@fortanix.com>,
	Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>,
	Thomas Gleixner <tglx@linutronix.de>,
	Ingo Molnar <mingo@redhat.com>, Borislav Petkov <bp@alien8.de>,
	"x86@kernel.org" <x86@kernel.org>,
	Dave Hansen <dave.hansen@linux.intel.com>,
	Peter Zijlstra <peterz@infradead.org>,
	"H. Peter Anvin" <hpa@zytor.com>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"linux-sgx@vger.kernel.org" <linux-sgx@vger.kernel.org>,
	Josh Triplett <josh@joshtriplett.org>,
	Haitao Huang <haitao.huang@linux.intel.com>,
	"Dr . Greg Wettstein" <greg@enjellic.com>
Subject: Re: x86/sgx: uapi change proposal
Date: Thu, 10 Jan 2019 16:30:06 -0800	[thread overview]
Message-ID: <CALCETrUsj1YBwcEDiyU-seTiCuyFJW+BvunzOUUiUYQj+ojpEg@mail.gmail.com> (raw)
In-Reply-To: <20190110235406.GB2365@linux.intel.com>

On Thu, Jan 10, 2019 at 3:54 PM Sean Christopherson
<sean.j.christopherson@intel.com> wrote:
>
> On Thu, Jan 10, 2019 at 01:34:44PM -0800, Andy Lutomirski wrote:
> > >> On Jan 9, 2019, at 8:31 AM, Sean Christopherson <sean.j.christopherson@intel.com> wrote:
> > >>
> > >> On Tue, Jan 08, 2019 at 02:54:11PM -0800, Andy Lutomirski wrote:
> > >
> > >> I do think it makes sense to have QEMU delegate the various ENCLS
> > >> operations (especially EINIT) to the regular SGX interface, which will
> > >> mean that VM guests will have exactly the same access controls applied
> > >> as regular user programs, which is probably what we want.
> > >
> > > To what end?  Except for EINIT, none of the ENCLS leafs are interesting
> > > from a permissions perspective.  Trapping and re-executing ENCLS leafs
> > > is painful, e.g. most leafs have multiple virtual addresses that need to
> > > be translated.  And routing everything through the regular interface
> > > would make SGX even slower than it already is, e.g. every ENCLS would
> > > take an additional ~900 cycles just to handle the VM-Exit, and that's
> > > not accounting for any additional overhead in the SGX code, e.g. using
> > > the regular interface would mean superfluous locks, etc...
> >
> > Trapping EINIT is what I have in mind.
>
> Phew, had me worried :-)
>
> > >
> > > Couldn't we require the same privilege/capability for VMs and and EINIT
> > > tokens?  I.e. /dev/sgx/virtualmachine can only be opened by a user that
> > > can also generate tokens.
> >
> > Hmm, maybe.  Or we can use Jarkko’s securityfs attribute thingy.
> >
> > Concretely, I think there are two things we care about:
> >
> > First, if the host enforces some policy as to which enclaves can
> > launch, then it should apply the same policy to guests — otherwise KVM
> > lets programs do an end run around the policy. So, in the initial
> > incarnation of this, QEMU should probably have to open the provision
> > attribute fd if it wants its guest to be able to EINIT a provisioning
> > enclave.  When someone inevitably adds an EINIT LSM hook, the KVM
> > interface should also call it.
>
> Sort of.  A guest that is running under KVM (i.e. VMX) is much more
> contained than a random userspace program.  A rogue enclave in a VMX
> guest can attack the guest kernel/OS, but barring a bug (or more likely,
> several major bugs) elsewhere in the virtualization stack the enclave
> can't do anything nasty to the host.  An enclave would let someone hide
> code, but enclaves are even more restricted than cpl3, i.e. there's not
> a lot it can do without coordinating with unencrypted code in the guest.
>
> And if someone has sufficient permissions to run a KVM guest, they're
> much more likely to do something malcious in the guest kernel, not an
> enclave.

Are you sure?  On my laptop, /dev/kvm is 0666, and that's the distro
default.  I don't think this is at all unusual.  I'm not particularly
concerned about a guest attacking itself, but it's conceptually
straightforward to bypass whatever restrictions the host has by simply
opening /dev/kvm and sticking your enclave in a VM.

>
> All that aside, I don't see any justification for singling out SGX for
> extra scrutiny, there are other ways for a user with KVM permissions to
> hide malicious code in guest (and at cpl0!), e.g. AMD's SEV{-ES}.

I'm not singling out SGX.  I'm just saying that the KVM should not
magically bypass host policy.  If you want to assign a virtual
function on your NIC to a KVM guest, you need to give your QEMU
process that privilege.  Similarly, if someone has a MAC policy that
controls which processes can launch which enclaves and they want to
run Windows with full SGX support in a VM guest, then they should
authorize that in their MAC policy by giving QEMU unrestricted launch
privileges.

Similarly, if access to a persistent provisioning identifier is
restricted, access to /dev/kvm shouldn't magically bypass it.  Just
give the QEMU process the relevant privileges.

  reply	other threads:[~2019-01-11  0:30 UTC|newest]

Thread overview: 64+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-12-14 21:57 [RFC PATCH v5 0/5] x86: Add vDSO exception fixup for SGX Sean Christopherson
2018-12-14 21:57 ` [RFC PATCH v5 1/5] x86/vdso: Add support for exception fixup in vDSO functions Sean Christopherson
2018-12-14 21:57 ` [RFC PATCH v5 2/5] x86/fault: Add helper function to sanitize error code Sean Christopherson
2018-12-14 21:57 ` [RFC PATCH v5 3/5] x86/fault: Attempt to fixup unhandled #PF on ENCLU before signaling Sean Christopherson
2018-12-14 21:57 ` [RFC PATCH v5 4/5] x86/traps: Attempt to fixup exceptions in vDSO " Sean Christopherson
2018-12-14 21:57 ` [RFC PATCH v5 5/5] x86/vdso: Add __vdso_sgx_enter_enclave() to wrap SGX enclave transitions Sean Christopherson
2018-12-19  9:21   ` Jarkko Sakkinen
2018-12-18  4:18 ` [RFC PATCH v5 0/5] x86: Add vDSO exception fixup for SGX Jarkko Sakkinen
2018-12-18 15:08   ` Sean Christopherson
2018-12-19  4:43     ` Jarkko Sakkinen
2018-12-19  5:03       ` Jarkko Sakkinen
2018-12-19  7:58 ` x86/sgx: uapi change proposal Jarkko Sakkinen
2018-12-19  8:41   ` Jethro Beekman
2018-12-19  9:11     ` Jarkko Sakkinen
2018-12-19  9:36       ` Jethro Beekman
2018-12-19 10:43         ` Jarkko Sakkinen
2018-12-19 14:45         ` Sean Christopherson
2018-12-20  2:58           ` Andy Lutomirski
2018-12-20 10:32             ` Jarkko Sakkinen
2018-12-20 13:12               ` Jarkko Sakkinen
2018-12-20 13:19                 ` Jarkko Sakkinen
2018-12-22  8:16               ` Jarkko Sakkinen
     [not found]                 ` <20181222082502.GA13275@linux.intel.com>
2018-12-23 12:52                   ` Jarkko Sakkinen
2018-12-23 20:42                     ` Andy Lutomirski
2018-12-24 11:52                       ` Jarkko Sakkinen
2019-01-02 20:47                   ` Sean Christopherson
2019-01-03 15:02                     ` Jarkko Sakkinen
     [not found]                       ` <20190103162634.GA8610@linux.intel.com>
2019-01-09 14:45                         ` Jarkko Sakkinen
2018-12-21 16:28             ` Sean Christopherson
2018-12-21 17:12               ` Andy Lutomirski
2018-12-21 18:24                 ` Sean Christopherson
2018-12-21 23:41                   ` Jarkko Sakkinen
2018-12-23 20:41                   ` Andy Lutomirski
2018-12-24 12:01                     ` Jarkko Sakkinen
2018-12-21 23:37                 ` Jarkko Sakkinen
2018-12-22  6:32                 ` Jarkko Sakkinen
2019-01-08 19:27               ` Huang, Kai
2019-01-08 22:09                 ` Sean Christopherson
2019-01-08 22:54                   ` Andy Lutomirski
2019-01-09 16:31                     ` Sean Christopherson
2019-01-10 21:34                       ` Andy Lutomirski
2019-01-10 22:22                         ` Huang, Kai
2019-01-10 23:54                         ` Sean Christopherson
2019-01-11  0:30                           ` Andy Lutomirski [this message]
2019-01-11  1:32                             ` Sean Christopherson
2019-01-11 12:58                       ` Jarkko Sakkinen
2019-01-11 13:00                         ` Jarkko Sakkinen
2019-01-11 23:19                         ` Sean Christopherson
2019-01-18 14:37                           ` Jarkko Sakkinen
2019-01-10 17:45                     ` Jarkko Sakkinen
2019-01-10 21:36                       ` Andy Lutomirski
2019-01-11 16:07                         ` Jarkko Sakkinen
2019-01-09  5:24                   ` Huang, Kai
2019-01-09 17:16                     ` Sean Christopherson
2019-01-10  0:21                       ` Huang, Kai
2019-01-10  0:40                         ` Sean Christopherson
2019-01-10 17:43                 ` Jarkko Sakkinen
2018-12-20 10:30           ` Jarkko Sakkinen
2018-12-19 14:43     ` Dr. Greg
2018-12-20 10:34       ` Jarkko Sakkinen
2018-12-20 22:06         ` Dr. Greg
2018-12-21 13:48           ` Jarkko Sakkinen
2018-12-20 12:08     ` Arnd Bergmann
2018-12-20 12:49       ` Jarkko Sakkinen

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=CALCETrUsj1YBwcEDiyU-seTiCuyFJW+BvunzOUUiUYQj+ojpEg@mail.gmail.com \
    --to=luto@kernel.org \
    --cc=bp@alien8.de \
    --cc=dave.hansen@linux.intel.com \
    --cc=greg@enjellic.com \
    --cc=haitao.huang@linux.intel.com \
    --cc=hpa@zytor.com \
    --cc=jarkko.sakkinen@linux.intel.com \
    --cc=jethro@fortanix.com \
    --cc=josh@joshtriplett.org \
    --cc=kai.huang@intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-sgx@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=peterz@infradead.org \
    --cc=sean.j.christopherson@intel.com \
    --cc=tglx@linutronix.de \
    --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.