Samsung Galaxy S6'daki grafik sürücüsü hatası Google Chrome sekme verilerini nasıl sızdırdı?

Güvenlik açıklarının nasıl bulunduğunu hiç merak ettiniz mi? İngiltere merkezli GraphicsFuzz firması, Samsung Galaxy S6'da Google Chrome'da açılan sekmelerdeki verileri görmek için kullanabilecekleri bir grafik sürücüsü hatasıyla nasıl karşılaştıklarını açıklıyor.

Mart ayının sonlarında, GPU güvenilirliğini test etme konusunda uzmanlaşmış İngiltere merkezli bir start-up firması bize bir teklifle yaklaştı. GPU hatasını keşfettiler bu neden olur Qualcomm Snapdragon 845Samsung Galaxy S9/S9+ Bir web sayfasını ziyaret ederken yeniden başlatmak için. Firma aradı GrafikFuzz, sorunu bildirmek için bizimle çalıştı Qualcomm Ve SAMSUNG. Okurlarımızdan bazıları bir şirketin nasıl çalıştığını öğrenmekle ilgilendi GrafikFuzz Bu güvenlik açıklarını bulabildiğinden, daha eski bir GPU güvenlik açığını nasıl keşfettiklerini göstermek için şirketle işbirliği yaptık. Zaten yamalanmış olan bu güvenlik açığı, bir saldırganın içeriği uzaktan "casusluk yapmasına" olanak tanıdı. Google Chrome tarayıcı sekmeleri Samsung Galaxy S6.

Bu kullanıcı, kötü amaçlı web sayfasını ziyaret etmeden önce bankasının web sitesini inceliyordu. İçerikler yakalandı ve uzak bir sunucuya yüklendi. Kaynak: GrafikFuzz.

GraphicsFuzz GPU hatalarını nasıl buluyor?

Grafik sürücüsü, bir gölgelendirici programını alıp onu yürütülmek üzere GPU'ya göndererek ve böylece görüntüyü oluşturarak çalışır. Gölgelendiriciyi GPU'ya göndermeden önce grafik sürücüsü onu GPU'nun anlayabileceği bir forma çevirir; hatalı bir çeviri, oluşturma hatasına, program veya cihazın çökmesine, yanlış görüntülere ve hatta güvenlik sorunlarına yol açabilir. GrafikFuzz bir var otomatik test paketi Bu, bir dizi referans gölgelendiriciye dayanarak bu hataları bulmalarına olanak tanır. Bir kullanıcı ne zaman testlerini çalıştırıyor, ortaya çıkan tüm görüntülerin aynı görünmesi gerekir. Farklı görünen herhangi bir resim bir hata olduğu anlamına gelir.

GraphicsFuzz test paketini çalıştıran birçok popüler cihazın sonuçları. Bu listelerde Samsung Galaxy S6, Samsung Galaxy S7 ve Samsung Galaxy S8 yer alıyor. Kaynak: GrafikFuzz.

Samsung Galaxy S6 için, GrafikFuzz satırlardan birindeki görsellerin, başka bir tabloda olması gereken görselleri gösterdiğini keşfetti. Bu, daha önceki testlerden alınan görüntülerin daha sonraki testlere sızdığı anlamına geliyor. Ekip daha sonra test paketini Google Chrome'da yeniden çalıştırdı ve web sayfasının bazı bölümlerinin resimde göründüğünü keşfetti. Ayrıca, başka bir sekme açmanın görselin diğer sekmelerin bazı kısımlarını göstermesine neden olduğunu buldular. Temel olarak bu hata, bir Google Chrome sekmesinin başka bir Chrome sekmesi hakkında bilgi sızdırmasına izin verdi! Arkasındaki ekip GrafikFuzz kasıtlı olarak güvenlik açıkları aramıyordu ancak testlerinin sonucunda bir tane buldular. (Ekibin hatayı Galaxy S6'daki stok Samsung tarayıcısında da yeniden oluşturduğunu belirtmek gerekir. Mozilla Firefox.)

Hata nasıl çalışıyor?

Samsung Galaxy S6'da uzun süredir devam eden hatayı tetiklemek için kullanılan resim. Kaynak: GrafikFuzz.

Tarafından oluşturulan "kötü amaçlı" web sayfası GrafikFuzz yukarıda gösterildiği gibi bir tuvalin içine bir uzay sahnesi çizmeye çalışmak için WebGL'yi kullanır. Her pikselin rengi, web sayfası tarafından GPU'da çalıştırılmak üzere sağlanan bir program olan parça gölgelendirici tarafından belirlenir. GrafikFuzz Framework, parça gölgelendiriciyi değiştirerek gerçekten uzun süre çalışmasına neden oldu. Bir gölgelendirici çok uzun süre çalıştığında, tarayıcı veya işletim sistemi genellikle oluşturma işlemini iptal eder. Ancak GPU birkaç piksel çizdikten sonra oluşturmayı durdururken GPU sürücüsü bunu Google Chrome'a ​​bildirmedi. (Yazının üst kısmındaki çöp video hafızasını gösteren görsele bakarsanız, aslında üst kısımda uzay sahnesinin bazı kısımlarını görebilirsiniz. sola.) Bu, iptal edilmeden önce oluşturulan piksellere dokunulmadığı anlamına gelir; bu, oluşturulan son görüntünün çoğunlukla çöp video olduğu anlamına gelir. hafıza. Video belleği sürekli olarak diğer web sayfalarını oluşturmak için kullanıldığından, "çöp" verileri aslında diğer web sayfalarının daha önceki görselleştirmelerini içerir. Böylece diğer web sayfaları da "kötü amaçlı" web sayfasında görüntüleniyor. En önemlisi, WebGL, web sayfasının, oluşturulan her şeyin içeriğini yakalamasına olanak tanır; bu görüntü daha sonra uzak bir sunucuya yüklenir.

