TDXdown: Single-Stepping and Instruction Counting against Intel TDX¶
TDX module'ünün time-based detection heuristic'ini kandırarak Intel TDX'in single-stepping countermeasure'ını yener ve prevention path'indeki bir cache footprint üzerinden instruction count'larını leak eder (StumbleStepping).
Mechanism¶
Bug class / invariant
Intel TDX, bir confidential VM (bir "trust domain", TD) çalıştırır ve malicious bir hypervisor'un TD'yi APIC-timer interrupt'larıyla single-step etmesini (SGX-Step-tarzı primitive) durdurmak için bir countermeasure içerir. Amaçlanan invariant: host, TD'yi her seferinde bir instruction güvenilir şekilde ilerletemez. TDXdown bunu iki şekilde kırar. (1) TDX module'ünün single-step detection'ı, geçen işleme süresi üzerinde bir heuristic'e dayanır; görünen geçen süreyi manipüle ederek attacker, module'ü hiçbir single-step olmadığına ikna eder ve güvenilir single-stepping'i yeniden etkinleştirir. (2) Instruction execution'ı batch'leyen prevention mode'u kendi başına bir side channel'dır: module her TD'ye yeniden girdiğinde context switch bir cache footprint bırakır, böylece re-entry'leri saymak çalıştırılan instruction sayısını leak eder (StumbleStepping) — gerçek single-stepping olmadan bir instruction-count oracle'ı.
Walkthrough¶
CCS 2024 paper'ından üst düzey (Intel bilgilendirildi; mitigation'lar devam ediyor):
- Malicious hypervisor, TD'yi kesmek için APIC-timer interrupt'larını schedule eder, sonra time-based detection heuristic'ini yener ki step'ler işaretlenmesin.
- Güvenilir single-stepping geri yüklendiğinde, interrupt'ları instruction boundary'lerine hizalar ve secret-dependent control flow'u kurtarmak için onları microarchitectural bir oracle (örneğin cache) ile birleştirir.
- Alternatif olarak StumbleStepping, olaylar arasında kaç instruction çalıştığını çıkarsamak için TD re-entry'lerini cache footprint'leri üzerinden sayar — secret-dependent branch count'larına saldırmaya yetecek kadar.
- Yazarlar, wolfSSL ve OpenSSL ECDSA'ya karşı end-to-end leakage gösterir.
Detection¶
- TD'nin içinde bu büyük ölçüde görünmezdir; adversary host'tur, bu yüzden savunma guest log'ları değil, TCB attestation'ı ve platform yapılandırması ile ilgilidir.
- Single-stepping countermeasure fix'ini içeren bir TDX module sürümünü teyit etmek için TDX remote attestation'ı kullan.
- Operatörler, kaba bir gösterge olarak VMM'den belirli bir TD'ye doğru anormal derecede yüksek TD exit / timer-interrupt injection oranlarını izleyebilir.
Mitigation¶
- TDX module'ünü güncelle: Intel, single-stepping'e karşı countermeasure'ı TDX module 1.5.06 ile sağlıyor (sibling TDXploit note ile aynı module sürümü). Attestation üzerinden teyit edilmesi gereken module sürümü budur; deploy edilen sürümün bu countermeasure'ı içerdiğini doğrula.
- Intel'in instruction-counting'i (StumbleStepping) module seviyesinde mitigate etmeyeceğini belirttiğine dikkat et — bunun savunması, TD içindeki constant-time / data-oblivious koda dayanır (secret-dependent instruction count'ları ya da branch'leri yok).
- Enclave/TD crypto'sunu data-oblivious olacak şekilde yaz; single-stepping oracle'larına karşı hardened library'leri tercih et.