Hoy en día, casi todos los sistemas operativos y dispositivos móviles y de escritorio admiten alguna versión de OpenGL. Me pregunto sobre las implicaciones de seguridad de eso:
- En muchos casos, la GPU tiene acceso completo y sin restricciones a la memoria principal (para dispositivos gráficos integrados) o al menos a la RAM de video, donde también se puede almacenar información confidencial (piense en administradores de ventanas de composición o navegadores web acelerados por hardware) .
- En algunas implementaciones, los clientes OpenGL se comunican con la GPU escribiendo directamente datos y comandos en la memoria compartida.
- Solo las GPU recientes parecen admitir la virtualización de la memoria, e incluso entonces, solo algunas implementaciones de controladores lo están utilizando actualmente.
- WebGL requiere que los objetos de búfer recién asignados se inicialicen con cero; Sospecho que esto significa que esto no es necesario en OpenGL estándar. ¿Eso significa que teóricamente es posible asignar un búfer en la memoria de video y leer datos potencialmente sensibles a la seguridad?
Entonces, ¿quién o qué me impide escribir un programa de sombreado que lee datos en el video o incluso la memoria principal que no me pertenece?
He encontrado una presentación sobre el estado actual de las cosas en el sistema de gráficos de Linux que menciona que Los comandos a la GPU son verificados por el núcleo, o la memoria virtual se utiliza en la GPU para separar a los usuarios.
¿Eso también es cierto para otros sistemas operativos, especialmente los móviles, como Android, donde las aplicaciones individuales están fuertemente protegidas, pero tienen acceso OpenGL casi ilimitado? Tegra 2 incluso se menciona específicamente en esa presentación para permitir el acceso de memoria potencialmente ilimitado a los usuarios del controlador.