This application allows user to force key enrollment from Secure Boot default variables.
Signed-off-by: Grzegorz Bernacki <g...@semihalf.com> --- SecurityPkg/SecEnrollDefaultKeysApp/SecEnrollDefaultKeysApp.inf | 48 +++++++++ SecurityPkg/SecEnrollDefaultKeysApp/SecEnrollDefaultKeysApp.c | 108 ++++++++++++++++++++ 2 files changed, 156 insertions(+) create mode 100644 SecurityPkg/SecEnrollDefaultKeysApp/SecEnrollDefaultKeysApp.inf create mode 100644 SecurityPkg/SecEnrollDefaultKeysApp/SecEnrollDefaultKeysApp.c diff --git a/SecurityPkg/SecEnrollDefaultKeysApp/SecEnrollDefaultKeysApp.inf b/SecurityPkg/SecEnrollDefaultKeysApp/SecEnrollDefaultKeysApp.inf new file mode 100644 index 0000000000..9d575ae0ac --- /dev/null +++ b/SecurityPkg/SecEnrollDefaultKeysApp/SecEnrollDefaultKeysApp.inf @@ -0,0 +1,48 @@ +## @file +# Enroll PK, KEK, db, dbx from Default variables +# +# Copyright (c) 2021, ARM Ltd. All rights reserved.<BR> +# Copyright (c) 2021, Semihalf All rights reserved.<BR> +# SPDX-License-Identifier: BSD-2-Clause-Patent +## + +[Defines] + INF_VERSION = 1.28 + BASE_NAME = SecEnrollDefaultKeysApp + FILE_GUID = 6F18CB2F-1293-4BC1-ABB8-35F84C71812E + MODULE_TYPE = UEFI_APPLICATION + VERSION_STRING = 0.1 + ENTRY_POINT = ShellCEntryLib + +[Sources] + SecEnrollDefaultKeysApp.c + +[Packages] + MdeModulePkg/MdeModulePkg.dec + MdePkg/MdePkg.dec + SecurityPkg/SecurityPkg.dec + ShellPkg/ShellPkg.dec + +[Guids] + gEfiCertPkcs7Guid + gEfiCertSha256Guid + gEfiCertX509Guid + gEfiCustomModeEnableGuid + gEfiGlobalVariableGuid + gEfiImageSecurityDatabaseGuid + gEfiSecureBootEnableDisableGuid + +[Protocols] + gEfiSmbiosProtocolGuid ## CONSUMES + +[LibraryClasses] + BaseLib + BaseMemoryLib + DebugLib + MemoryAllocationLib + PrintLib + ShellCEntryLib + UefiBootServicesTableLib + UefiLib + UefiRuntimeServicesTableLib + SecBootVariableLib diff --git a/SecurityPkg/SecEnrollDefaultKeysApp/SecEnrollDefaultKeysApp.c b/SecurityPkg/SecEnrollDefaultKeysApp/SecEnrollDefaultKeysApp.c new file mode 100644 index 0000000000..b66dd93a7a --- /dev/null +++ b/SecurityPkg/SecEnrollDefaultKeysApp/SecEnrollDefaultKeysApp.c @@ -0,0 +1,108 @@ +/** @file + Enroll default PK, KEK, db, dbx. + +Copyright (c) 2021, ARM Ltd. All rights reserved.<BR> +Copyright (c) 2021, Semihalf All rights reserved.<BR> + +SPDX-License-Identifier: BSD-2-Clause-Patent +**/ + +#include <Guid/AuthenticatedVariableFormat.h> // gEfiCustomModeEnableGuid +#include <Guid/GlobalVariable.h> // EFI_SETUP_MODE_NAME +#include <Guid/ImageAuthentication.h> // EFI_IMAGE_SECURITY_DATABASE +#include <Library/BaseLib.h> // GUID_STRING_LENGTH +#include <Library/BaseMemoryLib.h> // CopyGuid() +#include <Library/DebugLib.h> // ASSERT() +#include <Library/MemoryAllocationLib.h> // FreePool() +#include <Library/PrintLib.h> // AsciiSPrint() +#include <Library/ShellCEntryLib.h> // ShellAppMain() +#include <Library/UefiBootServicesTableLib.h> // gBS +#include <Library/UefiLib.h> // AsciiPrint() +#include <Library/UefiRuntimeServicesTableLib.h> // gRT +#include <Uefi/UefiMultiPhase.h> +#include <Library/SecBootVariableLib.h> + +#define FAIL(fmt...) AsciiPrint("SecEnrollDefaultKeysApp: " fmt) + +/** + Entry point function of this shell application. +**/ +INTN +EFIAPI +ShellAppMain ( + IN UINTN Argc, + IN CHAR16 **Argv + ) +{ + EFI_STATUS Status; + UINT8 SetupMode; + + Status = CheckSetupMode (&SetupMode); + if (EFI_ERROR (Status)) { + FAIL ("Cannot get SetupMode variable: %r\n", Status); + return 1; + } + + if (SetupMode == USER_MODE) { + FAIL ("Skipped - USER_MODE\n"); + return 1; + } + + Status = SetSecureBootMode (CUSTOM_SECURE_BOOT_MODE); + if (EFI_ERROR (Status)) { + FAIL ("Cannot set CUSTOM_SECURE_BOOT_MODE: %r\n", Status); + return 1; + } + + Status = EnrollDbFromDefault (); + if (EFI_ERROR (Status)) { + FAIL ("Cannot enroll db: %r\n", Status); + goto error; + } + + Status = EnrollDbxFromDefault (); + if (EFI_ERROR (Status)) { + FAIL ("Cannot enroll dbt: %r\n", Status); + } + + Status = EnrollDbtFromDefault (); + if (EFI_ERROR (Status)) { + FAIL ("Cannot enroll dbx: %r\n", Status); + } + + Status = EnrollKEKFromDefault (); + if (EFI_ERROR (Status)) { + FAIL ("Cannot enroll KEK: %r\n", Status); + goto cleardbs; + } + + Status = EnrollPKFromDefault (); + if (EFI_ERROR (Status)) { + FAIL ("Cannot enroll PK: %r\n", Status); + goto clearKEK; + } + + Status = SetSecureBootMode (STANDARD_SECURE_BOOT_MODE); + if (EFI_ERROR (Status)) { + FAIL ("Cannot set CustomMode to STANDARD_SECURE_BOOT_MODE\n" + "Please do it manually, otherwise system can be easily compromised\n"); + } + return 0; + +clearKEK: + DeleteKEK (); + +cleardbs: + DeleteDbt (); + DeleteDbx (); + DeleteDb (); + +error: + Status = SetSecureBootMode (STANDARD_SECURE_BOOT_MODE); + if (EFI_ERROR (Status)) { + AsciiPrint ("SecEnrollDefaultKeysApp: Cannot set CustomMode to STANDARD_SECURE_BOOT_MODE\n" + "Please do it manually, otherwise system can be easily compromised\n"); + } + + return 1; +} -- 2.25.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#75654): https://edk2.groups.io/g/devel/message/75654 Mute This Topic: https://groups.io/mt/83098886/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-