linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Reshetova, Elena" <elena.reshetova@intel.com>
To: Christophe de Dinechin <dinechin@redhat.com>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	"Shishkin, Alexander" <alexander.shishkin@intel.com>,
	"Shutemov, Kirill" <kirill.shutemov@intel.com>,
	"Kuppuswamy,
	Sathyanarayanan" <sathyanarayanan.kuppuswamy@intel.com>,
	"Kleen, Andi" <andi.kleen@intel.com>,
	"Hansen, Dave" <dave.hansen@intel.com>,
	Thomas Gleixner <tglx@linutronix.de>,
	Peter Zijlstra <peterz@infradead.org>,
	"Wunner, Lukas" <lukas.wunner@intel.com>,
	Mika Westerberg <mika.westerberg@linux.intel.com>,
	"Michael S. Tsirkin" <mst@redhat.com>,
	Jason Wang <jasowang@redhat.com>,
	"Poimboe, Josh" <jpoimboe@redhat.com>,
	"aarcange@redhat.com" <aarcange@redhat.com>,
	Cfir Cohen <cfir@google.com>, Marc Orr <marcorr@google.com>,
	"jbachmann@google.com" <jbachmann@google.com>,
	"pgonda@google.com" <pgonda@google.com>,
	"keescook@chromium.org" <keescook@chromium.org>,
	James Morris <jmorris@namei.org>,
	Michael Kelley <mikelley@microsoft.com>,
	"Lange, Jon" <jlange@microsoft.com>,
	"linux-coco@lists.linux.dev" <linux-coco@lists.linux.dev>,
	"Linux Kernel Mailing List" <linux-kernel@vger.kernel.org>
Subject: RE: Linux guest kernel threat model for Confidential Computing
Date: Tue, 31 Jan 2023 10:06:42 +0000	[thread overview]
Message-ID: <DM8PR11MB57504761DE92CE1213549C27E7D09@DM8PR11MB5750.namprd11.prod.outlook.com> (raw)
In-Reply-To: <m2pmaw5jv4.fsf@redhat.com>

Hi Dinechin,

Thank you very much for your review! Please find the replies inline. 

> 
> Hi Elena,
> 
> On 2023-01-25 at 12:28 UTC, "Reshetova, Elena" <elena.reshetova@intel.com>
> wrote...
> > Hi Greg,
> >
> > You mentioned couple of times (last time in this recent thread:
> > https://lore.kernel.org/all/Y80WtujnO7kfduAZ@kroah.com/) that we ought to
> start
> > discussing the updated threat model for kernel, so this email is a start in this
> direction.
> >
> > (Note: I tried to include relevant people from different companies, as well as
> linux-coco
> > mailing list, but I hope everyone can help by including additional people as
> needed).
> >
> > As we have shared before in various lkml threads/conference presentations
> > ([1], [2], [3] and many others), for the Confidential Computing guest kernel, we
> have a
> > change in the threat model where guest kernel doesn’t anymore trust the
> hypervisor.
> > This is a big change in the threat model and requires both careful assessment of
> the
> > new (hypervisor <-> guest kernel) attack surface, as well as careful design of
> mitigations
> > and security validation techniques. This is the activity that we have started back
> at Intel
> > and the current status can be found in
> >
> > 1) Threat model and potential mitigations:
> > https://intel.github.io/ccc-linux-guest-hardening-docs/security-spec.html
> 
> I only looked at this one so far. Here are a few quick notes:
> 
> DoS attacks are out of scope. What about timing attacks, which were the
> basis of some of the most successful attacks in the past years? My
> understanding is that TDX relies on existing mitigations, and does not
> introduce anythign new in that space. Worth mentioning in that "out of
> scope" section IMO.

It is not out of the scope because TD guest SW has to think about these
matters and protect adequately. We have a section lower on " Transient Execution attacks
mitigation" https://intel.github.io/ccc-linux-guest-hardening-docs/security-spec.html#transient-execution-attacks-and-their-mitigation
but I agree it is worth pointing to this (and generic side-channel attacks) already
in the scoping. I will make an update. 

