mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: "Daniel P. Smith" <dpsmith@apertussolutions.com>
To: Andy Lutomirski <luto@amacapital.net>
Cc: Thomas Gleixner <tglx@linutronix.de>,
	"Eric W. Biederman" <ebiederm@xmission.com>,
	Eric Biggers <ebiggers@kernel.org>,
	Ross Philipson <ross.philipson@oracle.com>,
	linux-kernel@vger.kernel.org, x86@kernel.org,
	linux-integrity@vger.kernel.org, linux-doc@vger.kernel.org,
	linux-crypto@vger.kernel.org, kexec@lists.infradead.org,
	linux-efi@vger.kernel.org, iommu@lists.linux-foundation.org,
	mingo@redhat.com, bp@alien8.de, hpa@zytor.com,
	dave.hansen@linux.intel.com, ardb@kernel.org,
	mjg59@srcf.ucam.org, James.Bottomley@hansenpartnership.com,
	peterhuewe@gmx.de, jarkko@kernel.org, jgg@ziepe.ca,
	nivedita@alum.mit.edu, herbert@gondor.apana.org.au,
	davem@davemloft.net, corbet@lwn.net, dwmw2@infradead.org,
	baolu.lu@linux.intel.com, kanth.ghatraju@oracle.com,
	andrew.cooper3@citrix.com, trenchboot-devel@googlegroups.com
Subject: Re: [PATCH v9 06/19] x86: Add early SHA-1 support for Secure Launch early measurements
Date: Sat, 2 Nov 2024 10:53:04 -0400	[thread overview]
Message-ID: <ff0c8eed-8981-48c4-81d9-56b040ef1c7b@apertussolutions.com> (raw)
In-Reply-To: <CALCETrW9WNNGh1dEPKfQoeU+m5q6_m97d0_bzRkZsv2LxqB_ew@mail.gmail.com>

Hi Luto,

My apologies, I missed this response and the active on v11 cause me to 
get an inquiry why I hadn't responded.

On 9/21/24 18:40, Andy Lutomirski wrote:
> On Sat, Sep 21, 2024 at 11:37 AM Daniel P. Smith
> <dpsmith@apertussolutions.com> wrote:
>>
>> On 9/13/24 23:57, Andy Lutomirski wrote:
>>> On Thu, Sep 12, 2024 at 5:34 PM Daniel P. Smith
>>> <dpsmith@apertussolutions.com> wrote:
>>>>
> 
>>> What, exactly, is your patchset doing that requires hashing at all?
>>> (I assume it's extending a PCR and generating an event log entry.).
>>> What, exactly, does it mean to "cap" a PCR?  How is this different
>>> from what your patchset does?
>>
>>
> 
> ...
> 
>> I did not see the term actually defined in the client profile, but the
>> term "cap" refers to the specific action of hashing a value across a set
>> of PCRs. This is to reflect that certain events have occurred and will
>> result in a different but predictable change to the PCR value. Often
>> times this is to ensure that if there are TPM objects sealed to the
>> system with either that event having or have not occurred, they cannot
>> be unsealed. Thus, one has "capped" the PCRs as a means to close access
>> to the “acceptable” system state.
> 
> Okay, so I read Ross's earlier email rather differently:
> 
>> Even if we'd prefer to use SHA-256-only, if firmware elected to start us
>> with the SHA-1 and SHA-256 backs active, we still need SHA-1 to parse
>> the TPM event log thus far, and deliberately cap the SHA-1 PCRs in order
>> to safely use SHA-256 for everything else.
> 
> I assumed that "deliberately cap" meant that there was an actual
> feature where you write something to the event log (if applicable) and
> extend the PCR in a special way that *turns that PCR off*.  That is,
> it does something such that later-loaded software *can't* use that PCR
> to attest or unseal anything, etc.
> 
> But it sounds like you're saying that no such feature exists.  And a
> quick skim of the specs doesn't come up with anything.  And the SHA1
> banks may well be susceptible to a collision attack.

Correct, the only entity that can disable PCR banks is the firmware. 
When it initializes the TPM, it can disable banks/algorithms. After 
that, when an extend operation is done, the TPM is expecting an entry 
for all active PCR banks and the TPM itself does the extend hash that is 
stored into the PCRs.

> So what are the kernel's choices wrt the SHA-1 PCRs?  It can:
> 
> a) Perform business as usual: extend them consistently with the
> SHA-256 PCRs.  This is sort of *fine*: the kernel code in question is
> not relying on the security of SHA-1, but it is making it possible for
> future code to (unwisely) rely on them.  (Although, if the kernel is
> loading a trustworthy initramfs, then there won't be a collision, and
> there is no known second-preimage attack against SHA-1.)
> 
> b) Same as (a), but with countermeasures: do something to the effect
> of *detecting* the attack a la SHA1-DC and panic if an attack is
> detected.  Maybe this is wise; maybe it's not.
> 
> c) Do not extend the SHA-1 PCRs and pretend they don't exist.  This
> seems likely to cause massive security problems, and having the kernel
> try to defend its behavior by saying "we don't support SHA-1 -- this
> is a problem downstream" seems unwise to me.

