Skip to content

BadRAM (CVE-2024-21944)

~$10'lık bir interposer, bir DIMM'in SPD çipini boyutu hakkında yalan söyleyecek şekilde yeniden programlar; bu, kısa fiziksel erişime sahip bir saldırganın AMD SEV-SNP'nin access control'ünü bypass etmesine ve confidentiality, integrity ve attestation garantilerini kırmasına olanak tanıyan physical-address alias'ları oluşturur.

Mechanism

Neden çalışır

Her DDR4/DDR5 modülü, BIOS/memory controller'a modülün geometrisini — rank, bank, row, column ve toplam kapasite — söyleyen küçük bir Serial Presence Detect (SPD) EEPROM taşır. CPU, DIMM'e kaç adres bit'i süreceğine karar vermek için bu metadata'ya güvenir. SEV-SNP'nin tüm integrity hikâyesi, her physical page'i tek bir sahibe bağlayan ve physical address ile indexlenen Reverse Map Table (RMP)'ye dayanır.

BadRAM, SPD'yi kurcalar, böylece modül fiziksel olarak sahip olduğundan daha fazla kapasite raporlar — (en az) bir fazladan addressing bit'i ekler. Memory controller artık DRAM'in görmezden geldiği bir adres bit'i sürer, dolayısıyla farklı iki CPU physical address'i aynı physical DRAM cell'ine düşer: bir alias (bir "ghost" adres). RMP, encryption ve SEV-SNP'nin access kontrolleri hepsi CPU'ya görünür adres üzerinden akıl yürütür — ghost adres korumasız değildir: o da şifrelenmiştir, ama RMP ve encryption CPU adresini takip ederken alttaki fiziksel DRAM cell'i aynı kalır. İşte bu mismatch — kimliği (fiziksel hücreyi) değil adresi izleyen kontroller — RMP integrity kontrollerinin bypass edilmesine kapı açar. Onun üzerinden saldırgan korumalı guest memory'yi okuyabilir ya da yazabilir; SEV-SNP deterministik (physical-address tweak'li ama statik) encryption kullandığı için, aynı fiziksel hücreyi farklı CPU adresleri üzerinden aliaslayarak — tweak'lerin çakıştığı adres çiftlerinde — daha önce gözlemlenmiş ciphertext'i replay edebilir, böylece bayat veri orijinal plaintext'ine geri decrypt olur. Bunları zincirleyerek yazarlar bir remote attestation raporunu tamamen forge eder ve SEV-SNP'nin son savunma hattını yener.

Walkthrough

Saldırı DIMM'e (ya da SPD bus'ına) kısa fiziksel erişim gerektirir, ardından kötü niyetli hypervisor'ın içinden tamamen software güdümlüdür.

  1. SPD'nin kilitli olup olmadığını kontrol et. Linux'ta SPD EEPROM için SMBus'ı probe et:
sudo modprobe i2c-dev
sudo i2cdetect -l          # find the SMBus adapter
sudo i2cdetect -y <bus>    # SPD EEPROMs answer at 0x50-0x57

SPD yazılabilirse platform açıktır; kilitli SPD'ler ucuz saldırıya direnir.

  1. Interposer ile SPD'yi yeniden programla. ~$10'lık bir düzenek, fazladan bir adres bit'i ekleyen (görünen boyutu ikiye katlayan) sahte bir geometri yazmak için SPD'nin I2C bus'ını sürer:
Raspberry Pi Pico (RP2040)   ~$5   -- bit-bangs the SPD I2C bus
DDR4/DDR5 socket / connector  ~$1-5 -- taps the SPD pins
9V supply                     ~$2   -- to unlock write-protected SPDs
  1. Boot et ve alias'ları bul. Şişirilmiş geometriyle OS/hypervisor var olandan daha fazla physical address space görür. Saldırgan, aynı alttaki cell'i okuyan/yazan adres çiftlerini tarar — bunlar ghost alias'lardır.

  2. Alias üzerinden SEV-SNP'yi bypass et. Ghost adresi kullanarak, RMP'nin korumalı sandığı bir guest page'e eriş: RMP'nin yönettiği mapping'leri değiştir ve ciphertext'i boz/replay et, böylece deterministik encryption bayat veriyi orijinal değerine decrypt etsin — enjekte edilen bir backdoor'u gizleyen forge edilmiş bir attestation ile sonuçlanır.

Açıklamanın doğruladığı kapsam
Vulnerability:  CVE-2024-21944  /  AMD-SB-3015   (CVSS 5.3, improper SPD input validation)
Target TEE:     AMD SEV-SNP
Affected:       AMD 3rd and 4th Gen EPYC processors (received ALIAS_CHECK firmware)
Memory:         DDR4 and DDR5 modules with unlockable / writable SPD chips
Disclosed to AMD: 26 Feb 2024
Paper:          "BadRAM: Practical Memory Aliasing Attacks on Trusted Execution
                 Environments", IEEE S&P 2025

Threat model

BadRAM, confidential computing için güçlü ama gerçekçi bir saldırgan varsayar: sunucuya fiziksel erişimi olan kötü niyetli bir cloud operatörü / insider (SEV-SNP'nin guest'i tam olarak karşısında savunması gereken taraf). Yalnızca remote bir saldırı değildir; DIMM'in SPD bus'ına en az bir kez erişim gerektirir.

Detection

AMD firmware düzeltmesinden sonra memory controller boot'ta alias checking (ALIAS_CHECK) yapar: SPD'nin bildirdiği geometriyi silicon'a karşı doğrular ve addressing iddiaları alias üreten DIMM'lere güvenmeyi reddeder. Savunan tarafta, SPD write-protection durumunu doğrulamak (örneğin decode-dimms, Chipsec) bir platformun saldırılabilir olup olmadığını ortaya koyar.

Mitigation

  • SPD metadata'sını güvenilmez olarak ele alan ve boot zamanı memory alias checking çalıştıran AMD/OEM firmware güncellemelerini uygula.
  • Ucuz interposer'ın geometriyi yeniden yazamaması için kalıcı olarak write-locked SPD'ye sahip DIMM'ler kullan.
  • Daha uzun vadede, cryptographic memory integrity ve freshness'e (klasik Intel SGX'teki gibi Merkle-tree / counter-mode koruması) sahip TEE'ler aliasing'i büyük ölçüde etkisiz kılar, çünkü bir ghost-address yazması sessizce başarılı olmak yerine integrity doğrulamasında başarısız olur.

References