> 
> Why are TDVMCALL hypercalls listed as an "existing" communication interface?
> That seems to exclude the TDX module from the TCB.

I believe this is just ambiguous wording, I need to find a better one. 
TDVMCALL is indeed a *new* TDX specific communication interface, but it is
only a transport in this case for the actual *existing* legacy communication interfaces
between the VM guest and host/hypervisor (read/write MSRs, pci config space
access, port IO and MMIO, etc). 

Also, "shared memory for
> I/Os" seems unnecessarily restrictive, since it excludes interrupts, timing
> attacks, network or storage attacks, or devices passed through to the guest.
> The latter category seems important to list, since there are separate
> efforts to provide confidential computing capabilities e.g. to PCI devices,
> which were discussed elsewhere in this thread.

The second bullet meant to say that we also have another interface how CoCo guest
and host/VMM can communicate and it is done via shared pages (vs private pages that
are only accessible to confidential computing guest). Maybe I should drop the "IO" part of
this and it would avoid confusion. The other means (some are higher-level abstractions
like disk operations that happen over bounce buffer in shared memory), like interrupts, disk, etc,
we do cover below in separate sections of the doc with exception of covering 
CoCo-enabled devices. This is smth we can briefly mention as an addition, but since
we don’t have these devices yet, and neither we have linux implementation that
can securely add them to the CoCo guest, I find it preliminary to discuss details at this point. 

 
> I suspect that my question above is due to ambiguous wording. What I
> initially read as "this is out of scope for TDX" morphs in the next
> paragraph into "we are going to explain how to mitigate attacks through
> TDVMCALLS and shared memory for I/O". Consider rewording to clarify the
> intent of these paragraphs.
> 

Sure, sorry for ambiguous wording, will try to clarify. 

> Nit: I suggest adding bullets to the items below "between host/VMM and the
> guest"

Yes, it used to have it actually, have to see what happened with recent docs update. 

> 
> You could count the "unique code locations" that can consume malicious input
> in drivers, why not in core kernel? I think you write elsewhere that the
> drivers account for the vast majority, so I suspect you have the numbers.

I don’t have the ready numbers for core kernel, but if really needed, I can calculate them. 
Here https://github.com/intel/ccc-linux-guest-hardening/tree/master/bkc/audit/sample_output/6.0-rc2
you can find the public files that would produce this data:

https://github.com/intel/ccc-linux-guest-hardening/blob/master/bkc/audit/sample_output/6.0-rc2/smatch_warns_6.0_tdx_allyesconfig
is all hits (with taint propagation) for the whole allyesconfig (x86 build, CONFIG_COMPILE_TEST is off).
https://github.com/intel/ccc-linux-guest-hardening/blob/master/bkc/audit/sample_output/6.0-rc2/smatch_warns_6.0_tdx_allyesconfig_filtered
is the same but with most of the drivers dropped.


> 
> "The implementation of the #VE handler is simple and does not require an
> in-depth security audit or fuzzing since it is not the actual consumer of
> the host/VMM supplied untrusted data": The assumption there seems to be that
> the host will never be able to supply data (e.g. through a bounce buffer)
> that it can trick the guest into executing. If that is indeed the
> assumption, it is worth mentioning explicitly. I suspect it is a bit weak,
> since many earlier attacks were based on executing the wrong code. Notably,
> it is worth pointing out that I/O buffers are _not_ encrypted with the CPU
> key (as opposed to any device key e.g. for PCI encryption) in either
> TDX or SEV. Is there for example anything that precludes TDX or SEV from
> executing code in the bounce buffers?

This was already replied by Kirill, any code execution out of shared memory generates 
a #GP. 

> 
> "We only care about users that read from MMIO": Why? My guess is that this
> is the only way bad data could be fed to the guest. But what if a bad MMIO
> write due to poisoned data injected earlier was a necessary step to open the
> door to a successful attack?

