doc: add hld-security guest secure boot description
1. add guest secure boot with OVMF. 2. delete obsolete content. 3. SOS -> Service VM and UOS -> User VM. Signed-off-by: Yonghua Huang <yonghua.huang@intel.com>
@ -32,7 +32,7 @@ The ACRN hypervisor is a type-1 hypervisor, built for running multiple
|
|||||||
guest OS instances, typical of an automotive infotainment system, on a
|
guest OS instances, typical of an automotive infotainment system, on a
|
||||||
single Intel Apollo Lake-I SoC platform. See :numref:`security-ACRN`.
|
single Intel Apollo Lake-I SoC platform. See :numref:`security-ACRN`.
|
||||||
|
|
||||||
.. figure:: images/security-image1.png
|
.. figure:: images/security-image-HV-overview.png
|
||||||
:width: 900px
|
:width: 900px
|
||||||
:align: center
|
:align: center
|
||||||
:name: security-ACRN
|
:name: security-ACRN
|
||||||
@ -67,29 +67,29 @@ devices, and in some cases, secrets of the guest OS. The ACRN
|
|||||||
hypervisor supports multiple guest VMs running in parallel in the less
|
hypervisor supports multiple guest VMs running in parallel in the less
|
||||||
privileged level called VMX non-root mode.
|
privileged level called VMX non-root mode.
|
||||||
|
|
||||||
The Service OS (SOS) is a special VM OS. While it runs as a guest VM in
|
The Service VM is a special VM. While it runs as a guest VM in
|
||||||
VMX non-root mode, it behaves as a privileged guest VM controlling the
|
VMX non-root mode, it behaves as a privileged guest VM controlling the
|
||||||
behavior of other guest VMs. The SOS can create a guest VM, suspend and
|
behavior of other guest VMs. The Service VM can create a guest VM, suspend and
|
||||||
resume a guest VM, and provide device mediation services (Device
|
resume a guest VM, and provide device mediation services (Device
|
||||||
Models) for other guest VMs it creates.
|
Models) for other guest VMs it creates.
|
||||||
|
|
||||||
In an SDC system, the SOS also contains safety-critical IC (Instrument
|
In an SDC system, the Service VM also contains safety-critical IC (Instrument
|
||||||
Cluster) applications. ACRN is designed to make sure the IC applications
|
Cluster) applications. ACRN is designed to make sure the IC applications
|
||||||
are well isolated from other applications in the SOS such as Device
|
are well isolated from other applications in the Service VM such as Device
|
||||||
Models (Mediators). A crash in other guest VM systems must not impact
|
Models (Mediators). A crash in other guest VM systems must not impact
|
||||||
the IC applications, and must not cause any DoS (Deny of Service) attacks.
|
the IC applications, and must not cause any DoS (Deny of Service) attacks.
|
||||||
Functional safety is out of scope of this document.
|
Functional safety is out of scope of this document.
|
||||||
|
|
||||||
In :numref:`security-ACRN`, the other guest VMs are referred to as User OS
|
In :numref:`security-ACRN`, the other guest VMs are referred to as User VM.
|
||||||
(UOS). These other VMs provide infotainment services (such as
|
These other VMs provide infotainment services (such as
|
||||||
navigation, music, and FM/AM radio) for the front seat or rear seat.
|
navigation, music, and FM/AM radio) for the front seat or rear seat.
|
||||||
|
|
||||||
The UOS systems can be based on Linux (LaaG, Linux as a Guest) or
|
The User VM systems can be based on Linux (LaaG, Linux as a Guest) or
|
||||||
Android\* (AaaG, Android as a Guest) depending on the customer's needs
|
Android\* (AaaG, Android as a Guest) depending on the customer's needs
|
||||||
and board configuration. It can also be a mix of Linux and Android
|
and board configuration. It can also be a mix of Linux and Android
|
||||||
systems.
|
systems.
|
||||||
|
|
||||||
In each UOS, a "side-car" OS system can accompany the normal OS system. We
|
In each User VM, a "side-car" OS system can accompany the normal OS system. We
|
||||||
call these two OS systems "secure world" and
|
call these two OS systems "secure world" and
|
||||||
"non-secure world", and they are isolated from each other by the
|
"non-secure world", and they are isolated from each other by the
|
||||||
hypervisor. Secure world has a higher "privilege level" than non-secure
|
hypervisor. Secure world has a higher "privilege level" than non-secure
|
||||||
@ -98,13 +98,13 @@ physical memory but not vice-versa. This document discusses how this
|
|||||||
security works and why it is required.
|
security works and why it is required.
|
||||||
|
|
||||||
Careful consideration should be made when evaluating using the Service
|
Careful consideration should be made when evaluating using the Service
|
||||||
OS (SOS) as the Trusted Computing Base (TCB). The Service OS may be a
|
VM as the Trusted Computing Base (TCB). The Service OS may be a
|
||||||
fairly large system running many lines of code; thus, treating it as a
|
fairly large system running many lines of code; thus, treating it as a
|
||||||
TCB doesn't make sense from a security perspective. To achieve the
|
TCB doesn't make sense from a security perspective. To achieve the
|
||||||
design purpose of "defense in depth", system security designers
|
design purpose of "defense in depth", system security designers
|
||||||
should always ask themselves, "What if the SOS is compromised?" and
|
should always ask themselves, "What if the Service VM is compromised?" and
|
||||||
"What's the impact if this happens?" This HLD document discusses how to
|
"What's the impact if this happens?" This HLD document discusses how to
|
||||||
security-harden the SOS system and mitigate attacks on the SOS.
|
security-harden the Service VM system and mitigate attacks on the Service VM.
|
||||||
|
|
||||||
ACRN High-Level Security Architecture
|
ACRN High-Level Security Architecture
|
||||||
*************************************
|
*************************************
|
||||||
@ -116,7 +116,7 @@ Secure / Verified Boot
|
|||||||
======================
|
======================
|
||||||
|
|
||||||
The security of the entire system built on top of the ACRN hypervisor
|
The security of the entire system built on top of the ACRN hypervisor
|
||||||
depends on the security from platform boot to UOS launching. Each layer
|
depends on the security from platform boot to User VM launching. Each layer
|
||||||
or module must verify the security of the next layer or module before
|
or module must verify the security of the next layer or module before
|
||||||
transferring control to it. Verification can be checking a
|
transferring control to it. Verification can be checking a
|
||||||
cryptographic signature on the executable of the next step before it is
|
cryptographic signature on the executable of the next step before it is
|
||||||
@ -137,7 +137,7 @@ As shown in :numref:`security-bootflow-sbl`, the Converged Security Engine
|
|||||||
Firmware (CSE FW) behaves as the root of trust in this platform boot
|
Firmware (CSE FW) behaves as the root of trust in this platform boot
|
||||||
flow. It authenticates and starts the BIOS (SBL), whereupon the SBL is
|
flow. It authenticates and starts the BIOS (SBL), whereupon the SBL is
|
||||||
responsible for authenticating and verifying the ACRN hypervisor image.
|
responsible for authenticating and verifying the ACRN hypervisor image.
|
||||||
Currently the SOS kernel is built together with the ACRN hypervisor as
|
Currently the Service VM kernel is built together with the ACRN hypervisor as
|
||||||
one image bundle, so this whole image signature is verified by SBL
|
one image bundle, so this whole image signature is verified by SBL
|
||||||
before launching.
|
before launching.
|
||||||
|
|
||||||
@ -152,7 +152,7 @@ before launching.
|
|||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
As shown in :numref:`security-bootflow-uefi`, in this boot sequence,UEFI
|
As shown in :numref:`security-bootflow-uefi`, in this boot sequence,UEFI
|
||||||
authenticates and starts the ACRN hypervisor firstly,and hypervisor will return
|
authenticates and starts the ACRN hypervisor firstly,and hypervisor will return
|
||||||
to UEFI environment to authenticate and load SOS kernel bootloader.
|
to UEFI environment to authenticate and load Service VM kernel bootloader.
|
||||||
|
|
||||||
.. figure:: images/security-image-bootflow-uefi.png
|
.. figure:: images/security-image-bootflow-uefi.png
|
||||||
:width: 900px
|
:width: 900px
|
||||||
@ -161,11 +161,11 @@ to UEFI environment to authenticate and load SOS kernel bootloader.
|
|||||||
|
|
||||||
ACRN Boot Flow with UEFI
|
ACRN Boot Flow with UEFI
|
||||||
|
|
||||||
As long as the SOS kernel starts, the SOS kernel will load all its
|
As long as the Service VM kernel starts, the Service VM kernel will load all its
|
||||||
subsystems subsequently. In order to launch a guest UOS, a DM process is
|
subsystems subsequently. In order to launch a User VM, a DM process is
|
||||||
started to launch the virtual BIOS (OVMF), and eventually, the OVMF is
|
started to launch the virtual BIOS (OVMF), and eventually, the OVMF is
|
||||||
responsible for verifying and launching the guest UOS kernel (or the
|
responsible for verifying and launching the User VM kernel (or the
|
||||||
Android OS loader for an Android UOS).
|
Android OS loader for an Android User VM).
|
||||||
|
|
||||||
Secure Boot
|
Secure Boot
|
||||||
-----------
|
-----------
|
||||||
@ -193,28 +193,85 @@ partners are responsible for image signing, ensuring the key strength
|
|||||||
meets security requirements, and storing the secret RSA private key
|
meets security requirements, and storing the secret RSA private key
|
||||||
securely.
|
securely.
|
||||||
|
|
||||||
|
Guest Secure Boot with OVMF
|
||||||
|
---------------------------
|
||||||
|
Open Virtual Machine Firmware (OVMF) is an EDK II based project to enable UEFI
|
||||||
|
support for virtual machines in virtualized environment. In ACRN, OVMF is
|
||||||
|
deployed to launch a user VM, as if the user VM is booted on a machine with
|
||||||
|
UEFI firmware.
|
||||||
|
|
||||||
|
UEFI Secure Boot defines how a platform's firmware can authenticate a digitally
|
||||||
|
signed UEFI image, such as an operating system loader or a UEFI driver stored
|
||||||
|
in an option ROM. This provides the capability to ensure that those UEFI images
|
||||||
|
are only loaded in an owner-authorized fashion and provides a common means to
|
||||||
|
ensure platform's security and integrity over systems running UEFI-based firmware.
|
||||||
|
UEFI Secure Boot is already supported by OVMF.
|
||||||
|
|
||||||
|
:numref:`security-secure-boot-uefi` shows a Secure Boot overview in UEFI.
|
||||||
|
|
||||||
|
.. figure:: images/security-image-secure-boot-uefi.png
|
||||||
|
:width: 500px
|
||||||
|
:align: center
|
||||||
|
:name: security-secure-boot-uefi
|
||||||
|
|
||||||
|
UEFI Secure Boot Overview
|
||||||
|
|
||||||
|
UEFI Secure Boot is controlled by a set of UEFI Authenticated Variables which specify
|
||||||
|
the UEFI Secure Boot Policy, the platform manufacturer or the platform owner enroll the
|
||||||
|
policy objects, which include the n-tuple of keys {PK, KEK, db,dbx} as a step 1.
|
||||||
|
During each successive boot, the UEFI secure boot implementation will assess the
|
||||||
|
policy in order to verify the signed images that are discovered in a host-bus adapter
|
||||||
|
or on a disk. If the images pass policy, then they are invoked.
|
||||||
|
|
||||||
|
UEFI Secure Boot implementations use these keys:
|
||||||
|
|
||||||
|
#. Platform Key (PK) is the top-level key in Secure Boot, UEFI supports a single PK,
|
||||||
|
which is generally provided by the manufacturer.
|
||||||
|
#. Key Exchange Key (KEK) is used to sign Signature and Forbidden Signature Database updates.
|
||||||
|
#. Signature Database (db) contains kyes and/or hashes of allowed EFI binaries.
|
||||||
|
|
||||||
|
And keys and certificates are in multiple format:
|
||||||
|
|
||||||
|
#. `.key` PEM format private keys for EFI binary and EFI signature list signing.
|
||||||
|
#. `.crt` PEM format certificates for sbsign.
|
||||||
|
#. `.cer` DER format certificates for firmware.
|
||||||
|
|
||||||
|
In ACRN, User VM Secure Boot can be enabled by below steps.
|
||||||
|
|
||||||
|
#. Generate keys(PK/KEK/DB) with key generation tool such as Ubuntu KeyGeneration,
|
||||||
|
`PK.der`, `KEK.der` and `db.der` will be enrolled in UEFI BIOS, `db.key` and `db.crt`
|
||||||
|
will be used to sign user VM bootloader/kernel.
|
||||||
|
#. Create a virtual disk to hold `PK.der`, `KEK.der` and `db.der`, then launch user VM with
|
||||||
|
this virtual disk which contains the keys for enrollment.
|
||||||
|
#. Start OVMF in writeback mode to ensure the keys are persistently stored in the OVMF image.
|
||||||
|
#. Enroll keys in OVMF GUI by following the Secure Boot configuration flow and enable
|
||||||
|
secure boot mode.
|
||||||
|
#. Perform writeback via reset in OVMF.
|
||||||
|
#. Sign user VM images with `db.key` and `db.crt`.
|
||||||
|
#. Boot user VM with Secure Boot enabled.
|
||||||
|
|
||||||
.. _sos_hardening:
|
.. _sos_hardening:
|
||||||
|
|
||||||
SOS Hardening
|
Service VM Hardening
|
||||||
-------------
|
--------------------
|
||||||
|
|
||||||
In the ACRN project, the reference SOS is based on Clear Linux OS. Customers
|
In the ACRN project, the reference Service VM is based on Clear Linux OS.
|
||||||
may choose to use different open source OSes or their own proprietary OS
|
Customers may choose to use different open source OSes or their own
|
||||||
systems. To minimize the attack surfaces and achieve the goal of
|
proprietary OS systems. To minimize the attack surfaces and achieve the
|
||||||
"defense in depth", there are many common guidelines to ensure the
|
goal of "defense in depth", there are many common guidelines to ensure the
|
||||||
security of SOS system.
|
security of Service VM system.
|
||||||
|
|
||||||
As shown in :numref:`security-bootflow-sbl` and
|
As shown in :numref:`security-bootflow-sbl` and
|
||||||
:numref:`security-bootflow-uefi` above, the integrity of the UOS
|
:numref:`security-bootflow-uefi` above, the integrity of the User VM
|
||||||
depends on the integrity of the DM module and vBIOS/vOSloader in the
|
depends on the integrity of the DM module and vBIOS/vOSloader in the
|
||||||
SOS. Hence, SOS integrity is critical to the entire UOS security. If the
|
Service VM. Hence, Service VM integrity is critical to the entire User VM security.
|
||||||
SOS system is compromised, all the other guest UOS VMs may be
|
If the Service VM system is compromised, all the other User VMs may be
|
||||||
jeopardized.
|
jeopardized.
|
||||||
|
|
||||||
In practice, the SOS designer and implementer should obey at least the
|
In practice, the Service VM designer and implementer should obey at least the
|
||||||
following rules:
|
following rules:
|
||||||
|
|
||||||
#. Verify that the SOS is a closed system and doesn't allow the user to
|
#. Verify that the Service VM is a closed system and doesn't allow the user to
|
||||||
install any unauthorized 3rd-party software or components.
|
install any unauthorized 3rd-party software or components.
|
||||||
#. Verify that external peripherals are constrained.
|
#. Verify that external peripherals are constrained.
|
||||||
#. Enable kernel-based hardening techniques, for example dm-verity (to
|
#. Enable kernel-based hardening techniques, for example dm-verity (to
|
||||||
@ -268,7 +325,7 @@ not be trusted by the hypervisor. In other words, there must be a trust
|
|||||||
boundary for memory space between the hypervisor and Guest VMs.
|
boundary for memory space between the hypervisor and Guest VMs.
|
||||||
|
|
||||||
.. figure:: images/security-image14.png
|
.. figure:: images/security-image14.png
|
||||||
:width: 900px
|
:width: 500px
|
||||||
:align: center
|
:align: center
|
||||||
:name: security-hgmem
|
:name: security-hgmem
|
||||||
|
|
||||||
@ -346,7 +403,7 @@ three typical solutions exist:
|
|||||||
all those guest memory pages.
|
all those guest memory pages.
|
||||||
|
|
||||||
.. figure:: images/security-image3.png
|
.. figure:: images/security-image3.png
|
||||||
:width: 900px
|
:width: 500px
|
||||||
:align: center
|
:align: center
|
||||||
:name: security-gmem
|
:name: security-gmem
|
||||||
|
|
||||||
@ -454,7 +511,7 @@ To activate SMAP protection in the ACRN hypervisor:
|
|||||||
use CLAC instruction to restore SMAP protection.
|
use CLAC instruction to restore SMAP protection.
|
||||||
|
|
||||||
.. figure:: images/security-image5.png
|
.. figure:: images/security-image5.png
|
||||||
:width: 900px
|
:width: 500px
|
||||||
:align: center
|
:align: center
|
||||||
:name: security-smap
|
:name: security-smap
|
||||||
|
|
||||||
@ -465,7 +522,7 @@ For example, :numref:`security-smap` shows a module of the hypervisor code
|
|||||||
write) access to a data area in guest memory page.
|
write) access to a data area in guest memory page.
|
||||||
|
|
||||||
.. figure:: images/security-image4.png
|
.. figure:: images/security-image4.png
|
||||||
:width: 900px
|
:width: 500px
|
||||||
:align: center
|
:align: center
|
||||||
:name: security-hagm
|
:name: security-hagm
|
||||||
|
|
||||||
@ -516,7 +573,7 @@ to avoid this in coding.
|
|||||||
Memory content from one guest VM might be leaked to another guest VM. So
|
Memory content from one guest VM might be leaked to another guest VM. So
|
||||||
in ACRN and Device Model design, when one guest VM is destroyed or
|
in ACRN and Device Model design, when one guest VM is destroyed or
|
||||||
crashes, its memory content should be scrubbed either by the hypervisor
|
crashes, its memory content should be scrubbed either by the hypervisor
|
||||||
or the SOS device model process, in case its memory content is
|
or the Service VM device model process, in case its memory content is
|
||||||
re-allocated to another guest VM which could otherwise leave the
|
re-allocated to another guest VM which could otherwise leave the
|
||||||
previous guest VM secrets in memory.
|
previous guest VM secrets in memory.
|
||||||
|
|
||||||
@ -531,7 +588,7 @@ Hypercall API Interface Hardening
|
|||||||
The hypercall API is the primary interface between a guest VM and the
|
The hypercall API is the primary interface between a guest VM and the
|
||||||
hypervisor.
|
hypervisor.
|
||||||
|
|
||||||
.. figure:: images/security-image7.png
|
.. figure:: images/security-image-HC-interface-restriction.png
|
||||||
:width: 900px
|
:width: 900px
|
||||||
:align: center
|
:align: center
|
||||||
:name: security-hir
|
:name: security-hir
|
||||||
@ -545,7 +602,7 @@ hypercall invocation in the hypervisor design:
|
|||||||
hypervisor must discard such hypercalls silently. Only ring-0
|
hypervisor must discard such hypercalls silently. Only ring-0
|
||||||
hypercalls from the guest VM are handled by the hypervisor.
|
hypercalls from the guest VM are handled by the hypervisor.
|
||||||
#. All the hypercalls (except world\_switch hypercall) must be called
|
#. All the hypercalls (except world\_switch hypercall) must be called
|
||||||
from the ring-0 driver of the SOS VM.
|
from the ring-0 driver of the Service VM.
|
||||||
World\_switch Hypercall is used by the TIPC (Trusty IPC) driver to
|
World\_switch Hypercall is used by the TIPC (Trusty IPC) driver to
|
||||||
switch guest VM context between secure world and non-secure world.
|
switch guest VM context between secure world and non-secure world.
|
||||||
Further details will be discussed in the :ref:`secure_trusty` section.
|
Further details will be discussed in the :ref:`secure_trusty` section.
|
||||||
@ -610,45 +667,45 @@ document <https://software.intel.com/en-us/articles/intel-sdm>`_.
|
|||||||
Virtual Power Life Cycle Management
|
Virtual Power Life Cycle Management
|
||||||
-----------------------------------
|
-----------------------------------
|
||||||
|
|
||||||
In a virtualization environment, each UOS (guest VM) can have its
|
In a virtualization environment, each User VM can have its
|
||||||
virtual power managed just like native behavior. For example, if a UOS
|
virtual power managed just like native behavior. For example, if a User VM
|
||||||
is required to enter S3 (Suspend to RAM) for power consumption saving,
|
is required to enter S3 (Suspend to RAM) for power consumption saving,
|
||||||
then the hypervisor and DM processor in SOS must handle it correctly.
|
then the hypervisor and DM processor in Service must handle it correctly.
|
||||||
Similarly, virtual cold/warm reboot is also supported. How to implement
|
Similarly, virtual cold/warm reboot is also supported. How to implement
|
||||||
virtual power life cycle management is out of scope in this document.
|
virtual power life cycle management is out of scope in this document.
|
||||||
|
|
||||||
This subsection is intended to describe the security issues for those
|
This subsection is intended to describe the security issues for those
|
||||||
power cycles.
|
power cycles.
|
||||||
|
|
||||||
UOS Power On and Shutdown
|
User VM Power On and Shutdown
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
The memory of the guest VM (UOS) is allocated dynamically by the DM
|
The memory of the User VM is allocated dynamically by the DM
|
||||||
process in the SOS before the UOS is launched. When the UOS is shutdown
|
process in the Service VM before the User VM is launched. When the User VM
|
||||||
(or crashed), its memory will be freed to SOS memory space. Later on, if
|
is shutdown (or crashed), its memory will be freed to Service VM memory space.
|
||||||
there is a new UOS launch event occurring, DM may potentially allocate
|
Later on, if there is a new User VM launch event occurring, DM may potentially allocate
|
||||||
the same memory content (or some overlaps) for this new UOS.
|
the same memory content (or some overlaps) for this new User VM.
|
||||||
|
|
||||||
In the virtualization environment, a security goal is to ensure guest VM
|
In the virtualization environment, a security goal is to ensure User VM
|
||||||
(UOS) isolation, not only for runtime memory isolation (e.g. w/ EPT),
|
isolation, not only for runtime memory isolation (e.g. w/ EPT),
|
||||||
but also for data at rest isolation.
|
but also for data at rest isolation.
|
||||||
|
|
||||||
Under this situation, if the memory contents of a previous UOS is not
|
Under this situation, if the memory contents of a previous User VM is not
|
||||||
scrubbed by either DM or the hypervisor, then the new launched UOS could
|
scrubbed by either DM or the hypervisor, then the new launched User VM could
|
||||||
access the previous UOS's secrets by scanning the memory regions
|
access the previous User VM's secrets by scanning the memory regions
|
||||||
allocated for the new UOS.
|
allocated for the new User VM.
|
||||||
|
|
||||||
In ACRN, the memory content is scrubbed in Device Model after the guest
|
In ACRN, the memory content is scrubbed in Device Model after the guest
|
||||||
VM is shutdown.
|
VM is shutdown.
|
||||||
|
|
||||||
UOS Reboot
|
User VM Reboot
|
||||||
~~~~~~~~~~
|
~~~~~~~~~~~~~~
|
||||||
|
|
||||||
The behaviors of **cold** boot of virtual UOS reboot is the same as that of
|
The behaviors of **cold** boot of virtual User VM reboot is the same as that of
|
||||||
previous virtual power-on and shutdown events. There is a special case:
|
previous virtual power-on and shutdown events. There is a special case:
|
||||||
virtual **warm** reboot.
|
virtual **warm** reboot.
|
||||||
|
|
||||||
When a UOS encounters a panic, its kernel may trigger a warm reboot, so
|
When a User VM encounters a panic, its kernel may trigger a warm reboot, so
|
||||||
that in the next power cycle, a special purpose-built OS image is
|
that in the next power cycle, a special purpose-built OS image is
|
||||||
launched to dump the memory content for debugging analysis. In a warm
|
launched to dump the memory content for debugging analysis. In a warm
|
||||||
reboot, the memory content must be preserved after a virtual power
|
reboot, the memory content must be preserved after a virtual power
|
||||||
@ -656,11 +713,11 @@ cycle. However, this violates the security rules above.
|
|||||||
|
|
||||||
This typically is fine in project ACRN, because in the next virtual
|
This typically is fine in project ACRN, because in the next virtual
|
||||||
power cycle, the same memory content won't be re-allocated to another
|
power cycle, the same memory content won't be re-allocated to another
|
||||||
UOS.
|
User VM.
|
||||||
|
|
||||||
But there is a new issue when secure world (TEE/Trusty) is considered,
|
But there is a new issue when secure world (TEE/Trusty) is considered,
|
||||||
because the memory content of secure world must not be dumped by a
|
because the memory content of secure world must not be dumped by a
|
||||||
non-secure world UOS. More details will be discussed in
|
non-secure world User VM. More details will be discussed in
|
||||||
the section on :ref:`platform_root_of_trust`.
|
the section on :ref:`platform_root_of_trust`.
|
||||||
|
|
||||||
Normally, this warm reboot (crashdump) feature is a debug feature, and
|
Normally, this warm reboot (crashdump) feature is a debug feature, and
|
||||||
@ -670,22 +727,22 @@ enabling the configuration.
|
|||||||
|
|
||||||
.. _uos_suspend_resume:
|
.. _uos_suspend_resume:
|
||||||
|
|
||||||
UOS Suspend/Resume
|
User VM Suspend/Resume
|
||||||
~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
There is no special design considerations for normal UOS without secure
|
There is no special design considerations for normal User VM without secure
|
||||||
world supported, as long as the EPT/VT-d memory protection/isolation is
|
world supported, as long as the EPT/VT-d memory protection/isolation is
|
||||||
active during the entire suspended time.
|
active during the entire suspended time.
|
||||||
|
|
||||||
Secure world (Trusty/TEE) is a special case for virtual suspend. Unlike
|
Secure world (Trusty/TEE) is a special case for virtual suspend. Unlike
|
||||||
the non-secure world of UOS, whose memory content can be read/written by
|
the non-secure world of User VM, whose memory content can be read/written by
|
||||||
SOS, the memory content of secure world of UOS must not be visible to
|
Service VM, the memory content of secure world of User VM must not be visible to
|
||||||
SOS. This is designed for security with defense in depth.
|
Service VM. This is designed for security with defense in depth.
|
||||||
|
|
||||||
During the entire process of UOS sleep/suspend, the memory protection
|
During the entire process of User VM sleep/suspend, the memory protection
|
||||||
for secure-world is preserved too.The physical memory region of
|
for secure-world is preserved too.The physical memory region of
|
||||||
secure world is removed from EPT paging tables of any guest VM,
|
secure world is removed from EPT paging tables of any guest VM,
|
||||||
even including the SOS VM.
|
even including the Service VM.
|
||||||
|
|
||||||
Third-party libraries
|
Third-party libraries
|
||||||
---------------------
|
---------------------
|
||||||
@ -711,7 +768,7 @@ burned into the chip.
|
|||||||
Then on each boot, the SBL BIOS is responsible for retrieving the pSEED
|
Then on each boot, the SBL BIOS is responsible for retrieving the pSEED
|
||||||
from CSE FW, and deriving two other derivatives (dSEED, and uSEED).
|
from CSE FW, and deriving two other derivatives (dSEED, and uSEED).
|
||||||
|
|
||||||
.. figure:: images/security-image6.png
|
.. figure:: images/security-image-platform-seed-derivation.png
|
||||||
:width: 900px
|
:width: 900px
|
||||||
:align: center
|
:align: center
|
||||||
:name: security-seed
|
:name: security-seed
|
||||||
@ -744,14 +801,14 @@ Secure Isolated World (Trusty)
|
|||||||
==============================
|
==============================
|
||||||
|
|
||||||
This section explains how to build a secure isolated world in a specific
|
This section explains how to build a secure isolated world in a specific
|
||||||
guest VM such as the Android UOS VM. (See :ref:`trusty_tee` for more
|
guest VM such as the Android User VM. (See :ref:`trusty_tee` for more
|
||||||
information.)
|
information.)
|
||||||
|
|
||||||
On the APL platform, the secure world is used to run a
|
On the APL platform, the secure world is used to run a
|
||||||
virtualization-based Trusty TEE in an isolated world which serves
|
virtualization-based Trusty TEE in an isolated world which serves
|
||||||
Android as a guest (AaaG,) to get Google's Android relevant certificates
|
Android as a guest (AaaG,) to get Google's Android relevant certificates
|
||||||
by fulfilling Android CDD requirements. Also as a plan, Trusty will be
|
by fulfilling Android CDD requirements. Also as a plan, Trusty will be
|
||||||
supported to provide security services for LaaG UOS as well.
|
supported to provide security services for LaaG User VM as well.
|
||||||
|
|
||||||
Refer to this Google website for `Trusty details
|
Refer to this Google website for `Trusty details
|
||||||
<https://source.android.com/security/trusty/>`_ and for `Android CCD
|
<https://source.android.com/security/trusty/>`_ and for `Android CCD
|
||||||
@ -761,17 +818,17 @@ Secure World Architecture Design
|
|||||||
--------------------------------
|
--------------------------------
|
||||||
|
|
||||||
To support a VT-TEE (Virtualization Technology based TEE) Trusty on
|
To support a VT-TEE (Virtualization Technology based TEE) Trusty on
|
||||||
ACRN, the hypervisor creates an isolated secure world in a UOS.
|
ACRN, the hypervisor creates an isolated secure world in a User VM.
|
||||||
|
|
||||||
.. figure:: images/security-image10.png
|
.. figure:: images/security-image-secure-world.png
|
||||||
:width: 900px
|
:width: 900px
|
||||||
:align: center
|
:align: center
|
||||||
:name: security-secure-world
|
:name: security-secure-world
|
||||||
|
|
||||||
Secure World
|
Secure World
|
||||||
|
|
||||||
In :numref:`security-secure-world`, the Trusty OS runs in the UOS secure
|
In :numref:`security-secure-world`, the Trusty OS runs in the User VM secure
|
||||||
world and a Linux- or Android-based UOS runs in the non-secure world.
|
world and a Linux- or Android-based User VM runs in the non-secure world.
|
||||||
|
|
||||||
By design, the secure world is able to read and write to all non-secure
|
By design, the secure world is able to read and write to all non-secure
|
||||||
world's memory space. But non-secure world applications cannot have
|
world's memory space. But non-secure world applications cannot have
|
||||||
@ -781,7 +838,7 @@ WS Hypercall can have parameters to specify the services cmd ID
|
|||||||
requested from non-secure world.
|
requested from non-secure world.
|
||||||
|
|
||||||
To design the "one VM, two worlds" architecture, there is a single
|
To design the "one VM, two worlds" architecture, there is a single
|
||||||
UOS/VM structure per-UOS in the hypervisor, but two vCPU structures that
|
User VM structure per-User VM in the hypervisor, but two vCPU structures that
|
||||||
save non-secure/secure world virtual logical processor states
|
save non-secure/secure world virtual logical processor states
|
||||||
respectively.
|
respectively.
|
||||||
|
|
||||||
@ -821,7 +878,7 @@ memory (>=511G) are valid for Trusty World's EPT only.
|
|||||||
:align: center
|
:align: center
|
||||||
:name: security-mem-view
|
:name: security-mem-view
|
||||||
|
|
||||||
Memory View for UOS non-secure World and Secure World
|
Memory View for User VM non-secure World and Secure World
|
||||||
|
|
||||||
Trusty/TEE Hypercalls
|
Trusty/TEE Hypercalls
|
||||||
---------------------
|
---------------------
|
||||||
@ -832,9 +889,9 @@ execution on top of the hypervisor.
|
|||||||
Hypercall - Trusty Initialization
|
Hypercall - Trusty Initialization
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
When a UOS is created by the DM in the SOS, if this UOS supports a
|
When a User VM is created by the DM in the Service VM, if this User VM
|
||||||
secure isolated world, then this hypercall will be invoked by OSLoader
|
supports a secure isolated world, then this hypercall will be invoked
|
||||||
(it could be Android OS loader in :numref:`security-bootflow-sbl` and
|
by OSLoader(it could be Android OS loader in :numref:`security-bootflow-sbl` and
|
||||||
:numref:`security-bootflow-uefi` above) to create / initialize the
|
:numref:`security-bootflow-uefi` above) to create / initialize the
|
||||||
secure world (Trusty/TEE).
|
secure world (Trusty/TEE).
|
||||||
|
|
||||||
@ -851,9 +908,9 @@ locating its entry point of TEE/Trusty executable, then executes a
|
|||||||
hypercall which exits to the hypervisor handler.
|
hypercall which exits to the hypervisor handler.
|
||||||
|
|
||||||
In the hypervisor, from a security perspective, it removes GPA->HPA
|
In the hypervisor, from a security perspective, it removes GPA->HPA
|
||||||
mapping of secure world from EPT paging tables of both UOS non-secure
|
mapping of secure world from EPT paging tables of both User VM non-secure
|
||||||
world and even SOS VM. This is intended to disallow non-secure world and
|
world and even Service VM. This is intended to disallow non-secure world and
|
||||||
SOS to access the memory region of secure world for security reasons as
|
Service VM to access the memory region of secure world for security reasons as
|
||||||
previously mentioned
|
previously mentioned
|
||||||
|
|
||||||
After all is set up by the hypervisor, including vCPU context
|
After all is set up by the hypervisor, including vCPU context
|
||||||
@ -871,30 +928,30 @@ control back, and resumes to the OSLoader (step 6 in
|
|||||||
VM non-secure world context.
|
VM non-secure world context.
|
||||||
|
|
||||||
Note that this trusty initialization hypercall can only be called once
|
Note that this trusty initialization hypercall can only be called once
|
||||||
in the UOS life cycle.
|
in the User VM life cycle.
|
||||||
|
|
||||||
Hypercall - Trusty Switching
|
Hypercall - Trusty Switching
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
There is another special hypercall introduced only for world switching
|
There is another special hypercall introduced only for world switching
|
||||||
between non-secure world and secure world in a UOS VM.
|
between non-secure world and secure world in a User VM.
|
||||||
|
|
||||||
.. figure:: images/security-image11.png
|
.. figure:: images/security-image-world-switching-HC.png
|
||||||
:width: 900px
|
:width: 900px
|
||||||
:align: center
|
:align: center
|
||||||
:name: security-ws
|
:name: security-ws
|
||||||
|
|
||||||
World Switching Hypercall
|
World Switching Hypercall
|
||||||
|
|
||||||
Whenever this hypercall is invoked in UOS, the hypervisor will
|
Whenever this hypercall is invoked in User VM, the hypervisor will
|
||||||
unconditionally switch to the other world. For example, if it is called
|
unconditionally switch to the other world. For example, if it is called
|
||||||
in non-secure world, the hypervisor will then switch context to secure
|
in non-secure world, the hypervisor will then switch context to secure
|
||||||
world. After secure world completes its security tasks (or an external
|
world. After secure world completes its security tasks (or an external
|
||||||
interrupt occurs), this hypercall will be called again, then the hypervisor
|
interrupt occurs), this hypercall will be called again, then the hypervisor
|
||||||
will switch context back to non-secure world.
|
will switch context back to non-secure world.
|
||||||
|
|
||||||
During entire world switching process, SOS is not involved. This
|
During entire world switching process, Service VM is not involved. This
|
||||||
hypervisor is only available to a UOS VM with duo-worlds supported.
|
hypervisor is only available to a User VM with duo-worlds supported.
|
||||||
|
|
||||||
Secure Storage Virtualization
|
Secure Storage Virtualization
|
||||||
-----------------------------
|
-----------------------------
|
||||||
@ -907,7 +964,7 @@ RPMB works are out of scope for this document.
|
|||||||
Since currently the eMMC in APL SoC platform only has a single RPMB
|
Since currently the eMMC in APL SoC platform only has a single RPMB
|
||||||
partition for tamper-resistant and anti-replay secure storage, the
|
partition for tamper-resistant and anti-replay secure storage, the
|
||||||
secure storage (RPMB) should be virtualized in order to support multiple
|
secure storage (RPMB) should be virtualized in order to support multiple
|
||||||
guest UOS VMs. However, although future generation of flash storage
|
guest User VMs. However, although future generation of flash storage
|
||||||
(e.g. UFS 3.0, and NVMe) supports multiple RPMB partitions, this
|
(e.g. UFS 3.0, and NVMe) supports multiple RPMB partitions, this
|
||||||
document still only focuses on the virtualization solution for
|
document still only focuses on the virtualization solution for
|
||||||
single-RPMB flash storage device in APL SoC platform.
|
single-RPMB flash storage device in APL SoC platform.
|
||||||
@ -915,7 +972,7 @@ single-RPMB flash storage device in APL SoC platform.
|
|||||||
The following :numref:`security-storage` illustrates the virtualization
|
The following :numref:`security-storage` illustrates the virtualization
|
||||||
of secure storage high-level architecture overview.
|
of secure storage high-level architecture overview.
|
||||||
|
|
||||||
.. figure:: images/security-image12.png
|
.. figure:: images/security-image-secure-storage-virt.png
|
||||||
:width: 900px
|
:width: 900px
|
||||||
:align: center
|
:align: center
|
||||||
:name: security-storage
|
:name: security-storage
|
||||||
@ -924,11 +981,11 @@ of secure storage high-level architecture overview.
|
|||||||
|
|
||||||
In :numref:`security-storage`, the rKey is the physical RPMB
|
In :numref:`security-storage`, the rKey is the physical RPMB
|
||||||
authentication key used for data authenticated read/write access between
|
authentication key used for data authenticated read/write access between
|
||||||
the SOS kernel and the physical RPMB controller in eMMC device. The
|
the Service VM kernel and the physical RPMB controller in eMMC device. The
|
||||||
VrKey is the virtual RPMB authentication key used for authentication
|
VrKey is the virtual RPMB authentication key used for authentication
|
||||||
between the SOS DM module and its corresponding UOS secure software.
|
between the DM module in Service VM and its corresponding User VM secure software.
|
||||||
Each UOS (if secure storage is supported) has its own VrKey, generated
|
Each User VM (if secure storage is supported) has its own VrKey, generated
|
||||||
randomly when DM process starts, and is securely distributed to UOS
|
randomly when DM process starts, and is securely distributed to User VM
|
||||||
secure world for each reboot. The rKey is fixed on a specific platform
|
secure world for each reboot. The rKey is fixed on a specific platform
|
||||||
unless the eMMC is replaced with another one.
|
unless the eMMC is replaced with another one.
|
||||||
|
|
||||||
@ -939,20 +996,20 @@ BIOS (SBL) right after production device ends its manufacturing process.
|
|||||||
For each reboot, the BIOS/SBL always retrieves the rKey from CSE FW
|
For each reboot, the BIOS/SBL always retrieves the rKey from CSE FW
|
||||||
(or generated from a special SEED that is retrieved from CSE FW, refer
|
(or generated from a special SEED that is retrieved from CSE FW, refer
|
||||||
to :ref:`platform_root_of_trust`). The SBL hands this over to the
|
to :ref:`platform_root_of_trust`). The SBL hands this over to the
|
||||||
ACRN hypervisor, and the hypervisor in turn sends it to the SOS kernel.
|
ACRN hypervisor, and the hypervisor in turn sends it to the Service VM kernel.
|
||||||
|
|
||||||
As an example, secure storage virtualization workflow for data write
|
As an example, secure storage virtualization workflow for data write
|
||||||
access is like this:
|
access is like this:
|
||||||
|
|
||||||
#. UOS Secure world (e.g. Trusty) packs the encrypted data and signs it
|
#. User VM Secure world (e.g. Trusty) packs the encrypted data and signs it
|
||||||
with the vRPMB authentication key (VrKey), and sends the data along
|
with the vRPMB authentication key (VrKey), and sends the data along
|
||||||
with its signature over the RPMB FE driver in UOS non-secure world.
|
with its signature over the RPMB FE driver in User VM non-secure world.
|
||||||
#. After DM process in SOS receives the data and signature, then the
|
#. After DM process in Service VM receives the data and signature, then the
|
||||||
vRPMB module in DM verifies them with the shared secret (vRPMB
|
vRPMB module in DM verifies them with the shared secret (vRPMB
|
||||||
authentication key, VrKey),
|
authentication key, VrKey),
|
||||||
#. If verification is successful, the vRPMB module does data address remap
|
#. If verification is successful, the vRPMB module does data address remap
|
||||||
(remembering that the multiple UOS VMs share a single physical RPMB
|
(remembering that the multiple User VMs share a single physical RPMB
|
||||||
partition), and forwards the data to the SOS kernel. The kernel packs
|
partition), and forwards the data to the Service VM kernel. The kernel packs
|
||||||
the data and signs it with the physical RPMB authentication key
|
the data and signs it with the physical RPMB authentication key
|
||||||
(rKey). Eventually, the data and its signature will be sent to
|
(rKey). Eventually, the data and its signature will be sent to
|
||||||
physical eMMC device.
|
physical eMMC device.
|
||||||
@ -967,13 +1024,13 @@ Note that there are some security considerations in this design:
|
|||||||
#. The rKey protection is very critical in this system. If it is
|
#. The rKey protection is very critical in this system. If it is
|
||||||
leaked, an attacker can overwrite the data on RPMB, which
|
leaked, an attacker can overwrite the data on RPMB, which
|
||||||
violates the "tamper-resistant & anti-replay" capability.
|
violates the "tamper-resistant & anti-replay" capability.
|
||||||
#. Typically, the vRPMB module in DM process of SOS system can filter
|
#. Typically, the vRPMB module in DM process of Service VM system can filter
|
||||||
data access, preventing one UOS to perform read/write access to the
|
data access, preventing one User VM to perform read/write access to the
|
||||||
data from another UOS VM. If the vRPMB module in the DM process is
|
data from another User VM. If the vRPMB module in the DM process is
|
||||||
compromised, one UOS may also change/overwrite the secure data of
|
compromised, one User VM may also change/overwrite the secure data of
|
||||||
other UOS.
|
other User VM.
|
||||||
|
|
||||||
Keeping the SOS system as secure as possible is a very important goal in
|
Keeping the Service VM system as secure as possible is a very important goal in
|
||||||
the system security design, please follow the recommendations in
|
the system security design, please follow the recommendations in
|
||||||
:ref:`sos_hardening`.
|
:ref:`sos_hardening`.
|
||||||
|
|
||||||
@ -995,7 +1052,7 @@ contexts/states.
|
|||||||
The save state hypercall is called only in secure world (Trusty/TEE OS)
|
The save state hypercall is called only in secure world (Trusty/TEE OS)
|
||||||
as long as the Trusty receives a signal when the entire system (actually
|
as long as the Trusty receives a signal when the entire system (actually
|
||||||
the non-secure OS issues this power event) is about to enter S3. While
|
the non-secure OS issues this power event) is about to enter S3. While
|
||||||
the restore state hypercall is called only by vBIOS when UOS is ready to
|
the restore state hypercall is called only by vBIOS when User VM is ready to
|
||||||
resume from suspend state.
|
resume from suspend state.
|
||||||
|
|
||||||
For security design consideration of handling secure world S3, please
|
For security design consideration of handling secure world S3, please
|
||||||
@ -1004,8 +1061,6 @@ read the previous section: :ref:`uos_suspend_resume`.
|
|||||||
Platform Security Feature Virtualization and Enablement
|
Platform Security Feature Virtualization and Enablement
|
||||||
=======================================================
|
=======================================================
|
||||||
|
|
||||||
.. note:: This section is under development
|
|
||||||
|
|
||||||
This section talks about how the hypervisor enables host CPU features
|
This section talks about how the hypervisor enables host CPU features
|
||||||
(e.g., SGX) and enables platform features (e.g., HECI), to allow guest
|
(e.g., SGX) and enables platform features (e.g., HECI), to allow guest
|
||||||
VMs the ability to use those features.
|
VMs the ability to use those features.
|
||||||
@ -1025,8 +1080,7 @@ time). PTT, however, is a built-in TPM2.0 implementation in Intel APL
|
|||||||
platform, and does not require extra BOM cost (unlike discrete TPM).
|
platform, and does not require extra BOM cost (unlike discrete TPM).
|
||||||
|
|
||||||
Note that the underlying CSE FW/HW implements PTT functionalities,
|
Note that the underlying CSE FW/HW implements PTT functionalities,
|
||||||
however, this TPM2.0 feature does not rely on :ref:`MEI_HECI_virtualization`
|
however, this TPM2.0 feature does not rely on MEI/HECI virtualization.
|
||||||
discussed below.
|
|
||||||
|
|
||||||
Unlike regular hardware, implementation of virtualizing a TPM must
|
Unlike regular hardware, implementation of virtualizing a TPM must
|
||||||
address both security and Trust.
|
address both security and Trust.
|
||||||
@ -1036,31 +1090,11 @@ VM, such as:
|
|||||||
|
|
||||||
#. Allows programs to interact with a TPM in a virtual system the same
|
#. Allows programs to interact with a TPM in a virtual system the same
|
||||||
way they interact with a TPM on the physical system;
|
way they interact with a TPM on the physical system;
|
||||||
#. Each UOS gets its own unique, emulated, software TPM, for example,
|
#. Each User VM gets its own unique, emulated, software TPM, for example,
|
||||||
vPCR and vNVRAM.
|
vPCR and vNVRAM.
|
||||||
#. One to one mapping between running vTPM instances and logical vTPM in
|
#. One to one mapping between running vTPM instances and logical vTPM in
|
||||||
each VM
|
each VM
|
||||||
|
|
||||||
SGX Virtualization (vSGX)
|
SGX Virtualization (vSGX)
|
||||||
-------------------------
|
-------------------------
|
||||||
|
Refer to :ref:`sgx_virt`
|
||||||
Currently the APL platform processor doesn't support SGX
|
|
||||||
capabilities, so ACRN doesn't provide a SGX virtualization
|
|
||||||
implementation.
|
|
||||||
|
|
||||||
.. _MEI_HECI_virtualization:
|
|
||||||
|
|
||||||
MEI/HECI Virtualization (vHECI)
|
|
||||||
-------------------------------
|
|
||||||
|
|
||||||
This information is forthcoming.
|
|
||||||
|
|
||||||
Content Protection
|
|
||||||
==================
|
|
||||||
|
|
||||||
The ACRN hypervisor is designed to allow guest VMs (typically UOSs) to
|
|
||||||
playback premium audio/video content. This section describes how the
|
|
||||||
hypervisor will support content protection for each guest UOS VM on APL
|
|
||||||
platform.
|
|
||||||
|
|
||||||
Additional information is forthcoming.
|
|
||||||
|
After Width: | Height: | Size: 52 KiB |
BIN
doc/developer-guides/hld/images/security-image-HV-overview.png
Normal file
After Width: | Height: | Size: 80 KiB |
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 31 KiB |
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 29 KiB |
After Width: | Height: | Size: 34 KiB |
After Width: | Height: | Size: 331 KiB |
After Width: | Height: | Size: 68 KiB |
BIN
doc/developer-guides/hld/images/security-image-secure-world.png
Normal file
After Width: | Height: | Size: 60 KiB |
After Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 377 KiB |
Before Width: | Height: | Size: 61 KiB |
Before Width: | Height: | Size: 21 KiB |
Before Width: | Height: | Size: 52 KiB |
Before Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 46 KiB |