From: "Dandan Bi" <dandan.bi@intel.com>
To: "devel@edk2.groups.io" <devel@edk2.groups.io>,
"Bi, Dandan" <dandan.bi@intel.com>,
"bret@corthon.com" <bret@corthon.com>
Cc: "Yao, Jiewen" <jiewen.yao@intel.com>,
"Zhang, Chao B" <chao.b.zhang@intel.com>,
"Wang, Jian J" <jian.j.wang@intel.com>,
"Wu, Hao A" <hao.a.wu@intel.com>,
"Gao, Liming" <liming.gao@intel.com>,
"Justen, Jordan L" <jordan.l.justen@intel.com>,
Laszlo Ersek <lersek@redhat.com>,
"Ard Biesheuvel" <ard.biesheuvel@arm.com>,
Andrew Fish <afish@apple.com>, "Ni, Ray" <ray.ni@intel.com>
Subject: Re: [edk2-devel] [PATCH v6 00/14] Add the VariablePolicy feature
Date: Tue, 11 Aug 2020 13:52:09 +0000 [thread overview]
Message-ID: <BN6PR11MB1393C3A044C295B9CA98422EEA450@BN6PR11MB1393.namprd11.prod.outlook.com> (raw)
In-Reply-To: <161DCDB779DB4B3C.30988@groups.io>
Hi Bret,
Sorry for the delayed response.
Some more comments here:
1. Currently I see the LockVaribePolicy is called at ReadyToBoot by variable driver, could we update it to be called at EndOfDxe? We should prevent malicious code registering policy after EndOfDxe for security concern. And could we also add the test case to check the variable policy is locked at EndofDxe?
2. For patch 4, the SMM communication, some general guidelines for SMI handler:
a) Check whether the communication buffer is outside SMM and valid.
For this feature, please double check whether the communication buffer is checked, if all the range in communication buffer has already been checked within existing edk2 core infrastructure, please also add the comments in the code to mention that it has been checked.
b) Should copy the communication buffer to SMRAM before checking the data fields to avoid TOC/TOU attac
For this feature, for example, when dump variable policy, if malicious code updates the DumpParams->TotalSize in communication buffer to smaller one to allocate the PaginationCache buffer, and then update it the correct one and dump the variable policy data into the PaginationCache buffer, it will cause buffer overflow in this case. So please double check the code and copy the communication buffer into SMRAM to avoid such kind issue.
3. Did you do any security test for this feature?
4. Currently, LockVariablePolicy can prevent RegisterVariablePolicy and DisableVariablePolicy. So in SMI hander, could we check the variable policy is locked or not firstly and then decide whether need to check and execution for VAR_CHECK_POLICY_COMMAND_REGISTER and VAR_CHECK_POLICY_COMMAND_DISABLE?
5. Since there is the logic when variable policy is disabled, it will permit deletion of auth/protected variables. Could we add some comments in code to mention that variable policy should always be enabled for security concern to avoid giving bad example?
Thanks,
Dandan
> -----Original Message-----
> From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Dandan
> Bi
> Sent: Thursday, July 2, 2020 10:14 AM
> To: devel@edk2.groups.io; bret@corthon.com
> Cc: Yao, Jiewen <jiewen.yao@intel.com>; Zhang, Chao B
> <chao.b.zhang@intel.com>; Wang, Jian J <jian.j.wang@intel.com>; Wu, Hao
> A <hao.a.wu@intel.com>; Gao, Liming <liming.gao@intel.com>; Justen,
> Jordan L <jordan.l.justen@intel.com>; Laszlo Ersek <lersek@redhat.com>;
> Ard Biesheuvel <ard.biesheuvel@arm.com>; Andrew Fish
> <afish@apple.com>; Ni, Ray <ray.ni@intel.com>
> Subject: Re: [edk2-devel] [PATCH v6 00/14] Add the VariablePolicy feature
>
> Hi Bret,
>
> Thanks for the contribution.
>
> I have taken an overview of this patch series and have some small comments
> in the related patches, please check in sub-patch.
>
> I will review the patch series more in details and bring more comments back
> if have. Do you have a branch for these patches in GitHub? Which should be
> easy for review.
>
>
> Thanks,
> Dandan
>
> > -----Original Message-----
> > From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Bret
> > Barkelew
> > Sent: Tuesday, June 23, 2020 2:41 PM
> > To: devel@edk2.groups.io
> > Cc: Yao, Jiewen <jiewen.yao@intel.com>; Zhang, Chao B
> > <chao.b.zhang@intel.com>; Wang, Jian J <jian.j.wang@intel.com>; Wu,
> > Hao A <hao.a.wu@intel.com>; Gao, Liming <liming.gao@intel.com>;
> > Justen, Jordan L <jordan.l.justen@intel.com>; Laszlo Ersek
> > <lersek@redhat.com>; Ard Biesheuvel <ard.biesheuvel@arm.com>;
> Andrew
> > Fish <afish@apple.com>; Ni, Ray <ray.ni@intel.com>
> > Subject: [edk2-devel] [PATCH v6 00/14] Add the VariablePolicy feature
> >
> > REF:https://bugzilla.tianocore.org/show_bug.cgi?id=2522
> >
> > The 14 patches in this series add the VariablePolicy feature to the
> > core, deprecate Edk2VarLock (while adding a compatibility layer to
> > reduce code churn), and integrate the VariablePolicy libraries and
> > protocols into Variable Services.
> >
> > Since the integration requires multiple changes, including adding
> > libraries, a protocol, an SMI communication handler, and
> > VariableServices integration, the patches are broken up by individual
> > library additions and then a final integration. Security-sensitive
> > changes like bypassing Authenticated Variable enforcement are also
> > broken out into individual patches so that attention can be called directly to
> them.
> >
> > Platform porting instructions are described in this wiki entry:
> > https://github.com/tianocore/tianocore.github.io/wiki/VariablePolicy-
> > Protocol---Enhanced-Method-for-Managing-Variables#platform-porting
> >
> > Discussion of the feature can be found in multiple places throughout
> > the last year on the RFC channel, staging branches, and in devel.
> >
> > Most recently, this subject was discussed in this thread:
> > https://edk2.groups.io/g/devel/message/53712
> > (the code branches shared in that discussion are now out of date, but
> > the whitepapers and discussion are relevant).
> >
> > Cc: Jiewen Yao <jiewen.yao@intel.com>
> > Cc: Chao Zhang <chao.b.zhang@intel.com>
> > Cc: Jian J Wang <jian.j.wang@intel.com>
> > Cc: Hao A Wu <hao.a.wu@intel.com>
> > Cc: Liming Gao <liming.gao@intel.com>
> > Cc: Jordan Justen <jordan.l.justen@intel.com>
> > Cc: Laszlo Ersek <lersek@redhat.com>
> > Cc: Ard Biesheuvel <ard.biesheuvel@arm.com>
> > Cc: Andrew Fish <afish@apple.com>
> > Cc: Ray Ni <ray.ni@intel.com>
> > Cc: Bret Barkelew <brbarkel@microsoft.com>
> > Signed-off-by: Bret Barkelew <brbarkel@microsoft.com>
> >
> > v6 changes:
> > * Fix an issue with uninitialized Status in InitVariablePolicyLib()
> > and
> > DeinitVariablePolicyLib()
> > * Fix GCC building in shell-based functional test
> > * Rebase on latest origin/master
> >
> > v5 changes:
> > * Fix the CONST mismatch in VariablePolicy.h and
> > VariablePolicySmmDxe.c
> > * Fix EFIAPI mismatches in the functional unittest
> > * Rebase on latest origin/master
> >
> > v4 changes:
> > * Remove Optional PcdAllowVariablePolicyEnforcementDisable PCD from
> > platforms
> > * Rebase on master
> > * Migrate to new MmCommunicate2 protocol
> > * Fix an oversight in the default return value for
> > InitMmCommonCommBuffer
> > * Fix in VariablePolicyLib to allow ExtraInitRuntimeDxe to consume
> > variables
> >
> > V3 changes:
> > * Address all non-unittest issues with ECC
> > * Make additional style changes
> > * Include section name in hunk headers in "ini-style" files
> > * Remove requirement for the EdkiiPiSmmCommunicationsRegionTable
> > driver
> > (now allocates its own buffer)
> > * Change names from VARIABLE_POLICY_PROTOCOL and
> > gVariablePolicyProtocolGuid
> > to EDKII_VARIABLE_POLICY_PROTOCOL and
> > gEdkiiVariablePolicyProtocolGuid
> > * Fix GCC warning about initializing externs
> > * Add UNI strings for new PCD
> > * Add patches for ArmVirtPkg, OvmfXen, and UefiPayloadPkg
> > * Reorder patches according to Liming's feedback about adding to
> platforms
> > before changing variable driver
> >
> > V2 changes:
> > * Fixed implementation for RuntimeDxe
> > * Add PCD to block DisableVariablePolicy
> > * Fix the DumpVariablePolicy pagination in SMM
> >
> > Bret Barkelew (14):
> > MdeModulePkg: Define the VariablePolicy protocol interface
> > MdeModulePkg: Define the VariablePolicyLib
> > MdeModulePkg: Define the VariablePolicyHelperLib
> > MdeModulePkg: Define the VarCheckPolicyLib and SMM interface
> > OvmfPkg: Add VariablePolicy engine to OvmfPkg platform
> > EmulatorPkg: Add VariablePolicy engine to EmulatorPkg platform
> > ArmVirtPkg: Add VariablePolicy engine to ArmVirtPkg platform
> > UefiPayloadPkg: Add VariablePolicy engine to UefiPayloadPkg platform
> > MdeModulePkg: Connect VariablePolicy business logic to
> > VariableServices
> > MdeModulePkg: Allow VariablePolicy state to delete protected variables
> > SecurityPkg: Allow VariablePolicy state to delete authenticated
> > variables
> > MdeModulePkg: Change TCG MOR variables to use VariablePolicy
> > MdeModulePkg: Drop VarLock from RuntimeDxe variable driver
> > MdeModulePkg: Add a shell-based functional test for VariablePolicy
> >
> > MdeModulePkg/Library/VarCheckPolicyLib/VarCheckPolicyLib.c
> > | 320 +++
> >
> > MdeModulePkg/Library/VariablePolicyHelperLib/VariablePolicyHelperLib.c
> > | 396 ++++
> > MdeModulePkg/Library/VariablePolicyLib/VariablePolicyExtraInitNull.c
> > | 46 +
> >
> >
> MdeModulePkg/Library/VariablePolicyLib/VariablePolicyExtraInitRuntimeDx
> > e.c | 85 +
> > MdeModulePkg/Library/VariablePolicyLib/VariablePolicyLib.c
> > | 816 +++++++
> >
> >
> MdeModulePkg/Library/VariablePolicyLib/VariablePolicyUnitTest/VariablePo
> > licyUnitTest.c | 2440 ++++++++++++++++++++
> >
> >
> MdeModulePkg/Test/ShellTest/VariablePolicyFuncTestApp/VariablePolicyFu
> > ncTestApp.c | 1978 ++++++++++++++++
> > MdeModulePkg/Universal/Variable/RuntimeDxe/TcgMorLockDxe.c
> > | 52 +-
> > MdeModulePkg/Universal/Variable/RuntimeDxe/TcgMorLockSmm.c
> > | 60 +-
> > MdeModulePkg/Universal/Variable/RuntimeDxe/VarCheck.c
> > | 49 +-
> > MdeModulePkg/Universal/Variable/RuntimeDxe/VariableDxe.c
> > | 53 +
> >
> >
> MdeModulePkg/Universal/Variable/RuntimeDxe/VariableLockRequstToLock
> > .c | 71 +
> > MdeModulePkg/Universal/Variable/RuntimeDxe/VariablePolicySmmDxe.c
> > | 642 +++++
> >
> >
> MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmmRuntimeDxe.
> > c | 14 +
> > SecurityPkg/Library/AuthVariableLib/AuthService.c |
> 22
> > +-
> > ArmVirtPkg/ArmVirt.dsc.inc | 4 +
> > EmulatorPkg/EmulatorPkg.dsc | 3 +
> > MdeModulePkg/Include/Guid/VarCheckPolicyMmi.h
> |
> > 54 +
> > MdeModulePkg/Include/Library/VariablePolicyHelperLib.h
> > | 164 ++
> > MdeModulePkg/Include/Library/VariablePolicyLib.h |
> > 207 ++
> > MdeModulePkg/Include/Protocol/VariablePolicy.h |
> > 157 ++
> > MdeModulePkg/Library/VarCheckPolicyLib/VarCheckPolicyLib.inf
> > | 42 +
> > MdeModulePkg/Library/VarCheckPolicyLib/VarCheckPolicyLib.uni
> > | 12 +
> >
> > MdeModulePkg/Library/VariablePolicyHelperLib/VariablePolicyHelperLib.i
> > nf
> > | 35 +
> >
> > MdeModulePkg/Library/VariablePolicyHelperLib/VariablePolicyHelperLib.u
> > ni
> > | 12 +
> > MdeModulePkg/Library/VariablePolicyLib/VariablePolicyLib.inf
> > | 44 +
> > MdeModulePkg/Library/VariablePolicyLib/VariablePolicyLib.uni
> > | 12 +
> >
> > MdeModulePkg/Library/VariablePolicyLib/VariablePolicyLibRuntimeDxe.inf
> > | 51 +
> >
> >
> MdeModulePkg/Library/VariablePolicyLib/VariablePolicyUnitTest/VariablePo
> > licyUnitTest.inf | 40 +
> > MdeModulePkg/MdeModulePkg.ci.yaml | 4
> +-
> > MdeModulePkg/MdeModulePkg.dec | 26 +-
> > MdeModulePkg/MdeModulePkg.dsc | 15 +
> > MdeModulePkg/MdeModulePkg.uni | 7 +
> > MdeModulePkg/Test/MdeModulePkgHostTest.dsc
> |
> > 11 +
> > MdeModulePkg/Test/ShellTest/VariablePolicyFuncTestApp/Readme.md
> > | 55 +
> >
> >
> MdeModulePkg/Test/ShellTest/VariablePolicyFuncTestApp/VariablePolicyFu
> > ncTestApp.inf | 42 +
> > MdeModulePkg/Universal/Variable/RuntimeDxe/VariableRuntimeDxe.inf
> > | 5 +
> > MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.inf
> > | 4 +
> >
> >
> MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmmRuntimeDxe.i
> > nf | 10 +
> >
> >
> MdeModulePkg/Universal/Variable/RuntimeDxe/VariableStandaloneMm.inf
> > | 4 +
> > OvmfPkg/OvmfPkgIa32.dsc | 5 +
> > OvmfPkg/OvmfPkgIa32X64.dsc | 5 +
> > OvmfPkg/OvmfPkgX64.dsc | 5 +
> > OvmfPkg/OvmfXen.dsc | 4 +
> > SecurityPkg/Library/AuthVariableLib/AuthVariableLib.inf |
> > 2 +
> > UefiPayloadPkg/UefiPayloadPkgIa32.dsc | 4 +
> > UefiPayloadPkg/UefiPayloadPkgIa32X64.dsc | 4 +
> > 47 files changed, 8015 insertions(+), 78 deletions(-) create mode
> > 100644 MdeModulePkg/Library/VarCheckPolicyLib/VarCheckPolicyLib.c
> > create mode 100644
> > MdeModulePkg/Library/VariablePolicyHelperLib/VariablePolicyHelperLib.c
> > create mode 100644
> > MdeModulePkg/Library/VariablePolicyLib/VariablePolicyExtraInitNull.c
> > create mode 100644
> > MdeModulePkg/Library/VariablePolicyLib/VariablePolicyExtraInitRuntimeD
> > x
> > e.c
> > create mode 100644
> > MdeModulePkg/Library/VariablePolicyLib/VariablePolicyLib.c
> > create mode 100644
> > MdeModulePkg/Library/VariablePolicyLib/VariablePolicyUnitTest/Variable
> > Po
> > licyUnitTest.c
> > create mode 100644
> >
> MdeModulePkg/Test/ShellTest/VariablePolicyFuncTestApp/VariablePolicyFu
> > ncTestApp.c
> > create mode 100644
> >
> MdeModulePkg/Universal/Variable/RuntimeDxe/VariableLockRequstToLock
> > .c
> > create mode 100644
> > MdeModulePkg/Universal/Variable/RuntimeDxe/VariablePolicySmmDxe.c
> > create mode 100644 MdeModulePkg/Include/Guid/VarCheckPolicyMmi.h
> > create mode 100644
> > MdeModulePkg/Include/Library/VariablePolicyHelperLib.h
> > create mode 100644 MdeModulePkg/Include/Library/VariablePolicyLib.h
> > create mode 100644 MdeModulePkg/Include/Protocol/VariablePolicy.h
> > create mode 100644
> > MdeModulePkg/Library/VarCheckPolicyLib/VarCheckPolicyLib.inf
> > create mode 100644
> > MdeModulePkg/Library/VarCheckPolicyLib/VarCheckPolicyLib.uni
> > create mode 100644
> > MdeModulePkg/Library/VariablePolicyHelperLib/VariablePolicyHelperLib.i
> > nf
> > create mode 100644
> > MdeModulePkg/Library/VariablePolicyHelperLib/VariablePolicyHelperLib.u
> > ni
> > create mode 100644
> > MdeModulePkg/Library/VariablePolicyLib/VariablePolicyLib.inf
> > create mode 100644
> > MdeModulePkg/Library/VariablePolicyLib/VariablePolicyLib.uni
> > create mode 100644
> > MdeModulePkg/Library/VariablePolicyLib/VariablePolicyLibRuntimeDxe.inf
> > create mode 100644
> > MdeModulePkg/Library/VariablePolicyLib/VariablePolicyUnitTest/Variable
> > Po
> > licyUnitTest.inf
> > create mode 100644
> > MdeModulePkg/Test/ShellTest/VariablePolicyFuncTestApp/Readme.md
> > create mode 100644
> >
> MdeModulePkg/Test/ShellTest/VariablePolicyFuncTestApp/VariablePolicyFu
> > ncTestApp.inf
> >
> > --
> > 2.26.2.windows.1.8.g01c50adf56.20200515075929
> >
> >
> >
>
>
>
next prev parent reply other threads:[~2020-08-11 13:52 UTC|newest]
Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-06-23 6:40 [PATCH v6 00/14] Add the VariablePolicy feature bret
2020-06-23 6:40 ` [PATCH v6 01/14] MdeModulePkg: Define the VariablePolicy protocol interface Bret Barkelew
2020-06-23 6:40 ` [PATCH v6 02/14] MdeModulePkg: Define the VariablePolicyLib Bret Barkelew
2020-07-02 2:13 ` [edk2-devel] " Dandan Bi
2020-07-02 7:16 ` Bret Barkelew
2020-06-23 6:40 ` [PATCH v6 03/14] MdeModulePkg: Define the VariablePolicyHelperLib Bret Barkelew
2020-06-23 6:40 ` [PATCH v6 04/14] MdeModulePkg: Define the VarCheckPolicyLib and SMM interface Bret Barkelew
2020-07-02 2:13 ` [edk2-devel] " Dandan Bi
2020-07-02 6:41 ` Bret Barkelew
2020-06-23 6:40 ` [PATCH v6 05/14] OvmfPkg: Add VariablePolicy engine to OvmfPkg platform Bret Barkelew
2020-06-23 6:40 ` [PATCH v6 06/14] EmulatorPkg: Add VariablePolicy engine to EmulatorPkg platform Bret Barkelew
2020-06-23 6:40 ` [PATCH v6 07/14] ArmVirtPkg: Add VariablePolicy engine to ArmVirtPkg platform Bret Barkelew
2020-06-23 6:40 ` [PATCH v6 08/14] UefiPayloadPkg: Add VariablePolicy engine to UefiPayloadPkg platform Bret Barkelew
2020-06-23 16:45 ` Ma, Maurice
2020-06-23 6:40 ` [PATCH v6 09/14] MdeModulePkg: Connect VariablePolicy business logic to VariableServices Bret Barkelew
2020-07-02 2:13 ` [edk2-devel] " Dandan Bi
2020-07-02 6:40 ` Bret Barkelew
2020-06-23 6:41 ` [PATCH v6 10/14] MdeModulePkg: Allow VariablePolicy state to delete protected variables Bret Barkelew
2020-06-23 6:41 ` [PATCH v6 11/14] SecurityPkg: Allow VariablePolicy state to delete authenticated variables Bret Barkelew
2020-06-23 6:41 ` [PATCH v6 12/14] MdeModulePkg: Change TCG MOR variables to use VariablePolicy Bret Barkelew
2020-06-23 6:41 ` [PATCH v6 13/14] MdeModulePkg: Drop VarLock from RuntimeDxe variable driver Bret Barkelew
2020-07-02 2:13 ` [edk2-devel] " Dandan Bi
2020-07-02 6:36 ` Bret Barkelew
2020-06-23 6:41 ` [PATCH v6 14/14] MdeModulePkg: Add a shell-based functional test for VariablePolicy Bret Barkelew
2020-07-02 2:13 ` [edk2-devel] [PATCH v6 00/14] Add the VariablePolicy feature Dandan Bi
2020-07-02 6:45 ` Bret Barkelew
2020-07-02 6:47 ` Bret Barkelew
2020-07-02 11:06 ` Laszlo Ersek
2020-07-02 18:26 ` [EXTERNAL] " Bret Barkelew
2020-07-29 19:56 ` [EXTERNAL] " Bret Barkelew
2020-07-30 1:36 ` Liming Gao
2020-07-30 1:43 ` Bret Barkelew
[not found] ` <161DCDB779DB4B3C.30988@groups.io>
2020-08-11 13:52 ` Dandan Bi [this message]
2020-08-18 5:24 ` Bret Barkelew
[not found] ` <162C456ABCC01019.19371@groups.io>
2020-08-26 6:49 ` Bret Barkelew
[not found] ` <162EBEB1FCE1A80C.27554@groups.io>
2020-09-08 22:20 ` Bret Barkelew
2020-09-09 0:41 ` 回复: " gaoliming
[not found] ` <1632EF0542479E7A.4657@groups.io>
2020-09-11 15:18 ` Bret Barkelew
2020-09-11 16:43 ` Laszlo Ersek
2020-09-14 6:42 ` Wang, Jian J
2020-09-15 20:51 ` Bret Barkelew
2020-09-16 0:54 ` 回复: " gaoliming
2020-09-16 1:05 ` Yao, Jiewen
2020-09-16 1:37 ` 回复: " gaoliming
2020-09-16 1:43 ` Yao, Jiewen
2020-09-16 1:44 ` Bret Barkelew
[not found] ` <16351037402D5209.16285@groups.io>
2020-09-18 6:55 ` Bret Barkelew
[not found] ` <1635CE5BD52DF579.6413@groups.io>
2020-09-22 2:50 ` Bret Barkelew
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-list 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=BN6PR11MB1393C3A044C295B9CA98422EEA450@BN6PR11MB1393.namprd11.prod.outlook.com \
--to=devel@edk2.groups.io \
/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