The entry point of the attack is still a "read". The situation you describe can happen,
but the root cause would be still an incorrectly handled MMIO read and this is what
we try to check with both fuzzing and auditing the 'read' entry points.  

Thank you again for the review!

Best Regards,
Elena.





  parent reply	other threads:[~2023-01-31 10:08 UTC|newest]

Thread overview: 102+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-01-25 12:28 Linux guest kernel threat model for Confidential Computing Reshetova, Elena
2023-01-25 12:43 ` Greg Kroah-Hartman
2023-01-25 13:42   ` Dr. David Alan Gilbert
2023-01-25 14:13     ` Daniel P. Berrangé
2023-01-25 15:29       ` Dr. David Alan Gilbert
2023-01-26 14:23       ` Richard Weinberger
2023-01-26 14:58         ` Dr. David Alan Gilbert
2023-01-26 15:13           ` Richard Weinberger
2023-01-26 15:22             ` Dr. David Alan Gilbert
2023-01-26 15:55             ` Daniel P. Berrangé
2023-01-27  9:02             ` Jörg Rödel
2023-01-26 15:43         ` Daniel P. Berrangé
2023-01-27 11:23         ` Reshetova, Elena
2023-01-30 11:30       ` Christophe de Dinechin
2023-01-25 14:22     ` Greg Kroah-Hartman
2023-01-25 14:30       ` James Bottomley
2023-01-25 14:57       ` Dr. David Alan Gilbert
2023-01-25 15:16         ` Greg Kroah-Hartman
2023-01-25 15:45           ` Michael S. Tsirkin
2023-01-25 16:02             ` Kirill A. Shutemov
2023-01-25 17:47               ` Michael S. Tsirkin
2023-01-25 15:50           ` Dr. David Alan Gilbert
2023-01-25 18:47           ` Jiri Kosina
2023-01-26  9:19           ` Jörg Rödel
2023-01-25 21:53         ` Lukas Wunner
2023-01-26 10:48           ` Dr. David Alan Gilbert
2023-01-26 11:24             ` Jonathan Cameron
2023-01-26 13:32             ` Samuel Ortiz
     [not found]           ` <CAGXJix9-cXNW7EwJf0PVzj_Qmt5fmQvBX1KvXfRX5NAeEpnMvw@mail.gmail.com>
