Public bug reported:

The sbsign utility generates invalid signatures, when verified on MS
Windows 7.  I believe the issue is that sbsign doesn't hash the image
properly.  Steps to reproduce:

=== GET A SUITABLE grubx64.efi FOR SIGNING ===

1.  Install Ubuntu 15.10.  Then install latest sbsigntool package with
dpkg -i: sbsigntool_0.6-0ubuntu10_amd64.deb

2.  Run grub-install: (note my grub packages are version
2.02~beta2-29ubuntu0.3)

sudo grub-install --no-uefi-secure-boot

=== GENERATE SIGNING KEY ===

3.  Generate db key for signing, like this.  Note the extra
configuration options which I found necessary to get a valid signature
on Windows for HelloWorld.efi (e.g. basicConstraints).

SSLCFG="$(mktemp)"
cat > "$SSLCFG" << EOF
[req]
distinguished_name = reqdn
x509_extensions = reqx509

[reqdn]

[reqx509]
subjectKeyIdentifier = hash
# CA must be false because we are directly signing objects with this key:
basicConstraints = critical,CA:false
keyUsage = digitalSignature
extendedKeyUsage = codeSigning
EOF

openssl req -new -x509 -newkey rsa:2048 -subj "/CN=My Cert db/" \
-days 3650 -nodes -sha256 -config "$SSLCFG" \
-keyout db.key -out db.crt

=== SIGN GRUB ===

4.  Sign the installed grub:

sudo sbsign --key db.key --cert db.crt --output grub-signed.efi
/boot/efi/EFI/ubuntu/grubx64.efi

=== TEST THE SIGNATURE ON WINDOWS ===

5.  Transfer the signed grub-signed.efi file to a Windows 7 SP1
computer. (other versions are probably fine but 7 is what I tested on.)

6.  In Windows Explorer, right-click file and click Properties.  Go to
Digital Signatures tab.  Open the signature.  Notice that if we view the
details it says "This digital signature is not valid" and if we view the
certificate, it furthermore says "The digital signature of the object
did not verify" - i.e. indicating that somebody has tampered with the
EFI since it was signed (yet obviously not the case), as opposed to a
cert that is untrusted for some reason.

7.  We can vainly try to correct the issue by installing the cert into
the root CA database: click "Install Certificate", choose "Place all
certificates in the following store", and pick "Trusted Root
Certification Authorities."  After installing the cert, you need to
completely close the file properties, and then open them again.
Normally, the certificate should now be "ok".  However, Windows still
says the signature is bad with the same error as previous.

8.  Note that if we repeat the above procedure but sign the very simple
HelloWorld.efi from efitools package, the signature will check out OK on
Windows once we install the cert as a trusted root in step 7.  That's
why I think it's a sbsigntool bug and not some mistake in my procedure.

I would assume this is a potential reason why many guides online like
http://www.linuxjournal.com/content/take-control-your-pc-uefi-secure-
boot?page=0,1 say to use other tools like osslsigncode instead of sbsign
if your system rejects the signed binary.  Such a workaround indicates a
malfunction in sbsign.

Interestingly enough, the official Ubuntu 15.10 binaries from e.g. grub-
efi-amd64-signed package have the same problem.  Whereas, the Microsoft-
signed binaries from shim-signed have no problems.   Note I haven't
tested the signed binary on an actual UEFI system yet; the fact that
Canonical-signed binaries boot on many systems w/out issue suggests that
many UEFIs are not as strict as Windows when verifying the signature -
however, something is clearly wrong with it and in the future there
could be UEFIs that reject these signatures.

As confirmation that the problem is with the signature, the above error
message exactly matches with this definition from WinError.h -
BAD_DIGEST is a clear indication of the problem...

// MessageId: TRUST_E_BAD_DIGEST
//
// MessageText:
//
// The digital signature of the object did not verify.
//
#define TRUST_E_BAD_DIGEST               _HRESULT_TYPEDEF_(0x80096010L)

** Affects: sbsigntool (Ubuntu)
     Importance: Undecided
         Status: New

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/1551629

Title:
  sbsign generates invalid grub signatures

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/sbsigntool/+bug/1551629/+subscriptions

-- 
ubuntu-bugs mailing list
ubuntu-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to