GPU TEE attestation: verify GPU confidential mode and bind it to the CVM (currently unverified)
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 5/5
- Tiempo estimado
- Más de una semana
- Aptitud para principiantes
- 25/100
- Tipo de issue
- Nueva funcionalidad
- Claridad
- Bastante claro
- Estado de actividad
- Tranquilo
- Área
- infrastructure, security
Línea de trabajo
Comienza con docs/gpu-attestation-design.md y luego inspecciona verifier/src/verification.rs, vmm/src/app/qemu.rs:840, dstack-attest/src/attestation.rs:176 y guest-agent/src/rpc_service.rs:327. Traza el límite existente de los eventos medidos y los servicios de arranque de la GPU antes de elegir una línea de trabajo. Para darlo por terminado, se requiere una verificación y vinculación de la GPU fail-closed, con los cambios en verifier, KMS, RPC, service-gating y la documentación cubiertos cuando corresponda.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Problem
dstack attaches NVIDIA GPUs to CVMs but never verifies them. The CPU-side stack has no GPU/NRAS logic, and the guest OS flips the GPU to "ready" unconditionally at boot, before the workload runs. Consequences:
- A non-confidential GPU (CC off in host BIOS, or a normal GPU) is exposed plaintext to the workload with no error that stops it — no attacker required.
- Even a genuine CC GPU is not bound to the CVM: nothing lets a relying party (or the KMS) trust that a specific attested CVM is backed by a genuine GPU in confidential mode.
"Dual attestation" in docs/security/security-model.md is a documented expectation, not something enforced anywhere.
Full design write-up: docs/gpu-attestation-design.md (branch gpu-tee-nras-verification).
Current gaps (evidence)
- No CPU-side GPU verification —
AttestationQuoteis CPU-TEE only;VerificationDetailshas no GPU fields (verifier/src/verification.rs). - GPU attached as plain
vfio-pci, no CC-mode/attestation (vmm/src/app/qemu.rs:840). nvidia-smi conf-compute -srs 1run unconditionally at boot, nocc_modecheck (meta-dstacknvidia-persistenced.service).app-compose.servicehas no dependency on GPU bring-up — the workload starts even if it fails.- No app-facing RPC to query/enable GPU confidentiality.
Threat model (what this closes / doesn't)
| Attack | Closed? |
|---|---|
| Forge GPU evidence (no NVIDIA key) | ✅ cert chain + RIM, verifier in measured guest |
| Non-CC / CC-off GPU silently used | ✅ fail-fast, cc_mode==ON |
| Copy attack — GPU-less instance B copies a GPU-attested value from A | ✅ only if verdict lives in append-only measured pre-app state; ❌ if in report_data (app-forgeable via guest-agent/src/rpc_service.rs:327) |
| Stale/replayed GPU evidence | ✅ fresh boot nonce |
| Live relay / cuckoo to a genuine remote CC GPU | ❌ residual — no shipping system defeats it; needs TEE-IO/TDISP hardware. Document, don't imply "GPU proven local." |
Workstreams
1. Offline local verifier (NVAT)
- Adopt NVIDIA C++ Attestation SDK (
libnvat, NVIDIA/attestation-sdk); Pythonnvtrustis EOL 2026-09-15. - Bake
libnvat+ pre-provisioned filesystem RIM store into the NVIDIA image (re-provision on driver/VBIOS upgrade). - Handle OCSP (the one online dep,
ocsp.ndis.nvidia.com): in-CVM caching/replay proxy at--ocsp-url, and/or a Rego policy toleratingx-nvidia-cert-ocsp-status.
2. Binding via measured append-only state (before the app boundary)
-
dstack-utilemits agpu-attestationevent committingH(nvat_eat‖cert_chain‖claims)beforesystem-ready. - Verifier trusts it via the existing
find_eventboundary (breaks atsystem-ready,dstack-attest/src/attestation.rs:176) → RTMR3-bound on TDX. -
report_datastays for freshness + RA-TLS key binding only — not the GPU verdict.
3. Fail-fast enforcement & app gate
-
dstack-gpu-attest.service: verify every configured GPU (num_gpus>0is measured), requirecc_mode==ON(rejectOFFandDEVTOOLS), set-srs 1only on pass. -
app-compose.serviceRequires=+After=dstack-gpu-attest.service; fail closed (nosystem-ready, no workload). - Guest-agent RPC
GetGpuAttestation()/EnsureGpuReady()so apps can confirm/enable before use.
4. KMS gating, verifier surfacing, docs
- KMS gates key release on the
gpu-attestationevent (likecompose-hash). - Verifier parses NVAT EAT/claims into
VerificationDetails. -
security-model.md: state the guarantee (measured-guest-vouches + channel-bound) and the co-location residual.
Caveats
- SEV-SNP is blocked: no runtime measurement register (
tpm_runtime_pcr()=None,has_tdx()=false);decode_app_info_sev_snpreads identity from launch-timeHOST_DATA/MrConfigV3and ignores the runtime log. SNP needs an SVSM/coconut-vTPM (PCR channel) before this works — until then SNP GPU attestation is strictly weaker than TDX. (See #713.) - DEVTOOLS CC mode enables CC APIs without memory encryption — must be rejected.
- Co-location residual stands until Blackwell TEE-IO/TDISP.
Hardware validation checklist (unconfirmed in docs)
- NVAT behavior on OCSP connection failure (fail-open vs closed); can Rego neutralize revocation?
- OCSP
nextUpdatewindow; warm-cache ride-through. - Exact
libnvatenv-var spellings; trust-root store overridability. - Does
-srs 1error or no-op on a CC-off GPU? - Does the driver expose SPDM
KEY_EXCHANGEkey (optional session-binding stretch)? - SNP SVSM vTPM feasibility in meta-dstack.
- Lenguaje dominante
- Rust
- Estrellas
- 546
- Forks
- 96
- Merge medio
- 19 h 22 min
- PR fusionados (30 d)
- 109
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de Dstack-TEE/dstack
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 30/100
Dstack-TEE/dstack#1301 ·
-
Dificultad 3/5 1-2 días Aptitud para principiantes 55/100
Dstack-TEE/dstack#1300 ·
-
Dificultad 4/5 3-5 días Aptitud para principiantes 48/100
Dstack-TEE/dstack#1299 ·
-
Dificultad 4/5 3-5 días Aptitud para principiantes 48/100
Dstack-TEE/dstack#1298 ·
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 25/100
Dstack-TEE/dstack#1297 ·
Todos los issues de Dstack-TEE/dstack
Issues similares
-
risk:low runtime status:in-progress type:test
Dificultad 1/5 Menos de una hora Aptitud para principiantes 92/100
zeroclaw-labs/zeroclaw#11023 ·
-
good first issue refactor
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
EricSpencer00/Resilient#4835 · 1 comentario ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 74/100
bisq-network/bisq-musig#204 ·
-
agent:ready documentation
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
cesarferreira/stax#890 ·