Chrome sekme verilerinin "sızmasına" neden olan uzun süredir devam eden GPU hatasını açıklayan diyagram. Kaynak: GrafikFuzz.

Google Chrome birden fazla işlem kullandığından farklı sekmeler genellikle izole edilir ve bu da bu istismarın ilk bakışta imkansız görünmesine neden olur. Ancak Chrome, tek bir "GPU işlemi" kullanarak GPU ile etkileşime girer; bu, tüm sekmelerin aynı GPU belleğini paylaştığı anlamına gelir ve böylece bu istismarın çalışmasına olanak tanır. Yukarıdaki şema bunu daha ayrıntılı olarak göstermektedir.

Hata bu videoda ilk 22 saniyede gösterilmektedir. GraphicsFuzz tarafından bulunan diğer güvenlik sorunları da gösterilmiştir.

Öğrenilecek dersler

WebGL, herhangi bir kötü amaçlı web sayfasının yürütülmek üzere GPU'ya kod göndermesine izin verdiğinden, hatalı çalışan bir GPU, Google Chrome ve Android'in tüm güvenlik önlemlerini atlayabilir. Google GPU hatalarını düzeltemiyor çünkü şirket donanımı ve sürücüleri kontrol etmiyor. Bu durumda, hatayı düzeltmek GPU satıcısına (bu durumda ARM) ve düzeltmeyi bir güncellemeye entegre etmek cihazları etkilenen OEM'e (bu durumda Samsung) kalmıştır. Karışıma taşıyıcıları da ekleyin ve böyle bir hatanın düzeltilmesinin ne kadar uzun sürdüğünü görmek kolaydır; en az 5 ay Çoğu Samsung Galaxy S6 kullanıcısının yamayı alması için.

GrafikFuzz GPU satıcılarının, GPU'da yanlış kodun oluşturulmasına ve yürütülmesine neden olan yanlış derleme hataları gibi tespit edilmesi zor hataları bulmasına yardımcı olur. Otomatik test çerçeveleri, bu makalede gösterilen hatalara benzer hataları bulmalarına olanak tanır. "Kötü amaçlı" web sayfasının neden olduğu uzun süren döngünün, diğer cihazlarda da sorunlara neden olduğu gösterilmiştir. HTC One M7 ve daha yakın zamanda Samsung Galaxy S9. GrafikFuzz amiral gemisi akıllı telefonlarını test ediyor ve bir yayınlıyor sonuç tablosu Bu cihazlar, testlerinin bir alt kümesindeki performanslarına göre sıralanır. Yüzlerce çökme ve işleme hatası Testleri sırasında bulunmuştur ancak çoğu, güvenlik tehdidi oluşturup oluşturmadıkları konusunda araştırılmamıştır. Ancak bu istismarın da gösterdiği gibi hatalı çalışan bir GPU bir güvenlik riskidir ve bir veya daha fazla kritik güvenlik açığının keşfedilmeyi beklemesi mümkündür. GrafikFuzz GPU satıcılarının gelecekte sürücü kalitesini artırmaya öncelik vermelerini umuyor.

Grafik sürücülerinin toplam sorun sayısına göre sıralanmış karşılaştırmalı güvenilirliği. Kaynak: GrafikFuzz.

Açıklama zaman çizelgesi

  • Aralık 2016'da, GrafikFuzz hatayı servise bildirdim Google Chromium hata izleyicisi çünkü Chrome Ödül Programına uygundu. GraphicsFuzz, hatayı Google Chromium hata izleyicisine gönderdikten sonra, hata Google tarafından kabul edildi ve yama için ARM ve Samsung'a iletildi.
  • Google raporu iletti ARM ve Samsung'daki kişilere.
  • Samsung, hatayı sessizce yamaladı ve düzeltmeyi Mart ve Haziran 2017 arasında yayınlanan Android 7.0 Nougat güncellemesinde yayınladı. Her ne kadar Samsung, Google veya ARM tarafından oluşturulmuş bir CVE olmasa ve ne Samsung ne de ARM yama hakkında herhangi bir bilgi yayınlamamış olsa da şunu unutmayın: GrafikFuzz hatayı şu adresten bildirmedim: uygun süreç.
  • Daha sonra, GrafikFuzz hem Samsung'un hem de ARM'in raporu gördüğünü ve ARM'in rapor sayesinde sorunu çözebildiğini doğrulayabildi.
  • Ağustos 2017'de, GrafikFuzz hata raporu nedeniyle Google tarafından 2.000 ABD doları ödülle ödüllendirildi.
  • Kasım 2017'de, hata raporu kamuya açıklandı.