Skip to content

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
delivery:  malicious website (no app, no permission, no software CVE)
target:    ARM Android integrated GPU via WebGL
outcome:   remote bit flips -> browser compromise in ~2 minutes

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