Augury: Using Data Memory-Dependent Prefetchers to Leak Data at Rest¶
Apple A14/M1 CPU'ları, memory'den 64-bit pointer'a benzeyen değerleri okuyup dereference eden bir Data Memory-Dependent Prefetcher (DMP) içerir; Augury bunu, core'un hiçbir zaman architectural ya da speculative olarak erişmediği "data at rest"i leak etmek için suistimal eder.
Mechanism¶
Neden çalışır
Geleneksel prefetcher'lar gelecekteki access'leri bir programın dokunduğu adreslerden tahmin eder (stride, stream, pointer-history). Bir Data Memory-Dependent Prefetcher (DMP) temelden farklıdır: memory'nin gerçek içeriğini inceler. DMP, 64-bit kelimeleri geçerli pointer'lara benzeyen bir cache line gördüğünde, işaret edilen adresleri speculative olarak prefetch eder — yani memory'de kendi başına bulduğu veriyi fiilen dereference eder.
Bu, daha önceki her microarchitectural saldırının temel bir varsayımını kırar. Spectre/Meltdown/MDS hepsi secret'ın core'a okunmasını (architectural ya da transient olarak) gerektirir. DMP, core'un veriye dokunmasına asla ihtiyaç duymaz: pointer değerlerini doğrudan memory sistemden okur ve onlara göre hareket eder. Dolayısıyla Augury data at rest leak eder — memory'de duran, kurban tarafından hiç load edilmemiş değerler. Leak, speculative execution tarafından değil bir prefetcher tarafından sürüldüğü için, speculation'ı devre dışı bırakmak onu durdurmaz.
Walkthrough¶
Augury bir Array of Pointers (AoP) access desenini hedefler. DMP deseni öğrenir ve ardından "ileri koşarak", programın henüz ulaşmadığı pointer'ları (ve hedeflerini) prefetch eder. Saldırgan o prefetch'i cache timing üzerinden gözlemler.
- Train the DMP on an AoP traversal. Bir pointer dizisini gez ve her birini dereference et:
// arr is an array of pointers; the loop both reads arr[i] and dereferences it
for (int i = 0; i < N; i++) {
sum += *arr[i];
}
DMP, *arr[0], *arr[1], *arr[2]'yi (speculative olarak bile) gözlemledikten
sonra programın önünden *arr[3], *arr[4], ... prefetch etmeye başlar.
-
Place the secret as a pointer value. Programın henüz ulaşmadığı bir entry'nin, kurbanın verisinden türetilmiş, saldırganca incelenmemiş bir pointer içermesini ayarla. DMP, core onu hiç load etmeden onu dereference edecektir.
-
Probe the cache. DMP'yi tetikledikten sonra bir dizi aday hedef line'a access süresini ölç. Hızlı (cached) bir line, DMP'nin hangi adresi dereference ettiğini — yani memory'de bulduğu pointer değerini — açığa çıkarır. Bu bir prefetch + probe ölçümüdür.
Yazarların gözlemlediği iki aşamalı DMP davranışı
Stage 1 (array prefetch): DMP prefetches arr[i+1], arr[i+2], ... (the pointers themselves)
Stage 2 (pointer chase): DMP then dereferences those prefetched pointer values,
pulling *arr[i+1], *arr[i+2], ... into cache
Leak signal: attacker times candidate target lines; a cache HIT reveals
which pointer value the DMP dereferenced (data at rest)
Kapsam ve kısıtlar
- Apple A14, M1 ve M1 Max'te doğrulandı. Test edilen Intel ve AMD parçaları bu DMP'ye dair hiçbir kanıt göstermedi.
- Yayınlanan gösterimler pointer-şekilli değerleri leak eder ve esas olarak bir sandbox threat model'i içinde çerçevelenir (örneğin sandbox içi ASLR'yi zayıflatma). Orijinal çalışmayla birlikte tam uçtan uca cryptographic key extraction yayınlanmadı.
- DMP yalnızca map'lenmiş bölgeler içindeki makul pointer değerleri için etkinleşir, dolayısıyla leak, prefetcher'ın dereference etmeye razı olduğu şeyle kısıtlanır.
Mitigation¶
- Data-Independent Timing / DMP'yi devre dışı bırakma: Apple sonradan bir Data-Independent Timing (DIT) modu açığa çıkardı; etkilenen core'larda secret'a bağlı kod için en güvenli yol, DMP'nin veriye göre hareket etmediği bir core/mode'da çalışmak ya da onun anahtar olarak kullandığı AoP desenlerinden kaçınmaktır.
- Memory'de pointer-şekilli secret'lardan kaçın: memory içi değerleri mask'le ya da encrypt et, böylece geçerli pointer'lara benzemezler ve DMP tarafından dereference edilmezler.
- DMP'yi, paylaşılan bir address space içindeki ASLR/pointer-gizlemenin etkilenen Apple silicon'da güvenilir bir confidentiality sınırı olmadığının bir nedeni olarak ele al.