2023-01-26 10:58             ` Jonathan Cameron
2023-01-26 13:15               ` Samuel Ortiz
2023-01-26 16:07                 ` Jonathan Cameron
2023-01-27  7:02                   ` Samuel Ortiz
2023-01-26 15:44             ` Lukas Wunner
2023-01-26 16:25               ` Michael S. Tsirkin
2023-01-26 21:41                 ` Lukas Wunner
2023-01-27  7:17               ` Samuel Ortiz
2023-01-25 20:13       ` Jiri Kosina
2023-01-26 13:13       ` Reshetova, Elena
2023-01-25 15:29   ` Reshetova, Elena
2023-01-25 16:40     ` Theodore Ts'o
2023-01-26  8:08       ` Reshetova, Elena
2023-01-26 11:19     ` Leon Romanovsky
2023-01-26 11:29       ` Reshetova, Elena
2023-01-26 12:30         ` Leon Romanovsky
2023-01-26 13:28           ` Reshetova, Elena
2023-01-26 13:50             ` Leon Romanovsky
2023-01-26 20:54             ` Theodore Ts'o
2023-01-27 19:24             ` James Bottomley
2023-01-30  7:42               ` Reshetova, Elena
2023-01-30 12:40                 ` James Bottomley
2023-01-31 11:31                   ` Reshetova, Elena
2023-01-31 13:28                     ` James Bottomley
2023-01-31 15:14                       ` Christophe de Dinechin
2023-01-31 17:39                         ` Michael S. Tsirkin
2023-02-01 10:52                           ` Christophe de Dinechin Dupont de Dinechin
2023-02-01 11:01                             ` Michael S. Tsirkin
2023-02-01 13:15                               ` Christophe de Dinechin Dupont de Dinechin
2023-02-01 16:02                                 ` Michael S. Tsirkin
2023-02-01 17:13                                   ` Christophe de Dinechin
2023-02-06 18:58                                     ` Dr. David Alan Gilbert
2023-02-02  3:24                               ` Jason Wang
2023-02-01 10:24                         ` Christophe de Dinechin
2023-01-31 16:34                       ` Reshetova, Elena
2023-01-31 17:49                         ` James Bottomley
2023-02-02 14:51                     ` Jeremi Piotrowski
2023-02-03 14:05                       ` Reshetova, Elena
2023-01-27  9:32           ` Jörg Rödel
2023-01-26 13:58         ` Dr. David Alan Gilbert
2023-01-26 17:48           ` Reshetova, Elena
2023-01-26 18:06             ` Leon Romanovsky
2023-01-26 18:14               ` Dr. David Alan Gilbert
2023-01-26 16:29     ` Michael S. Tsirkin
2023-01-27  8:52       ` Reshetova, Elena
2023-01-27 10:04         ` Michael S. Tsirkin
2023-01-27 12:25           ` Reshetova, Elena
2023-01-27 14:32             ` Michael S. Tsirkin
2023-01-27 20:51             ` Carlos Bilbao
2023-01-30 11:36 ` Christophe de Dinechin
2023-01-30 12:00   ` Kirill A. Shutemov
2023-01-30 15:14     ` Michael S. Tsirkin
2023-01-31 10:06   ` Reshetova, Elena [this message]
2023-01-31 16:52     ` Christophe de Dinechin
2023-02-02 11:31       ` Reshetova, Elena
2023-02-07  0:27 ` Carlos Bilbao
2023-02-07  6:03   ` Greg Kroah-Hartman
2023-02-07 19:53     ` Carlos Bilbao
2023-02-07 21:55       ` Michael S. Tsirkin
2023-02-08  1:51       ` Theodore Ts'o
2023-02-08  9:31         ` Michael S. Tsirkin
2023-02-08 10:44           ` Reshetova, Elena
2023-02-08 10:58             ` Greg Kroah-Hartman
2023-02-08 16:19               ` Christophe de Dinechin
2023-02-08 17:29                 ` Greg Kroah-Hartman
2023-02-08 18:02                   ` Dr. David Alan Gilbert
2023-02-08 18:58                     ` Thomas Gleixner
2023-02-09 19:48                       ` Dr. David Alan Gilbert
2023-02-08 13:00             ` Michael S. Tsirkin
2023-02-08 13:42             ` Theodore Ts'o
2023-02-08  7:19       ` Greg Kroah-Hartman
2023-02-08 10:16       ` Reshetova, Elena
2023-02-08 13:15         ` Michael S. Tsirkin
2023-02-09 14:30           ` Reshetova, Elena

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=DM8PR11MB57504761DE92CE1213549C27E7D09@DM8PR11MB5750.namprd11.prod.outlook.com \
    --to=elena.reshetova@intel.com \
    --cc=aarcange@redhat.com \
    --cc=alexander.shishkin@intel.com \
    --cc=andi.kleen@intel.com \
    --cc=cfir@google.com \
    --cc=dave.hansen@intel.com \
    --cc=dinechin@redhat.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=jasowang@redhat.com \
    --cc=jbachmann@google.com \
    --cc=jlange@microsoft.com \
    --cc=jmorris@namei.org \
    --cc=jpoimboe@redhat.com \
    --cc=keescook@chromium.org \
    --cc=kirill.shutemov@intel.com \
    --cc=linux-coco@lists.linux.dev \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lukas.wunner@intel.com \
    --cc=marcorr@google.com \
    --cc=mika.westerberg@linux.intel.com \
    --cc=mikelley@microsoft.com \
    --cc=mst@redhat.com \
    --cc=peterz@infradead.org \
    --cc=pgonda@google.com \
    --cc=sathyanarayanan.kuppuswamy@intel.com \
    --cc=tglx@linutronix.de \
    /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;
as well as URLs for NNTP newsgroup(s).