Heckler: Breaking Confidential VMs with Malicious Interrupts (CVE-2024-25744)¶
Untrusted hypervisor, bir confidential VM'e controlled non-timer interrupt'lar (özellikle
int 0x80) inject eder ve onu, register state'ini bozan ve authentication'ı bypass eden global etkili handler'ları çalıştırmaya zorlar.
Mechanism¶
Boundary neden kırılıyor
AMD SEV-SNP ve Intel TDX, bir confidential VM'in memory'sini ve execution'ını
malicious bir hypervisor'dan korur — ama hypervisor hâlâ meşru biçimde
interrupt delivery'yi kontrol eder. Heckler bunu suistimal eder: CVM'e
saldırgan tarafından seçilen noktalarda controlled interrupt'lar inject eder.
CVM, ilgili handler'ı o an çalışan user-space process adına çalıştırır.
Global etkiye sahip handler'lar — paper, legacy 32-bit Linux syscall vector'ü
olan int 0x80'i öne çıkarır — saldırganın CVM'in register state'ini manipüle
etmesine ve data/control flow'unu değiştirmesine olanak tanır. Kırılan invariant:
bir confidential VM, hypervisor tarafından seçilen bir interrupt'ın in-guest
computation'ını değiştirmesine izin vermemelidir — oysa interrupt delivery tam
da hypervisor kontrolünde bırakılan interface'tir.
Walkthrough¶
USENIX Security 2024 paper'ından konsept attack path; illustrative, silahlandırılmış exploit yok.
-
Malicious hypervisor, bir target process (örn.
sshdveyasudo) çalışırken CVM'eint 0x80injection'ını zamanlar. -
CVM, legacy 32-bit syscall handler'ını o process'in context'inde dispatch eder; handler'ın global register/flow etkileri olduğundan, inject edilen interrupt register'ları/state'i bozar.
-
Yazarlar OpenSSH ve sudo'da authentication'ı bypass etmeyi ve SEV-SNP üzerinde C/Java/Julia istatistik ve metin-analizi uygulamalarının execution integrity'sini kırmayı demonstre eder.
TDX vs SEV-SNP
TDX hardware'i 0-30 vector'lerinin external injection'ını zaten engeller, bu
yüzden TDX signal/int 0x80 varyantına karşı savunmasız değildir; demonstre
edilen kırılmalar SEV-SNP üzerindedir. CVE-2024-25744 (ve CVE-2024-25743)
olarak takip ediliyor.
Detection¶
- In-guest: Guest'in hiç talep etmediği, dışarıdan inject edilmiş interrupt'ların
alınması (örn. 32-bit bir syscall verilmemişken gelen bir
int 0x80) gözlemlenebilir anomalidir; Linux kernel patch'i tam olarak bunu temel alır.
Mitigation¶
- Kernel patch: Linux kernel değişiklikleri, dışarıdan inject edilen
int 0x80'i tespit eder/engeller. SEV-SNP'de kernel'de x86 emulation'ı kapatın (6.6.7'de düzeltildi). - Hardware yönü: Yazarlar SEV-SNP "protected interrupt delivery"'sini (Restricted Injection) önerir, ancak software desteğinin eksik olduğunu belirtir — signal tabanlı varyant için vulnerable handler path'ini devre dışı bırakmaktan öte tam bir fix yoktur.