Oggi, quasi tutti i sistemi operativi e i dispositivi desktop e portatili supportano alcune versioni di OpenGL. Mi sto interrogando sulle implicazioni di sicurezza di questo:
- In molti casi, la GPU ha accesso completo e illimitato alla memoria principale (per i dispositivi grafici integrati) o almeno alla RAM video, dove potrebbero essere archiviate anche informazioni sensibili (pensa ai gestori di finestre di compositing o ai browser web con accelerazione hardware) .
- In alcune implementazioni, i client OpenGL comunicano con la GPU scrivendo direttamente dati e comandi nella memoria condivisa.
- Solo le GPU recenti sembrano supportare la virtualizzazione della memoria e, anche in questo caso, solo alcune implementazioni dei driver la stanno attualmente utilizzando.
- WebGL richiede che gli oggetti buffer appena allocati siano inizializzati a zero; Sospetto che ciò significhi che questo non è richiesto in OpenGL standard. Ciò significa che è teoricamente possibile allocare un buffer nella memoria video e leggere i dati potenzialmente sensibili alla sicurezza?
Quindi chi o cosa mi impedisce di scrivere un programma shader che legge i dati nel video o anche la memoria principale che non mi appartiene?
Ho trovato una presentazione sullo stato attuale delle cose nel sistema grafico Linux che menziona che sia i comandi alla GPU sono verificati dal kernel, o quella memoria virtuale viene utilizzata sulla GPU per separare gli utenti.
Questo vale anche per altri sistemi operativi, specialmente mobili, come Android, in cui le singole applicazioni sono strongmente in sandbox, ma hanno accesso OpenGL quasi illimitato? Tegra 2 è anche menzionato specificamente in quella presentazione per consentire un accesso potenzialmente illimitato alla memoria degli utenti del driver.