GLitch¶
ARM Android'de kötü niyetli bir web sayfasından remote Rowhammer: DRAM erişimlerini zamanlamak (aggressor bulmak için bir side channel) ve hızlı double-sided hammering sürmek için WebGL'in GPU'sunu kullan — hiçbir software bug olmadan tarayıcıyı ele geçir.
Mechanism¶
The GPU gives both a precise timer and fast uncached access
Mobilde, JavaScript'ten software Rowhammer zordur: CPU timer'ları kabadır ve
clflush yoktur. GLitch ("Grand Pwning Unit" çalışması) saldırıyı WebGL
aracılığıyla integrated GPU'ya devreder. WebGL, cached ile uncached DRAM
erişimlerini birbirinden ayırmaya yetecek kadar hassas bir high-precision
timer (EXT_DISJOINT_TIMER_QUERY extension'ı / WebGLSync) açığa çıkardı —
same-bank row'ları konumlandırmak ve contention/eviction inşa etmek için bir
side channel. GPU'nun bellek erişim yolu ayrıca saldırganın, araya CPU
caching girmeden, komşu row'larda double-sided hammering yapacak kadar
hızlı erişim yapmasına izin verir.
Timing side channel'ı (aggressor row'ları bulmak için) GPU güdümlü hammering ile (bit'leri flip etmek için) birleştirmek, tamamen bir web sitesinden teslim edilen bir remote Rowhammer exploit'i üretir — ARM Android üzerindeki ilk remote Rowhammer.
GLitch, Rowhammer.js ve Drammer'ın GPU-hızlandırmalı, tarayıcı-teslimli kuzenidir ve aynı double-sided hammering fikrine dayanır.
Walkthrough¶
1. Bir GPU timing primitive'i inşa et. WebGL'den, erişim latency'lerini
ölçmek ve cache ile DRAM'i ayırt etmek için timer extension'ı / WebGLSync
kullan.
// conceptual: WebGL high-resolution timing via timer queries / sync objects
ext = gl.getExtension('EXT_DISJOINT_TIMER_QUERY');
// measure access latency to classify cached vs uncached lines
2. Same-bank row'ları konumlandır / eviction inşa et. Aynı DRAM bank'inde
çekişen adresleri bulmak ve cache line'ları evict etmek için side channel'ı
kullan (ARM/JS'de clflush yok).
3. GPU üzerinden double-sided hammer. Bit'leri flip etmek için bir victim row'u kuşatan iki row'a hızlı erişimler sür, sonra flip'i code execution için exploit et.
Reported result
Browser vendors removed the timer primitive
Saldırı high-precision bir WebGL timer'ına bağlıdır. Açıklamanın ardından
hem Chrome hem Firefox EXT_DISJOINT_TIMER_QUERY'i devre dışı bıraktı ve
WebGLSync'i high-precision timing açığa çıkarmayacak şekilde yeniden
tasarladı, böylece side channel'ı kaldırdı.
Detection¶
- disjoint-timer-query extension'ını isteyen ve sıkı GPU timing döngüleri çalıştıran web içeriği anomaliktir.
Mitigation¶
- High-precision timer'ları web API'lerinden kaldır (Chrome/Firefox tarafından yapıldı).
- Flip'leri reddetmek veya düzeltmek için DRAM seviyesinde TRR / artırılmış refresh / ECC.
References¶
- Frigo, Giuffrida, Bos, Razavi. Grand Pwning Unit: Accelerating Microarchitectural Attacks with the GPU. IEEE S&P 2018 — https://download.vusec.net/papers/glitch_sp18.pdf
- VUSec. GLitch. — https://www.vusec.net/projects/glitch/
- CERT VU#283803 — https://www.kb.cert.org/vuls/id/283803