doc: terminology cleanup in HLD security

- Replace SOS or Service OS with Service VM
- Replace UOS or User OS with User VM
- Clean up some of the grammar

Signed-off-by: Amy Reyes <amy.reyes@intel.com>
This commit is contained in:
Amy Reyes 2021-11-08 10:04:58 -08:00 committed by David Kinder
parent fe6adb606c
commit 812cd3e6de
7 changed files with 148 additions and 144 deletions

View File

@ -9,7 +9,7 @@ Security High-Level Design
Introduction Introduction
************ ************
This document describes security high-level design in ACRN, This document describes the security high-level design in ACRN,
including information about: including information about:
- Secure booting in ACRN - Secure booting in ACRN
@ -30,7 +30,7 @@ Background
The ACRN hypervisor is a type-1 hypervisor, built for running multiple 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 Apollo Lake-I SoC platform. See :numref:`security-ACRN`.
.. figure:: images/security-image-HV-overview.png .. figure:: images/security-image-HV-overview.png
:width: 900px :width: 900px
@ -85,20 +85,20 @@ 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 User VM 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 User VM, 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. The secure world has a higher "privilege level" than the non-secure
world; for example, the secure world can access the non-secure world's world; for example, the secure world can access the non-secure world's
physical memory but not vice versa. This document discusses how this 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
VM as the Trusted Computing Base (TCB). The Service OS may be a VM as the Trusted Computing Base (TCB). The Service VM 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
@ -151,8 +151,9 @@ before launching.
2) Verified Boot Sequence With UEFI 2) Verified Boot Sequence With UEFI
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
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. Then the hypervisor returns
to UEFI environment to authenticate and load Service VM kernel bootloader. to the UEFI environment to authenticate and load the Service VM kernel
bootloader.
.. figure:: images/security-image-bootflow-uefi.png .. figure:: images/security-image-bootflow-uefi.png
:width: 900px :width: 900px
@ -163,7 +164,7 @@ to UEFI environment to authenticate and load Service VM kernel bootloader.
As long as the Service VM kernel starts, the Service VM 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 User VM, 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). Eventually, the OVMF is
responsible for verifying and launching the User VM kernel (or the responsible for verifying and launching the User VM kernel (or the
Android OS loader for an Android User VM). Android OS loader for an Android User VM).
@ -178,7 +179,7 @@ signature algorithm.
The well-known image signing algorithm uses cryptographic hashing and The well-known image signing algorithm uses cryptographic hashing and
public key cryptography with PKCS1.5 padding. public key cryptography with PKCS1.5 padding.
The 2018 minimal requirements for cryptographic strength currently are: The 2018 minimal requirements for cryptographic strength are:
#. SHA256 for image cryptographic hashing. #. SHA256 for image cryptographic hashing.
#. RSA2048 for cryptographic digital signature signing and verification. #. RSA2048 for cryptographic digital signature signing and verification.
@ -204,7 +205,8 @@ 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 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 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 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. ensure the platform's security and integrity over systems running UEFI-based
firmware.
UEFI Secure Boot is already supported by OVMF. UEFI Secure Boot is already supported by OVMF.
:numref:`security-secure-boot-uefi` shows a Secure Boot overview in UEFI. :numref:`security-secure-boot-uefi` shows a Secure Boot overview in UEFI.
@ -221,7 +223,7 @@ the UEFI Secure Boot Policy; the platform manufacturer or the platform owner enr
policy objects, which include the n-tuple of keys {PK, KEK, db,dbx} as step 1. policy objects, which include the n-tuple of keys {PK, KEK, db,dbx} as step 1.
During each successive boot, the UEFI secure boot implementation will assess the 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 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. or on a disk. If the images pass the policy, they are invoked.
UEFI Secure Boot implementations use these keys: UEFI Secure Boot implementations use these keys:
@ -236,19 +238,21 @@ And keys and certificates are in multiple formats:
#. `.crt` PEM format certificates for sbsign. #. `.crt` PEM format certificates for sbsign.
#. `.cer` DER format certificates for firmware. #. `.cer` DER format certificates for firmware.
In ACRN, User VM Secure Boot can be enabled by below steps. In ACRN, User VM Secure Boot can be enabled as follows:
#. Generate keys(PK/KEK/DB) with key generation tool such as Ubuntu KeyGeneration, #. Generate keys (PK/KEK/DB) with a key generation tool such as Ubuntu
`PK.der`, `KEK.der` and `db.der` will be enrolled in UEFI BIOS, `db.key` and `db.crt` KeyGeneration. `PK.der`, `KEK.der`, and `db.der` will be enrolled in UEFI
will be used to sign user VM bootloader/kernel. BIOS. `db.key` and `db.crt` will be used to sign the User VM
#. Create a virtual disk to hold `PK.der`, `KEK.der` and `db.der`, then launch the User VM with bootloader/kernel.
this virtual disk which contains the keys for enrollment. #. Create a virtual disk to hold `PK.der`, `KEK.der`, and `db.der`, then launch
#. Start the OVMF in writeback mode to ensure the keys are persistently stored in the OVMF image. the User VM with this virtual disk.
#. Enroll keys in OVMF GUI by following the Secure Boot configuration flow and enable #. Start the OVMF in writeback mode to ensure the keys are persistently stored
secure boot mode. in the OVMF image.
#. Enroll the keys in the OVMF GUI by following the Secure Boot configuration
flow and enable Secure Boot mode.
#. Perform writeback via reset in OVMF. #. Perform writeback via reset in OVMF.
#. Sign user VM images with `db.key` and `db.crt`. #. Sign the User VM images with `db.key` and `db.crt`.
#. Boot user VM with Secure Boot enabled. #. Boot the User VM with Secure Boot enabled.
.. _sos_hardening: .. _sos_hardening:
@ -259,7 +263,7 @@ In the ACRN project, the reference Service VM is based on Ubuntu.
Customers may choose to use different open source OSes or their own Customers may choose to use different open source OSes or their own
proprietary OS systems. To minimize the attack surfaces and achieve the proprietary OS systems. To minimize the attack surfaces and achieve the
goal of "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 Service VM system. security of the 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 User VM :numref:`security-bootflow-uefi` above, the integrity of the User VM
@ -274,16 +278,14 @@ following rules:
#. Verify that the Service VM 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 third-party software or components. install any unauthorized third-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
ensure integrity of the DM and vBIOS/vOSloaders), and kernel module ensure the integrity of the DM and vBIOS/vOSloaders), and kernel module
signing. signing.
#. Enable system level hardening such as MAC (Mandatory Access Control). #. Enable system level hardening such as MAC (Mandatory Access Control).
Detailed configurations and policies are out of scope for this document. Detailed configurations and policies are out of scope for this document.
For good references on OS system security hardening and enhancement, For good references on OS system security hardening and enhancement,
see `AGL security see `Android security <https://source.android.com/security/>`_.
<https://docs.automotivelinux.org/docs/en/master/architecture/reference/security/part-2/0_Abstract.html>`_
and `Android security <https://source.android.com/security/>`_.
Hypervisor Security Enhancement Hypervisor Security Enhancement
=============================== ===============================
@ -310,7 +312,7 @@ Background
The ACRN hypervisor has ultimate access control of all the platform The ACRN hypervisor has ultimate access control of all the platform
memory spaces (see :ref:`memmgt-hld`). Note that on the APL platform, memory spaces (see :ref:`memmgt-hld`). Note that on the APL platform,
`SGX <https://software.intel.com/sgx>`_ and `TME `SGX <https://www.intel.com/content/www/us/en/developer/tools/software-guard-extensions/overview.html>`_ and `TME
<https://software.intel.com/en-us/blogs/2017/12/22/intel-releases-new-technology-specification-for-memory-encryption>`_ <https://software.intel.com/en-us/blogs/2017/12/22/intel-releases-new-technology-specification-for-memory-encryption>`_
are not currently supported. are not currently supported.
@ -322,7 +324,7 @@ constrained in some manner to prevent the hypervisor from accessing
guest memory space either maliciously or accidentally. As a best guest memory space either maliciously or accidentally. As a best
security practice, any memory content from a guest VM memory space must security practice, any memory content from a guest VM memory space must
not be trusted by the hypervisor. In other words, there must be a trust 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: 500px :width: 500px
@ -343,7 +345,7 @@ The fundamental rules of restricting hypervisor memory access are:
#. By default, prohibit any access to all guest VM memory. This means #. By default, prohibit any access to all guest VM memory. This means
that when the hypervisor initially sets up its own MMU paging tables that when the hypervisor initially sets up its own MMU paging tables
(HVA->HPA mapping), it only grants permissions for hypervisor memory (HVA->HPA mapping), it only grants permissions for hypervisor memory
space (excluding guest VM memory) space (excluding guest VM memory).
#. Grant access permission for the hypervisor to read/write a specific guest #. Grant access permission for the hypervisor to read/write a specific guest
VM memory region on demand. The hypervisor must never grant execution VM memory region on demand. The hypervisor must never grant execution
permission for itself to fetch any code instructions from guest permission for itself to fetch any code instructions from guest
@ -436,7 +438,7 @@ three typical solutions exist:
3. **Use processor SMEP and SMAP capabilities.** 3. **Use processor SMEP and SMAP capabilities.**
This solution is a best solution because SMAP can prevent the This solution is the best solution because SMAP can prevent the
hypervisor from both reading and writing guest memory, and SMEP can hypervisor from both reading and writing guest memory, and SMEP can
prevent the hypervisor from fetching/executing code in guest memory. This prevent the hypervisor from fetching/executing code in guest memory. This
solution also has minimal performance impact; like the CR0.WP solution also has minimal performance impact; like the CR0.WP
@ -530,7 +532,7 @@ write) access to a data area in guest memory page.
The hypervisor can do these steps: The hypervisor can do these steps:
#. Execute STAC instruction to suppress SMAP protection; #. Execute STAC instruction to suppress SMAP protection.
#. Perform read/write access on guest DATA area. #. Perform read/write access on guest DATA area.
#. Execute CLAC instruction to restore SMAP protection. #. Execute CLAC instruction to restore SMAP protection.
@ -543,11 +545,11 @@ Rules to Access Guest Memory in the Hypervisor
In the ACRN hypervisor, functions ``stac()`` and ``clac()`` wrap In the ACRN hypervisor, functions ``stac()`` and ``clac()`` wrap
STAC and CLAC instructions respectively, and functions STAC and CLAC instructions respectively, and functions
``copy_to_gpa()``, and ``copy_from_gpa()`` can be used to copy ``copy_to_gpa()`` and ``copy_from_gpa()`` can be used to copy
an arbitrary amount of data to or from VM memory area. an arbitrary amount of data to or from the VM memory area.
Whenever the hypervisor needs to perform legitimate read/write access to Whenever the hypervisor needs to perform legitimate read/write access to
guest memory pages, one of functions above must be used. Otherwise, the guest memory pages, one of the functions above must be used. Otherwise, the
#PF will be triggered by the processor to prevent malware or #PF will be triggered by the processor to prevent malware or
unintended access from or to the guest memory pages. unintended access from or to the guest memory pages.
@ -562,7 +564,7 @@ Avoidance of Memory Information Leakage
--------------------------------------- ---------------------------------------
Protecting the hypervisor's memory is critical to the security of the Protecting the hypervisor's memory is critical to the security of the
entire platform. The hypervisor must prevent any memory content (e.g. entire platform. The hypervisor must prevent any memory content (e.g.,
stack or heap) from leaking to guest VMs. Some of the hypervisor memory stack or heap) from leaking to guest VMs. Some of the hypervisor memory
content may contain platform secrets such as SEEDs, which are used as content may contain platform secrets such as SEEDs, which are used as
the root key for its guest VMs. `Xen Advisories the root key for its guest VMs. `Xen Advisories
@ -570,10 +572,10 @@ the root key for its guest VMs. `Xen Advisories
memory leaks, ACRN developers can refer to this link to understand how memory leaks, ACRN developers can refer to this link to understand how
to avoid this in coding. 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.
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 Service VM 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 that could otherwise leave the re-allocated to another guest VM that could otherwise leave the
previous guest VM secrets in memory. previous guest VM secrets in memory.
@ -610,15 +612,15 @@ hypercall invocation in the hypervisor design:
inject ``#UD`` (if the VM cannot issue hypercalls at all) or return ``-EINVAL`` inject ``#UD`` (if the VM cannot issue hypercalls at all) or return ``-EINVAL``
(if the VM is allowed to issue hypercalls but not this specific one). (if the VM is allowed to issue hypercalls but not this specific one).
#. For those hypercalls that may result in data inconsistent intra hypervisor #. For those hypercalls that may result in data inconsistent intra hypervisor
when they are executed concurrently, such as ``hcall_create_vm()`` when they are executed concurrently, such as ``hcall_create_vm()`` or
``hcll_destroy_vm()`` etc. spinlock is used to ensure these hypercalls ``hcll_destroy_vm()``, spinlock is used to ensure these hypercalls
are processed in the hypervisor in a serializing way. are processed in the hypervisor in a serializing way.
In addition to the above rules, there are other regular checks in the In addition to the above rules, there are other regular checks in the
hypercall implementation to prevent hypercalls from being misused. For hypercall implementation to prevent hypercalls from being misused. For
example, all the parameters must be sanitized, unexpected hypervisor example, all the parameters must be sanitized, unexpected hypervisor
memory overwrite must be avoided, any hypervisor memory content/secrets memory overwrite must be avoided, any hypervisor memory content/secrets
must not be leaked to guest, and any memory/code injection must be must not be leaked to guests, and any memory/code injection must be
eliminated. eliminated.
I/O Emulation Handler I/O Emulation Handler
@ -629,7 +631,7 @@ emulate legacy I/O access behaviors.
Typically, the I/O instructions could be IN, INS/INSB/INSW/INSD, OUT, Typically, the I/O instructions could be IN, INS/INSB/INSW/INSD, OUT,
OUTS/OUTSB/OUTSW/OUTSD with arbitrary port (although not all the I/O OUTS/OUTSB/OUTSW/OUTSD with arbitrary port (although not all the I/O
ports are monitored by the hypervisor). As with other interface (e.g. ports are monitored by the hypervisor). As with other interfaces (e.g.,
hypercalls), the hypervisor performs security checks for all the I/O hypercalls), the hypervisor performs security checks for all the I/O
access parameters to make sure the emulation behaviors are correct. access parameters to make sure the emulation behaviors are correct.
@ -637,21 +639,21 @@ EPT Violation Handler
~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~
The Extended Page Table (EPT) is typically used by the hypervisor to The Extended Page Table (EPT) is typically used by the hypervisor to
monitor MMIO (or other types of ordinary memory access) operation from monitor MMIO (or other types of ordinary memory access) operation from a
guest VM. The hypervisor then emulates the MMIO instructions with design guest VM. The hypervisor then emulates the MMIO instructions with design
behaviors. behaviors.
As done for I/O emulation, this interface could also be manipulated by As done for I/O emulation, this interface could also be manipulated by
malware in guest VM to compromise system security. malware in a guest VM to compromise system security.
Other VMEXIT Handlers Other VMEXIT Handlers
~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~
There are some other VMEXIT handlers in the hypervisor that might take There are some other VMEXIT handlers in the hypervisor that might take
untrusted parameters and registers from guest VM, for example, MSR write untrusted parameters and registers from a guest VM, for example, MSR write
VMEXIT, APIC VMEXIT. VMEXIT, APIC VMEXIT.
Sanity checks are performed by the hypervisor to avoid security issue when Sanity checks are performed by the hypervisor to avoid security issues when
handling those special VMEXIT. handling those special VMEXIT.
Guest Instruction Emulation Guest Instruction Emulation
@ -665,7 +667,7 @@ have vulnerability bugs.
Security validation process and secure code review must ensure all the Security validation process and secure code review must ensure all the
instruction emulations behave as defined in the `IA32 SDM instruction emulations behave as defined in the `IA32 SDM
document <https://software.intel.com/en-us/articles/intel-sdm>`_. document <https://www.intel.com/content/www/us/en/developer/articles/technical/intel-sdm.html>`_.
Virtual Power Life Cycle Management Virtual Power Life Cycle Management
----------------------------------- -----------------------------------
@ -673,7 +675,7 @@ Virtual Power Life Cycle Management
In a virtualization environment, each User 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 User VM 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 Service must handle it correctly. then the hypervisor and DM processor in the Service VM 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.
@ -690,21 +692,21 @@ Later on, if there is a new User VM launch event occurring, DM may potentially a
the same memory content (or some overlaps) for this new User VM. the same memory content (or some overlaps) for this new User VM.
In the virtualization environment, a security goal is to ensure User VM In the virtualization environment, a security goal is to ensure User VM
isolation, not only for runtime memory isolation (e.g. w/ EPT), isolation, not only for runtime memory isolation (e.g., with 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 User VM is not Under this situation, if the memory content of a previous User VM is not
scrubbed by either DM or the hypervisor, then the new launched User VM could scrubbed by either DM or the hypervisor, then the new launched User VM could
access the previous User VM's secrets by scanning the memory regions access the previous User VM's secrets by scanning the memory regions
allocated for the new User VM. 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 the Device Model after the guest
VM is shut down. VM is shut down.
User VM Reboot User VM Reboot
~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~
The behaviors of **cold** boot of virtual User VM reboot are the same as that of The behaviors of **cold** boot of virtual User VM reboot are the same as those 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.
@ -718,13 +720,13 @@ 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
User VM. User VM.
But there is a new issue when secure world (TEE/Trusty) is considered, But there is a new issue when the secure world (TEE/Trusty) is considered,
because the memory content of secure world must not be dumped by a because the memory content of the secure world must not be dumped by a
non-secure world User VM. 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
must be disabled in a production release. User who wants to use this must be disabled in a production release. Users who want to use this
feature must possess the private signing key to re-sign the image after feature must possess the private signing key to re-sign the image after
enabling the configuration. enabling the configuration.
@ -733,17 +735,17 @@ enabling the configuration.
User VM Suspend/Resume User VM Suspend/Resume
~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~
There are no special design considerations for normal User VM without secure There are no special design considerations for normal User VMs 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 The secure world (Trusty/TEE) is a special case for virtual suspend. Unlike
the non-secure world of User VM, whose memory content can be read/written by the non-secure world of User VMs, whose memory content can be read/written by
Service VM, the memory content of secure world of User VM must not be visible to the Service VM, the memory content of the secure world of User VMs must not be
Service VM. This is designed for security with defense in depth. visible to the Service VM. This is designed for security with defense in depth.
During the entire process of User VM 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 the secure world is preserved too. The physical memory region of the
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 Service VM. even including the Service VM.
@ -760,7 +762,7 @@ can be used to search for known vulnerabilities.
Platform Root of Trust Key/Seed Derivation Platform Root of Trust Key/Seed Derivation
========================================== ==========================================
For security reason, each guest VM requires a root key, which is used to For security reasons, each guest VM requires a root key, which is used to
derive many other individual keys for different purposes, for example, derive many other individual keys for different purposes, for example,
secure storage encryption, keystore master key, and HMAC keys. secure storage encryption, keystore master key, and HMAC keys.
@ -783,11 +785,11 @@ multiple child SEEDs for multiple guest VMs. A guest VM must not be able
to know the SEEDs of any other guest VMs. to know the SEEDs of any other guest VMs.
The algorithm used in the hypervisor to derive keys is HKDF (HMAC-based The algorithm used in the hypervisor to derive keys is HKDF (HMAC-based
Extract-and-Expand Key Derivation Function, `RFC5869 Extract-and-Expand Key Derivation Function), `RFC5869
<https://tools.ietf.org/html/rfc5869>`_. The crypto library `mbedtls <https://tools.ietf.org/html/rfc5869>`_. The crypto library `mbedtls
<https://github.com/ARMmbed/mbedtls>`_ has been chosen for project ACRN. <https://github.com/ARMmbed/mbedtls>`_ has been chosen for project ACRN.
The parameters of HDKF derivation in the hypervisor are: The parameters of HKDF derivation in the hypervisor are:
#. VMInfo= vm-uuid (from the hypervisor configuration file) #. VMInfo= vm-uuid (from the hypervisor configuration file)
#. theHash=SHA-256 #. theHash=SHA-256
@ -809,9 +811,9 @@ 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 that serves virtualization-based Trusty TEE in an isolated world that 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 User VM as well. supported to provide security services for LaaG User VMs 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
@ -833,55 +835,55 @@ ACRN, the hypervisor creates an isolated secure world in a User VM.
In :numref:`security-secure-world`, the Trusty OS runs in the User VM secure In :numref:`security-secure-world`, the Trusty OS runs in the User VM secure
world and a Linux- or Android-based User VM 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 the non-secure
world's memory space. But non-secure world applications cannot have world's memory space. But non-secure world applications cannot have
access to secure world's memory. This is guaranteed by switching access to the secure world's memory. This is guaranteed by switching
different EPT tables when a world switch (WS) hypercall is invoked. The different EPT tables when a world switch (WS) hypercall is invoked. The
WS Hypercall can have parameters to specify the services cmd ID WS hypercall can have parameters to specify the services cmd ID
requested from non-secure world. requested from the 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
User VM structure per-User VM 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 world and secure world virtual logical processor states
respectively. respectively.
Whenever there is a WS hypercall from non-secure world, the hypervisor Whenever there is a WS hypercall from the non-secure world, the hypervisor
will copy non-secure world CPU contexts from Guest VMCS to non-secure will copy non-secure world CPU contexts from Guest VMCS to the non-secure
world-vCPU structure for saving contexts, and then copy secure-world CPU world-vCPU structure for saving contexts, and then copy secure-world CPU
contexts from secure-world-vCPU structure to Guest VMCS, then do contexts from the secure-world-vCPU structure to Guest VMCS, then do
VMRESUME to secure-world, and vice versa. The EPTP pointer will also be VMRESUME to the secure-world, and vice versa. The EPTP pointer will also be
updated accordingly in VMCS (not shown in updated accordingly in VMCS (not shown in
:numref:`security-secure-world`). :numref:`security-secure-world`).
Trusty (Secure World) Memory Mapping View Trusty (Secure World) Memory Mapping View
----------------------------------------- -----------------------------------------
As per the secure world design, Trusty can have read/write access to As per the secure world design, Trusty can have read/write access to the
non-secure world's memory, but non-secure world cannot access Trusty non-secure world's memory, but the non-secure world cannot access the Trusty
secure world's memory. In the hypervisor EPT configuration shown in secure world's memory. In the hypervisor EPT configuration shown in
:numref:`security-mem-view` below, the secure world EPTP page table :numref:`security-mem-view` below, the secure world EPTP page table
hierarchy must contain non-secure world address space, while Trusty hierarchy must contain the non-secure world address space, while the Trusty
world's address space must be removed from the non-secure world EPTP world's address space must be removed from the non-secure world EPTP
page table hierarchy. page table hierarchy.
Since there is no need to allow Trusty to execute memory from non-secure Since there is no need to allow Trusty to execute memory from the non-secure
world, for security reason, the execution (X) permission must be removed world, for security reasons, the execution (X) permission must be removed
for non-secure world address space in secure world EPT table for the non-secure world address space in the secure world EPT table
configuration. configuration.
To save page tables and share the mappings for non-secure world address To save page tables and share the mappings for the non-secure world address
space, the hypervisor relocates the Secure World's GPA to a very high space, the hypervisor relocates the secure world's GPA to a very high
position: 511G-512G. Hence, the PML4 for Trusty World is separated from position: 511G-512G. Hence, the PML4 for Trusty World is separated from the
non-secure World. PDPT/PD/PT for low memory (<511G) are shared in both non-secure world. PDPT/PD/PT for low memory (<511G) are shared in both the
Trusty World's EPT and non-secure World's EPT. PDPT/PD/PT for high Trusty World's EPT and non-secure world's EPT. PDPT/PD/PT for high
memory (>=511G) are valid for Trusty World's EPT only. memory (>=511G) are valid for the Trusty World's EPT only.
.. figure:: images/security-image8.png .. figure:: images/security-image8.png
:width: 900px :width: 900px
:align: center :align: center
:name: security-mem-view :name: security-mem-view
Memory View for User VM non-secure World and Secure World Memory View for User VM Non-secure World and Secure World
Trusty/Tee Hypercalls Trusty/Tee Hypercalls
--------------------- ---------------------
@ -894,7 +896,8 @@ Hypercall - Trusty Initialization
When a User VM is created by the DM in the Service VM, if this User VM When a User VM is created by the DM in the Service VM, if this User VM
supports a secure isolated world, then this hypercall will be invoked supports a secure isolated world, then this hypercall will be invoked
by OSLoader(it could be Android OS loader in :numref:`security-bootflow-sbl` and by OSLoader (it could be the Android OS loader in
:numref:`security-bootflow-sbl` and
:numref:`security-bootflow-uefi` above) to create or initialize the :numref:`security-bootflow-uefi` above) to create or initialize the
secure world (Trusty/TEE). secure world (Trusty/TEE).
@ -906,38 +909,38 @@ secure world (Trusty/TEE).
Secure World Start Flow Secure World Start Flow
In :numref:`security-start-flow` above, the OSLoader is responsible for In :numref:`security-start-flow` above, the OSLoader is responsible for
loading TEE/Trusty image to a dedicated and reserved memory region, and loading the TEE/Trusty image to a dedicated and reserved memory region, and
locating its entry point of TEE/Trusty executable, then executes a locating its entry point of TEE/Trusty executable, then executes a
hypercall that exits to the hypervisor handler. hypercall that 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 User VM non-secure mapping of the secure world from EPT paging tables of both the User VM
world and even Service VM. This is intended to disallow non-secure world and non-secure world and even the Service VM. This is intended to disallow the
Service VM to access the memory region of secure world for security reasons as non-secure world and Service VM to access the memory region of the secure world
previously mentioned. for security reasons as previously mentioned.
After all is set up by the hypervisor, including vCPU context After all is set up by the hypervisor, including vCPU context
initialization, the hypervisor eventually does vmresume (step 4 in initialization, the hypervisor eventually does vmresume (step 4 in
:numref:`security-start-flow` above) to the entry point of secure world :numref:`security-start-flow` above) to the entry point of the secure world
TEE/Trusty, then Trusty OS gets started in VMX non-root mode to TEE/Trusty, then the Trusty OS gets started in VMX non-root mode to
initialize itself, and loads its TAs (Trusted Applications) so that the initialize itself, and loads its TAs (Trusted Applications) so that the
security services can be ready right before non-secure OS gets started. security services can be ready right before the non-secure OS gets started.
After Trusty OS completes its initialization, a world switching (WS, see After the Trusty OS completes its initialization, a world switching (WS, see
subsection below) hypercall is invoked (step 5 in subsection below) hypercall is invoked (step 5 in
:numref:`security-start-flow` above), and then the hypervisor takes :numref:`security-start-flow` above), and then the hypervisor takes
control back, and resumes to the OSLoader (step 6 in control back, and resumes to the OSLoader (step 6 in
:numref:`security-start-flow` above) for continuing execution in guest :numref:`security-start-flow` above) to continue execution in the guest
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 User VM 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 User VM. between the non-secure world and secure world in a User VM.
.. figure:: images/security-image-world-switching-HC.png .. figure:: images/security-image-world-switching-HC.png
:width: 900px :width: 900px
@ -946,31 +949,31 @@ between non-secure world and secure world in a User VM.
World Switching Hypercall World Switching Hypercall
Whenever this hypercall is invoked in User VM, the hypervisor will Whenever this hypercall is invoked in a 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 the non-secure world, the hypervisor will then switch context to the secure
world. After secure world completes its security tasks (or an external world. After the 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 the non-secure world.
During entire world switching process, Service VM is not involved. This During the entire world switching process, the Service VM is not involved. This
hypervisor is only available to a User VM with duo-worlds supported. hypervisor is only available to a User VM with duo-worlds supported.
Secure Storage Virtualization Secure Storage Virtualization
----------------------------- -----------------------------
Secure storage is one of the security services provided by secure world Secure storage is one of the security services provided by the secure world
(TEE/Trusty). In the current implementation, secure storage is built up (TEE/Trusty). In the current implementation, secure storage is built up
on the RPMB partition in eMMC (or UFS, and NVMe storage). Details of how on the RPMB partition in eMMC (or UFS, and NVMe storage). Details of how
RPMB works are out of scope for this document. 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 platforms 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 User VMs. However, although future generation of flash storage guest User VMs. However, although future generations of flash storage
(e.g. UFS 3.0, and NVMe) supports multiple RPMB partitions, this (e.g., UFS 3.0 and NVMe) support 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 devices in APL SoC platforms.
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.
@ -986,15 +989,15 @@ 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 Service VM 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 DM module in Service VM and its corresponding User VM secure software. between the DM module in the Service VM and its corresponding User VM secure software.
Each User VM (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 User VM randomly when the DM process starts, and is securely distributed to the 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.
The details of physical RPMB key (rKey) provision are out of scope. In The details of physical RPMB key (rKey) provisioning are out of scope. In
the current project ACRN on APL platform, the rKey is provisioned by the current project ACRN on APL platforms, the rKey is provisioned by
BIOS (SBL) right after production device ends its manufacturing process. BIOS (SBL) right after a 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
@ -1004,20 +1007,20 @@ 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:
#. User VM 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 User VM non-secure world. with its signature over the RPMB FE driver in the User VM non-secure world.
#. After DM process in Service VM receives the data and signature, then the #. After the DM process in the Service VM receives the data and signature, the
vRPMB module in DM verifies them with the shared secret (vRPMB vRPMB module in the 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 User VMs share a single physical RPMB (remembering that the multiple User VMs share a single physical RPMB
partition), and forwards the data to the Service VM 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 the
physical eMMC device. physical eMMC device.
#. If the verification is successful in eMMC RPMB controller, then the #. If the verification is successful in the eMMC RPMB controller, the
data will be written into storage device. data will be written into the storage device.
This workflow of authenticated data read is very similar to this flow This workflow of authenticated data read is very similar to this flow
above, but in reverse order. above, but in reverse order.
@ -1027,10 +1030,11 @@ 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 Service VM system can filter #. Typically, the vRPMB module in the DM process of the Service VM system can
data access, preventing one User VM to perform read/write access to the filter
data access, preventing one User VM from performing read/write access to the
data from another User 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 User VM may also change/overwrite the secure data of compromised, one User VM may also change/overwrite the secure data of the
other User VM. other User VM.
Keeping the Service VM 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
@ -1042,7 +1046,7 @@ SEED Derivation
Refer to the previous section: :ref:`platform_root_of_trust`. Refer to the previous section: :ref:`platform_root_of_trust`.
Trusty/Tee S3 (Suspend to RAM) Trusty/TEE S3 (Suspend to RAM)
------------------------------ ------------------------------
Secure world S3 design is not yet finalized. However, there is a Secure world S3 design is not yet finalized. However, there is a
@ -1052,13 +1056,13 @@ Two new hypercalls are introduced: one saves the secure world processor
contexts/states; the other one restores the secure world processor contexts/states; the other one restores the secure world processor
contexts/states. contexts/states.
The save state hypercall is called only in secure world (Trusty/TEE OS) The save state hypercall is called only in the 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 User VM is ready to the restore state hypercall is called only by vBIOS when the User VM is ready to
resume from suspend state. resume from suspend state.
For security design consideration of handling secure world S3, For security design considerations of handling secure world S3,
read the previous section: :ref:`uos_suspend_resume`. read the previous section: :ref:`uos_suspend_resume`.
Platform Security Feature Virtualization and Enablement Platform Security Feature Virtualization and Enablement
@ -1071,32 +1075,32 @@ VMs the ability to use those features.
TPM 2.0 Virtualization (vTPM) TPM 2.0 Virtualization (vTPM)
----------------------------- -----------------------------
On APL platform, Intel |reg| PTT (Platform Trust Technology) implements TPM On APL platforms, Intel |reg| PTT (Platform Trust Technology) implements TPM
functionalities based on TCG TPM 2.0 industry standard specification. functionalities based on the TCG TPM 2.0 industry standard specification.
PTT exposes TPM hardware interface as CRB (Command Response Buffer) PTT exposes the TPM hardware interface as CRB (Command Response Buffer)
defined in the TCG TPM 2.0 spec. defined in the TCG TPM 2.0 spec.
However, in project ACRN, TPM virtualization doesn't assume it is based However, in project ACRN, TPM virtualization doesn't assume it is based
on PTT or discrete TPM; both TPMs (2.0) are supported by design. on PTT or discrete TPM; both TPMs (2.0) are supported by design.
Customers are free to use either PTT or discrete TPM (but not at the same Customers are free to use either PTT or discrete TPM (but not at the same
time). PTT, however, is a built-in TPM2.0 implementation in Intel APL time). PTT, however, is a built-in TPM 2.0 implementation in APL
platform, and does not require extra BOM cost (unlike discrete TPM). platforms 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 MEI/HECI virtualization. however, this TPM 2.0 feature does not rely on MEI/HECI virtualization.
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.
The goal of virtualization is to provide TPM functionality to each guest The goal of virtualization is to provide TPM functionality to each guest
VM, such as: 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 User VM 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)
------------------------- -------------------------

Binary file not shown.

Before

Width:  |  Height:  |  Size: 80 KiB

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 47 KiB

After

Width:  |  Height:  |  Size: 55 KiB