Skip to content

DRAWNAPART: A Device Identification Technique based on Remote GPU Fingerprinting

Bir GPU'nun execution unit'leri arasındaki minik üretim hızı varyasyonları, unprivileged WebGL'den ölçülebilen, cihaz başına kararlı bir fingerprint oluşturur.

Mechanism

Bug sınıfı: covert identifier olarak hardware üretim varyasyonu

Tam olarak aynı modeldeki iki GPU fiziksel olarak özdeş değildir: fabrikasyon sırasındaki process varyasyonu, tek bir GPU içindeki çok sayıda paralel execution unit (EU)'nun çok hafif farklı hızlarda çalışmasına yol açar. Bu EU başına hız farkları zaman içinde kararlıdır ve chip başına etkili biçimde rastgeledir; dolayısıyla göreli EU hızlarının pattern'ı, browser session'ları boyunca hayatta kalan bir fingerprint'tir. DrawnApart (Laor, Mehanna, Durey, Dyadyuk, Laperdrix, vd., NDSS 2022), bu signature'ın bir web sayfasından uzaktan okunabildiğini gösterir.

Burada aşılan sınır memory safety değil, gizlilik / linkability'dir: browser, diğer tüm fingerprinting yöntemlerinin özdeş saydığı cihazları (aynı model, driver, OS, user-agent) ayırt etmeye yetecek kadar timing hassasiyetini standart graphics API'leri üzerinden açığa çıkarır. DrawnApart, zararsız bir hardware tuhaflığını herhangi bir izin sorusu (permission prompt) olmadan uzun ömürlü bir tracking identifier'ına dönüştürür.

Walkthrough

Public NDSS 2022 paper'ından ve yazarların yazılarından yüksek seviyeli bir reproduction.

Kavramsal WebGL fingerprinting loop'u
  1. Tek tek EU'ları hedefle. Her point'in tek bir vertex olduğu bir WebGL draw call dizisi çalıştırarak pipeline gürültüsünü en aza indir. Bir vertex shader, hedeflenen EU'nun runtime'ı o EU'nun hızına son derece duyarlı bir "stall" fonksiyonu çalıştıracak, hedeflenmeyen EU'lar ise hızlıca bir sabit döndüren basit bir shader çalıştıracak biçimde hazırlanır.

    for eu in execution_units:
        shader: targeted EU -> slow stall loop
                other EUs   -> return constant
        draw points; measure GPU time
    
  2. Hassas ölç. Her draw'u, pipeline'ı stall etmeden GPU command süresini raporlayan EXT_disjoint_timer_query WebGL extension'ı ile (veya rendering-time proxy'leriyle) time'la. Bir batch'in süresi en yavaş EU'su ile sınırlandığı için, hedefi EU'lar boyunca süpürmek EU başına bir timing vector verir — raw trace.

  3. Fingerprint'i kur. Trace'leri sabit uzunlukta bir vector'da birleştir. Tekrarlamak, o fiziksel GPU için kararlı bir signature verir.
  4. Deep-learning embedding. One-shot/metric-learning hedefiyle eğitilmiş bir CNN, raw trace'leri gürültü ve drift'e dayanıklı bir embedding'e map'ler; böylece aynı cihazdan iki trace birlikte kümelenir ve farklı cihazlar ayrılır — "özdeş" makineler arasında bile.
  5. Gerçek dünyada tracking. Klasik bir browser fingerprint'ine katıldığında, paper 2.500+ crowd-source edilmiş cihazda medyan tracking süresinde ~%67'ye kadar artış bildiriyor.

Warning

Bu bir gizlilik/tracking tekniğidir, bir data-exfiltration exploit'i değil. Aynı cihazın ziyaretlerini birbirine bağlar ve clear-cookies / incognito tarzı reset'leri etkisiz kılar.

Detection

  • Timer kullanımı telemetrisi: kısa bir pencerede çok sayıda minik single-point draw call ile birleşen tekrarlı, yapılandırılmış EXT_disjoint_timer_query çağrıları, gizlilik odaklı bir browser veya extension'ın işaretleyebileceği anormal bir pattern'dır.
  • Davranışsal heuristic'ler: ekran dışında render eden, çıktıyı asla göstermeyen ve yalnızca time'lamak için GPU draw'larında busy-loop yapan script'ler, meşru rendering'den çok bir fingerprinting probe'una benzer.
  • Fingerprinting-script blocklist'leri: anti-tracking listeleri ve araştırma crawler'ları (örn. gizlilik browser'larının arkasındakiler), DrawnApart toplama script ailesini tanımlayıp etiketleyebilir.

Mitigation

  • High-resolution GPU timer'larını kısıtlayın: browser'lar EXT_disjoint_timer_query'yi devre dışı bırakabilir veya kabalaştırabilir (ve genel olarak timer çözünürlüğünü düşürebilir) — yazarların tartıştığı en doğrudan savunma.
  • WebGL davranışını standartlaştırın/normalize edin: EU seviyesindeki timing farkları gözlemlenemez olsun diye scheduling'i clamp'leyin ya da EU atamasını session başına randomize edin.
  • Bir fingerprint origin'ler arası bağlanamasın diye top-level site başına WebGL'i permission-gate'leyin veya partition'layın; bazı browser'lar state'i zaten partition'lıyor.
  • Kullanıcı tarafı savunmalar: WebGL timing'ini bloklayan veya bozan anti-fingerprinting extension'ları ve gizlilik browser'ları; hardware acceleration'ı devre dışı bırakmak kullanılabilirlik maliyetiyle channel'ı ortadan kaldırır.

References