I will chime in here to say that you can't ignore them, but you can send 
a fixed value, either well-known or junk, as the SHA1 value when doing 
the extend operation as you suggest in (e).

> d) Extend them but in an unconventional way that makes using them
> extra secure.  For example, calculate SHA-256(next stage), then extend
> with (next stage || "Linux thinks this is better" || SHA-256(next
> stage).  This makes the SHA-1 banks usable, and it seems like it will
> probably defeat anything resembling a current attack.  But maybe this
> is silly.  It would probably require doing the same thing to the
> SHA-256 banks for the benefit of any software that checks whether the
> SHA-1 and SHA-256 banks are consistent with each other.
> 
> e) Actually try to make the SHA-1 PCRs unusable.  For example, extend
> them with random numbers.
> 
> My inclination is that having some kind of Linux "policy" that SHA-1
> is forbidden adds no actual security value.  Option (a) honestly seems
> fine.  Nothing in the kernel *relies* on the SHA-1 hash being secure.
> But option (b) also seems okay if someone is willing to put the effort
> into implementing it and creating a proper test case.

Obviously, for the most part, we are in agreement. The one caveat is 
that I don't think the effort to shore-up SHA1 provides a good return on 
the costs it would incur. With no intent to disparage any one person, 
there generally will be two groups that would use SHA1. The first would 
be those limited by their platform and understand the risks. The second 
would be those attempting to do a cryptographic-based security solution 
that has either been living under a rock the last few years or has done 
zero research into the capabilities they are using for their solution. 
IMHO it is better to not inhibit the first group trying to save the 
latter group as the latter are always doomed to failure.

> But the description of all this could certainly do a better job of
> explaining what's going on.

I would be glad to do so, and have tried several ways to explain it. 
Even working with multiple people that understand the problem to draft a 
better explanation. It would be greatly appreciated if you could provide 
what points you think should be clarified to better help convey the 
situation.

> --Andy
> 
>> [1] A future expansion of Secure Launch will be to enable usage of
>> Intel's Hardware Shield, link below, to provide runtime trustworthy
>> determination of SMM. The full extent of this capability can only be
>> achieved under a DRTM launch of the system with Intel TXT. When enabled,
>> this can be used to verify the SMM protections are in place and inform
>> the kernel's memory management which regions of memory are safe from SMM
>> tampering.
>>
>> https://www.intel.com/content/dam/www/central-libraries/us/en/documents/drtm-based-computing-whitepaper.pdf
> 
> Wow.  I skimmed this paper.  What an overcomplicated solution to a
> problem that doesn't deserve to exist in the first place.

While we could have a long discussion over the merits of SMM, the fact 
we have to face is that it is here, and it is not going anywhere any 
time soon. I honestly found AMD's SMM Containerization (Appendix D of 
the AMD64 Architecture Programmer’s Manual - Volume 2) the better 
approach, and it saddens me that it is completely disabled.

v/r,
dps


  reply	other threads:[~2024-11-02 14:54 UTC|newest]

