mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
While skimming through the manual pages, I spotted a few typos. Signed-off-by: Bernhard Kaindl <bernhard.kaindl@cloud.com> Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
402 lines
13 KiB
INI
402 lines
13 KiB
INI
=head1 NAME
|
|
|
|
xen-vtpmgr - Xen virtual TPM stubdomain
|
|
|
|
=head1 Authors
|
|
|
|
=over 4
|
|
|
|
=item Daniel De Graaf <dgdegra@tycho.nsa.gov>
|
|
|
|
=item Quan Xu <quan.xu@intel.com>
|
|
|
|
=back
|
|
|
|
This document describes the operation and command line interface of
|
|
vtpmmgr-stubdom. See L<xen-vtpm(7)> for details on the vTPM subsystem as a
|
|
whole.
|
|
|
|
=head1 Overview
|
|
|
|
The TPM Manager has three primary functions:
|
|
|
|
=over 4
|
|
|
|
=item 1. Securely store the encryption keys for vTPMs
|
|
|
|
=item 2. Provide a single controlled path of access to the physical TPM
|
|
|
|
=item 3. Provide evidence (via TPM Quotes) of the current configuration
|
|
|
|
=back
|
|
|
|
When combined with a platform that provides a trusted method for creating
|
|
domains, the TPM Manager provides assurance that the private keys in a vTPM are
|
|
only available in specific trusted configurations.
|
|
|
|
The manager accepts commands from the vtpm-stubdom domains via the mini-os TPM
|
|
backend driver. The vTPM manager communicates directly with hardware TPM using
|
|
the mini-os tpm_tis driver.
|
|
|
|
=head1 Boot Configurations and TPM Groups
|
|
|
|
The TPM Manager's data is secured by using the physical TPM's seal operation,
|
|
which allows data to be bound to specific PCRs. These PCRs are populated in the
|
|
physical TPM during the boot process, either by the firmware/BIOS or by a
|
|
dynamic launch environment such as TBOOT. In order to provide assurance of the
|
|
system's security, the PCRs used to seal the TPM manager's data must contain
|
|
measurements for domains used to bootstrap the TPM Manager and vTPMs.
|
|
|
|
Because these measurements are based on hashes, they will change any time that
|
|
any component of the system is upgraded. Since it is not possible to construct a
|
|
list of all possible future good measurements, the job of approving
|
|
configurations is delegated to a third party, referred to here as the system
|
|
approval agent (SAA). The SAA is identified by its public (RSA) signature key,
|
|
which is used to sign lists of valid configurations. A single TPM manager can
|
|
support multiple SAAs via the use of vTPM groups. Each group is associated with
|
|
a single SAA; this allows the creation of a multi-tenant environment where
|
|
tenants may not all choose to trust the same SAA.
|
|
|
|
Each vTPM is bound to a vTPM group at the time of its creation. Each vTPM group
|
|
has its own AIK in the physical TPM for quotes of the hardware TPM state; when
|
|
used with a conforming Privacy CA, this allows each group on the system to form
|
|
the basis of a distinct identity.
|
|
|
|
=head1 Initial Provisioning
|
|
|
|
When the TPM Manager first boots up, it will create a stub vTPM group along with
|
|
entries for any vTPMs that communicate with it. This stub group must be
|
|
provisioned with an SAA and a boot configuration in order to survive a reboot.
|
|
|
|
When a vTPM is connected to the TPM Manager using a UUID that is not recognized,
|
|
a slot will be created in group 0 for it. In the future, this auto-creation may
|
|
be restricted to specific UUIDs (such as the all-zero UUID) to enforce the use
|
|
of the TPM manager as the generator of the UUID. The first vTPM to be connected
|
|
is given administrative privileges for the TPM Manager, and should be attached
|
|
to dom0 or a control domain in order to send provisioning commands.
|
|
|
|
Provisioning a vTPM group for the system requires the public key of the SAA and
|
|
privacy CA data used to certify the AIK (see the TPM spec for details). Once the
|
|
group is created, a signed list of boot measurements can be installed. The
|
|
initial group controls the ability to boot the system as a whole, and cannot be
|
|
deleted once provisioned.
|
|
|
|
=head1 Command Line Arguments
|
|
|
|
Command line arguments are passed to the domain via the 'extra' parameter in the
|
|
VM config file. Each parameter is separated by white space. For example:
|
|
|
|
extra="foo=bar baz"
|
|
|
|
Valid arguments:
|
|
|
|
=over 4
|
|
|
|
=item srk_handle=<HANDLE>
|
|
|
|
Specify a srk_handle for TPM 2.0. TPM 2.0 uses a key hierarchy, and
|
|
this allow specifying the parent handle for vtpmmgr to create its own
|
|
key under. Using this option bypasses vtpmmgr trying to take ownership
|
|
of the TPM.
|
|
|
|
=item owner_auth=<AUTHSPEC>
|
|
|
|
=item srk_auth=<AUTHSPEC>
|
|
|
|
Set the owner and SRK authdata for the TPM. If not specified, the
|
|
default is 160 zero bits (the well-known auth value). Valid values of
|
|
<AUTHSPEC> are:
|
|
|
|
=over 4
|
|
|
|
=item well-known
|
|
|
|
Use the well known auth (default)
|
|
|
|
=item hash:<HASH>
|
|
|
|
Use the given 40-character ASCII hex string
|
|
|
|
=item text:<STR>
|
|
|
|
Use sha1 hash of <STR>.
|
|
|
|
=back
|
|
|
|
=item tpmdriver=<DRIVER>
|
|
|
|
Choose the driver used for communication with the hardware TPM. Values
|
|
other than tpm_tis should only be used for testing.
|
|
|
|
The possible values of <DRIVER> are:
|
|
|
|
=over 4
|
|
|
|
=item tpm_tis
|
|
|
|
Direct communication with a hardware TPM 1.2. The
|
|
domain must have access to TPM IO memory. (default)
|
|
|
|
=item tpmfront
|
|
|
|
Use the Xen tpmfront interface to talk to another
|
|
domain which provides access to the TPM.
|
|
|
|
=back
|
|
|
|
=back
|
|
|
|
The following options only apply to the tpm_tis driver:
|
|
|
|
=over 4
|
|
|
|
=item tpmiomem=<ADDR>
|
|
|
|
The base address of the hardware memory pages of the TPM.
|
|
The default is 0xfed40000, as defined by the TCG's PC Client spec.
|
|
|
|
=item tpmirq=<IRQ>
|
|
|
|
The irq of the hardware TPM if using interrupts. A value of
|
|
"probe" can be set to probe for the irq. A value of 0 disables
|
|
interrupts and uses polling (default 0).
|
|
|
|
=item tpmlocality=<LOC>
|
|
|
|
Attempt to use locality <LOC> of the hardware TPM.
|
|
For full functionality of the TPM Manager, this should be set to "2".
|
|
|
|
=back
|
|
|
|
=head1 Platform Security Assumptions
|
|
|
|
While the TPM Manager has the ability to check the hash of the vTPM requesting a
|
|
key, there is currently no trusted method to inform the TPM Manager of the hash
|
|
of each new domain. Because of this, the TPM Manager trusts the UUID key in
|
|
Xenstore to identify a vTPM in a trusted manner. The XSM policy may be used to
|
|
strengthen this assumption if the creation of vTPM-labeled domains is more
|
|
constrained (for example, only permitted to a domain builder service): the only
|
|
grants mapped by the TPM Manager should belong to vTPM domains, so restricting
|
|
the ability to map other domain's granted pages will prevent other domains from
|
|
directly requesting keys from the TPM Manager. The TPM Manager uses the hash of
|
|
the XSM label of the attached vTPM as the kernel hash, so vTPMs with distinct
|
|
labels may be further partitioned using vTPM groups.
|
|
|
|
A domain with direct access to the hardware TPM will be able to decrypt the TPM
|
|
Manager's disk image if the haredware TPM's PCR values are in a permitted
|
|
configuration. To protect the TPM Manager's data, the list of permitted
|
|
configurations should be chosen to include PCRs that measure the hypervisor,
|
|
domain 0, the TPM Manager, and other critical configuration such as the XSM
|
|
policy. If the TPM Manager is configured to use locality 2 as recommended, it
|
|
is safe to permit the hardware domain to access locality 0 (the default in
|
|
Linux), although concurrent use of the TPM should be avoided as it can result in
|
|
unexpected busy errors from the TPM driver. The ability to access locality 2 of
|
|
the TPM should be enforced using IO memory labeling in the XSM policy; the
|
|
physical address 0xFED42xxx is always locality 2 for TPMs using the TIS driver.
|
|
|
|
=head1 Appendix: unsecured migration process for vtpmmgr domain upgrade
|
|
|
|
There is no direct upgrade supported from previous versions of the vtpmmgr
|
|
domain due to changes in the on-disk format and the method used to seal data.
|
|
If a vTPM domain supports migration, this feature should be used to migrate the
|
|
vTPM's data; however, the vTPM packaged with Xen does not yet support migration.
|
|
|
|
If adding migration support to the vTPM is not desired, a simpler migration
|
|
domain usable only for local migration can be constructed. The migration process
|
|
would look like the following:
|
|
|
|
=over 4
|
|
|
|
=item 1. Start the old vtpmmgr
|
|
|
|
=item 2. Start the vTPM migration domain
|
|
|
|
=item 3. Attach the vTPM migration domain's vtpm/0 device to the old vtpmmgr
|
|
|
|
=item 4. Migration domain executes vtpmmgr_LoadHashKey on vtpm/0
|
|
|
|
=item 5. Start the new vtpmmgr, possibly shutting down the old one first
|
|
|
|
=item 6. Attach the vTPM migration domain's vtpm/1 device to the new vtpmmgr
|
|
|
|
=item 7. Migration domain executes vtpmmgr_SaveHashKey on vtpm/1
|
|
|
|
=back
|
|
|
|
This requires the migration domain to be added to the list of valid vTPM kernel
|
|
hashes. In the current version of the vtpmmgr domain, this is the hash of the
|
|
XSM label, not the kernel.
|
|
|
|
=head1 Appendix B: vtpmmgr on TPM 2.0
|
|
|
|
=head2 WARNING: Incomplete - cannot persist data
|
|
|
|
TPM 2.0 support for vTPM manager is incomplete. There is no support for
|
|
persisting an encryption key, so vTPM manager regenerates primary and secondary
|
|
key handles each boot.
|
|
|
|
Also, the vTPM manger group command implementation hardcodes TPM 1.2 commands.
|
|
This means running manage-vtpmmgr.pl fails when the TPM 2.0 hardware rejects
|
|
the TPM 1.2 commands. vTPM manager with TPM 2.0 cannot create groups and
|
|
therefore cannot persist vTPM contents.
|
|
|
|
=head2 Manager disk image setup:
|
|
|
|
The vTPM Manager requires a disk image to store its encrypted data. The image
|
|
does not require a filesystem and can live anywhere on the host disk. The image
|
|
is not large; the Xen 4.5 vtpmmgr is limited to using the first 2MB of the image
|
|
but can support more than 20,000 vTPMs.
|
|
|
|
dd if=/dev/zero of=/home/vtpm2/vmgr bs=16M count=1
|
|
|
|
=head2 Manager config file:
|
|
|
|
The vTPM Manager domain (vtpmmgr-stubdom) must be started like any other Xen
|
|
virtual machine and requires a config file. The manager requires a disk image
|
|
for storage and permission to access the hardware memory pages for the TPM. The
|
|
disk must be presented as "hda", and the TPM memory pages are passed using the
|
|
iomem configuration parameter. The TPM TIS uses 5 pages of IO memory (one per
|
|
locality) that start at physical address 0xfed40000. By default, the TPM manager
|
|
uses locality 0 (so only the page at 0xfed40 is needed).
|
|
|
|
Add:
|
|
|
|
extra="tpm2=1"
|
|
|
|
extra option to launch vtpmmgr-stubdom domain on TPM 2.0, and ignore it on TPM
|
|
1.x. for example:
|
|
|
|
kernel="/usr/lib/xen/boot/vtpmmgr-stubdom.gz"
|
|
memory=128
|
|
disk=["file:/home/vtpm2/vmgr,hda,w"]
|
|
name="vtpmmgr"
|
|
iomem=["fed40,5"]
|
|
extra="tpm2=1"
|
|
|
|
|
|
=head2 Key Hierarchy
|
|
|
|
+------------------+
|
|
| vTPM's secrets | ...
|
|
+------------------+
|
|
| ^
|
|
| |(Bind / Unbind)
|
|
- - - - - -v |- - - - - - - - TPM 2.0
|
|
+------------------+
|
|
| SK +
|
|
+------------------+
|
|
| ^
|
|
v |
|
|
+------------------+
|
|
| SRK |
|
|
+------------------+
|
|
| ^
|
|
v |
|
|
+------------------+
|
|
| TPM 2.0 Storage |
|
|
| Primary Seed |
|
|
+------------------+
|
|
|
|
Now the secrets for the vTPMs are only being bound to the presence of the physical
|
|
TPM 2.0. Since using PCRs to seal the data can be an important security feature
|
|
that users of the vtpmmgr rely on. I will replace TPM2_Bind/TPM2_Unbind with
|
|
TPM2_Seal/TPM2_Unseal to provide as much security as it did for TPM 1.2 in later
|
|
series of patch.
|
|
|
|
=head2 Design Overview
|
|
|
|
The architecture of vTPM subsystem on TPM 2.0 is described below:
|
|
|
|
+------------------+
|
|
| Linux DomU | ...
|
|
| | ^ |
|
|
| v | |
|
|
| xen-tpmfront |
|
|
+------------------+
|
|
| ^
|
|
v |
|
|
+------------------+
|
|
| mini-os/tpmback |
|
|
| | ^ |
|
|
| v | |
|
|
| vtpm-stubdom | ...
|
|
| | ^ |
|
|
| v | |
|
|
| mini-os/tpmfront |
|
|
+------------------+
|
|
| ^
|
|
v |
|
|
+------------------+
|
|
| mini-os/tpmback |
|
|
| | ^ |
|
|
| v | |
|
|
| vtpmmgr-stubdom |
|
|
| | ^ |
|
|
| v | |
|
|
| mini-os/tpm2_tis |
|
|
+------------------+
|
|
| ^
|
|
v |
|
|
+------------------+
|
|
| Hardware TPM 2.0 |
|
|
+------------------+
|
|
|
|
=over 4
|
|
|
|
=item Linux DomU
|
|
|
|
The Linux based guest that wants to use a vTPM. There many be
|
|
more than one of these.
|
|
|
|
=item xen-tpmfront.ko
|
|
|
|
Linux kernel virtual TPM frontend driver. This driver
|
|
provides vTPM access to a para-virtualized Linux based DomU.
|
|
|
|
=item mini-os/tpmback
|
|
|
|
Mini-os TPM backend driver. The Linux frontend driver
|
|
connects to this backend driver to facilitate
|
|
communications between the Linux DomU and its vTPM. This
|
|
driver is also used by vtpmmgr-stubdom to communicate with
|
|
vtpm-stubdom.
|
|
|
|
=item vtpm-stubdom
|
|
|
|
A mini-os stub domain that implements a vTPM. There is a
|
|
one to one mapping between running vtpm-stubdom instances and
|
|
logical vtpms on the system. The vTPM Platform Configuration
|
|
Registers (PCRs) are all initialized to zero.
|
|
|
|
=item mini-os/tpmfront
|
|
|
|
Mini-os TPM frontend driver. The vTPM mini-os domain
|
|
vtpm-stubdom uses this driver to communicate with
|
|
vtpmmgr-stubdom. This driver could also be used separately to
|
|
implement a mini-os domain that wishes to use a vTPM of
|
|
its own.
|
|
|
|
=item vtpmmgr-stubdom
|
|
|
|
A mini-os domain that implements the vTPM manager.
|
|
There is only one vTPM manager and it should be running during
|
|
the entire lifetime of the machine. This domain regulates
|
|
access to the physical TPM on the system and secures the
|
|
persistent state of each vTPM.
|
|
|
|
=item mini-os/tpm2_tis
|
|
|
|
Mini-os TPM version 2.0 TPM Interface Specification (TIS)
|
|
driver. This driver used by vtpmmgr-stubdom to talk directly
|
|
to the hardware TPM 2.0. Communication is facilitated by mapping
|
|
hardware memory pages into vtpmmgr-stubdom.
|
|
|
|
=item Hardware TPM 2.0
|
|
|
|
The physical TPM 2.0 that is soldered onto the motherboard.
|
|
|
|
=back
|
|
|
|
Noted:
|
|
functionality for a virtual guest operating system (a DomU) is still TPM 1.2.
|