SLAM: Spectre based on Linear Address Masking¶
Canonicality kontrollerini gevşetmek için pointer-masking özelliklerini (Intel LAM, AMD UAI, Arm TBI) suistimal eden ve böylece aksi halde exploit edilemez "unmasked" Spectre gadget'larının kernel verisini userspace'e sızdırmasını sağlayan bir Spectre saldırısı.
Mechanism¶
Bug sınıfı / invariant
Modern 64-bit CPU'lar, yazılımın bir pointer'ın üst, "untranslated" bit'lerine metadata
saklamasına izin veren özellikler ekler — Intel Linear Address Masking (LAM), AMD
Upper Address Ignore (UAI), Arm Top-Byte Ignore (TBI). Bunun çalışması için
donanım, normalde üst bit'leri gerisinin sign-extension'ı olmayan address'leri reddeden
canonicality kontrolünü gevşetmek zorundadır. SLAM'in içgörüsü, bu gevşemenin aynı
zamanda canonicality'nin bütün bir Spectre gadget sınıfına karşı sağladığı örtük
korumayı da zayıflattığıdır. Bir unmasked gadget, bir secret değerin (bir array index
olarak kullanılmak yerine) doğrudan pointer olarak dereference edildiği yaygın bir
pattern'dir. Normalde böyle bir pointer non-canonical'dır ve fault verir, transient
erişimi sınırlar; masking etkinken secret-türevli pointer transiently takip edilecek kadar
"canonical" hale gelir, böylece gadget secret-dependent kernel belleğini speculatively
yükler. Kırılan sınır kernel/user veri ayrımıdır: güvenlik amaçlı bir tagging özelliği,
paradoksal biçimde exploit edilebilir transient gadget'ların evrenini genişletir. AMD
Zen+/Zen 2 parçalarında benzer bir non-canonical address transient-execution etkisi
CVE-2020-12965 (bkz. transient-execution-of-non-canonical-accesses) ile mevcuttur,
ancak mekanizma farklıdır: CVE-2020-12965 bir donanım hatasıdır, SLAM ise bir özellik
suistimalidir. Her ikisi de non-canonical adreslerin transiently execute edilmesine yol
açar, fakat SLAM LAM/UAI/TBI'nin etkinleştirilmesine dayanır.
Walkthrough¶
VUSec'in SLAM açıklamasından (Aralık 2023) üst seviye yeniden üretim.
Yalnızca kavramsal
Kamuya açık PoC, spesifik bir Linux/AMD kurulumunda bir ASCII root-password hash'ini sızdırdı. Aşağıdaki açıklama mantıksal yapıdır, silah haline getirilmiş bir zincir değil.
- Kernel'de bir unmasked gadget bul. Attacker etkisi altında yüklenen bir değerin, kendisinin sonraki bağımlı bir load için pointer olarak kullanıldığı (çok yaygın) bir diziyi tespit et — masking'in transiently takip edilebilir kıldığı bir "pointer-chasing" gadget.
- Mistrain et ve specülasyon yap. Standart bir Spectre primitive'i kullanarak gadget'a speculatively gir, bu sırada masking özelliği aksi halde transient load'u abort edecek canonicality fault'unu bastırsın.
# representative logical flow, not runnable
speculatively reach gadget # via branch mistraining
secret_ptr = *kernel_addr # secret used AS a pointer
tmp = *secret_ptr # masking lets this proceed transiently
- Özel hazırlanmış bir covert channel üzerinden encode et. SLAM, bir address-translation tabanlı signaling kanalını (SMAP'i atlatan) bir TLB Evict+Reload (L1-vs-L2 hit ayrımı) ile birleştirerek transiently dokunulan address'i ölçülebilir bir cache/TLB footprint'ine dönüştürür.
- Byte byte yeniden inşa et. Kanalı userspace'ten probe ederek sızdırılan byte'ları kurtar; gösterim, root password hash'ini kabaca yarım dakikada tarayıp yeniden birleştirdi.
Detection¶
- Spectre benzeri davranışsal signature'lar. Bir userland process'te sıkı branch-mistraining döngülerinin cache/TLB timing probe'larıyla birleşmesi genel ipucudur; anormal mispredict + cache-miss patlamaları için HPC tabanlı dedektörler uygulanabilir.
- LAM/UAI/TBI'nin etkin olduğu bir sistemde, untrusted bir process tarafından masked/tagged pointer'ların yoğun kullanımı çevresel bir risk göstergesidir.
- Sızıntının kendisi micro-architectural'dır ve data-flow EDR'ye görünmezdir; tespit içerik tabanlı değil, sezgisel ve timing tabanlıdır.
Mitigation¶
- Sertleştirilene dek masking özelliğini devre dışı bırak. Linux, açıklamanın ardından varsayılan olarak LAM'i devre dışı bıraktı; LAM/UAI/TBI'yi etkinleştirmemek gevşetilmiş-canonicality önkoşulunu kaldırır.
- LAM'i Intel LASS ile eşleştir (Linear Address Space Separation) ki kernel address'lerine user-mode erişim erkenden fault versin ve cross-domain gadget kesilsin.
- Mevcut Spectre savunmaları (branch-predictor sertleştirme: IBRS/eIBRS, retpoline ve kernel'de gadget removal/serialization) mistraining primitive'inin erişilebilirliğini azaltır; AMD, Spectre v2 rehberliğine ve CVE-2020-12965'e işaret etti.
- Hassas path'lerde unmasked pointer-dereference gadget'larını ortadan kaldırmak için kernel hardening.