Thread overview: 116+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-05-31  1:03 [PATCH v9 00/19] x86: Trenchboot secure dynamic launch Linux kernel support Ross Philipson
2024-05-31  1:03 ` [PATCH v9 01/19] x86/boot: Place kernel_info at a fixed offset Ross Philipson
2024-06-04 18:18   ` Jarkko Sakkinen
2024-06-04 20:28     ` ross.philipson
2024-05-31  1:03 ` [PATCH v9 02/19] Documentation/x86: Secure Launch kernel documentation Ross Philipson
2024-05-31  1:03 ` [PATCH v9 03/19] x86: Secure Launch Kconfig Ross Philipson
2024-05-31  1:03 ` [PATCH v9 04/19] x86: Secure Launch Resource Table header file Ross Philipson
2024-06-04 18:21   ` Jarkko Sakkinen
2024-06-04 20:31     ` ross.philipson
2024-06-04 22:36       ` Jarkko Sakkinen
2024-06-04 23:00         ` ross.philipson
2024-06-05  0:22           ` Jarkko Sakkinen
2024-06-05  0:27             ` Jarkko Sakkinen
2024-06-05  2:33             ` ross.philipson
2024-06-05  4:04               ` Jarkko Sakkinen
2024-06-05 19:03                 ` ross.philipson
2024-06-06  6:02                   ` Jarkko Sakkinen
2024-06-06 16:49                     ` ross.philipson
2024-06-20  0:18                       ` Jarkko Sakkinen
2024-06-20 16:55                         ` ross.philipson
2024-05-31  1:03 ` [PATCH v9 05/19] x86: Secure Launch main " Ross Philipson
2024-06-04 18:24   ` Jarkko Sakkinen
2024-06-04 20:52     ` ross.philipson
2024-05-31  1:03 ` [PATCH v9 06/19] x86: Add early SHA-1 support for Secure Launch early measurements Ross Philipson
2024-05-31  2:16   ` Eric Biggers
2024-05-31 13:54     ` Eric W. Biederman
2024-08-15 17:38       ` Daniel P. Smith
2024-08-15 19:10         ` Thomas Gleixner
2024-08-16 10:42           ` Jarkko Sakkinen
2024-08-16 11:01           ` Andrew Cooper
2024-08-16 11:22             ` Jarkko Sakkinen
2024-08-16 18:41               ` Matthew Garrett
2024-08-19 18:05                 ` Jarkko Sakkinen
2024-08-19 18:24                   ` Matthew Garrett
2024-08-20 15:26                     ` Jarkko Sakkinen
2024-08-22 18:29           ` Daniel P. Smith
2026-02-20 15:35             ` Ard Biesheuvel
2026-02-23 23:08               ` Andrew Cooper
2026-02-24  8:25                 ` Ard Biesheuvel
2024-08-29  3:17           ` Andy Lutomirski
2024-08-29  3:25             ` Matthew Garrett
2024-08-29 17:26               ` Andy Lutomirski
2024-09-05  1:01             ` Daniel P. Smith
2024-09-13  0:34               ` Daniel P. Smith
2024-09-14  3:57                 ` Andy Lutomirski
2024-09-21 18:36                   ` Daniel P. Smith
2024-09-21 22:40                     ` Andy Lutomirski
2024-11-02 14:53                       ` Daniel P. Smith [this message]
2024-11-02 16:04                         ` James Bottomley
2024-11-15  1:17                           ` Daniel P. Smith
2024-11-18 18:43                             ` Andy Lutomirski
2024-11-18 18:50                               ` Andy Lutomirski
2024-11-18 19:12                               ` James Bottomley
2024-11-18 20:02                                 ` Andy Lutomirski
2024-11-21 20:11                                   ` ross.philipson
2024-11-21 20:54                                     ` Andy Lutomirski
2024-11-21 22:42                                       ` Andy Lutomirski
2024-11-22 23:37                                         ` ross.philipson
2024-12-12 19:56                                   ` Daniel P. Smith
2024-12-12 22:30                                     ` Andy Lutomirski
2024-12-14  2:56                                       ` Daniel P. Smith
2024-05-31 16:18     ` ross.philipson
2024-08-27 18:14     ` Eric Biggers
2024-08-28 20:14       ` ross.philipson
2024-08-28 23:13         ` Eric Biggers
2024-06-04 18:52   ` Jarkko Sakkinen
2024-06-04 21:02     ` ross.philipson
2024-06-04 22:40       ` Jarkko Sakkinen
2024-05-31  1:03 ` [PATCH v9 07/19] x86: Add early SHA-256 " Ross Philipson
2024-05-31  1:03 ` [PATCH v9 08/19] x86: Secure Launch kernel early boot stub Ross Philipson
2024-05-31 11:00   ` Ard Biesheuvel
2024-05-31 13:33     ` Ard Biesheuvel
2024-05-31 14:04       ` Ard Biesheuvel
2024-05-31 16:13         ` Ard Biesheuvel
2024-06-04 17:31         ` ross.philipson
2024-06-04 17:24       ` ross.philipson
2024-06-04 17:27         ` Ard Biesheuvel
2024-06-04 17:33           ` ross.philipson
2024-06-04 20:54             ` Ard Biesheuvel
2024-06-04 21:12               ` ross.philipson
2024-06-04 17:14     ` ross.philipson
2024-06-04 19:56   ` Jarkko Sakkinen
2024-06-04 21:09     ` ross.philipson
2024-06-04 22:43       ` Jarkko Sakkinen
2024-05-31  1:03 ` [PATCH v9 09/19] x86: Secure Launch kernel late " Ross Philipson
2024-06-04 19:58   ` Jarkko Sakkinen
2024-06-04 21:16     ` ross.philipson
2024-06-04 22:45       ` Jarkko Sakkinen
2024-06-04 19:59   ` Jarkko Sakkinen
2024-06-04 21:17     ` ross.philipson
2024-08-12 19:02     ` ross.philipson
2024-08-15 18:35       ` Jarkko Sakkinen
2024-05-31  1:03 ` [PATCH v9 10/19] x86: Secure Launch SMP bringup support Ross Philipson
2024-06-04 20:05   ` Jarkko Sakkinen
2024-06-04 21:47     ` ross.philipson
2024-06-04 22:46       ` Jarkko Sakkinen
2024-05-31  1:03 ` [PATCH v9 11/19] kexec: Secure Launch kexec SEXIT support Ross Philipson
2024-05-31  1:03 ` [PATCH v9 12/19] reboot: Secure Launch SEXIT support on reboot paths Ross Philipson
2024-05-31  1:03 ` [PATCH v9 13/19] tpm: Protect against locality counter underflow Ross Philipson
2024-06-04 20:12   ` Jarkko Sakkinen
2024-08-15 18:52     ` Daniel P. Smith
2024-05-31  1:03 ` [PATCH v9 14/19] tpm: Ensure tpm is in known state at startup Ross Philipson
2024-06-04 20:14   ` Jarkko Sakkinen
2024-08-15 19:24     ` Daniel P. Smith
2024-05-31  1:03 ` [PATCH v9 15/19] tpm: Make locality requests return consistent values Ross Philipson
2024-05-31  1:03 ` [PATCH v9 16/19] tpm: Add ability to set the preferred locality the TPM chip uses Ross Philipson
2024-06-04 20:27   ` Jarkko Sakkinen
2024-06-04 22:14     ` ross.philipson
2024-06-04 22:50       ` Jarkko Sakkinen
2024-06-04 23:04         ` ross.philipson
2024-05-31  1:03 ` [PATCH v9 17/19] tpm: Add sysfs interface to allow setting and querying the preferred locality Ross Philipson
2024-06-04 20:27   ` Jarkko Sakkinen
2024-05-31  1:03 ` [PATCH v9 18/19] x86: Secure Launch late initcall platform module Ross Philipson
2024-05-31  1:03 ` [PATCH v9 19/19] x86: EFI stub DRTM launch support for Secure Launch Ross Philipson
2024-05-31 11:09   ` Ard Biesheuvel
2024-06-04 17:22     ` ross.philipson

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=ff0c8eed-8981-48c4-81d9-56b040ef1c7b@apertussolutions.com \
    --to=dpsmith@apertussolutions.com \
    --cc=James.Bottomley@hansenpartnership.com \
    --cc=andrew.cooper3@citrix.com \
    --cc=ardb@kernel.org \
    --cc=baolu.lu@linux.intel.com \
    --cc=bp@alien8.de \
    --cc=corbet@lwn.net \
    --cc=dave.hansen@linux.intel.com \
    --cc=davem@davemloft.net \
    --cc=dwmw2@infradead.org \
    --cc=ebiederm@xmission.com \
    --cc=ebiggers@kernel.org \
    --cc=herbert@gondor.apana.org.au \
    --cc=hpa@zytor.com \
    --cc=iommu@lists.linux-foundation.org \
    --cc=jarkko@kernel.org \
    --cc=jgg@ziepe.ca \
    --cc=kanth.ghatraju@oracle.com \
    --cc=kexec@lists.infradead.org \
    --cc=linux-crypto@vger.kernel.org \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-efi@vger.kernel.org \
    --cc=linux-integrity@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=luto@amacapital.net \
    --cc=mingo@redhat.com \
    --cc=mjg59@srcf.ucam.org \
    --cc=nivedita@alum.mit.edu \
    --cc=peterhuewe@gmx.de \
    --cc=ross.philipson@oracle.com \
    --cc=tglx@linutronix.de \
    --cc=trenchboot-devel@googlegroups.com \
    --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 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®