[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] TrenchBoot Anti Evil Maid for Qubes OS
Dear TrenchBoot Community,As you may know, 3mdeb has been doing a Proof of Concept (PoC) integration of TrenchBoot into Qubes OS to provide Anti Evil Maid (AEM) service in place of Trusted Boot (tboot), the former solution available for Intel TXT launch. Our (3mdeb's) initial plan and motivation has been explained on Dasharo documentation page[1]. We (3mdeb) would like to continue the work to extend the TrenchBoot support in Qubes OS further. It will include AMD and Intel platforms with TPM 2.0 and both legacy and UEFI boot mode. A lot of time has passed since the initial plan has been devised and the upstream work of implementing Secure Launch support for Linux kernel[2] has progressed as well. Because of that the initial plan for TrenchBoot AEM support for Qubes OS has to be changed. Below I have briefly explained what is needed to achieve the goal using the most recent protocol version designed for Linux kernel. Project Plan ------------The PoC phase for Intel platforms in legacy boot mode is approaching its finish line and results shall be published soon. Most of the work already done will still be applicable in the new TrenchBoot boot protocol for both UEFI and legacy BIOS when it comes to Xen hypervisor support for DRTM post-launch. The changes introduced in the upstream patches for TrenchBoot are mainly affecting the DRTM pre-launch phase which will have to be rebased to most recent version. The plan is divided into multiple phases, each achieving a different functionality of the Qubes OS Anti Evil Maid with TrenchBoot: 1. TPM 2.0 support in Qubes OS AEM (Intel hardware): - Implement support for TPM 2.0 module in Xen - Implement support for TPM 2.0 event log in Xen The two above are needed to handle the measurements and event log created and returned to kernel (Xen) by specific DRTM technology implemented in the silicon. Xen also needs to measured the Dom0 kernel and initrd prior to Dom0 construction to ensure the principle load-measure-execute. - Implement parallel CPU cores bring-up for DRTM launch Currently the CPU cores are being woken up in parallel, but later they are hacked to be waiting in a queue. If any interrupt would come at that time, it could be a serious danger. It has to be fixed as soon as possible, as required by Intel TXT specification. - Integrate TPM 2.0 software stack into Qubes OS Dom0 - Extend the AEM scripts to detect TPM version on the platform - Extend the AEM scripts to use appropriate software stack for TPM 2.0 Currently, only TPM 1.2 is supported in Qubes OS AEM service code. The 3 items above will ensure the necessary software for TPM 2.0 is available and AEM scripts executed early from the initrd can detect which TPM family is present on the platform and use appropriate software stack and functions. TPM 1.2 and TPM 2.0 software stacks are not compatible so the scripts themselves must use proper API for given TPM and its respective software stack. - Update Qubes OS AEM documentation This phase is merely an expansion of the initial PoC to support TPM 2.0 in Qubes OS AEM with TrenchBoot. Next phases will focus on enabling UEFI boot mode support and aligning with the most recent TrenchBoot Secure Launch protocol. - Test the solution on Intel hardware with TPM 1.2 and 2.0 using legacy boot mode 2. Update to the newest TrenchBoot boot protocol - Code rebase onto the most recent work implementing Secure Launch protocol being upstreamed to Linux and GRUB Modifications introduced in GRUB and Xen for the AEM project will have to be aligned with the TrenchBoot code being upstreamed to GRUB and Linux kernel. The main idea is to have a generic Secure Launch module being exposed by firmware/bootloader to target operating system kernel which can be called by the kernel to perform Secure Launch using DRTM. The advantage of such approach is lesser maintenance burden in multiple projects providing kernels for operating systems (such as Xen and Linux kernel), standardized boot protocol and centralized code in one place. Unfortunately, there is no documentation explaining the details of the most recent protocol neither in TrenchBoot documentation nor was it announced on TrenchBoot mailing list. Given that, our proposal may not be exactly correct because of assumptions made by 3mdeb about the details of the most recent boot protocol. - Test the solution on Intel hardware with TPM 1.2 and TPM 2.0 using legacy boot mode 3. AMD support for Qubes OS AEM with TrenchBoot - Clean up the Secure Kernel Loader (formerly LandingZone) package support for Qubes OS An initial integration of the Secure Kernel Loader (SKL, formerly LandingZone) for Qubes OS[3] has been made by 3mdeb as a Proof of Concept for running DRTM in Qubes OS on AMD platforms[4]. This code, however, is very outdated, to the extent where the project name happened to change in the mean time. A lot of changes and improvements have been made to SKL and Qubes OS should use the most recent version. The work here will include a clean up of the existing Qubes OS package integration and update to the most recent version of SKL. - TrenchBoot Secure Kernel Loader (SKL) improvements for AMD server CPUs with multiple nodes As SKL was mostly validated to work on consumer devices, it does not take into account AMD CPUs with multiple nodes. Each node can be treated as a separate processor with a full set of CPU registers. This implies additional action to be made by SKL, that is handling the DMA protection for SKL on each node. Currently the DMA protection is lifted when exiting SKL only on a single node system. The work includes extending the SKL code to handle multi node systems like servers. - Clean up the AMD DRTM (SKINIT) support in TrenchBoot GRUB2 The TrenchBoot code in GRUB supporting AMD is very old as well and is definitely not aligned with current work. Moreover it needs a cleanup of obsolete code. - Test the solution on AMD and Intel hardware with TPM 2.0 and TPM 1.2 using legacy boot mode 4. Xen UEFI boot mode with DRTM sign TrenchBoot: - TrenchBoot support for UEFI boot mode for AMD in GRUB During the PoC work on booting Qubes OS with DRTM using TrenchBoot, UEFI boot mode did not work. UEFI also has not been tested extensively so a misimplementation in some places is possible. It has to be analyzed and fixed. - TrenchBoot support for UEFI boot mode in Xen for Intel - TrenchBoot support for UEFI boot mode in Xen for AMD The scope of the work for the two above items will include implementing support for the most recent TrenchBoot boot protocol in the Xen hypervisor. Xen must be able to find the Secure Launch module, feed it with necessary data and call it to perform DRTM launch. - Test the solution on AMD and Intel hardware with TPM 2.0 and TPM 1.2 using legacy and UEFI boot mode Future improvements ------------------- Initially there was S3 support in the scope of the work, however after consulting other TrenchBoot Developers (thank you Daniel P. Smith and Andrew Cooper) and a longer consideration we (3mdeb) came to the following conclusions: 1. Performing DRTM launch on S3 resume seems to be out of scope for current AEM implementation (AEM does not play any role in Qubes OS resume process). AEM takes advantage of DRTM only during normal boot. 2. DRTM launch of Xen hypervisor on S3 resume is a complex topic which needs thorough debate on how to approach that and how it should be implemented. it may be even eligible for a separate project. 3. DRTM on S3 resume will not be able to do the same measurements as on normal boot. The Xen and Dom0 images in memory will be different than on normal boot. What one would get from DRTM launch during S3 resume is a footprint of current state of the hypervisor. It has to be taken in appropriate place and time to make the measurements as consistent and meaningful as possible. Moreover, measuring the footprint of runtime components is more suitable for attestation purposes than Anti Evil Maid use case.Despite of the above conclusions I highly encourage to debate on the following: - if and how Qubes OS AEM could use the S3 resume DRTM measurements of Xen (and Dom0) - what parts of Xen hypervisor (and possibly Dom0) should be measured during S3 resume with DRTM - when the measurement of Xen hypervisor should be made during S3 resume with DRTM - if there are any outstanding issues or blockers to implement DRTM launch of Xen hypervisor during S3 resume One idea to perform a DRTM during S3 resume would be as follows:Cold boot: GRUB -> DRTM -> Xen (init up to Dom0 creation) -> DRTM -> Xen -> Dom0 S3 resume: Xen -> DRTM -> Xen (!) -> Dom0 resume (!) - here we have to teach Xen how to return to previous state without restarting Dom0Such approach would result in identical measurements after coldboot and S3 resume of Xen hypervisor. Summary ------- Please keep in mind that 3mdeb has only a vague understanding of the newest TrenchBoot boot protocol and because of that the details explained in this message may not be accurate. It would be appreciated to have a draft of the specification or documentation explaining the details of the current approach of performing Secure Launch using TrenchBoot. We kindly ask for feedback and comments from the community with constructive critique of our plan. Best regards, 3mdeb team [1] https://docs.dasharo.com/projects/trenchboot-aem/ [2] https://lkml.org/lkml/2022/2/18/699 [3] https://github.com/3mdeb/qubes-landing-zone/tree/lz_support [4] https://youtu.be/rM0vRi6qABE?t=1461 Attachment:
OpenPGP_0x6B5BA214D21FCEB2.asc Attachment:
OpenPGP_signature
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |