From: Ard Biesheuvel <ard.biesheuvel@linaro.org>
To: edk2-devel@lists.01.org, afish@apple.com,
leif.lindholm@linaro.org, michael.d.kinney@intel.com,
liming.gao@intel.com, jiewen.yao@intel.com
Cc: lersek@redhat.com, feng.tian@intel.com, star.zeng@intel.com,
Ard Biesheuvel <ard.biesheuvel@linaro.org>
Subject: [RFC PATCH 0/4] RFC: increased memory protection
Date: Wed, 22 Feb 2017 18:24:54 +0000 [thread overview]
Message-ID: <1487787898-5222-1-git-send-email-ard.biesheuvel@linaro.org> (raw)
Hello all,
This is a proof of concept implementation that removes all executable
permissions from writable memory regions, which greatly enhances security.
It is based on Jiewen's recent work, which is a step in the right direction,
but still leaves most of memory exploitable due to the default R+W+X
permissions.
The idea is that the implementation of the CPU arch protocol goes over the
memory map and removes exec permissions from all regions that are not already
marked as 'code. This requires some preparatory work to ensure that the DxeCore
itself is covered by a BootServicesCode region, not a BootServicesData region.
Exec permissions are re-granted selectively, when the PE/COFF loader allocates
the space for it. Combined with Jiewen's code/data split, this removes all
RWX mapped regions.
There is a caveat, though (and there are likely more of that kind): the EBC
driver will need some work to ensure the thunk buffers have the noexec
restriction lifted. This could be done in the EBC driver, but perhaps it is
better to either
a) modify the DXE core so it always removes noexec restrictions when allocating
code pages, or
b) add AllocateExecPages/AllocateExecPool() functions to the MemoryAllocationLib
API
Comments please!
Ard Biesheuvel (4):
MdeModulePkg/DxeCore: allow BootServicesData->BootServicesCode
conversion
MdeModulePkg/DxeCore: convert the DxeCore memory region to
BootServicesCode
MdeModulePkg/DxeCore: lift non-exec permissions on loaded images
ArmPkg/CpuDxe: remap all data regions non-executable
ArmPkg/Drivers/CpuDxe/CpuDxe.c | 76 ++++++++++++++++++++
MdeModulePkg/Core/Dxe/DxeMain.h | 8 +++
MdeModulePkg/Core/Dxe/DxeMain/DxeMain.c | 2 +
MdeModulePkg/Core/Dxe/Image/Image.c | 8 +++
MdeModulePkg/Core/Dxe/Mem/Page.c | 18 ++++-
5 files changed, 111 insertions(+), 1 deletion(-)
--
2.7.4
next reply other threads:[~2017-02-22 18:25 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-02-22 18:24 Ard Biesheuvel [this message]
2017-02-22 18:24 ` [RFC PATCH 1/4] MdeModulePkg/DxeCore: allow BootServicesData->BootServicesCode conversion Ard Biesheuvel
2017-02-22 18:24 ` [RFC PATCH 2/4] MdeModulePkg/DxeCore: convert the DxeCore memory region to BootServicesCode Ard Biesheuvel
2017-02-22 18:24 ` [RFC PATCH 3/4] MdeModulePkg/DxeCore: lift non-exec permissions on loaded images Ard Biesheuvel
2017-02-22 18:24 ` [RFC PATCH 4/4] ArmPkg/CpuDxe: remap all data regions non-executable Ard Biesheuvel
2017-02-23 8:52 ` [RFC PATCH 0/4] RFC: increased memory protection Yao, Jiewen
2017-02-23 11:39 ` Ard Biesheuvel
2017-02-23 11:45 ` Yao, Jiewen
2017-02-23 19:32 ` Ard Biesheuvel
2017-02-24 2:25 ` Yao, Jiewen
2017-02-23 10:34 ` Laszlo Ersek
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=1487787898-5222-1-git-send-email-ard.biesheuvel@linaro.org \
--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