Pernah bertanya-tanya bagaimana kerentanan keamanan ditemukan? Perusahaan GraphicsFuzz yang berbasis di Inggris menjelaskan bagaimana mereka menemukan bug driver grafis pada Samsung Galaxy S6 yang dapat mereka manfaatkan untuk melihat data dari tab yang dibuka di Google Chrome.
Pada akhir bulan Maret lalu, sebuah perusahaan start-up berbasis di Inggris yang mengkhususkan diri dalam pengujian keandalan GPU mendekati kami dengan a Bug GPU yang mereka temukan yang menyebabkan QualcommSnapdragon 845Samsung Galaksi S9/S9+ untuk reboot ketika mengunjungi halaman web. Perusahaan itu, menelepon GrafisFuzz, bekerja sama dengan kami untuk melaporkan masalah ini Qualcomm Dan Samsung. Beberapa pembaca kami tertarik untuk mengetahui seperti apa sebuah perusahaan GrafisFuzz dapat menemukan kerentanan ini, jadi kami berkolaborasi dengan perusahaan tersebut untuk menunjukkan bagaimana mereka menemukan kerentanan GPU lama. Kerentanan yang sudah ditambal ini memungkinkan penyerang untuk "memata-matai" konten dari jarak jauh Google Chrome tab browser di Samsung Galaksi S6.
Pengguna ini melihat situs web bank mereka sebelum mengunjungi halaman web berbahaya. Kontennya diambil dan diunggah ke server jarak jauh. Sumber: GrafisFuzz.
Bagaimana GraphicsFuzz menemukan bug GPU
Driver grafis bekerja dengan mengambil program shader dan mengirimkannya ke GPU untuk dieksekusi dan kemudian merender gambar. Sebelum mengirimkan shader ke GPU, driver grafis menerjemahkannya ke dalam bentuk yang dapat dipahami oleh GPU; terjemahan yang salah dapat menyebabkan kegagalan rendering, program atau perangkat mogok, gambar salah, dan bahkan masalah keamanan. GrafisFuzz memiliki rangkaian pengujian otomatis yang memungkinkan mereka menemukan bug ini berdasarkan sekumpulan shader referensi. Ketika seorang pengguna menjalankan tes mereka, semua gambar yang dihasilkan seharusnya terlihat sama. Gambar apa pun yang terlihat berbeda berarti ada bug.
Hasil dari beberapa perangkat populer yang menjalankan rangkaian pengujian GraphicsFuzz. Samsung Galaxy S6, Samsung Galaxy S7, dan Samsung Galaxy S8 termasuk dalam grafik ini. Sumber: GrafisFuzz.
Untuk Samsung Galaxy S6, GrafisFuzz menemukan bahwa gambar di salah satu baris menampilkan gambar yang seharusnya ada di tabel lain. Artinya, gambar dari pengujian sebelumnya bocor ke pengujian selanjutnya. Tim kemudian menjalankan kembali rangkaian pengujian di Google Chrome dan menemukan bahwa bagian halaman web muncul di gambar. Selain itu, mereka menemukan bahwa membuka tab lain menyebabkan gambar menampilkan bagian dari tab lain. Pada dasarnya, bug ini memungkinkan satu tab Google Chrome membocorkan informasi tentang tab Chrome lainnya! Tim di belakang GrafisFuzz tidak sengaja mencari bug keamanan, namun mereka akhirnya menemukannya sebagai hasil pengujian. (Perlu dicatat bahwa tim juga mereproduksi bug pada browser bawaan Samsung di Galaxy S6 Mozilla Firefox.)
Cara kerja bug tersebut
Gambar digunakan untuk memicu bug yang sudah berjalan lama pada Samsung Galaxy S6. Sumber: GrafisFuzz.
Halaman web "berbahaya" yang dibuat oleh GrafisFuzz menggunakan WebGL untuk mencoba menggambar pemandangan luar angkasa di dalam kanvas seperti yang ditunjukkan di atas. Warna setiap piksel ditentukan oleh fragment shader, sebuah program yang disediakan oleh halaman web untuk dieksekusi pada GPU. Itu GrafisFuzz framework memodifikasi fragment shader yang menyebabkannya berjalan sangat lama. Ketika shader berjalan terlalu lama, browser atau sistem operasi biasanya membatalkan rendering. Namun, meskipun GPU membatalkan rendering setelah menggambar beberapa piksel, driver GPU tidak melaporkan hal ini ke Google Chrome. (Jika Anda melihat gambar di bagian atas artikel yang menunjukkan memori video sampah, Anda sebenarnya dapat melihat bagian dari pemandangan luar angkasa di bagian atas. kiri.) Ini berarti piksel yang dirender sebelum pembatalan tidak disentuh, artinya gambar akhir yang dirender sebagian besar berupa video sampah Penyimpanan. Karena memori video terus digunakan untuk merender halaman web lain, data "sampah" sebenarnya berisi rendering halaman web lain sebelumnya. Dengan demikian, halaman web lain akhirnya ditampilkan di halaman web yang "berbahaya". Yang terpenting, WebGL memungkinkan halaman web menangkap konten apa pun yang sedang dirender; gambar ini kemudian diunggah ke server jauh.
Diagram yang menjelaskan bug GPU yang sudah berjalan lama menyebabkan data tab Chrome "bocor". Sumber: GrafisFuzz.
Google Chrome menggunakan banyak proses sehingga tab yang berbeda sering kali diisolasi, sehingga eksploitasi ini tampak mustahil di permukaan. Namun, Chrome berinteraksi dengan GPU menggunakan satu "proses GPU", yang berarti semua tab berbagi memori GPU yang sama, sehingga eksploitasi ini dapat berfungsi. Diagram di atas menunjukkan hal ini secara lebih rinci.
Bug tersebut ditunjukkan dalam video ini selama 22 detik pertama. Masalah keamanan lain yang ditemukan oleh GraphicsFuzz juga ditunjukkan.
Pelajaran yang bisa dipelajari
GPU yang berperilaku buruk dapat melewati semua tindakan keamanan Google Chrome dan Android karena WebGL mengizinkan laman web berbahaya apa pun mengirimkan kode ke GPU untuk dieksekusi. Google tidak dapat memperbaiki bug GPU karena perusahaan tidak mengontrol perangkat keras dan driver. Dalam hal ini, terserah pada vendor GPU (dalam hal ini, ARM) untuk memperbaiki bug tersebut dan OEM yang perangkatnya terpengaruh (dalam hal ini, Samsung) untuk mengintegrasikan perbaikan tersebut dalam pembaruan. Tambahkan operator ke dalam campuran dan mudah untuk melihat bagaimana bug seperti ini membutuhkan waktu yang sangat lama untuk diperbaiki—butuh waktu setidaknya 5 bulan bagi sebagian besar pengguna Samsung Galaxy S6 untuk menerima patch.
GrafisFuzz membantu vendor GPU menemukan bug yang sulit dideteksi seperti bug kesalahan kompilasi yang menyebabkan kode yang salah dihasilkan dan dieksekusi pada GPU. Kerangka pengujian otomatis memungkinkan mereka menemukan bug seperti yang ditampilkan dalam artikel ini. Perulangan jangka panjang yang disebabkan oleh halaman web "berbahaya" juga telah terbukti menyebabkan masalah pada perangkat lain seperti HTC Satu M7 dan baru-baru ini Samsung Galaksi S9. GrafisFuzz menguji ponsel pintar andalan dan menerbitkan a tabel hasil yang memberi peringkat pada perangkat ini berdasarkan kinerjanya pada subkumpulan pengujiannya. Ratusan crash dan kesalahan rendering telah ditemukan selama pengujian, namun sebagian besar tidak diselidiki untuk melihat apakah mereka menimbulkan ancaman keamanan. Namun, seperti yang ditunjukkan oleh eksploitasi ini, GPU yang tidak berfungsi dengan baik merupakan risiko keamanan, dan ada kemungkinan satu atau lebih kerentanan keamanan kritis menunggu untuk ditemukan. GrafisFuzz berharap vendor GPU memprioritaskan peningkatan kualitas driver di masa depan.
Keandalan komparatif driver grafis, diurutkan berdasarkan jumlah total masalah. Sumber: GrafisFuzz.
Garis waktu pengungkapan
- Pada bulan Desember 2016, GrafisFuzz melaporkan bug tersebut ke Pelacak bug Google Chromium karena memenuhi syarat untuk Program Hadiah Chrome. Setelah GraphicsFuzz mengirimkan bug tersebut ke pelacak bug Google Chromium, bug tersebut diterima oleh Google dan meneruskannya ke ARM dan Samsung untuk ditambal.
- Google meneruskan laporan itu ke kontak di ARM dan Samsung.
- Samsung secara diam-diam menambal bug tersebut dan meluncurkan perbaikan tersebut pada pembaruan Android 7.0 Nougat yang dirilis antara bulan Maret dan Juni 2017. Meskipun tidak ada CVE yang dibuat oleh Samsung, Google, atau ARM dan baik Samsung maupun ARM tidak merilis informasi apa pun tentang patch tersebut, perhatikan bahwa GrafisFuzz tidak melaporkan bug melalui proses yang tepat.
- Nanti, GrafisFuzz dapat mengonfirmasi bahwa Samsung dan ARM telah melihat laporan tersebut, dan bahwa ARM dapat memperbaiki masalah tersebut karena laporan tersebut.
- Pada bulan Agustus 2017, GrafisFuzz diberi hadiah $2.000 oleh Google untuk laporan bug.
- Pada bulan November 2017, laporan bug dipublikasikan.