From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-lj1-f170.google.com (mail-lj1-f170.google.com [209.85.208.170]) by mx.groups.io with SMTP id smtpd.web09.22083.1627640626204176787 for ; Fri, 30 Jul 2021 03:23:46 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@semihalf-com.20150623.gappssmtp.com header.s=20150623 header.b=uhothYgj; spf=none, err=SPF record not found (domain: semihalf.com, ip: 209.85.208.170, mailfrom: gjb@semihalf.com) Received: by mail-lj1-f170.google.com with SMTP id n6so11620610ljp.9 for ; Fri, 30 Jul 2021 03:23:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=K6pXwM+kKQbHh58Yrk6sT4N03n2a1Eqkfy31D+KLaNQ=; b=uhothYgjI6f3EHEIfgoO0o3IveQhl95jZVlGpGTmE/AhZrNbiuDTpCKA0g+U+beUEJ nXuGlwc/3LYgb/2/azgP8AjmaXpY5n/7pLeWKxdkg8xBFA+21QD7I84+D+AClMd7e4dQ hW4pUG4cQG0Nad1e0/yAh4KwPbzYUed8MzENu5rUmjnNI27/yQEAmuBSGoT4HP+wkaZq KYIcQDglURKBg3UbkBb/EN/+WBRIfKuy+TInXUIBGjEeesE4OCZWruHoibqQ1iE7L5rG cSxBiKSe3Q8j+qcl+Kba/GsGIUOi+oR507lbYZmu2Tb3lIllfgVEd9AuXN65mEWz/syt ahkQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=K6pXwM+kKQbHh58Yrk6sT4N03n2a1Eqkfy31D+KLaNQ=; b=mxKCkuxZpabTje6Z6enF7VNvZckVk3BGP30YtRdeKyhlf59IOVTvyVBFJxqO1OzzYH naZK05jHTsb6KkH9G2M4pcEz/U1M/ZIilALdtx/aNF9t6iHNmal9w0TATyA2GKuCLpjW wICCBL/4t+N77IAfpL2+QDTZkKcJ25bVMngTLnTX+xjkFSIwfFS6XI6wyxy8W3Prv4eU GcoDxqV616VSjqdVUPKBIPkR2dop6RyiEz1Ivp7Kl+czA4iEEO0tWshjyoYC2ta7J0Z4 ErakyN2ZdTP0eQUtHGRzEQJ1sk5x/Q6kJI2aFi+9xgX/Zj8HqvzMaTu3vz81Z4yK7E8w GwGQ== X-Gm-Message-State: AOAM532C/b0dVGM8vb1B0esJx2NLsdAoWsmnzhvQRG8CUchgjcUUXlSg Sqew7+Dvogg9i0YWF5s1lcMZpguMa7x2M8wi X-Google-Smtp-Source: ABdhPJzFviTvB+Bdaq6/wCP7OZOjbsz8+JbQz6tqtdSU9Mc4HZJOp9vGVYF2cZ3lMoNg3OFbcoADkw== X-Received: by 2002:a2e:81da:: with SMTP id s26mr1167584ljg.40.1627640624176; Fri, 30 Jul 2021 03:23:44 -0700 (PDT) Return-Path: Received: from gilgamesh.lab.semihalf.net ([83.142.187.85]) by smtp.gmail.com with ESMTPSA id d5sm114174lfs.61.2021.07.30.03.23.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 30 Jul 2021 03:23:43 -0700 (PDT) From: "Grzegorz Bernacki" To: devel@edk2.groups.io Cc: leif@nuviainc.com, ardb+tianocore@kernel.org, Samer.El-Haj-Mahmoud@arm.com, sunny.Wang@arm.com, mw@semihalf.com, upstream@semihalf.com, jiewen.yao@intel.com, jian.j.wang@intel.com, min.m.xu@intel.com, lersek@redhat.com, sami.mujawar@arm.com, afish@apple.com, ray.ni@intel.com, jordan.l.justen@intel.com, rebecca@bsdio.com, grehan@freebsd.org, thomas.abraham@arm.com, chasel.chiu@intel.com, nathaniel.l.desimone@intel.com, gaoliming@byosoft.com.cn, eric.dong@intel.com, michael.d.kinney@intel.com, zailiang.sun@intel.com, yi.qian@intel.com, graeme@nuviainc.com, rad@semihalf.com, pete@akeo.ie, Grzegorz Bernacki Subject: [PATCH v7 00/11] Secure Boot default keys Date: Fri, 30 Jul 2021 12:23:15 +0200 Message-Id: <20210730102326.2814466-1-gjb@semihalf.com> X-Mailer: git-send-email 2.29.0 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit This patchset adds support for initialization of default Secure Boot variables based on keys content embedded in flash binary. This feature is active only if Secure Boot is enabled and DEFAULT_KEY is defined. The patchset consist also application to enroll keys from default variables and secure boot menu change to allow user to reset key content to default values. Discussion on design can be found at: https://edk2.groups.io/g/rfc/topic/82139806#600 Built with: GCC - RISC-V (U500, U540) [requires fixes in dsc to build] - Intel (Vlv2TbltDevicePkg (X64/IA32), Quark, MinPlatformPkg, EmulatorPkg (X64), Bhyve, OvmfPkg (X64/IA32)) - ARM (Sgi75,SbsaQemu,DeveloperBox, RPi3/RPi4) RISC-V, Quark, Vlv2TbltDevicePkg, Bhyve requires additional fixes to be built, will be post on edk2 maillist later VS2019 - Intel (OvmfPkgX64) Test with: GCC5/RPi4 VS2019/OvmfX64 (requires changes to enable feature) Tests: 1. Try to enroll key in incorrect format. 2. Enroll with only PKDefault keys specified. 3. Enroll with all keys specified. 4. Enroll when keys are enrolled. 5. Reset keys values. 6. Running signed & unsigned app after enrollment. Changes since v1: - change names: SecBootVariableLib => SecureBootVariableLib SecBootDefaultKeysDxe => SecureBootDefaultKeysDxe SecEnrollDefaultKeysApp => EnrollFromDefaultKeysApp - change name of function CheckSetupMode to GetSetupMode - remove ShellPkg dependecy from EnrollFromDefaultKeysApp - rebase to master Changes since v2: - fix coding style for functions headers in SecureBootVariableLib.h - add header to SecureBootDefaultKeys.fdf.inc - remove empty line spaces in SecureBootDefaultKeysDxe files - revert FAIL macro in EnrollFromDefaultKeysApp - remove functions duplicates and add SecureBootVariableLib to platforms which used it Changes since v3: - move SecureBootDefaultKeys.fdf.inc to ArmPlatformPkg - leave duplicate of CreateTimeBasedPayload in PlatformVarCleanupLib - fix typo in guid description Changes since v4: - reorder patches to make it bisectable - split commits related to more than one platform - move edk2-platform commits to separate patchset Changes since v5: - split SecureBootVariableLib into SecureBootVariableLib and SecureBootVariableProvisionLib Changes since v6: - fix problems found by CI - add correct modules to SecurityPkg.dsc - update SecurityPkg.dec - fix coding style issues NOTE: edk2-platform has not been changed and v6 platform patches are still valid Grzegorz Bernacki (11): SecurityPkg: Create SecureBootVariableLib. SecurityPkg: Create library for enrolling Secure Boot variables. ArmVirtPkg: add SecureBootVariableLib class resolution OvmfPkg: add SecureBootVariableLib class resolution EmulatorPkg: add SecureBootVariableLib class resolution SecurityPkg: Remove duplicated functions from SecureBootConfigDxe. ArmPlatformPkg: Create include file for default key content. SecurityPkg: Add SecureBootDefaultKeysDxe driver SecurityPkg: Add EnrollFromDefaultKeys application. SecurityPkg: Add new modules to Security package. SecurityPkg: Add option to reset secure boot keys. SecurityPkg/SecurityPkg.dec | 22 + ArmVirtPkg/ArmVirt.dsc.inc | 2 + EmulatorPkg/EmulatorPkg.dsc | 2 + OvmfPkg/Bhyve/BhyveX64.dsc | 2 + OvmfPkg/OvmfPkgIa32.dsc | 2 + OvmfPkg/OvmfPkgIa32X64.dsc | 2 + OvmfPkg/OvmfPkgX64.dsc | 2 + SecurityPkg/SecurityPkg.dsc | 9 +- SecurityPkg/EnrollFromDefaultKeysApp/EnrollFromDefaultKeysApp.inf | 48 ++ SecurityPkg/Library/SecureBootVariableLib/SecureBootVariableLib.inf | 80 +++ SecurityPkg/Library/SecureBootVariableProvisionLib/SecureBootVariableProvisionLib.inf | 80 +++ SecurityPkg/VariableAuthenticated/SecureBootConfigDxe/SecureBootConfigDxe.inf | 3 + SecurityPkg/VariableAuthenticated/SecureBootDefaultKeysDxe/SecureBootDefaultKeysDxe.inf | 46 ++ SecurityPkg/Include/Library/SecureBootVariableLib.h | 153 ++++++ SecurityPkg/Include/Library/SecureBootVariableProvisionLib.h | 134 +++++ SecurityPkg/VariableAuthenticated/SecureBootConfigDxe/SecureBootConfigNvData.h | 2 + SecurityPkg/VariableAuthenticated/SecureBootConfigDxe/SecureBootConfig.vfr | 6 + SecurityPkg/EnrollFromDefaultKeysApp/EnrollFromDefaultKeysApp.c | 115 +++++ SecurityPkg/Library/SecureBootVariableLib/SecureBootVariableLib.c | 510 ++++++++++++++++++++ SecurityPkg/Library/SecureBootVariableProvisionLib/SecureBootVariableProvisionLib.c | 482 ++++++++++++++++++ SecurityPkg/VariableAuthenticated/SecureBootConfigDxe/SecureBootConfigImpl.c | 344 ++++++------- SecurityPkg/VariableAuthenticated/SecureBootDefaultKeysDxe/SecureBootDefaultKeysDxe.c | 69 +++ ArmPlatformPkg/SecureBootDefaultKeys.fdf.inc | 70 +++ SecurityPkg/Library/SecureBootVariableLib/SecureBootVariableLib.uni | 17 + SecurityPkg/Library/SecureBootVariableProvisionLib/SecureBootVariableProvisionLib.uni | 16 + SecurityPkg/VariableAuthenticated/SecureBootConfigDxe/SecureBootConfigStrings.uni | 4 + SecurityPkg/VariableAuthenticated/SecureBootDefaultKeysDxe/SecureBootDefaultKeysDxe.uni | 16 + 27 files changed, 2049 insertions(+), 189 deletions(-) create mode 100644 SecurityPkg/EnrollFromDefaultKeysApp/EnrollFromDefaultKeysApp.inf create mode 100644 SecurityPkg/Library/SecureBootVariableLib/SecureBootVariableLib.inf create mode 100644 SecurityPkg/Library/SecureBootVariableProvisionLib/SecureBootVariableProvisionLib.inf create mode 100644 SecurityPkg/VariableAuthenticated/SecureBootDefaultKeysDxe/SecureBootDefaultKeysDxe.inf create mode 100644 SecurityPkg/Include/Library/SecureBootVariableLib.h create mode 100644 SecurityPkg/Include/Library/SecureBootVariableProvisionLib.h create mode 100644 SecurityPkg/EnrollFromDefaultKeysApp/EnrollFromDefaultKeysApp.c create mode 100644 SecurityPkg/Library/SecureBootVariableLib/SecureBootVariableLib.c create mode 100644 SecurityPkg/Library/SecureBootVariableProvisionLib/SecureBootVariableProvisionLib.c create mode 100644 SecurityPkg/VariableAuthenticated/SecureBootDefaultKeysDxe/SecureBootDefaultKeysDxe.c create mode 100644 ArmPlatformPkg/SecureBootDefaultKeys.fdf.inc create mode 100644 SecurityPkg/Library/SecureBootVariableLib/SecureBootVariableLib.uni create mode 100644 SecurityPkg/Library/SecureBootVariableProvisionLib/SecureBootVariableProvisionLib.uni create mode 100644 SecurityPkg/VariableAuthenticated/SecureBootDefaultKeysDxe/SecureBootDefaultKeysDxe.uni -- 2.25.1