Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 9 additions & 4 deletions efi/preinstall/preinstall_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,23 +45,28 @@ var (
//go:embed testdata/MicrosoftUefiCA2023.crt
msUefiCACert2023PEM []byte

//go:embed testdata/MicrosoftOptionROMUefiCA2023.crt
msOptionROMUefiCACert2023PEM []byte

//go:embed testdata/shim-signed_1.54+15.7-0ubuntu1_amd64_latest.pk7
shimUbuntuSig4PEM []byte

//go:embed testdata/PkKek-1-snakeoil.pem
snakeoilCertPEM []byte

msUefiCACert []byte
msUefiCACert2023 []byte
shimUbuntuSig4 []byte
snakeoilCert []byte
msUefiCACert []byte
msUefiCACert2023 []byte
msOptionROMUefiCACert2023 []byte
shimUbuntuSig4 []byte
snakeoilCert []byte
)

func init() {
tpm2_testutil.AddCommandLineFlags()

msUefiCACert = testutil.MustDecodePEMType("CERTIFICATE", msUefiCACertPEM)
msUefiCACert2023 = testutil.MustDecodePEMType("CERTIFICATE", msUefiCACert2023PEM)
msOptionROMUefiCACert2023 = testutil.MustDecodePEMType("CERTIFICATE", msOptionROMUefiCACert2023PEM)
shimUbuntuSig4 = testutil.MustDecodePEMType("PKCS7", shimUbuntuSig4PEM)
snakeoilCert = testutil.MustDecodePEMType("CERTIFICATE", snakeoilCertPEM)
}
Expand Down
21 changes: 20 additions & 1 deletion efi/preinstall/profile.go
Original file line number Diff line number Diff line change
Expand Up @@ -103,8 +103,27 @@ type authorityTrustData struct {

var (
knownCAs = authorityTrustDataSet{
// The 2011 UEFI CA was used to sign both drivers and boot code. Because
// what is signed isn't audit-able, and we know it signed boot code that
// doesn't meet our requirements for FDE, we distrust it for both drivers
// and boot code.
{internal_efi.MSUefiCA2011, 0},
{internal_efi.MSUefiCA2023, 0}, // be conservative here for now, but will we be able to set the authorityTrustDrivers flag for the MS2023 CA?

// The 2023 UEFI CA is only used for signing boot code. Like with the 2011
// UEFI CA, the boot code that is signed isn't audit-able so we distrust
// it for signing boot code because we can't be sure that everything it
// signed meets our requirements for FDE. We trust it for signing drivers
// based on the fact it isn't used for this, which allows us to optimise
// the PCR selection for this CA.
{internal_efi.MSUefiCA2023, authorityTrustDrivers},

// The 2023 option ROM UEFI CA is only used for signing drivers. Like with
// the 2011 UEFI CA, the drivers that are signed aren't audit-able so we
// distrust it for signing drivers because we can't be sure that everything
// it signed meets our requirements for FDE. We trust it for signing boot
// code based on the fact it isn't used for this, which allows us to optimise
// the PCR selection for this CA.
{internal_efi.MSOptionROMUefiCA2023, authorityTrustBootCode},
}
)

Expand Down
28 changes: 2 additions & 26 deletions efi/preinstall/profile_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -209,25 +209,13 @@ func (s *profileSuite) TestWithAutoTCGPCRProfilePCRSelectionLockToPlatformFirmar
//}

func (s *profileSuite) TestWithAutoTCGPCRProfilePCRSelectionDefaultCAsTrustedForDrivers(c *C) {
restore := MockKnownCAs(AuthorityTrustDataSet{
{internal_efi.MSUefiCA2011, 0},
{internal_efi.MSUefiCA2023, AuthorityTrustDrivers},
})
defer restore()

s.testWithAutoTCGPCRProfilePCRSelection(c, &testWithAutoTCGPCRProfilePCRSelectionParams{
usedSecureBootCAs: [][]byte{msUefiCACert2023},
expectedPcrs: tpm2.HandleList{4, 7},
})
}

func (s *profileSuite) TestWithAutoTCGPCRProfilePCRSelectionLockToDriversAndApps(c *C) {
restore := MockKnownCAs(AuthorityTrustDataSet{
{internal_efi.MSUefiCA2011, 0},
{internal_efi.MSUefiCA2023, AuthorityTrustDrivers},
})
defer restore()

s.testWithAutoTCGPCRProfilePCRSelection(c, &testWithAutoTCGPCRProfilePCRSelectionParams{
usedSecureBootCAs: [][]byte{msUefiCACert2023},
opts: PCRProfileOptionLockToDriversAndApps,
Expand Down Expand Up @@ -270,27 +258,15 @@ func (s *profileSuite) TestWithAutoTCGPCRProfilePCRSelectionTrustSecureBootAutho
//}

func (s *profileSuite) TestWithAutoTCGPCRProfilePCRSelectionDefaultCAsTrustedForBootCode(c *C) {
restore := MockKnownCAs(AuthorityTrustDataSet{
{internal_efi.MSUefiCA2011, 0},
{internal_efi.MSUefiCA2023, AuthorityTrustBootCode},
})
defer restore()

s.testWithAutoTCGPCRProfilePCRSelection(c, &testWithAutoTCGPCRProfilePCRSelectionParams{
usedSecureBootCAs: [][]byte{msUefiCACert2023},
usedSecureBootCAs: [][]byte{msOptionROMUefiCACert2023},
expectedPcrs: tpm2.HandleList{2, 7},
})
}

func (s *profileSuite) TestWithAutoTCGPCRProfilePCRSelectionLockToBootManagerCode(c *C) {
restore := MockKnownCAs(AuthorityTrustDataSet{
{internal_efi.MSUefiCA2011, 0},
{internal_efi.MSUefiCA2023, AuthorityTrustBootCode},
})
defer restore()

s.testWithAutoTCGPCRProfilePCRSelection(c, &testWithAutoTCGPCRProfilePCRSelectionParams{
usedSecureBootCAs: [][]byte{msUefiCACert2023},
usedSecureBootCAs: [][]byte{msOptionROMUefiCACert2023},
opts: PCRProfileOptionLockToBootManagerCode,
expectedPcrs: tpm2.HandleList{2, 4, 7},
})
Expand Down
33 changes: 33 additions & 0 deletions efi/preinstall/testdata/MicrosoftOptionROMUefiCA2023.crt
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
-----BEGIN CERTIFICATE-----
MIIFrzCCA5egAwIBAgITMwAAABez7E2PAeJwBQAAAAAAFzANBgkqhkiG9w0BAQsF
ADBaMQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9u
MSswKQYDVQQDEyJNaWNyb3NvZnQgUlNBIERldmljZXMgUm9vdCBDQSAyMDIxMB4X
DTIzMTAyNjE5MDIyMFoXDTM4MTAyNjE5MTIyMFowWTELMAkGA1UEBhMCVVMxHjAc
BgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEqMCgGA1UEAxMhTWljcm9zb2Z0
IE9wdGlvbiBST00gVUVGSSBDQSAyMDIzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
MIIBCgKCAQEA0wv+ic3Ntu7c5RqN3MohGg8iLwu1MoQ1wL5vcJNVtEfMSQPC/s+6
MmVktzW9BDtEZC+g8t3hXbrnvTmavctL4YOqG+hvTkyRUkOlxFBVaPXarEiinOw1
pwRWaBnisWLUkvSFPzShFWeHIW4fydg1Mrg9y1jKKUNUSn6LVXsjejq2nUMHBGua
a/TwIP/6pt+inknoVcV1iESspEE6A3y76ZPkbPHteSbHizL3WUklMQBnGAxn+0DF
XXY9CYfCLYxfK1oeAQ8zr2UIkE/8ZFuco1zWUxtRAZ+Yz8RTxbHfs2hvRUvIRYXI
Hbie0XdxoNWid4fsZy65hwZG3UFDQGpfLwIDAQABo4IBbTCCAWkwDgYDVR0PAQH/
BAQDAgGGMBAGCSsGAQQBgjcVAQQDAgEAMB0GA1UdDgQWBBRRT7+Tf6RvtXvwevi+
2Es7hksXETAZBgkrBgEEAYI3FAIEDB4KAFMAdQBiAEMAQTAPBgNVHRMBAf8EBTAD
AQH/MB8GA1UdIwQYMBaAFIREhgYAmD8sqrPFifOsLsnmnQkDMGUGA1UdHwReMFww
WqBYoFaGVGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jv
c29mdCUyMFJTQSUyMERldmljZXMlMjBSb290JTIwQ0ElMjAyMDIxLmNybDByBggr
BgEFBQcBAQRmMGQwYgYIKwYBBQUHMAKGVmh0dHA6Ly93d3cubWljcm9zb2Z0LmNv
bS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwUlNBJTIwRGV2aWNlcyUyMFJvb3Ql
MjBDQSUyMDIwMjEuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBKS4D8cbGH3QaLJBDR
dvgQ5GU0obuBCH1w1BUk+ZA7SG9uTiP+hVPsopkfieQ0vtCYr/H4LfNH0bUyZJ7e
csAXfoEgesFfkfVOOqZ7adnQ1vD6gGPFwERn04snYcHl3FGZbiPJKRj+Nb1FIawP
+WDiD9FfcA+SK1hOz6xkLwlz7VAIyOGFc0AsMam0tiNLwBk7/RX408t0VM3au30E
hZ9wFXX5t/RhS/7kn0UO9YLpxfN4u6pq4fe7hZIrr0u1J06aySlvDsjSZGObXRQG
zHh/5BLdluOcBELsF/qSIafe9WmPILJk8z8Vo1GvJ2+3YlevdBfsq7HuqFDvr4OC
q2EEeT9JjEBWwDyv+ypaGR6q5i5nJCGsM/DXSosKJDAQplI+Hcj8kZyHG/qG4Z5r
5QlhdaijOV/in2wOhSHmvXal6kWDaB4vNr/gaIpCzh+4jeFg5pOK7rpKrbNJTO6j
A8mnooZxnIEBZ2kP3oBV1sDecoXARmDwzmAqiAiNnDDrqYtA82ElCeHhgjIEpSn4
WewmtsjXI/AL02xjatov0tOlJZqaXqX9AqXsopCBaD49RY58BbIu6pkBRf0JMJQm
10os/n2CRDNDVctaQ9KSkv5OR8ZJPzUbIZxq2oL8ZDf7J+r0MN9l7ND8UAE4auzc
Ufb17psmzO5t/i9WDjroOCKOqg==
-----END CERTIFICATE-----
38 changes: 38 additions & 0 deletions internal/efi/known_secureboot_cas.go
Original file line number Diff line number Diff line change
Expand Up @@ -119,4 +119,42 @@ var (
},
SignatureAlgorithm: x509.SHA256WithRSA,
}

MSOptionROMUefiCA2023 = &SecureBootAuthorityIdentity{
// CN=Microsoft Option ROM UEFI CA 2023,O=Microsoft Corporation,C=US
Subject: []byte{
0x30, 0x59, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04,
0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x1e, 0x30, 0x1c, 0x06,
0x03, 0x55, 0x04, 0x0a, 0x13, 0x15, 0x4d, 0x69, 0x63, 0x72,
0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x43, 0x6f, 0x72, 0x70,
0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x31, 0x2a, 0x30,
0x28, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x21, 0x4d, 0x69,
0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x4f, 0x70,
0x74, 0x69, 0x6f, 0x6e, 0x20, 0x52, 0x4f, 0x4d, 0x20, 0x55,
0x45, 0x46, 0x49, 0x20, 0x43, 0x41, 0x20, 0x32, 0x30, 0x32,
0x33,
},
SubjectKeyId: []byte{
0x51, 0x4f, 0xbf, 0x93, 0x7f, 0xa4, 0x6f, 0xb5, 0x7b, 0xf0,
0x7a, 0xf8, 0xbe, 0xd8, 0x4b, 0x3b, 0x86, 0x4b, 0x17, 0x11,
},
PublicKeyAlgorithm: x509.RSA,
Issuer: []byte{
0x30, 0x5a, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04,
0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x1e, 0x30, 0x1c, 0x06,
0x03, 0x55, 0x04, 0x0a, 0x13, 0x15, 0x4d, 0x69, 0x63, 0x72,
0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x43, 0x6f, 0x72, 0x70,
0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x31, 0x2b, 0x30,
0x29, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x22, 0x4d, 0x69,
0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x52, 0x53,
0x41, 0x20, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x20,
0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x20, 0x32, 0x30,
0x32, 0x31,
},
AuthorityKeyId: []byte{
0x84, 0x44, 0x86, 0x06, 0x00, 0x98, 0x3f, 0x2c, 0xaa, 0xb3,
0xc5, 0x89, 0xf3, 0xac, 0x2e, 0xc9, 0xe6, 0x9d, 0x09, 0x03,
},
SignatureAlgorithm: x509.SHA256WithRSA,
}
)
Loading