Skip to content
This repository has been archived by the owner on Sep 25, 2024. It is now read-only.

[Hardening aspect] Spectre v1 analysis/mitigations for CoCo guest attack surface #146

Open
ereshetova opened this issue Mar 13, 2024 · 0 comments

Comments

@ereshetova
Copy link
Contributor

Problem

Bounds Check Bypass is a class of transient execution attack (also known as Spectre V1), which typically requires an attacker who can control an offset used during a speculative read or write. For the classical attack surface between the userspace and the OS kernel (ring 3 <-> ring 0), an adversary has several ways to provide the necessary controlled inputs to the OS kernel, i.e., via system call parameters, routines to copy data between the userspace and the OS kernel, and others.

While a TDX guest VM is no different from a legacy guest VM in terms of protecting this userspace <-> OS kernel boundary, an adversary who controls the (untrusted) host/VMM can provide inputs to a TDX guest kernel via a wider range of interfaces. Examples of such interfaces include shared memory as well as PIO, MMIO, pci config space reads. A Linux kernel running inside a TDX guest should take additional measures to mitigate any potential Spectre v1 gadgets involving such interfaces.

Solution

To facilitate the task of identifying potential Spectre v1 gadgets in the new attack surface between an untrusted host/VMM <-> TDX guest Linux kernel, the Smatch static analyzer can be used. It has an existing check_spectre.c pattern that has been enhanced to find potential Spectre v1 gadgets on the data that can be influenced by an untrusted host/VMM using interfaces, such as MSR, CPUID, PortIO, MMIO and PCI config space read functions, as well as virtio-based shared memory read functions.
The task would be to go over the list of potential problematic places reported by the smatch pattern to determine if mitigation should be merged to the source code.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

1 participant